PageRenderTime 48ms CodeModel.GetById 19ms app.highlight 24ms RepoModel.GetById 1ms app.codeStats 0ms

/Mac/Modules/fm/_Fmmodule.c

http://unladen-swallow.googlecode.com/
C | 368 lines | 321 code | 40 blank | 7 comment | 20 complexity | 37d277ae90ab4c27a7c2c2e50e9ae3e9 MD5 | raw file
  1
  2/* =========================== Module _Fm =========================== */
  3
  4#include "Python.h"
  5
  6#ifndef __LP64__
  7
  8
  9#include "pymactoolbox.h"
 10
 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"); \
 15        return NULL; \
 16    }} while(0)
 17
 18
 19#include <Carbon/Carbon.h>
 20
 21
 22/*
 23** Parse/generate ComponentDescriptor records
 24*/
 25static PyObject *
 26FMRec_New(FMetricRec *itself)
 27{
 28
 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);
 35}
 36
 37#if 0
 38/* Not needed... */
 39static int
 40FMRec_Convert(PyObject *v, FMetricRec *p_itself)
 41{
 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);
 48}
 49#endif
 50
 51
 52static PyObject *Fm_Error;
 53
 54static PyObject *Fm_GetFontName(PyObject *_self, PyObject *_args)
 55{
 56	PyObject *_res = NULL;
 57	short familyID;
 58	Str255 name;
 59#ifndef GetFontName
 60	PyMac_PRECHECK(GetFontName);
 61#endif
 62	if (!PyArg_ParseTuple(_args, "h",
 63	                      &familyID))
 64		return NULL;
 65	GetFontName(familyID,
 66	            name);
 67	_res = Py_BuildValue("O&",
 68	                     PyMac_BuildStr255, name);
 69	return _res;
 70}
 71
 72static PyObject *Fm_GetFNum(PyObject *_self, PyObject *_args)
 73{
 74	PyObject *_res = NULL;
 75	Str255 name;
 76	short familyID;
 77#ifndef GetFNum
 78	PyMac_PRECHECK(GetFNum);
 79#endif
 80	if (!PyArg_ParseTuple(_args, "O&",
 81	                      PyMac_GetStr255, name))
 82		return NULL;
 83	GetFNum(name,
 84	        &familyID);
 85	_res = Py_BuildValue("h",
 86	                     familyID);
 87	return _res;
 88}
 89
 90static PyObject *Fm_RealFont(PyObject *_self, PyObject *_args)
 91{
 92	PyObject *_res = NULL;
 93	Boolean _rv;
 94	short fontNum;
 95	short size;
 96#ifndef RealFont
 97	PyMac_PRECHECK(RealFont);
 98#endif
 99	if (!PyArg_ParseTuple(_args, "hh",
100	                      &fontNum,
101	                      &size))
102		return NULL;
103	_rv = RealFont(fontNum,
104	               size);
105	_res = Py_BuildValue("b",
106	                     _rv);
107	return _res;
108}
109
110static PyObject *Fm_SetFScaleDisable(PyObject *_self, PyObject *_args)
111{
112	PyObject *_res = NULL;
113	Boolean fscaleDisable;
114#ifndef SetFScaleDisable
115	PyMac_PRECHECK(SetFScaleDisable);
116#endif
117	if (!PyArg_ParseTuple(_args, "b",
118	                      &fscaleDisable))
119		return NULL;
120	SetFScaleDisable(fscaleDisable);
121	Py_INCREF(Py_None);
122	_res = Py_None;
123	return _res;
124}
125
126static PyObject *Fm_FontMetrics(PyObject *_self, PyObject *_args)
127{
128	PyObject *_res = NULL;
129	FMetricRec theMetrics;
130#ifndef FontMetrics
131	PyMac_PRECHECK(FontMetrics);
132#endif
133	if (!PyArg_ParseTuple(_args, ""))
134		return NULL;
135	FontMetrics(&theMetrics);
136	_res = Py_BuildValue("O&",
137	                     FMRec_New, &theMetrics);
138	return _res;
139}
140
141static PyObject *Fm_SetFractEnable(PyObject *_self, PyObject *_args)
142{
143	PyObject *_res = NULL;
144	Boolean fractEnable;
145#ifndef SetFractEnable
146	PyMac_PRECHECK(SetFractEnable);
147#endif
148	if (!PyArg_ParseTuple(_args, "b",
149	                      &fractEnable))
150		return NULL;
151	SetFractEnable(fractEnable);
152	Py_INCREF(Py_None);
153	_res = Py_None;
154	return _res;
155}
156
157static PyObject *Fm_GetDefFontSize(PyObject *_self, PyObject *_args)
158{
159	PyObject *_res = NULL;
160	short _rv;
161#ifndef GetDefFontSize
162	PyMac_PRECHECK(GetDefFontSize);
163#endif
164	if (!PyArg_ParseTuple(_args, ""))
165		return NULL;
166	_rv = GetDefFontSize();
167	_res = Py_BuildValue("h",
168	                     _rv);
169	return _res;
170}
171
172static PyObject *Fm_IsOutline(PyObject *_self, PyObject *_args)
173{
174	PyObject *_res = NULL;
175	Boolean _rv;
176	Point numer;
177	Point denom;
178#ifndef IsOutline
179	PyMac_PRECHECK(IsOutline);
180#endif
181	if (!PyArg_ParseTuple(_args, "O&O&",
182	                      PyMac_GetPoint, &numer,
183	                      PyMac_GetPoint, &denom))
184		return NULL;
185	_rv = IsOutline(numer,
186	                denom);
187	_res = Py_BuildValue("b",
188	                     _rv);
189	return _res;
190}
191
192static PyObject *Fm_SetOutlinePreferred(PyObject *_self, PyObject *_args)
193{
194	PyObject *_res = NULL;
195	Boolean outlinePreferred;
196#ifndef SetOutlinePreferred
197	PyMac_PRECHECK(SetOutlinePreferred);
198#endif
199	if (!PyArg_ParseTuple(_args, "b",
200	                      &outlinePreferred))
201		return NULL;
202	SetOutlinePreferred(outlinePreferred);
203	Py_INCREF(Py_None);
204	_res = Py_None;
205	return _res;
206}
207
208static PyObject *Fm_GetOutlinePreferred(PyObject *_self, PyObject *_args)
209{
210	PyObject *_res = NULL;
211	Boolean _rv;
212#ifndef GetOutlinePreferred
213	PyMac_PRECHECK(GetOutlinePreferred);
214#endif
215	if (!PyArg_ParseTuple(_args, ""))
216		return NULL;
217	_rv = GetOutlinePreferred();
218	_res = Py_BuildValue("b",
219	                     _rv);
220	return _res;
221}
222
223static PyObject *Fm_SetPreserveGlyph(PyObject *_self, PyObject *_args)
224{
225	PyObject *_res = NULL;
226	Boolean preserveGlyph;
227#ifndef SetPreserveGlyph
228	PyMac_PRECHECK(SetPreserveGlyph);
229#endif
230	if (!PyArg_ParseTuple(_args, "b",
231	                      &preserveGlyph))
232		return NULL;
233	SetPreserveGlyph(preserveGlyph);
234	Py_INCREF(Py_None);
235	_res = Py_None;
236	return _res;
237}
238
239static PyObject *Fm_GetPreserveGlyph(PyObject *_self, PyObject *_args)
240{
241	PyObject *_res = NULL;
242	Boolean _rv;
243#ifndef GetPreserveGlyph
244	PyMac_PRECHECK(GetPreserveGlyph);
245#endif
246	if (!PyArg_ParseTuple(_args, ""))
247		return NULL;
248	_rv = GetPreserveGlyph();
249	_res = Py_BuildValue("b",
250	                     _rv);
251	return _res;
252}
253
254static PyObject *Fm_GetSysFont(PyObject *_self, PyObject *_args)
255{
256	PyObject *_res = NULL;
257	short _rv;
258#ifndef GetSysFont
259	PyMac_PRECHECK(GetSysFont);
260#endif
261	if (!PyArg_ParseTuple(_args, ""))
262		return NULL;
263	_rv = GetSysFont();
264	_res = Py_BuildValue("h",
265	                     _rv);
266	return _res;
267}
268
269static PyObject *Fm_GetAppFont(PyObject *_self, PyObject *_args)
270{
271	PyObject *_res = NULL;
272	short _rv;
273#ifndef GetAppFont
274	PyMac_PRECHECK(GetAppFont);
275#endif
276	if (!PyArg_ParseTuple(_args, ""))
277		return NULL;
278	_rv = GetAppFont();
279	_res = Py_BuildValue("h",
280	                     _rv);
281	return _res;
282}
283
284static PyObject *Fm_QDTextBounds(PyObject *_self, PyObject *_args)
285{
286	PyObject *_res = NULL;
287	char *inText__in__;
288	int inText__len__;
289	int inText__in_len__;
290	Rect bounds;
291#ifndef QDTextBounds
292	PyMac_PRECHECK(QDTextBounds);
293#endif
294	if (!PyArg_ParseTuple(_args, "s#",
295	                      &inText__in__, &inText__in_len__))
296		return NULL;
297	inText__len__ = inText__in_len__;
298	QDTextBounds(inText__len__, inText__in__,
299	             &bounds);
300	_res = Py_BuildValue("O&",
301	                     PyMac_BuildRect, &bounds);
302	return _res;
303}
304
305static 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)")},
336	{NULL, NULL, 0}
337};
338
339#else  /* __LP64__ */
340
341static PyMethodDef Fm_methods[] = {
342	{NULL, NULL, 0}
343};
344
345#endif  /* __LP64__ */
346
347void init_Fm(void)
348{
349	PyObject *m;
350#ifndef __LP64__
351	PyObject *d;
352#endif  /* __LP64__ */
353
354
355
356
357	m = Py_InitModule("_Fm", Fm_methods);
358#ifndef __LP64__
359	d = PyModule_GetDict(m);
360	Fm_Error = PyMac_GetOSErrException();
361	if (Fm_Error == NULL ||
362	    PyDict_SetItemString(d, "Error", Fm_Error) != 0)
363		return;
364#endif  /* __LP64__ */
365}
366
367/* ========================= End module _Fm ========================= */
368