]> granicus.if.org Git - python/commitdiff
- Added color window/pixmap support
authorJack Jansen <jack.jansen@cwi.nl>
Tue, 12 Dec 1995 15:02:03 +0000 (15:02 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Tue, 12 Dec 1995 15:02:03 +0000 (15:02 +0000)
- Added support for obtaining pixmap data
- Added OptResObj_* routines for optional handles

26 files changed:
Mac/Lib/toolbox/AEObjects.py
Mac/Lib/toolbox/AERegistry.py
Mac/Lib/toolbox/AppleEvents.py
Mac/Lib/toolbox/Dialogs.py
Mac/Lib/toolbox/Menus.py
Mac/Modules/ae/AEmodule.c
Mac/Modules/ae/aegen.py
Mac/Modules/cm/Cmmodule.c
Mac/Modules/ctl/Ctlmodule.c
Mac/Modules/dlg/Dlgmodule.c
Mac/Modules/dlg/dlggen.py
Mac/Modules/dlg/dlgsupport.py
Mac/Modules/evt/Evtmodule.c
Mac/Modules/list/Listmodule.c
Mac/Modules/menu/Menumodule.c
Mac/Modules/menu/menugen.py
Mac/Modules/qd/Qdmodule.c
Mac/Modules/qd/qdgen.py
Mac/Modules/qd/qdscan.py
Mac/Modules/qd/qdsupport.py
Mac/Modules/qt/Qtmodule.c
Mac/Modules/res/Resmodule.c
Mac/Modules/res/ressupport.py
Mac/Modules/snd/Sndmodule.c
Mac/Modules/win/Winmodule.c
Tools/bgen/bgen/macsupport.py

index 3e1db671d2e24afa5d3e3c0163a6c3e0dbd9d2c6..b3ff7d448c16186e5441e0526c6f2b25ef3c8711 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:AEObjects.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:AEObjects.h'
 
 kAEAND = 'AND '
 kAEOR = 'OR  '
index 716c5f837f94bd91efd39ea4bdc7cb23f5edd825..988a8c8e27c197b40f42920568e19a5c3f10da8a 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:AERegistry.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:AERegistry.h'
 
 cAEList = 'list'
 cApplication = 'capp'
index e4668bcc7a74a38126cf92d291b817857860e3c0..55b5f51eff016b36dbe1489888e49b67f60a422c 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:AppleEvents.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:AppleEvents.h'
 
 typeBoolean = 'bool'
 typeChar = 'TEXT'
index c08dac40e5ccec135b21a782b52626aed40aa336..ba9ba69cc47a2ab2a9f51b28017090cffb823721 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Dialogs.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:Dialogs.h'
 
 ctrlItem = 4
 btnCtrl = 0
index be1e8104bbd172402d6198e59d9dc654ef9c9f58..dede690457a1ed455469bfca3d16e407c71f93eb 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Menus.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:Menus.h'
 
 noMark = 0
 mDrawMsg = 0
index 2d759770d6bf23f9c63dd9e6b54517750e9f74d0..e12c6c87abc245233ba4eacf56473ace60721196 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <AppleEvents.h>
index 5d3a6e88793848b46520f339ff0228b667e75cbb..896eb7880a7fe74dc3abe79b1220c9b48cbbff19 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:AppleEvents.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:AppleEvents.h'
 
 f = AEFunction(OSErr, 'AECreateDesc',
     (DescType, 'typeCode', InMode),
index 2f44307ff2b35e7f2685ee02c1b991736584cc83..fd8b331029b4c7194bce93171649a115be912d75 100644 (file)
@@ -14,8 +14,9 @@
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
index 3ea6b91a229af3e08b82a8995f4660dc72ae57ba..2669113724f8760c44899efd1582eb10c2028d66 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Controls.h>
index 49f65538ca49bd98ec49097b926eba904e007ed7..93de3e950a593ac49be9cd636b0d430a80d49a8f 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Dialogs.h>
@@ -192,7 +201,7 @@ static PyObject *DlgObj_GetDialogItem(_self, _args)
                      &box);
        _res = Py_BuildValue("hO&O&",
                             itemType,
-                            ResObj_OptNew, item,
+                            OptResObj_New, item,
                             PyMac_BuildRect, &box);
        return _res;
 }
