home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-12-12 | 2.6 KB | 89 lines | [TEXT/KAHL] |
- //----------------------------------------------------------------------------------
- // File : qdCDEF.c
- // Purpose : CDEF quickDraw routines for offScreen drawing and getGray
- // Date : 23 June 1992
- //
- //----------------------------------------------------------------------------------
- #include <GestaltEqu.h>
- #include <QDOffscreen.h>
- #include <Traps.h>
-
- #include "miscCDEF.h"
- #include "qdCDEF.h"
-
- #define NOPIXELS 0
-
- //----------------------------------------------------------------------------------
- // Get an offscreen drawing port, either GWorld or Bitmap for specified localRect.
- // Returns : depth of offPort
- //----------------------------------------------------------------------------------
-
- extern short getOff(CGrafPtr * offPort, Rect * localRect)
- {
- short wid, ht;
- Rect globalRect;
- BitMap newBits;
- QDErr err;
- GrafPtr savePort;
-
- // draw in an offscreen bitmap/GWorld to minimize flicker
-
- if(getQDVers() >= gestalt32BitQD12) { // try to use a GWorld
- globalRect = *localRect;
- LocalToGlobal((Point *)&globalRect.top);
- LocalToGlobal((Point *)&globalRect.bottom);
- if(*offPort == 0) { // create a new GWorld
- err = NewGWorld((CGrafPtr *)offPort,0,&globalRect,0,0,0);
- }
- else { // update existing GWorld
- err = UpdateGWorld((CGrafPtr *)offPort,0,&globalRect,0,0,0);
- }
- if(err == noErr)
- return (**((*offPort)->portPixMap)).pixelSize;
- return NOPIXELS; // something is seriously amiss╔
- }
- else { // create a bitmap
- wid = (*localRect).right - (*localRect).left;
- ht = (*localRect).bottom - (*localRect).top;
- SetRect(&newBits.bounds,0,0,wid,ht);
- newBits.rowBytes = ((wid + 31)/32) * 4;
- newBits.baseAddr = (QDPtr)NewPtr(ht * newBits.rowBytes);
- if(MemError())
- return NOPIXELS;
-
- CopyBits(&newBits,&newBits, // clear the new bitmap
- &newBits.bounds,&newBits.bounds,
- srcXor,nil);
-
- GetPort(&savePort);
- *offPort = (CGrafPtr)NewPtr(sizeof(GrafPort));
- if(MemError())
- return NOPIXELS;
- OpenPort((GrafPtr)*offPort);
- SetPort((GrafPtr)*offPort);
-
- (**offPort).portRect = newBits.bounds;
- RectRgn((**offPort).visRgn,&newBits.bounds);
- SetPortBits(&newBits);
- SetPort(savePort);
-
- return 1;
- }
- }
-
- //----------------------------------------------------------------------------------
- // Return QD version number from Gestalt
- //----------------------------------------------------------------------------------
-
- short getQDVers()
- {
- OSErr err;
- long gResult;
-
- if(trapAvailable(_Gestalt)) {
- err = Gestalt(gestaltQuickdrawVersion,&gResult);
- if(err == noErr)
- return(LoWord(gResult));
- }
- return(gestaltOriginalQD);
- }