home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-22 | 2.0 KB | 90 lines | [TEXT/CWIE] |
- UNIT OffscreenUtils;
- INTERFACE
-
- USES
- Types, Memory, QuickDraw, QDOffscreen;
-
- TYPE
- OffscreenArea = RECORD
- box: Rect;
- offscreen: GWorldPtr;
- port: CGrafPtr;
- gdh: GDHandle;
- background: RGBColor;
- END;
- OffscreenAreaPtr = ^OffscreenArea;
-
- PROCEDURE AllocateOffscreenArea(box: Rect; VAR area: OffscreenAreaPtr);
- PROCEDURE StartDrawingOffscreen(area: OffscreenAreaPtr);
- PROCEDURE CopyOffscreenToScreen(area: OffscreenAreaPtr);
- PROCEDURE FreeOffscreenArea(area: OffscreenAreaPtr);
-
- IMPLEMENTATION
-
- PROCEDURE AllocateOffscreenArea(box: Rect; VAR area: OffscreenAreaPtr);
- VAR
- err: OSErr;
-
- BEGIN
- Ptr(area) := NewPtrClear(SizeOf(OffscreenArea));
- IF area <> NIL THEN
- BEGIN
- area^.box := box;
- GetGWorld(area^.port, area^.gdh);
- GetBackColor(area^.background);
-
- OffsetRect(box, -box.left, -box.top);
- err := NewGWorld(area^.offscreen, 0, box, NIL, NIL, 0);
- IF err <> noErr THEN
- BEGIN
- DisposePtr(Ptr(area));
- area := NIL;
- END;
- END;
- END;
-
- PROCEDURE StartDrawingOffscreen(area: OffscreenAreaPtr);
- VAR
- ignore: BOOLEAN;
-
- BEGIN
- SetGWorld(area^.offscreen, NIL);
- ignore := LockPixels(GetGWorldPixMap(area^.offscreen));
- RGBBackColor(area^.background);
- EraseRect(area^.offscreen^.portRect);
- SetOrigin(area^.box.left, area^.box.top);
- END;
-
- PROCEDURE CopyOffscreenToScreen(area: OffscreenAreaPtr);
- CONST
- kBlack: RGBColor = (red: 0, green: 0, blue: 0);
- kWhite: RGBColor = (red: $FFFF, green: $FFFF, blue: $FFFF);
-
- VAR
- fore, back: RGBColor;
-
- BEGIN
- SetGWorld(area^.port, area^.gdh);
-
- GetForeColor(fore);
- GetBackColor(back);
- RGBForeColor(kBlack);
- RGBBackColor(kWhite);
-
- CopyBits(GrafPtr(area^.offscreen)^.portBits, GrafPtr(area^.port)^.portBits,
- area^.offscreen^.portRect, area^.box,
- srcCopy, NIL);
-
- RGBForeColor(fore);
- RGBBackColor(back);
-
- UnlockPixels(GetGWorldPixMap(area^.offscreen));
- END;
-
- PROCEDURE FreeOffscreenArea(area: OffscreenAreaPtr);
- BEGIN
- DisposeGWorld(area^.offscreen);
- DisposePtr(Ptr(area));
- END;
-
- END.