Legacy Documentclose button

Important: The information in this document is obsolete and should not be used for new development.

Previous Book Contents Book Index Next

Inside Macintosh: Imaging With QuickDraw /
Chapter 5 - Graphics Devices


Summary of Graphics Devices

Pascal Summary

Constants

CONST
   {flag bits for gdType field of GDevice record}
   clutType = 0;     {CLUT device--that is, one with colors mapped with a }
                     { color lookup table}
   fixedType = 1;    {fixed colors--that is, the color lookup table }
                     { can't be changed}
   directType = 2;   {direct RGB colors}
{flag bits for gdFlags field of GDevice record}
   gdDevType      = 0;  {if bit is set to 0, graphics device is black }
                        { and white; if bit is set to 1, graphics device }
                        { supports color}
   burstDevice    = 7;  {if bit is set to 1, graphics device supports block }
                        { transfer}
   ext32Device    = 8;  {if bit is set to 1, graphics device must be used }
                        { in 32-bit mode}
   ramInit        = 10; {if bit is set to 1, graphics device has been }
                        { initialized from RAM}
   mainScreen     = 11; {if bit is set to 1, graphics device is the main }
                        { screen}
   allInit        = 12; {if bit is set to 1, all graphics devices were }
                        { initialized from 'scrn' resource}
   screenDevice   = 13; {if bit is set to 1, graphics device is a screen}
   noDriver       = 14; {if bit is set to 1, GDevice record has no driver}
   screenActive   = 15; {if bit is set to 1, graphics device is current }
                        { device}

Data Types

TYPE  
GDHandle    = ^GDPtr;
GDPtr       = ^GDevice;
GDevice     = 
RECORD
   gdRefNum:      Integer;       {reference number of screen driver}
   gdID:          Integer;       {reserved; set to 0}
   gdType:        Integer;       {type of device--indexed or direct}
   gdITable:      ITabHandle;    {handle to inverse table for Color Manager}
   gdResPref:     Integer;       {preferred resolution}
   gdSearchProc:  SProcHndl;     {handle to list of search functions}
   gdCompProc:    CProcHndl;     {handle to list of complement functions}
   gdFlags:       Integer;       {graphics device flags}
   gdPMap:        PixMapHandle;  {handle to PixMap record for displayed }
                                 { image}
   gdRefCon:      LongInt;       {reference value}
   gdNextGD:      GDHandle;      {handle to next graphics device}
   gdRect:        Rect;          {graphics device's boundary in global }
                                 { coordinates}
   gdMode:        LongInt;       {graphics device's current mode}
   gdCCBytes:     Integer;       {width of expanded cursor data}
   gdCCDepth:     Integer;       {depth of expanded cursor data}
   gdCCXData:     Handle;        {handle to cursor's expanded data}
   gdCCXMask:     Handle;        {handle to cursor's expanded mask}
   gdReserved:    LongInt;       {reserved for future use; must be 0}
END;
QDErr = Integer;
DeviceLoopDrawingProcPtr = ProcPtr;
DeviceLoopFlags = SET OF   {for flags parameter of DeviceLoop}
   (singleDevices,         {DeviceLoop doesn't group similar graphics }
                           { devices when calling drawing procedure}
   dontMatchSeeds,         {DeviceLoop doesn't consider ctSeed fields }
                           { of ColorTable records for graphics devices }
                           { when comparing them}
   allDevices);            {DeviceLoop ignores value of drawingRgn }
                           { parameter--instead, it calls drawing procedure }
                           { for every screen}

Routines for Graphics Devices

Creating, Setting, and Disposing of GDevice Records

{ DisposeGDevice is also spelled as DisposGDevice }
FUNCTION NewGDevice      (refNum: Integer; mode: LongInt): GDHandle;
PROCEDURE InitGDevice    (gdRefNum: Integer; mode: LongInt; 
                          gdh: GDHandle);
PROCEDURE SetDeviceAttribute
                         (gdh: GDHandle; attribute: Integer; 
                          value: Boolean);
PROCEDURE SetGDevice     (gdh: GDHandle);
PROCEDURE DisposeGDevice (gdh: GDHandle);

Getting the Available Graphics Devices

FUNCTION GetGDevice      : GDHandle;
FUNCTION GetDeviceList   : GDHandle;
FUNCTION GetMainDevice   : GDHandle;
FUNCTION GetMaxDevice    (globalRect: Rect): GDHandle;
FUNCTION GetNextDevice   (curDevice: GDHandle): GDHandle;

Determining the Characteristics of a Video Device

PROCEDURE DeviceLoop     (drawingRgn: RgnHandle; 
                          drawingProc: DeviceLoopDrawingProcPtr; 
                          userData: LongInt; flags: DeviceLoopFlags);
FUNCTION TestDeviceAttribute
                         (gdh: GDHandle; 
                          attribute: Integer): Boolean;
PROCEDURE ScreenRes      (VAR scrnHRes,scrnVRes: Integer);

Changing the Pixel Depth for a Video Device

FUNCTION HasDepth        (aDevice: GDHandle; depth: Integer; 
                          whichFlags: Integer; flags: Integer): Integer;
FUNCTION SetDepth        (aDevice: GDHandle; depth: Integer; 
                          whichFlags: Integer; flags: Integer): OSErr;

Application-Defined Routine

PROCEDURE MyDrawingProc  (depth: Integer; deviceFlags: Integer; 
                          targetDevice: GDHandle; userData: LongInt);

C Summary

Constants

enum {
   /* flag bits for gdType field of GDevice record */
   clutType       = 0;  /* CLUT device--that is, one with colors mapped with
                           a color lookup table */
   fixedType      = 1;  /* fixed colors--that is, the color lookup table 
                           can't be changed */
   directType     = 2;  /* direct RGB colors */
/* flag bits for gdFlags field of GDevice record */
   gdDevType      = 0,  /* if bit is set to 0, graphics device is black and
                           white; if set to 1, device is color */
   burstDevice    = 7,  /* if bit is set to 1, graphics device supports block 
                           transfer */
   ext32Device    = 8,  /* if bit is set to 1, graphics device must be used 
                           in 32-bit mode */
   ramInit        = 10, /* if bit is set to 1, graphics device was 
                           initialized from RAM */
   mainScreen     = 11, /* if bit is set to 1, graphics device is the main
                           screen */
   allInit        = 12, /* if bit is set to 1, all graphics devices were 
                           initialized from 'scrn' resource */
   screenDevice   = 13, /* if bit is set to 1, graphics device is a screen 
                           device */
   noDriver       = 14, /* if bit is set to 1, GDevice record has 
                           no driver */
   screenActive   = 15, /* if bit is set to 1, graphics device is current 
                           device */
};

Data Types

struct GDevice {
   short          gdRefNum;      /* reference number of screen driver */
   short          gdID;          /* reserved; set to 0 */
   short          gdType;        /* type of device--indexed or direct */
   ITabHandle     gdITable;      /* handle to inverse table for Color  
                                    Manager */
   short          gdResPref;     /* preferred resolution */
   SProcHndl      gdSearchProc;  /* handle to list of search functions */
   CProcHndl      gdCompProc;    /* handle to list of complement functions */
   short          gdFlags;       /* graphics device flags */
   PixMapHandle   gdPMap;        /* handle to PixMap record for displayed  
                                    image */
   long           gdRefCon;      /* reference value */
   GDHandle       gdNextGD;      /* handle to next graphics device */
   Rect           gdRect;        /* graphics device's boundary in global 
                                    coordinates */
   long           gdMode;        /* graphics device's current mode */
   short          gdCCBytes;     /* width of expanded cursor data */
   short          gdCCDepth;     /* depth of expanded cursor data */
   Handle         gdCCXData;     /* handle to cursor's expanded data */
   Handle         gdCCXMask;     /* handle to cursor's expanded mask */
   long           gdReserved;    /* reserved for future use; must be 0 */
};
typedef struct GDevice GDevice;
typedef GDevice *GDPtr, **GDHandle;
typedef short QDErr;
typedef pascal void  (*DeviceLoopDrawingProcPtr)
                     (short depth, short deviceFlags, 
                      GDHandle targetDevice, long userData);
/* for flags parameter of DeviceLoop */
enum  {singleDevicesBit = 0,dontMatchSeedsBit = 1,allDevicesBit = 2};
enum  {singleDevices = 1 << singleDevicesBit,   /* DeviceLoop doesn't group
                                                   similar graphics devices
                                                   when calling drawing
                                                   procedure */
      dontMatchSeeds = 1 << dontMatchSeedsBit,  /* DeviceLoop doesn't 
                                                   consider ctSeed fields of 
                                                   ColorTable records for
                                                   graphics devices when 
                                                   comparing them */
      allDevices = 1 << allDevicesBit};         /* DeviceLoop ignores value 
                                                   of drawingRgn parameter--
                                                   instead it calls drawing
                                                   procedure for every 
                                                   screen */
typedef unsigned long DeviceLoopFlags;

Functions for Graphics Devices

Creating, Setting, and Disposing of GDevice Records

/* DisposeGDevice is also spelled as DisposGDevice */
pascal GDHandle NewGDevice     (short refNum, long mode); 
pascal void InitGDevice        (short gdRefNum, long mode, GDHandle gdh); 
pascal void SetDeviceAttribute
                               (GDHandle gdh, short attribute, Boolean value); 
pascal void SetGDevice         (GDHandle gdh); 
pascal void DisposeGDevice     (GDHandle gdh); 

Getting the Available Graphics Devices

pascal GDHandle GetGDevice     (void); 
pascal GDHandle GetDeviceList
                               (void); 
pascal GDHandle GetMainDevice
                               (void); 
pascal GDHandle GetMaxDevice
                               (const Rect *globalRect); 
pascal GDHandle GetNextDevice
                               (GDHandle curDevice); 

Determining the Characteristics of a Video Device

pascal void DeviceLoop         (RgnHandle drawingRgn, 
                                DeviceLoopDrawingProcPtr drawingProc, 
                                long userData, DeviceLoopFlags flags);
pascal Boolean TestDeviceAttribute
                               (GDHandle gdh, short attribute);
pascal void ScreenRes          (short *scrnHRes, short *scrnVRes);

Changing the Pixel Depth for a Video Device

pascal Integer HasDepth        (GDHandle aDevice, Integer depth, 
                                Integer whichFlags, Integer flags);
pascal OSErr SetDepth          (GDHandle aDevice, Integer depth, 
                                Integer whichFlags, Integer flags);

Application-Defined Function

pascal void MyDrawingProc      (Integer depth, Integer deviceFlags, 
                                GDHandle targetDevice, LongInt userData);

Assembly-Language Summary

Data Structure

GDevice Data Structure
0gdRefNumwordrefNum of screen driver
2gdIDwordreserved; set to 0
4gdTypewordgeneral type of graphics device
6gdITablelonghandle to inverse table
10gdResPrefwordpreferred resolution for inverse tables
12gdSearchProclongsearch function pointer
16gdCompProclongcomplement function pointer
20gdFlagswordgraphics device flags word
22gdPMaplonghandle to pixel map describing graphics device
26gdRefConlongreference value
30gdNextGDlonghandle to next GDevice record
34gdRect8 bytesgraphics device's bounds in global coordinates
42gdModelongdevice's current mode
46gdCCByteswordwidth of expanded cursor data
48gdCCDepthworddepth of expanded cursor data
50gdCCXDatalonghandle to cursor's expanded data
54gdCCXMasklonghandle to cursor's expanded mask
58gdReservedlongreserved; must be 0

Global Variables
DeviceListHandle to the first GDevice record in the device list.
MainDeviceHandle to the GDevice record for the main screen.
ScrHResThe horizontal resolution, in pixels per inch, for the current device.
ScrVResThe vertical resolution, in pixels per inch, for the current device.
TheGDeviceHandle to the GDevice record for the current device.



Previous Book Contents Book Index Next

© Apple Computer, Inc.
7 JUL 1996