2 /* =========================== Module _Fm =========================== */
9 #include "pymactoolbox.h"
11 /* Macro to test whether a weak-loaded CFM function exists */
12 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
13 PyErr_SetString(PyExc_NotImplementedError, \
14 "Not available in this shared library/OS version"); \
19 #include <Carbon/Carbon.h>
23 ** Parse/generate ComponentDescriptor records
26 FMRec_New(FMetricRec
*itself
)
29 return Py_BuildValue("O&O&O&O&O&",
30 PyMac_BuildFixed
, itself
->ascent
,
31 PyMac_BuildFixed
, itself
->descent
,
32 PyMac_BuildFixed
, itself
->leading
,
33 PyMac_BuildFixed
, itself
->widMax
,
34 ResObj_New
, itself
->wTabHandle
);
40 FMRec_Convert(PyObject
*v
, FMetricRec
*p_itself
)
42 return PyArg_ParseTuple(v
, "O&O&O&O&O&",
43 PyMac_GetFixed
, &itself
->ascent
,
44 PyMac_GetFixed
, &itself
->descent
,
45 PyMac_GetFixed
, &itself
->leading
,
46 PyMac_GetFixed
, &itself
->widMax
,
47 ResObj_Convert
, &itself
->wTabHandle
);
52 static PyObject
*Fm_Error
;
54 static PyObject
*Fm_GetFontName(PyObject
*_self
, PyObject
*_args
)
56 PyObject
*_res
= NULL
;
60 PyMac_PRECHECK(GetFontName
);
62 if (!PyArg_ParseTuple(_args
, "h",
67 _res
= Py_BuildValue("O&",
68 PyMac_BuildStr255
, name
);
72 static PyObject
*Fm_GetFNum(PyObject
*_self
, PyObject
*_args
)
74 PyObject
*_res
= NULL
;
78 PyMac_PRECHECK(GetFNum
);
80 if (!PyArg_ParseTuple(_args
, "O&",
81 PyMac_GetStr255
, name
))
85 _res
= Py_BuildValue("h",
90 static PyObject
*Fm_RealFont(PyObject
*_self
, PyObject
*_args
)
92 PyObject
*_res
= NULL
;
97 PyMac_PRECHECK(RealFont
);
99 if (!PyArg_ParseTuple(_args
, "hh",
103 _rv
= RealFont(fontNum
,
105 _res
= Py_BuildValue("b",
110 static PyObject
*Fm_SetFScaleDisable(PyObject
*_self
, PyObject
*_args
)
112 PyObject
*_res
= NULL
;
113 Boolean fscaleDisable
;
114 #ifndef SetFScaleDisable
115 PyMac_PRECHECK(SetFScaleDisable
);
117 if (!PyArg_ParseTuple(_args
, "b",
120 SetFScaleDisable(fscaleDisable
);
126 static PyObject
*Fm_FontMetrics(PyObject
*_self
, PyObject
*_args
)
128 PyObject
*_res
= NULL
;
129 FMetricRec theMetrics
;
131 PyMac_PRECHECK(FontMetrics
);
133 if (!PyArg_ParseTuple(_args
, ""))
135 FontMetrics(&theMetrics
);
136 _res
= Py_BuildValue("O&",
137 FMRec_New
, &theMetrics
);
141 static PyObject
*Fm_SetFractEnable(PyObject
*_self
, PyObject
*_args
)
143 PyObject
*_res
= NULL
;
145 #ifndef SetFractEnable
146 PyMac_PRECHECK(SetFractEnable
);
148 if (!PyArg_ParseTuple(_args
, "b",
151 SetFractEnable(fractEnable
);
157 static PyObject
*Fm_GetDefFontSize(PyObject
*_self
, PyObject
*_args
)
159 PyObject
*_res
= NULL
;
161 #ifndef GetDefFontSize
162 PyMac_PRECHECK(GetDefFontSize
);
164 if (!PyArg_ParseTuple(_args
, ""))
166 _rv
= GetDefFontSize();
167 _res
= Py_BuildValue("h",
172 static PyObject
*Fm_IsOutline(PyObject
*_self
, PyObject
*_args
)
174 PyObject
*_res
= NULL
;
179 PyMac_PRECHECK(IsOutline
);
181 if (!PyArg_ParseTuple(_args
, "O&O&",
182 PyMac_GetPoint
, &numer
,
183 PyMac_GetPoint
, &denom
))
185 _rv
= IsOutline(numer
,
187 _res
= Py_BuildValue("b",
192 static PyObject
*Fm_SetOutlinePreferred(PyObject
*_self
, PyObject
*_args
)
194 PyObject
*_res
= NULL
;
195 Boolean outlinePreferred
;
196 #ifndef SetOutlinePreferred
197 PyMac_PRECHECK(SetOutlinePreferred
);
199 if (!PyArg_ParseTuple(_args
, "b",
202 SetOutlinePreferred(outlinePreferred
);
208 static PyObject
*Fm_GetOutlinePreferred(PyObject
*_self
, PyObject
*_args
)
210 PyObject
*_res
= NULL
;
212 #ifndef GetOutlinePreferred
213 PyMac_PRECHECK(GetOutlinePreferred
);
215 if (!PyArg_ParseTuple(_args
, ""))
217 _rv
= GetOutlinePreferred();
218 _res
= Py_BuildValue("b",
223 static PyObject
*Fm_SetPreserveGlyph(PyObject
*_self
, PyObject
*_args
)
225 PyObject
*_res
= NULL
;
226 Boolean preserveGlyph
;
227 #ifndef SetPreserveGlyph
228 PyMac_PRECHECK(SetPreserveGlyph
);
230 if (!PyArg_ParseTuple(_args
, "b",
233 SetPreserveGlyph(preserveGlyph
);
239 static PyObject
*Fm_GetPreserveGlyph(PyObject
*_self
, PyObject
*_args
)
241 PyObject
*_res
= NULL
;
243 #ifndef GetPreserveGlyph
244 PyMac_PRECHECK(GetPreserveGlyph
);
246 if (!PyArg_ParseTuple(_args
, ""))
248 _rv
= GetPreserveGlyph();
249 _res
= Py_BuildValue("b",
254 static PyObject
*Fm_GetSysFont(PyObject
*_self
, PyObject
*_args
)
256 PyObject
*_res
= NULL
;
259 PyMac_PRECHECK(GetSysFont
);
261 if (!PyArg_ParseTuple(_args
, ""))
264 _res
= Py_BuildValue("h",
269 static PyObject
*Fm_GetAppFont(PyObject
*_self
, PyObject
*_args
)
271 PyObject
*_res
= NULL
;
274 PyMac_PRECHECK(GetAppFont
);
276 if (!PyArg_ParseTuple(_args
, ""))
279 _res
= Py_BuildValue("h",
284 static PyObject
*Fm_QDTextBounds(PyObject
*_self
, PyObject
*_args
)
286 PyObject
*_res
= NULL
;
289 int inText__in_len__
;
292 PyMac_PRECHECK(QDTextBounds
);
294 if (!PyArg_ParseTuple(_args
, "s#",
295 &inText__in__
, &inText__in_len__
))
297 inText__len__
= inText__in_len__
;
298 QDTextBounds(inText__len__
, inText__in__
,
300 _res
= Py_BuildValue("O&",
301 PyMac_BuildRect
, &bounds
);
305 static PyMethodDef Fm_methods
[] = {
306 {"GetFontName", (PyCFunction
)Fm_GetFontName
, 1,
307 PyDoc_STR("(short familyID) -> (Str255 name)")},
308 {"GetFNum", (PyCFunction
)Fm_GetFNum
, 1,
309 PyDoc_STR("(Str255 name) -> (short familyID)")},
310 {"RealFont", (PyCFunction
)Fm_RealFont
, 1,
311 PyDoc_STR("(short fontNum, short size) -> (Boolean _rv)")},
312 {"SetFScaleDisable", (PyCFunction
)Fm_SetFScaleDisable
, 1,
313 PyDoc_STR("(Boolean fscaleDisable) -> None")},
314 {"FontMetrics", (PyCFunction
)Fm_FontMetrics
, 1,
315 PyDoc_STR("() -> (FMetricRec theMetrics)")},
316 {"SetFractEnable", (PyCFunction
)Fm_SetFractEnable
, 1,
317 PyDoc_STR("(Boolean fractEnable) -> None")},
318 {"GetDefFontSize", (PyCFunction
)Fm_GetDefFontSize
, 1,
319 PyDoc_STR("() -> (short _rv)")},
320 {"IsOutline", (PyCFunction
)Fm_IsOutline
, 1,
321 PyDoc_STR("(Point numer, Point denom) -> (Boolean _rv)")},
322 {"SetOutlinePreferred", (PyCFunction
)Fm_SetOutlinePreferred
, 1,
323 PyDoc_STR("(Boolean outlinePreferred) -> None")},
324 {"GetOutlinePreferred", (PyCFunction
)Fm_GetOutlinePreferred
, 1,
325 PyDoc_STR("() -> (Boolean _rv)")},
326 {"SetPreserveGlyph", (PyCFunction
)Fm_SetPreserveGlyph
, 1,
327 PyDoc_STR("(Boolean preserveGlyph) -> None")},
328 {"GetPreserveGlyph", (PyCFunction
)Fm_GetPreserveGlyph
, 1,
329 PyDoc_STR("() -> (Boolean _rv)")},
330 {"GetSysFont", (PyCFunction
)Fm_GetSysFont
, 1,
331 PyDoc_STR("() -> (short _rv)")},
332 {"GetAppFont", (PyCFunction
)Fm_GetAppFont
, 1,
333 PyDoc_STR("() -> (short _rv)")},
334 {"QDTextBounds", (PyCFunction
)Fm_QDTextBounds
, 1,
335 PyDoc_STR("(Buffer inText) -> (Rect bounds)")},
341 static PyMethodDef Fm_methods
[] = {
345 #endif /* __LP64__ */
352 #endif /* __LP64__ */
357 m
= Py_InitModule("_Fm", Fm_methods
);
359 d
= PyModule_GetDict(m
);
360 Fm_Error
= PyMac_GetOSErrException();
361 if (Fm_Error
== NULL
||
362 PyDict_SetItemString(d
, "Error", Fm_Error
) != 0)
364 #endif /* __LP64__ */
367 /* ========================= End module _Fm ========================= */