index 431952085c4286e72f1e289d9f510700e247cd68..3c1e66969dd886815d7e6731532ac647a09c5c9b 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Dialogs.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:Dialogs.h'
 
 f = Function(DialogRef, 'NewDialog',
     (NullStorage, 'wStorage', InMode),
index 0b5f08264f929791290eed4a89291de7ffc6d9ad..cd255ef446b79c2e8ca4e28d04c25cedfbd9d895 100644 (file)
@@ -13,11 +13,9 @@ from macsupport import *
 DialogPtr = OpaqueByValueType("DialogPtr", "DlgObj")
 DialogRef = DialogPtr
 
-# XXXX There must be a more elegant way to do this. An OptHandle is
-# either a handle or None (in case NULL is passed in). This is needed
-# for GetDialogItem().
-OptHandle = OpaqueByValueType("Handle", "ResObj")
-OptHandle.new = "ResObj_OptNew"
+# An OptHandle is either a handle or None (in case NULL is passed in).
+# This is needed for GetDialogItem().
+OptHandle = OpaqueByValueType("Handle", "OptResObj")
 
 ModalFilterProcPtr = InputOnlyType("PyObject*", "O")
 ModalFilterProcPtr.passInput = lambda name: "NewModalFilterProc(Dlg_PassFilterProc(%s))" % name
index 59858fa33348b0e616fd81cd215b6fae77a1474c..9078e9f5f97c5c73f89d1080c08d6532db9a78c2 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Events.h>
index 747b477352aec9e858e9cecb889afc7e3274cff8..17f20b04f0a978f623fc7e9d82550188340929c4 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Lists.h>
index 6c855cd4563d81a9829fd00a51b3f56fe743b559..07e1b8803ea433bdba985c92338c115a13af584c 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Devices.h> /* Defines OpenDeskAcc in universal headers */
index 30e43e2e9236329b0b3cd88e7164ced3da45d884..7e27d5c52c2078833675f67a21c866275643d5a2 100644 (file)
@@ -1,4 +1,4 @@
-# Generated from 'Sap:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Menus.h'
+# Generated from 'Sap:CodeWarrior7:Metrowerks CodeWarrior:MacOS Support:Headers:Universal Headers:Menus.h'
 
 f = Function(short, 'GetMBarHeight',
 )
index 8b03fc2b7e8d0e02bd363bc1ad9922432a383931..b076aa48e842c4182a92b684099719234ff18aea 100644 (file)
@@ -14,8 +14,9 @@
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
@@ -130,8 +131,15 @@ static PyObject *GrafObj_getattr(self, name)
 {
        if ( strcmp(name, "device") == 0 )
                                return PyInt_FromLong((long)self->ob_itself->device);
-                       if ( strcmp(name, "portBits") == 0 )
-                               return BMObj_New(&self->ob_itself->portBits);
+                       if ( strcmp(name, "portBits") == 0 ) {
+                               CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
+                               
+                               if ( (itself_color->portVersion&0xc000) == 0xc000 )
+                                       /* XXXX Do we need HLock() stuff here?? */
+                                       return BMObj_New((BitMapPtr)*itself_color->portPixMap);
+                               else
+                                       return BMObj_New(&self->ob_itself->portBits);
+                       }
                        if ( strcmp(name, "portRect") == 0 )
                                return Py_BuildValue("O&", PyMac_BuildRect, &self->ob_itself->portRect);
                        /* XXXX Add more, as needed */
@@ -220,6 +228,10 @@ static PyObject *BMObj_getattr(self, name)
                        if ( strcmp(name, "bounds") == 0 )
                                return Py_BuildValue("O&", PyMac_BuildRect, &self->ob_itself->bounds);
                        /* XXXX Add more, as needed */
+                       if ( strcmp(name, "bitmap_data") == 0 )
+                               return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(BitMap));
+                       if ( strcmp(name, "pixmap_data") == 0 )
+                               return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(PixMap));
                        
        return Py_FindMethodInChain(&BMObj_chain, (PyObject *)self, name);
 }
