home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / Demo / OffscreenUtils.p < prev    next >
Encoding:
Text File  |  1997-07-22  |  2.0 KB  |  90 lines  |  [TEXT/CWIE]

  1. UNIT OffscreenUtils;
  2. INTERFACE
  3.  
  4.     USES
  5.         Types, Memory, QuickDraw, QDOffscreen;
  6.  
  7.     TYPE
  8.         OffscreenArea = RECORD
  9.             box: Rect;
  10.             offscreen: GWorldPtr;
  11.             port: CGrafPtr;
  12.             gdh: GDHandle;
  13.             background: RGBColor;
  14.         END;
  15.         OffscreenAreaPtr = ^OffscreenArea;
  16.         
  17.     PROCEDURE AllocateOffscreenArea(box: Rect; VAR area: OffscreenAreaPtr);
  18.     PROCEDURE StartDrawingOffscreen(area: OffscreenAreaPtr);
  19.     PROCEDURE CopyOffscreenToScreen(area: OffscreenAreaPtr);
  20.     PROCEDURE FreeOffscreenArea(area: OffscreenAreaPtr);
  21.  
  22. IMPLEMENTATION
  23.  
  24.     PROCEDURE AllocateOffscreenArea(box: Rect; VAR area: OffscreenAreaPtr);
  25.     VAR
  26.         err: OSErr;
  27.         
  28.     BEGIN
  29.         Ptr(area) := NewPtrClear(SizeOf(OffscreenArea));
  30.         IF area <> NIL THEN
  31.             BEGIN
  32.                 area^.box := box;
  33.                 GetGWorld(area^.port, area^.gdh);
  34.                 GetBackColor(area^.background);
  35.                 
  36.                 OffsetRect(box, -box.left, -box.top);
  37.                 err := NewGWorld(area^.offscreen, 0, box, NIL, NIL, 0);
  38.                 IF err <> noErr THEN
  39.                     BEGIN
  40.                         DisposePtr(Ptr(area));
  41.                         area := NIL;
  42.                     END;
  43.             END;
  44.     END;
  45.     
  46.     PROCEDURE StartDrawingOffscreen(area: OffscreenAreaPtr);
  47.     VAR
  48.         ignore: BOOLEAN;
  49.         
  50.     BEGIN
  51.         SetGWorld(area^.offscreen, NIL);
  52.         ignore := LockPixels(GetGWorldPixMap(area^.offscreen));
  53.         RGBBackColor(area^.background);
  54.         EraseRect(area^.offscreen^.portRect);
  55.         SetOrigin(area^.box.left, area^.box.top);
  56.     END;
  57.     
  58.     PROCEDURE CopyOffscreenToScreen(area: OffscreenAreaPtr);
  59.     CONST
  60.         kBlack: RGBColor = (red: 0, green: 0, blue: 0);
  61.         kWhite: RGBColor = (red: $FFFF, green: $FFFF, blue: $FFFF);
  62.  
  63.     VAR
  64.         fore, back: RGBColor;
  65.         
  66.     BEGIN
  67.         SetGWorld(area^.port, area^.gdh);
  68.         
  69.         GetForeColor(fore);
  70.         GetBackColor(back);
  71.         RGBForeColor(kBlack);
  72.         RGBBackColor(kWhite);
  73.         
  74.         CopyBits(GrafPtr(area^.offscreen)^.portBits, GrafPtr(area^.port)^.portBits,
  75.                 area^.offscreen^.portRect, area^.box,
  76.                 srcCopy, NIL);
  77.     
  78.         RGBForeColor(fore);
  79.         RGBBackColor(back);
  80.         
  81.         UnlockPixels(GetGWorldPixMap(area^.offscreen));
  82.     END;
  83.     
  84.     PROCEDURE FreeOffscreenArea(area: OffscreenAreaPtr);
  85.     BEGIN
  86.         DisposeGWorld(area^.offscreen);
  87.         DisposePtr(Ptr(area));
  88.     END;
  89.     
  90. END.