@@ -74,6 +74,19 @@ QdRGB_Convert(v, p_itself)
7474 return 1 ;
7575}
7676
77+ /*
78+ ** Generate FontInfo records
79+ */
80+ static
81+ PyObject * QdFI_New (itself )
82+ FontInfo * itself ;
83+ {
84+
85+ return Py_BuildValue ("hhhh" , itself -> ascent , itself -> descent ,
86+ itself -> widMax , itself -> leading );
87+ }
88+
89+
7790
7891static PyObject * Qd_Error ;
7992
@@ -132,21 +145,70 @@ static PyObject *GrafObj_getattr(self, name)
132145 GrafPortObject * self ;
133146 char * name ;
134147{
135- if ( strcmp (name , "device" ) == 0 )
136- return PyInt_FromLong ((long )self -> ob_itself -> device );
137- if ( strcmp (name , "portBits" ) == 0 ) {
138- CGrafPtr itself_color = (CGrafPtr )self -> ob_itself ;
148+
149+ { CGrafPtr itself_color = (CGrafPtr )self -> ob_itself ;
150+
151+ if ( strcmp (name , "data" ) == 0 )
152+ return PyString_FromStringAndSize ((char * )self -> ob_itself , sizeof (GrafPort ));
153+
154+ if ( (itself_color -> portVersion & 0xc000 ) == 0xc000 ) {
155+ /* Color-only attributes */
139156
140- if ( (itself_color -> portVersion & 0xc000 ) == 0xc000 )
141- /* XXXX Do we need HLock() stuff here?? */
142- return BMObj_New ((BitMapPtr )* itself_color -> portPixMap );
143- else
144- return BMObj_New (& self -> ob_itself -> portBits );
157+ if ( strcmp (name , "portBits" ) == 0 )
158+ /* XXXX Do we need HLock() stuff here?? */
159+ return BMObj_New ((BitMapPtr )* itself_color -> portPixMap );
160+ if ( strcmp (name , "grafVars" ) == 0 )
161+ return Py_BuildValue ("O&" , ResObj_New , (Handle )itself_color -> visRgn );
162+ if ( strcmp (name , "chExtra" ) == 0 )
163+ return Py_BuildValue ("h" , itself_color -> chExtra );
164+ if ( strcmp (name , "pnLocHFrac" ) == 0 )
165+ return Py_BuildValue ("h" , itself_color -> pnLocHFrac );
166+ } else {
167+ /* Mono-only attributes */
168+ if ( strcmp (name , "portBits" ) == 0 )
169+ return BMObj_New (& self -> ob_itself -> portBits );
170+ }
171+ /*
172+ ** Accessible for both color/mono windows.
173+ ** portVersion is really color-only, but we put it here
174+ ** for convenience
175+ */
176+ if ( strcmp (name , "portVersion" ) == 0 )
177+ return Py_BuildValue ("h" , itself_color -> portVersion );
178+ if ( strcmp (name , "device" ) == 0 )
179+ return PyInt_FromLong ((long )self -> ob_itself -> device );
180+ if ( strcmp (name , "portRect" ) == 0 )
181+ return Py_BuildValue ("O&" , PyMac_BuildRect , & self -> ob_itself -> portRect );
182+ if ( strcmp (name , "visRgn" ) == 0 )
183+ return Py_BuildValue ("O&" , ResObj_New , (Handle )self -> ob_itself -> visRgn );
184+ if ( strcmp (name , "clipRgn" ) == 0 )
185+ return Py_BuildValue ("O&" , ResObj_New , (Handle )self -> ob_itself -> clipRgn );
186+ if ( strcmp (name , "bkPat" ) == 0 )
187+ return Py_BuildValue ("s#" , (char * )& self -> ob_itself -> bkPat , sizeof (Pattern ));
188+ if ( strcmp (name , "fillPat" ) == 0 )
189+ return Py_BuildValue ("s#" , (char * )& self -> ob_itself -> fillPat , sizeof (Pattern ));
190+ if ( strcmp (name , "pnLoc" ) == 0 )
191+ return Py_BuildValue ("O&" , PyMac_BuildPoint , self -> ob_itself -> pnLoc );
192+ if ( strcmp (name , "pnSize" ) == 0 )
193+ return Py_BuildValue ("O&" , PyMac_BuildPoint , self -> ob_itself -> pnSize );
194+ if ( strcmp (name , "pnMode" ) == 0 )
195+ return Py_BuildValue ("h" , self -> ob_itself -> pnMode );
196+ if ( strcmp (name , "pnPat" ) == 0 )
197+ return Py_BuildValue ("s#" , (char * )& self -> ob_itself -> pnPat , sizeof (Pattern ));
198+ if ( strcmp (name , "pnVis" ) == 0 )
199+ return Py_BuildValue ("h" , self -> ob_itself -> pnVis );
200+ if ( strcmp (name , "txFont" ) == 0 )
201+ return Py_BuildValue ("h" , self -> ob_itself -> txFont );
202+ if ( strcmp (name , "txFace" ) == 0 )
203+ return Py_BuildValue ("h" , (short )self -> ob_itself -> txFace );
204+ if ( strcmp (name , "txMode" ) == 0 )
205+ return Py_BuildValue ("h" , self -> ob_itself -> txMode );
206+ if ( strcmp (name , "txSize" ) == 0 )
207+ return Py_BuildValue ("h" , self -> ob_itself -> txSize );
208+ if ( strcmp (name , "spExtra" ) == 0 )
209+ return Py_BuildValue ("O&" , PyMac_BuildFixed , self -> ob_itself -> spExtra );
210+ /* XXXX Add more, as needed */
145211 }
146- if ( strcmp (name , "portRect" ) == 0 )
147- return Py_BuildValue ("O&" , PyMac_BuildRect , & self -> ob_itself -> portRect );
148- /* XXXX Add more, as needed */
149-
150212 return Py_FindMethodInChain (& GrafObj_chain , (PyObject * )self , name );
151213}
152214
@@ -3323,6 +3385,20 @@ static PyObject *Qd_TextWidth(_self, _args)
33233385 return _res ;
33243386}
33253387
3388+ static PyObject * Qd_GetFontInfo (_self , _args )
3389+ PyObject * _self ;
3390+ PyObject * _args ;
3391+ {
3392+ PyObject * _res = NULL ;
3393+ FontInfo info ;
3394+ if (!PyArg_ParseTuple (_args , "" ))
3395+ return NULL ;
3396+ GetFontInfo (& info );
3397+ _res = Py_BuildValue ("O&" ,
3398+ QdFI_New , & info );
3399+ return _res ;
3400+ }
3401+
33263402static PyObject * Qd_CharExtra (_self , _args )
33273403 PyObject * _self ;
33283404 PyObject * _args ;
@@ -3738,6 +3814,8 @@ static PyMethodDef Qd_methods[] = {
37383814 "(Str255 s) -> (short _rv)" },
37393815 {"TextWidth" , (PyCFunction )Qd_TextWidth , 1 ,
37403816 "(Buffer textBuf, short firstByte, short byteCount) -> (short _rv)" },
3817+ {"GetFontInfo" , (PyCFunction )Qd_GetFontInfo , 1 ,
3818+ "() -> (FontInfo info)" },
37413819 {"CharExtra" , (PyCFunction )Qd_CharExtra , 1 ,
37423820 "(Fixed extra) -> None" },
37433821 {"BitMap" , (PyCFunction )Qd_BitMap , 1 ,
0 commit comments