@@ -1525,7 +1537,7 @@ static PyObject *Qd_CopyBits(_self, _args)
                              PyMac_GetRect, &srcRect,
                              PyMac_GetRect, &dstRect,
                              &mode,
-                             ResObj_Convert, &maskRgn))
+                             OptResObj_Convert, &maskRgn))
                return NULL;
        CopyBits(srcBits,
                 dstBits,
@@ -1978,7 +1990,7 @@ static PyObject *Qd_StdBits(_self, _args)
                              PyMac_GetRect, &srcRect,
                              PyMac_GetRect, &dstRect,
                              &mode,
-                             ResObj_Convert, &maskRgn))
+                             OptResObj_Convert, &maskRgn))
                return NULL;
        StdBits(srcBits,
                &srcRect,
@@ -2721,7 +2733,7 @@ static PyObject *Qd_CopyDeepMask(_self, _args)
                              PyMac_GetRect, &maskRect,
                              PyMac_GetRect, &dstRect,
                              &mode,
-                             ResObj_Convert, &maskRgn))
+                             OptResObj_Convert, &maskRgn))
                return NULL;
        CopyDeepMask(srcBits,
                     maskBits,
@@ -3071,6 +3083,31 @@ static PyObject *Qd_BitMap(_self, _args)
 
 }
 
+static PyObject *Qd_RawBitMap(_self, _args)
+       PyObject *_self;
+       PyObject *_args;
+{
+       PyObject *_res = NULL;
+
+       BitMap *ptr;
+       PyObject *source;
+
+       if ( !PyArg_ParseTuple(_args, "O!", &PyString_Type, &source) )
+               return NULL;
+       if ( PyString_Size(source) != sizeof(BitMap) && PyString_Size(source) != sizeof(PixMap) ) {
+               PyErr_BadArgument();
+               return NULL;
+       }
+       ptr = (BitMapPtr)PyString_AsString(source);
+       if ( (_res = BMObj_New(ptr)) == NULL ) {
+               return NULL;
+       }
+       ((BitMapObject *)_res)->referred_object = source;
+       Py_INCREF(source);
+       return _res;
+
+}
+
 static PyMethodDef Qd_methods[] = {
        {"SetPort", (PyCFunction)Qd_SetPort, 1,
         "(GrafPtr port) -> None"},
@@ -3394,6 +3431,8 @@ static PyMethodDef Qd_methods[] = {
         "(Fixed extra) -> None"},
        {"BitMap", (PyCFunction)Qd_BitMap, 1,
         "Take (string, int, Rect) argument and create BitMap"},
+       {"RawBitMap", (PyCFunction)Qd_RawBitMap, 1,
+        "Take string BitMap and turn into BitMap object"},
        {NULL, NULL, 0}
 };
 
index f58cb03f15517d921357f2616aa28f81aaccbd70..4410b82cb2910cf82e65770c22afcd47309f8973 100644 (file)
@@ -423,7 +423,7 @@ f = Function(void, 'CopyBits',
     (Rect_ptr, 'srcRect', InMode),
     (Rect_ptr, 'dstRect', InMode),
     (short, 'mode', InMode),
-    (RgnHandle, 'maskRgn', InMode),
+    (OptRgnHandle, 'maskRgn', InMode),
 )
 functions.append(f)
 
@@ -571,7 +571,7 @@ f = Function(void, 'StdBits',
     (Rect_ptr, 'srcRect', InMode),
     (Rect_ptr, 'dstRect', InMode),
     (short, 'mode', InMode),
-    (RgnHandle, 'maskRgn', InMode),
+    (OptRgnHandle, 'maskRgn', InMode),
 )
 functions.append(f)
 
@@ -817,7 +817,7 @@ f = Function(void, 'CopyDeepMask',
     (Rect_ptr, 'maskRect', InMode),
     (Rect_ptr, 'dstRect', InMode),
     (short, 'mode', InMode),
-    (RgnHandle, 'maskRgn', InMode),
+    (OptRgnHandle, 'maskRgn', InMode),
 )
 functions.append(f)
 
