home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Today - The Disc! 8 / cdrt08.iso / mac / Shareware / HyperCard / demoCdef 120 ƒ / cdef3D source ƒ / cdef Common / qdCDEF.c < prev    next >
Encoding:
Text File  |  1994-12-12  |  2.6 KB  |  89 lines  |  [TEXT/KAHL]

  1. //----------------------------------------------------------------------------------
  2. // File        : qdCDEF.c
  3. // Purpose    : CDEF quickDraw routines for offScreen drawing and getGray
  4. // Date        : 23 June 1992
  5. //
  6. //----------------------------------------------------------------------------------
  7. #include <GestaltEqu.h>
  8. #include <QDOffscreen.h>
  9. #include <Traps.h>
  10.  
  11. #include "miscCDEF.h"
  12. #include "qdCDEF.h"
  13.  
  14. #define NOPIXELS 0
  15.  
  16. //----------------------------------------------------------------------------------
  17. // Get an offscreen drawing port, either GWorld or Bitmap for specified localRect.
  18. //    Returns : depth of offPort
  19. //----------------------------------------------------------------------------------
  20.  
  21. extern short getOff(CGrafPtr * offPort, Rect * localRect)
  22. {
  23.     short    wid, ht;
  24.     Rect    globalRect;
  25.     BitMap    newBits;
  26.     QDErr    err;
  27.     GrafPtr    savePort;
  28.     
  29. // draw in an offscreen bitmap/GWorld to minimize flicker    
  30.  
  31.     if(getQDVers() >= gestalt32BitQD12) {                // try to use a GWorld                
  32.         globalRect = *localRect;
  33.         LocalToGlobal((Point *)&globalRect.top);
  34.         LocalToGlobal((Point *)&globalRect.bottom);
  35.         if(*offPort == 0) {                                // create a new GWorld                
  36.             err = NewGWorld((CGrafPtr *)offPort,0,&globalRect,0,0,0);
  37.         }
  38.         else {                                            // update existing GWorld            
  39.             err = UpdateGWorld((CGrafPtr *)offPort,0,&globalRect,0,0,0);
  40.         }
  41.         if(err == noErr)
  42.             return (**((*offPort)->portPixMap)).pixelSize;
  43.         return NOPIXELS;                                // something is seriously amiss╔    
  44.     }
  45.     else {                                                // create a bitmap                    
  46.         wid = (*localRect).right - (*localRect).left;
  47.         ht  = (*localRect).bottom - (*localRect).top;
  48.         SetRect(&newBits.bounds,0,0,wid,ht);
  49.         newBits.rowBytes = ((wid + 31)/32) * 4;
  50.         newBits.baseAddr = (QDPtr)NewPtr(ht * newBits.rowBytes);
  51.         if(MemError())
  52.             return NOPIXELS;
  53.     
  54.         CopyBits(&newBits,&newBits,                        // clear the new bitmap                    
  55.                  &newBits.bounds,&newBits.bounds,
  56.                   srcXor,nil);
  57.                  
  58.         GetPort(&savePort);
  59.         *offPort = (CGrafPtr)NewPtr(sizeof(GrafPort));
  60.         if(MemError())
  61.             return NOPIXELS;    
  62.         OpenPort((GrafPtr)*offPort);
  63.         SetPort((GrafPtr)*offPort);
  64.         
  65.         (**offPort).portRect = newBits.bounds;
  66.         RectRgn((**offPort).visRgn,&newBits.bounds);
  67.         SetPortBits(&newBits);
  68.         SetPort(savePort);
  69.         
  70.         return 1;
  71.     }
  72. }
  73.  
  74. //----------------------------------------------------------------------------------
  75. //    Return QD version number from Gestalt 
  76. //----------------------------------------------------------------------------------
  77.  
  78. short getQDVers()        
  79. {
  80.     OSErr        err;
  81.     long        gResult;
  82.     
  83.     if(trapAvailable(_Gestalt)) {        
  84.         err = Gestalt(gestaltQuickdrawVersion,&gResult);
  85.         if(err == noErr)
  86.             return(LoWord(gResult));
  87.     }
  88.     return(gestaltOriginalQD);
  89. }