Home | History | Annotate | Download | only in qdoffs
      1 
      2 /* ========================= Module _Qdoffs ========================= */
      3 
      4 #include "Python.h"
      5 
      6 
      7 #include <Carbon/Carbon.h>
      8 #if !defined(__LP64__) && !defined(MAC_OS_X_VERSION_10_7)
      9 
     10 #include "pymactoolbox.h"
     11 
     12 /* Macro to test whether a weak-loaded CFM function exists */
     13 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
     14         PyErr_SetString(PyExc_NotImplementedError, \
     15             "Not available in this shared library/OS version"); \
     16         return NULL; \
     17     }} while(0)
     18 
     19 
     20 
     21 #ifdef USE_TOOLBOX_OBJECT_GLUE
     22 extern PyObject *_GWorldObj_New(GWorldPtr);
     23 extern int _GWorldObj_Convert(PyObject *, GWorldPtr *);
     24 
     25 #define GWorldObj_New _GWorldObj_New
     26 #define GWorldObj_Convert _GWorldObj_Convert
     27 #endif
     28 
     29 #define as_GrafPtr(gworld) ((GrafPtr)(gworld))
     30 
     31 
     32 static PyObject *Qdoffs_Error;
     33 
     34 /* ----------------------- Object type GWorld ----------------------- */
     35 
     36 PyTypeObject GWorld_Type;
     37 
     38 #define GWorldObj_Check(x) ((x)->ob_type == &GWorld_Type || PyObject_TypeCheck((x), &GWorld_Type))
     39 
     40 typedef struct GWorldObject {
     41     PyObject_HEAD
     42     GWorldPtr ob_itself;
     43 } GWorldObject;
     44 
     45 PyObject *GWorldObj_New(GWorldPtr itself)
     46 {
     47     GWorldObject *it;
     48     if (itself == NULL) return PyMac_Error(resNotFound);
     49     it = PyObject_NEW(GWorldObject, &GWorld_Type);
     50     if (it == NULL) return NULL;
     51     it->ob_itself = itself;
     52     return (PyObject *)it;
     53 }
     54 
     55 int GWorldObj_Convert(PyObject *v, GWorldPtr *p_itself)
     56 {
     57     if (!GWorldObj_Check(v))
     58     {
     59         PyErr_SetString(PyExc_TypeError, "GWorld required");
     60         return 0;
     61     }
     62     *p_itself = ((GWorldObject *)v)->ob_itself;
     63     return 1;
     64 }
     65 
     66 static void GWorldObj_dealloc(GWorldObject *self)
     67 {
     68     DisposeGWorld(self->ob_itself);
     69     self->ob_type->tp_free((PyObject *)self);
     70 }
     71 
     72 static PyObject *GWorldObj_GetGWorldDevice(GWorldObject *_self, PyObject *_args)
     73 {
     74     PyObject *_res = NULL;
     75     GDHandle _rv;
     76 #ifndef GetGWorldDevice
     77     PyMac_PRECHECK(GetGWorldDevice);
     78 #endif
     79     if (!PyArg_ParseTuple(_args, ""))
     80         return NULL;
     81     _rv = GetGWorldDevice(_self->ob_itself);
     82     _res = Py_BuildValue("O&",
     83                          ResObj_New, _rv);
     84     return _res;
     85 }
     86 
     87 static PyObject *GWorldObj_GetGWorldPixMap(GWorldObject *_self, PyObject *_args)
     88 {
     89     PyObject *_res = NULL;
     90     PixMapHandle _rv;
     91 #ifndef GetGWorldPixMap
     92     PyMac_PRECHECK(GetGWorldPixMap);
     93 #endif
     94     if (!PyArg_ParseTuple(_args, ""))
     95         return NULL;
     96     _rv = GetGWorldPixMap(_self->ob_itself);
     97     _res = Py_BuildValue("O&",
     98                          ResObj_New, _rv);
     99     return _res;
    100 }
    101 
    102 static PyObject *GWorldObj_as_GrafPtr(GWorldObject *_self, PyObject *_args)
    103 {
    104     PyObject *_res = NULL;
    105     GrafPtr _rv;
    106 #ifndef as_GrafPtr
    107     PyMac_PRECHECK(as_GrafPtr);
    108 #endif
    109     if (!PyArg_ParseTuple(_args, ""))
    110         return NULL;
    111     _rv = as_GrafPtr(_self->ob_itself);
    112     _res = Py_BuildValue("O&",
    113                          GrafObj_New, _rv);
    114     return _res;
    115 }
    116 
    117 static PyMethodDef GWorldObj_methods[] = {
    118     {"GetGWorldDevice", (PyCFunction)GWorldObj_GetGWorldDevice, 1,
    119      PyDoc_STR("() -> (GDHandle _rv)")},
    120     {"GetGWorldPixMap", (PyCFunction)GWorldObj_GetGWorldPixMap, 1,
    121      PyDoc_STR("() -> (PixMapHandle _rv)")},
    122     {"as_GrafPtr", (PyCFunction)GWorldObj_as_GrafPtr, 1,
    123      PyDoc_STR("() -> (GrafPtr _rv)")},
    124     {NULL, NULL, 0}
    125 };
    126 
    127 #define GWorldObj_getsetlist NULL
    128 
    129 
    130 #define GWorldObj_compare NULL
    131 
    132 #define GWorldObj_repr NULL
    133 
    134 #define GWorldObj_hash NULL
    135 #define GWorldObj_tp_init 0
    136 
    137 #define GWorldObj_tp_alloc PyType_GenericAlloc
    138 
    139 static PyObject *GWorldObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
    140 {
    141     PyObject *_self;
    142     GWorldPtr itself;
    143     char *kw[] = {"itself", 0};
    144 
    145     if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, GWorldObj_Convert, &itself)) return NULL;
    146     if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL;
    147     ((GWorldObject *)_self)->ob_itself = itself;
    148     return _self;
    149 }
    150 
    151 #define GWorldObj_tp_free PyObject_Del
    152 
    153 
    154 PyTypeObject GWorld_Type = {
    155     PyObject_HEAD_INIT(NULL)
    156     0, /*ob_size*/
    157     "_Qdoffs.GWorld", /*tp_name*/
    158     sizeof(GWorldObject), /*tp_basicsize*/
    159     0, /*tp_itemsize*/
    160     /* methods */
    161     (destructor) GWorldObj_dealloc, /*tp_dealloc*/
    162     0, /*tp_print*/
    163     (getattrfunc)0, /*tp_getattr*/
    164     (setattrfunc)0, /*tp_setattr*/
    165     (cmpfunc) GWorldObj_compare, /*tp_compare*/
    166     (reprfunc) GWorldObj_repr, /*tp_repr*/
    167     (PyNumberMethods *)0, /* tp_as_number */
    168     (PySequenceMethods *)0, /* tp_as_sequence */
    169     (PyMappingMethods *)0, /* tp_as_mapping */
    170     (hashfunc) GWorldObj_hash, /*tp_hash*/
    171     0, /*tp_call*/
    172     0, /*tp_str*/
    173     PyObject_GenericGetAttr, /*tp_getattro*/
    174     PyObject_GenericSetAttr, /*tp_setattro */
    175     0, /*tp_as_buffer*/
    176     Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
    177     0, /*tp_doc*/
    178     0, /*tp_traverse*/
    179     0, /*tp_clear*/
    180     0, /*tp_richcompare*/
    181     0, /*tp_weaklistoffset*/
    182     0, /*tp_iter*/
    183     0, /*tp_iternext*/
    184     GWorldObj_methods, /* tp_methods */
    185     0, /*tp_members*/
    186     GWorldObj_getsetlist, /*tp_getset*/
    187     0, /*tp_base*/
    188     0, /*tp_dict*/
    189     0, /*tp_descr_get*/
    190     0, /*tp_descr_set*/
    191     0, /*tp_dictoffset*/
    192     GWorldObj_tp_init, /* tp_init */
    193     GWorldObj_tp_alloc, /* tp_alloc */
    194     GWorldObj_tp_new, /* tp_new */
    195     GWorldObj_tp_free, /* tp_free */
    196 };
    197 
    198 /* --------------------- End object type GWorld --------------------- */
    199 
    200 
    201 static PyObject *Qdoffs_NewGWorld(PyObject *_self, PyObject *_args)
    202 {
    203     PyObject *_res = NULL;
    204     QDErr _err;
    205     GWorldPtr offscreenGWorld;
    206     short PixelDepth;
    207     Rect boundsRect;
    208     CTabHandle cTable;
    209     GDHandle aGDevice;
    210     GWorldFlags flags;
    211 #ifndef NewGWorld
    212     PyMac_PRECHECK(NewGWorld);
    213 #endif
    214     if (!PyArg_ParseTuple(_args, "hO&O&O&l",
    215                           &PixelDepth,
    216                           PyMac_GetRect, &boundsRect,
    217                           OptResObj_Convert, &cTable,
    218                           OptResObj_Convert, &aGDevice,
    219                           &flags))
    220         return NULL;
    221     _err = NewGWorld(&offscreenGWorld,
    222                      PixelDepth,
    223                      &boundsRect,
    224                      cTable,
    225                      aGDevice,
    226                      flags);
    227     if (_err != noErr) return PyMac_Error(_err);
    228     _res = Py_BuildValue("O&",
    229                          GWorldObj_New, offscreenGWorld);
    230     return _res;
    231 }
    232 
    233 static PyObject *Qdoffs_LockPixels(PyObject *_self, PyObject *_args)
    234 {
    235     PyObject *_res = NULL;
    236     Boolean _rv;
    237     PixMapHandle pm;
    238 #ifndef LockPixels
    239     PyMac_PRECHECK(LockPixels);
    240 #endif
    241     if (!PyArg_ParseTuple(_args, "O&",
    242                           ResObj_Convert, &pm))
    243         return NULL;
    244     _rv = LockPixels(pm);
    245     _res = Py_BuildValue("b",
    246                          _rv);
    247     return _res;
    248 }
    249 
    250 static PyObject *Qdoffs_UnlockPixels(PyObject *_self, PyObject *_args)
    251 {
    252     PyObject *_res = NULL;
    253     PixMapHandle pm;
    254 #ifndef UnlockPixels
    255     PyMac_PRECHECK(UnlockPixels);
    256 #endif
    257     if (!PyArg_ParseTuple(_args, "O&",
    258                           ResObj_Convert, &pm))
    259         return NULL;
    260     UnlockPixels(pm);
    261     Py_INCREF(Py_None);
    262     _res = Py_None;
    263     return _res;
    264 }
    265 
    266 static PyObject *Qdoffs_UpdateGWorld(PyObject *_self, PyObject *_args)
    267 {
    268     PyObject *_res = NULL;
    269     GWorldFlags _rv;
    270     GWorldPtr offscreenGWorld;
    271     short pixelDepth;
    272     Rect boundsRect;
    273     CTabHandle cTable;
    274     GDHandle aGDevice;
    275     GWorldFlags flags;
    276 #ifndef UpdateGWorld
    277     PyMac_PRECHECK(UpdateGWorld);
    278 #endif
    279     if (!PyArg_ParseTuple(_args, "hO&O&O&l",
    280                           &pixelDepth,
    281                           PyMac_GetRect, &boundsRect,
    282                           OptResObj_Convert, &cTable,
    283                           OptResObj_Convert, &aGDevice,
    284                           &flags))
    285         return NULL;
    286     _rv = UpdateGWorld(&offscreenGWorld,
    287                        pixelDepth,
    288                        &boundsRect,
    289                        cTable,
    290                        aGDevice,
    291                        flags);
    292     _res = Py_BuildValue("lO&",
    293                          _rv,
    294                          GWorldObj_New, offscreenGWorld);
    295     return _res;
    296 }
    297 
    298 static PyObject *Qdoffs_GetGWorld(PyObject *_self, PyObject *_args)
    299 {
    300     PyObject *_res = NULL;
    301     CGrafPtr port;
    302     GDHandle gdh;
    303 #ifndef GetGWorld
    304     PyMac_PRECHECK(GetGWorld);
    305 #endif
    306     if (!PyArg_ParseTuple(_args, ""))
    307         return NULL;
    308     GetGWorld(&port,
    309               &gdh);
    310     _res = Py_BuildValue("O&O&",
    311                          GrafObj_New, port,
    312                          ResObj_New, gdh);
    313     return _res;
    314 }
    315 
    316 static PyObject *Qdoffs_SetGWorld(PyObject *_self, PyObject *_args)
    317 {
    318     PyObject *_res = NULL;
    319     CGrafPtr port;
    320     GDHandle gdh;
    321 #ifndef SetGWorld
    322     PyMac_PRECHECK(SetGWorld);
    323 #endif
    324     if (!PyArg_ParseTuple(_args, "O&O&",
    325                           GrafObj_Convert, &port,
    326                           OptResObj_Convert, &gdh))
    327         return NULL;
    328     SetGWorld(port,
    329               gdh);
    330     Py_INCREF(Py_None);
    331     _res = Py_None;
    332     return _res;
    333 }
    334 
    335 static PyObject *Qdoffs_CTabChanged(PyObject *_self, PyObject *_args)
    336 {
    337     PyObject *_res = NULL;
    338     CTabHandle ctab;
    339 #ifndef CTabChanged
    340     PyMac_PRECHECK(CTabChanged);
    341 #endif
    342     if (!PyArg_ParseTuple(_args, "O&",
    343                           OptResObj_Convert, &ctab))
    344         return NULL;
    345     CTabChanged(ctab);
    346     Py_INCREF(Py_None);
    347     _res = Py_None;
    348     return _res;
    349 }
    350 
    351 static PyObject *Qdoffs_PixPatChanged(PyObject *_self, PyObject *_args)
    352 {
    353     PyObject *_res = NULL;
    354     PixPatHandle ppat;
    355 #ifndef PixPatChanged
    356     PyMac_PRECHECK(PixPatChanged);
    357 #endif
    358     if (!PyArg_ParseTuple(_args, "O&",
    359                           ResObj_Convert, &ppat))
    360         return NULL;
    361     PixPatChanged(ppat);
    362     Py_INCREF(Py_None);
    363     _res = Py_None;
    364     return _res;
    365 }
    366 
    367 static PyObject *Qdoffs_PortChanged(PyObject *_self, PyObject *_args)
    368 {
    369     PyObject *_res = NULL;
    370     GrafPtr port;
    371 #ifndef PortChanged
    372     PyMac_PRECHECK(PortChanged);
    373 #endif
    374     if (!PyArg_ParseTuple(_args, "O&",
    375                           GrafObj_Convert, &port))
    376         return NULL;
    377     PortChanged(port);
    378     Py_INCREF(Py_None);
    379     _res = Py_None;
    380     return _res;
    381 }
    382 
    383 static PyObject *Qdoffs_GDeviceChanged(PyObject *_self, PyObject *_args)
    384 {
    385     PyObject *_res = NULL;
    386     GDHandle gdh;
    387 #ifndef GDeviceChanged
    388     PyMac_PRECHECK(GDeviceChanged);
    389 #endif
    390     if (!PyArg_ParseTuple(_args, "O&",
    391                           OptResObj_Convert, &gdh))
    392         return NULL;
    393     GDeviceChanged(gdh);
    394     Py_INCREF(Py_None);
    395     _res = Py_None;
    396     return _res;
    397 }
    398 
    399 static PyObject *Qdoffs_AllowPurgePixels(PyObject *_self, PyObject *_args)
    400 {
    401     PyObject *_res = NULL;
    402     PixMapHandle pm;
    403 #ifndef AllowPurgePixels
    404     PyMac_PRECHECK(AllowPurgePixels);
    405 #endif
    406     if (!PyArg_ParseTuple(_args, "O&",
    407                           ResObj_Convert, &pm))
    408         return NULL;
    409     AllowPurgePixels(pm);
    410     Py_INCREF(Py_None);
    411     _res = Py_None;
    412     return _res;
    413 }
    414 
    415 static PyObject *Qdoffs_NoPurgePixels(PyObject *_self, PyObject *_args)
    416 {
    417     PyObject *_res = NULL;
    418     PixMapHandle pm;
    419 #ifndef NoPurgePixels
    420     PyMac_PRECHECK(NoPurgePixels);
    421 #endif
    422     if (!PyArg_ParseTuple(_args, "O&",
    423                           ResObj_Convert, &pm))
    424         return NULL;
    425     NoPurgePixels(pm);
    426     Py_INCREF(Py_None);
    427     _res = Py_None;
    428     return _res;
    429 }
    430 
    431 static PyObject *Qdoffs_GetPixelsState(PyObject *_self, PyObject *_args)
    432 {
    433     PyObject *_res = NULL;
    434     GWorldFlags _rv;
    435     PixMapHandle pm;
    436 #ifndef GetPixelsState
    437     PyMac_PRECHECK(GetPixelsState);
    438 #endif
    439     if (!PyArg_ParseTuple(_args, "O&",
    440                           ResObj_Convert, &pm))
    441         return NULL;
    442     _rv = GetPixelsState(pm);
    443     _res = Py_BuildValue("l",
    444                          _rv);
    445     return _res;
    446 }
    447 
    448 static PyObject *Qdoffs_SetPixelsState(PyObject *_self, PyObject *_args)
    449 {
    450     PyObject *_res = NULL;
    451     PixMapHandle pm;
    452     GWorldFlags state;
    453 #ifndef SetPixelsState
    454     PyMac_PRECHECK(SetPixelsState);
    455 #endif
    456     if (!PyArg_ParseTuple(_args, "O&l",
    457                           ResObj_Convert, &pm,
    458                           &state))
    459         return NULL;
    460     SetPixelsState(pm,
    461                    state);
    462     Py_INCREF(Py_None);
    463     _res = Py_None;
    464     return _res;
    465 }
    466 
    467 static PyObject *Qdoffs_GetPixRowBytes(PyObject *_self, PyObject *_args)
    468 {
    469     PyObject *_res = NULL;
    470     long _rv;
    471     PixMapHandle pm;
    472 #ifndef GetPixRowBytes
    473     PyMac_PRECHECK(GetPixRowBytes);
    474 #endif
    475     if (!PyArg_ParseTuple(_args, "O&",
    476                           ResObj_Convert, &pm))
    477         return NULL;
    478     _rv = GetPixRowBytes(pm);
    479     _res = Py_BuildValue("l",
    480                          _rv);
    481     return _res;
    482 }
    483 
    484 static PyObject *Qdoffs_NewScreenBuffer(PyObject *_self, PyObject *_args)
    485 {
    486     PyObject *_res = NULL;
    487     QDErr _err;
    488     Rect globalRect;
    489     Boolean purgeable;
    490     GDHandle gdh;
    491     PixMapHandle offscreenPixMap;
    492 #ifndef NewScreenBuffer
    493     PyMac_PRECHECK(NewScreenBuffer);
    494 #endif
    495     if (!PyArg_ParseTuple(_args, "O&b",
    496                           PyMac_GetRect, &globalRect,
    497                           &purgeable))
    498         return NULL;
    499     _err = NewScreenBuffer(&globalRect,
    500                            purgeable,
    501                            &gdh,
    502                            &offscreenPixMap);
    503     if (_err != noErr) return PyMac_Error(_err);
    504     _res = Py_BuildValue("O&O&",
    505                          ResObj_New, gdh,
    506                          ResObj_New, offscreenPixMap);
    507     return _res;
    508 }
    509 
    510 static PyObject *Qdoffs_DisposeScreenBuffer(PyObject *_self, PyObject *_args)
    511 {
    512     PyObject *_res = NULL;
    513     PixMapHandle offscreenPixMap;
    514 #ifndef DisposeScreenBuffer
    515     PyMac_PRECHECK(DisposeScreenBuffer);
    516 #endif
    517     if (!PyArg_ParseTuple(_args, "O&",
    518                           ResObj_Convert, &offscreenPixMap))
    519         return NULL;
    520     DisposeScreenBuffer(offscreenPixMap);
    521     Py_INCREF(Py_None);
    522     _res = Py_None;
    523     return _res;
    524 }
    525 
    526 static PyObject *Qdoffs_QDDone(PyObject *_self, PyObject *_args)
    527 {
    528     PyObject *_res = NULL;
    529     Boolean _rv;
    530     GrafPtr port;
    531 #ifndef QDDone
    532     PyMac_PRECHECK(QDDone);
    533 #endif
    534     if (!PyArg_ParseTuple(_args, "O&",
    535                           GrafObj_Convert, &port))
    536         return NULL;
    537     _rv = QDDone(port);
    538     _res = Py_BuildValue("b",
    539                          _rv);
    540     return _res;
    541 }
    542 
    543 static PyObject *Qdoffs_OffscreenVersion(PyObject *_self, PyObject *_args)
    544 {
    545     PyObject *_res = NULL;
    546     long _rv;
    547 #ifndef OffscreenVersion
    548     PyMac_PRECHECK(OffscreenVersion);
    549 #endif
    550     if (!PyArg_ParseTuple(_args, ""))
    551         return NULL;
    552     _rv = OffscreenVersion();
    553     _res = Py_BuildValue("l",
    554                          _rv);
    555     return _res;
    556 }
    557 
    558 static PyObject *Qdoffs_NewTempScreenBuffer(PyObject *_self, PyObject *_args)
    559 {
    560     PyObject *_res = NULL;
    561     QDErr _err;
    562     Rect globalRect;
    563     Boolean purgeable;
    564     GDHandle gdh;
    565     PixMapHandle offscreenPixMap;
    566 #ifndef NewTempScreenBuffer
    567     PyMac_PRECHECK(NewTempScreenBuffer);
    568 #endif
    569     if (!PyArg_ParseTuple(_args, "O&b",
    570                           PyMac_GetRect, &globalRect,
    571                           &purgeable))
    572         return NULL;
    573     _err = NewTempScreenBuffer(&globalRect,
    574                                purgeable,
    575                                &gdh,
    576                                &offscreenPixMap);
    577     if (_err != noErr) return PyMac_Error(_err);
    578     _res = Py_BuildValue("O&O&",
    579                          ResObj_New, gdh,
    580                          ResObj_New, offscreenPixMap);
    581     return _res;
    582 }
    583 
    584 static PyObject *Qdoffs_PixMap32Bit(PyObject *_self, PyObject *_args)
    585 {
    586     PyObject *_res = NULL;
    587     Boolean _rv;
    588     PixMapHandle pmHandle;
    589 #ifndef PixMap32Bit
    590     PyMac_PRECHECK(PixMap32Bit);
    591 #endif
    592     if (!PyArg_ParseTuple(_args, "O&",
    593                           ResObj_Convert, &pmHandle))
    594         return NULL;
    595     _rv = PixMap32Bit(pmHandle);
    596     _res = Py_BuildValue("b",
    597                          _rv);
    598     return _res;
    599 }
    600 
    601 static PyObject *Qdoffs_GetPixMapBytes(PyObject *_self, PyObject *_args)
    602 {
    603     PyObject *_res = NULL;
    604 
    605     PixMapHandle pm;
    606     int from, length;
    607     char *cp;
    608 
    609     if ( !PyArg_ParseTuple(_args, "O&ii", ResObj_Convert, &pm, &from, &length) )
    610         return NULL;
    611     cp = GetPixBaseAddr(pm)+from;
    612     _res = PyString_FromStringAndSize(cp, length);
    613     return _res;
    614 
    615 }
    616 
    617 static PyObject *Qdoffs_PutPixMapBytes(PyObject *_self, PyObject *_args)
    618 {
    619     PyObject *_res = NULL;
    620 
    621     PixMapHandle pm;
    622     int from, length;
    623     char *cp, *icp;
    624 
    625     if ( !PyArg_ParseTuple(_args, "O&is#", ResObj_Convert, &pm, &from, &icp, &length) )
    626         return NULL;
    627     cp = GetPixBaseAddr(pm)+from;
    628     memcpy(cp, icp, length);
    629     Py_INCREF(Py_None);
    630     _res = Py_None;
    631     return _res;
    632 
    633 }
    634 #endif /* __LP64__ */
    635 
    636 static PyMethodDef Qdoffs_methods[] = {
    637 #if !defined(__LP64__) && !defined(MAC_OS_X_VERSION_10_7)
    638     {"NewGWorld", (PyCFunction)Qdoffs_NewGWorld, 1,
    639      PyDoc_STR("(short PixelDepth, Rect boundsRect, CTabHandle cTable, GDHandle aGDevice, GWorldFlags flags) -> (GWorldPtr offscreenGWorld)")},
    640     {"LockPixels", (PyCFunction)Qdoffs_LockPixels, 1,
    641      PyDoc_STR("(PixMapHandle pm) -> (Boolean _rv)")},
    642     {"UnlockPixels", (PyCFunction)Qdoffs_UnlockPixels, 1,
    643      PyDoc_STR("(PixMapHandle pm) -> None")},
    644     {"UpdateGWorld", (PyCFunction)Qdoffs_UpdateGWorld, 1,
    645      PyDoc_STR("(short pixelDepth, Rect boundsRect, CTabHandle cTable, GDHandle aGDevice, GWorldFlags flags) -> (GWorldFlags _rv, GWorldPtr offscreenGWorld)")},
    646     {"GetGWorld", (PyCFunction)Qdoffs_GetGWorld, 1,
    647      PyDoc_STR("() -> (CGrafPtr port, GDHandle gdh)")},
    648     {"SetGWorld", (PyCFunction)Qdoffs_SetGWorld, 1,
    649      PyDoc_STR("(CGrafPtr port, GDHandle gdh) -> None")},
    650     {"CTabChanged", (PyCFunction)Qdoffs_CTabChanged, 1,
    651      PyDoc_STR("(CTabHandle ctab) -> None")},
    652     {"PixPatChanged", (PyCFunction)Qdoffs_PixPatChanged, 1,
    653      PyDoc_STR("(PixPatHandle ppat) -> None")},
    654     {"PortChanged", (PyCFunction)Qdoffs_PortChanged, 1,
    655      PyDoc_STR("(GrafPtr port) -> None")},
    656     {"GDeviceChanged", (PyCFunction)Qdoffs_GDeviceChanged, 1,
    657      PyDoc_STR("(GDHandle gdh) -> None")},
    658     {"AllowPurgePixels", (PyCFunction)Qdoffs_AllowPurgePixels, 1,
    659      PyDoc_STR("(PixMapHandle pm) -> None")},
    660     {"NoPurgePixels", (PyCFunction)Qdoffs_NoPurgePixels, 1,
    661      PyDoc_STR("(PixMapHandle pm) -> None")},
    662     {"GetPixelsState", (PyCFunction)Qdoffs_GetPixelsState, 1,
    663      PyDoc_STR("(PixMapHandle pm) -> (GWorldFlags _rv)")},
    664     {"SetPixelsState", (PyCFunction)Qdoffs_SetPixelsState, 1,
    665      PyDoc_STR("(PixMapHandle pm, GWorldFlags state) -> None")},
    666     {"GetPixRowBytes", (PyCFunction)Qdoffs_GetPixRowBytes, 1,
    667      PyDoc_STR("(PixMapHandle pm) -> (long _rv)")},
    668     {"NewScreenBuffer", (PyCFunction)Qdoffs_NewScreenBuffer, 1,
    669      PyDoc_STR("(Rect globalRect, Boolean purgeable) -> (GDHandle gdh, PixMapHandle offscreenPixMap)")},
    670     {"DisposeScreenBuffer", (PyCFunction)Qdoffs_DisposeScreenBuffer, 1,
    671      PyDoc_STR("(PixMapHandle offscreenPixMap) -> None")},
    672     {"QDDone", (PyCFunction)Qdoffs_QDDone, 1,
    673      PyDoc_STR("(GrafPtr port) -> (Boolean _rv)")},
    674     {"OffscreenVersion", (PyCFunction)Qdoffs_OffscreenVersion, 1,
    675      PyDoc_STR("() -> (long _rv)")},
    676     {"NewTempScreenBuffer", (PyCFunction)Qdoffs_NewTempScreenBuffer, 1,
    677      PyDoc_STR("(Rect globalRect, Boolean purgeable) -> (GDHandle gdh, PixMapHandle offscreenPixMap)")},
    678     {"PixMap32Bit", (PyCFunction)Qdoffs_PixMap32Bit, 1,
    679      PyDoc_STR("(PixMapHandle pmHandle) -> (Boolean _rv)")},
    680     {"GetPixMapBytes", (PyCFunction)Qdoffs_GetPixMapBytes, 1,
    681      PyDoc_STR("(pixmap, int start, int size) -> string. Return bytes from the pixmap")},
    682     {"PutPixMapBytes", (PyCFunction)Qdoffs_PutPixMapBytes, 1,
    683      PyDoc_STR("(pixmap, int start, string data). Store bytes into the pixmap")},
    684 #endif /* __LP64__ */
    685     {NULL, NULL, 0}
    686 };
    687 
    688 
    689 
    690 
    691 void init_Qdoffs(void)
    692 {
    693     PyObject *m;
    694 #if !defined(__LP64__) && !defined(MAC_OS_X_VERSION_10_7)
    695     PyObject *d;
    696 
    697 
    698 
    699         PyMac_INIT_TOOLBOX_OBJECT_NEW(GWorldPtr, GWorldObj_New);
    700         PyMac_INIT_TOOLBOX_OBJECT_CONVERT(GWorldPtr, GWorldObj_Convert);
    701 
    702 #endif /* __LP64__ */
    703 
    704     m = Py_InitModule("_Qdoffs", Qdoffs_methods);
    705 #if !defined(__LP64__) && !defined(MAC_OS_X_VERSION_10_7)
    706     d = PyModule_GetDict(m);
    707     Qdoffs_Error = PyMac_GetOSErrException();
    708     if (Qdoffs_Error == NULL ||
    709         PyDict_SetItemString(d, "Error", Qdoffs_Error) != 0)
    710         return;
    711     GWorld_Type.ob_type = &PyType_Type;
    712     if (PyType_Ready(&GWorld_Type) < 0) return;
    713     Py_INCREF(&GWorld_Type);
    714     PyModule_AddObject(m, "GWorld", (PyObject *)&GWorld_Type);
    715     /* Backward-compatible name */
    716     Py_INCREF(&GWorld_Type);
    717     PyModule_AddObject(m, "GWorldType", (PyObject *)&GWorld_Type);
    718 #endif /* __LP64__ */
    719 }
    720 
    721 /* ======================= End module _Qdoffs ======================= */
    722 
    723