index e86895a1c5afac5699ee07b4124d5731390159e8..1d28ecf4d16a331b2228be8b48b93592eb661517 100644 (file)
@@ -127,6 +127,10 @@ class MyScanner(Scanner):
                          [('Rect', 'r', 'InOutMode'),
                                ('Rect_ptr', 'srcRect', 'InMode'),
                                ('Rect_ptr', 'dstRect', 'InMode')]),
+                               
+                        # CopyBits and friends
+                        ([('RgnHandle', 'maskRgn', 'InMode')],
+                         [('OptRgnHandle', 'maskRgn', 'InMode')]),
                        
                        ]
 
index 245b6fd1a167acc7e956418263ca554523a60de1..7768f319b637f05b2b4b299d503acb9840a3ee13 100644 (file)
@@ -33,6 +33,7 @@ TextThingie = TextThingieClass(None)
 
 # These are temporary!
 RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
+OptRgnHandle = OpaqueByValueType("RgnHandle", "OptResObj")
 PicHandle = OpaqueByValueType("PicHandle", "ResObj")
 PolyHandle = OpaqueByValueType("PolyHandle", "ResObj")
 PixMapHandle = OpaqueByValueType("PixMapHandle", "ResObj")
@@ -101,8 +102,15 @@ class MyGRObjectDefinition(GlobalObjectDefinition):
        def outputGetattrHook(self):
                Output("""if ( strcmp(name, "device") == 0 )
                        return PyInt_FromLong((long)self->ob_itself->device);
-               if ( strcmp(name, "portBits") == 0 )
-                       return BMObj_New(&self->ob_itself->portBits);
+               if ( strcmp(name, "portBits") == 0 ) {
+                       CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
+                       
+                       if ( (itself_color->portVersion&0xc000) == 0xc000 )
+                               /* XXXX Do we need HLock() stuff here?? */
+                               return BMObj_New((BitMapPtr)*itself_color->portPixMap);
+                       else
+                               return BMObj_New(&self->ob_itself->portBits);
+               }
                if ( strcmp(name, "portRect") == 0 )
                        return Py_BuildValue("O&", PyMac_BuildRect, &self->ob_itself->portRect);
                /* XXXX Add more, as needed */
@@ -132,6 +140,10 @@ class MyBMObjectDefinition(GlobalObjectDefinition):
                if ( strcmp(name, "bounds") == 0 )
                        return Py_BuildValue("O&", PyMac_BuildRect, &self->ob_itself->bounds);
                /* XXXX Add more, as needed */
+               if ( strcmp(name, "bitmap_data") == 0 )
+                       return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(BitMap));
+               if ( strcmp(name, "pixmap_data") == 0 )
+                       return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(PixMap));
                """)
 
 # Create the generator groups and link them
@@ -195,6 +207,32 @@ f = ManualGenerator("BitMap", BitMap_body)
 f.docstring = lambda: """Take (string, int, Rect) argument and create BitMap"""
 module.add(f)
 
+#
+# And again, for turning a correctly-formatted structure into the object
+#
+RawBitMap_body = """
+BitMap *ptr;
+PyObject *source;
+
+if ( !PyArg_ParseTuple(_args, "O!", &PyString_Type, &source) )
+       return NULL;
+if ( PyString_Size(source) != sizeof(BitMap) && PyString_Size(source) != sizeof(PixMap) ) {
+       PyErr_BadArgument();
+       return NULL;
+}
+ptr = (BitMapPtr)PyString_AsString(source);
+if ( (_res = BMObj_New(ptr)) == NULL ) {
+       return NULL;
+}
+((BitMapObject *)_res)->referred_object = source;
+Py_INCREF(source);
+return _res;
+"""
+       
+f = ManualGenerator("RawBitMap", RawBitMap_body)
+f.docstring = lambda: """Take string BitMap and turn into BitMap object"""
+module.add(f)
+
 # generate output (open the output file as late as possible)
 SetOutputFileName(OUTPUTFILE)
 module.generate()
index 6a6533be0aafa67e8d82c0e76305bd6279504a3a..ffba461dd9aca56e34d63fd3d2556c2a8ffa6516 100644 (file)
@@ -14,8 +14,9 @@
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
index 4e8ed8f0c57643be77d03b2027fee0a0ca203263..1e3e9127ac5b8089783fd43100ce20e3cdb27d84 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Resources.h>
@@ -1333,7 +1342,7 @@ static PyMethodDef Res_methods[] = {
 
 
 /* Alternative version of ResObj_New, which returns None for null argument */
-PyObject *ResObj_OptNew(itself)
+PyObject *OptResObj_New(itself)
        Handle itself;
 {
        ResourceObject *it;
@@ -1344,6 +1353,23 @@ PyObject *ResObj_OptNew(itself)
        return ResObj_New(itself);
 }
 
+OptResObj_Convert(v, p_itself)
+       PyObject *v;
+       Handle *p_itself;
+{
+       if ( v == Py_None ) {
+               *p_itself = NULL;
+               return 1;
+       }
+       if (!ResObj_Check(v))
+       {
+               PyErr_SetString(PyExc_TypeError, "Resource required");
+               return 0;
+       }
+       *p_itself = ((ResourceObject *)v)->ob_itself;
+       return 1;
+}
+
 
 
 void initRes()
index fd4f4e631fbcf57985f1b062175e3786618498dd..8eb6bf4fb4e9e8791cb9e9658ec37e8e3deb7b0a 100644 (file)
@@ -32,7 +32,7 @@ includestuff = includestuff + """
 finalstuff = finalstuff + """
 
 /* Alternative version of ResObj_New, which returns None for null argument */
-PyObject *ResObj_OptNew(itself)
+PyObject *OptResObj_New(itself)
        Handle itself;
 {
        ResourceObject *it;
@@ -43,6 +43,23 @@ PyObject *ResObj_OptNew(itself)
        return ResObj_New(itself);
 }
 
+OptResObj_Convert(v, p_itself)
+       PyObject *v;
+       Handle *p_itself;
+{
+       if ( v == Py_None ) {
+               *p_itself = NULL;
+               return 1;
+       }
+       if (!ResObj_Check(v))
+       {
+               PyErr_SetString(PyExc_TypeError, "Resource required");
+               return 0;
+       }
+       *p_itself = ((ResourceObject *)v)->ob_itself;
+       return 1;
+}
+
 """
 
 initstuff = initstuff + """
index 1d91ec90d2d96c2079dae2d48a8b4aaaf6f69881..866ce75794cf742c94e5f65f6c1faccce29e4fc7 100644 (file)
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
+extern PyTypeObject Window_Type;
+#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
 
 extern PyObject *DlgObj_New(DialogPtr);
 extern int DlgObj_Convert(PyObject *, DialogPtr *);
@@ -31,6 +34,12 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Sound.h>
index 286ef34b128c7f73510d841ff907ffa7a694e151..afac85f32158c299e94315fae3e20fc63b1a69d3 100644 (file)
@@ -14,8 +14,9 @@
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);
@@ -36,6 +37,9 @@ extern int CtlObj_Convert(PyObject *, ControlHandle *);
 extern PyObject *GrafObj_New(GrafPtr);
 extern int GrafObj_Convert(PyObject *, GrafPtr *);
 
+extern PyObject *BMObj_New(BitMapPtr);
+extern int BMObj_Convert(PyObject *, BitMapPtr *);
+
 extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Windows.h>
index c3788b29d4b6bd7a0cc54356b3741f87b3a82b6d..0f21b3fcf629af9713b3f96c75197550dc1af0a2 100644 (file)
@@ -99,8 +99,9 @@ includestuff = """
 #include <Controls.h>
 
 extern PyObject *ResObj_New(Handle);
-extern PyObject *ResObj_OptNew(Handle);
 extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *OptResObj_New(Handle);
+extern int OptResObj_Convert(PyObject *, Handle *);
 
 extern PyObject *WinObj_New(WindowPtr);
 extern int WinObj_Convert(PyObject *, WindowPtr *);