Allow comment characters (#) to be escaped:
[python/dscho.git] / Mac / Modules / fm / Fmmodule.c
blob469e8d1733062a39ead6d86afcfa8c82a8d5a9d6
2 /* =========================== Module Fm ============================ */
4 #include "Python.h"
8 #define SystemSevenOrLater 1
10 #include "macglue.h"
11 #include <Memory.h>
12 #include <Dialogs.h>
13 #include <Menus.h>
14 #include <Controls.h>
16 extern PyObject *ResObj_New(Handle);
17 extern int ResObj_Convert(PyObject *, Handle *);
18 extern PyObject *OptResObj_New(Handle);
19 extern int OptResObj_Convert(PyObject *, Handle *);
21 extern PyObject *WinObj_New(WindowPtr);
22 extern int WinObj_Convert(PyObject *, WindowPtr *);
23 extern PyTypeObject Window_Type;
24 #define WinObj_Check(x) ((x)->ob_type == &Window_Type)
26 extern PyObject *DlgObj_New(DialogPtr);
27 extern int DlgObj_Convert(PyObject *, DialogPtr *);
28 extern PyTypeObject Dialog_Type;
29 #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
31 extern PyObject *MenuObj_New(MenuHandle);
32 extern int MenuObj_Convert(PyObject *, MenuHandle *);
34 extern PyObject *CtlObj_New(ControlHandle);
35 extern int CtlObj_Convert(PyObject *, ControlHandle *);
37 extern PyObject *GrafObj_New(GrafPtr);
38 extern int GrafObj_Convert(PyObject *, GrafPtr *);
40 extern PyObject *BMObj_New(BitMapPtr);
41 extern int BMObj_Convert(PyObject *, BitMapPtr *);
43 extern PyObject *WinObj_WhichWindow(WindowPtr);
45 #include <Fonts.h>
48 ** Parse/generate ComponentDescriptor records
50 PyObject *FMRec_New(itself)
51 FMetricRec *itself;
54 return Py_BuildValue("O&O&O&O&O&",
55 PyMac_BuildFixed, itself->ascent,
56 PyMac_BuildFixed, itself->descent,
57 PyMac_BuildFixed, itself->leading,
58 PyMac_BuildFixed, itself->widMax,
59 ResObj_New, itself->wTabHandle);
62 #if 0
63 /* Not needed... */
64 FMRec_Convert(v, p_itself)
65 PyObject *v;
66 FMetricRec *p_itself;
68 return PyArg_ParseTuple(v, "O&O&O&O&O&",
69 PyMac_GetFixed, &itself->ascent,
70 PyMac_GetFixed, &itself->descent,
71 PyMac_GetFixed, &itself->leading,
72 PyMac_GetFixed, &itself->widMax,
73 ResObj_Convert, &itself->wTabHandle);
75 #endif
78 static PyObject *Fm_Error;
80 static PyObject *Fm_InitFonts(_self, _args)
81 PyObject *_self;
82 PyObject *_args;
84 PyObject *_res = NULL;
85 if (!PyArg_ParseTuple(_args, ""))
86 return NULL;
87 InitFonts();
88 Py_INCREF(Py_None);
89 _res = Py_None;
90 return _res;
93 static PyObject *Fm_GetFontName(_self, _args)
94 PyObject *_self;
95 PyObject *_args;
97 PyObject *_res = NULL;
98 short familyID;
99 Str255 name;
100 if (!PyArg_ParseTuple(_args, "h",
101 &familyID))
102 return NULL;
103 GetFontName(familyID,
104 name);
105 _res = Py_BuildValue("O&",
106 PyMac_BuildStr255, name);
107 return _res;
110 static PyObject *Fm_GetFNum(_self, _args)
111 PyObject *_self;
112 PyObject *_args;
114 PyObject *_res = NULL;
115 Str255 name;
116 short familyID;
117 if (!PyArg_ParseTuple(_args, "O&",
118 PyMac_GetStr255, name))
119 return NULL;
120 GetFNum(name,
121 &familyID);
122 _res = Py_BuildValue("h",
123 familyID);
124 return _res;
127 static PyObject *Fm_RealFont(_self, _args)
128 PyObject *_self;
129 PyObject *_args;
131 PyObject *_res = NULL;
132 Boolean _rv;
133 short fontNum;
134 short size;
135 if (!PyArg_ParseTuple(_args, "hh",
136 &fontNum,
137 &size))
138 return NULL;
139 _rv = RealFont(fontNum,
140 size);
141 _res = Py_BuildValue("b",
142 _rv);
143 return _res;
146 static PyObject *Fm_SetFontLock(_self, _args)
147 PyObject *_self;
148 PyObject *_args;
150 PyObject *_res = NULL;
151 Boolean lockFlag;
152 if (!PyArg_ParseTuple(_args, "b",
153 &lockFlag))
154 return NULL;
155 SetFontLock(lockFlag);
156 Py_INCREF(Py_None);
157 _res = Py_None;
158 return _res;
161 static PyObject *Fm_SetFScaleDisable(_self, _args)
162 PyObject *_self;
163 PyObject *_args;
165 PyObject *_res = NULL;
166 Boolean fscaleDisable;
167 if (!PyArg_ParseTuple(_args, "b",
168 &fscaleDisable))
169 return NULL;
170 SetFScaleDisable(fscaleDisable);
171 Py_INCREF(Py_None);
172 _res = Py_None;
173 return _res;
176 static PyObject *Fm_FontMetrics(_self, _args)
177 PyObject *_self;
178 PyObject *_args;
180 PyObject *_res = NULL;
181 FMetricRec theMetrics;
182 if (!PyArg_ParseTuple(_args, ""))
183 return NULL;
184 FontMetrics(&theMetrics);
185 _res = Py_BuildValue("O&",
186 FMRec_New, &theMetrics);
187 return _res;
190 static PyObject *Fm_SetFractEnable(_self, _args)
191 PyObject *_self;
192 PyObject *_args;
194 PyObject *_res = NULL;
195 Boolean fractEnable;
196 if (!PyArg_ParseTuple(_args, "b",
197 &fractEnable))
198 return NULL;
199 SetFractEnable(fractEnable);
200 Py_INCREF(Py_None);
201 _res = Py_None;
202 return _res;
205 static PyObject *Fm_GetDefFontSize(_self, _args)
206 PyObject *_self;
207 PyObject *_args;
209 PyObject *_res = NULL;
210 short _rv;
211 if (!PyArg_ParseTuple(_args, ""))
212 return NULL;
213 _rv = GetDefFontSize();
214 _res = Py_BuildValue("h",
215 _rv);
216 return _res;
219 static PyObject *Fm_IsOutline(_self, _args)
220 PyObject *_self;
221 PyObject *_args;
223 PyObject *_res = NULL;
224 Boolean _rv;
225 Point numer;
226 Point denom;
227 if (!PyArg_ParseTuple(_args, "O&O&",
228 PyMac_GetPoint, &numer,
229 PyMac_GetPoint, &denom))
230 return NULL;
231 _rv = IsOutline(numer,
232 denom);
233 _res = Py_BuildValue("b",
234 _rv);
235 return _res;
238 static PyObject *Fm_SetOutlinePreferred(_self, _args)
239 PyObject *_self;
240 PyObject *_args;
242 PyObject *_res = NULL;
243 Boolean outlinePreferred;
244 if (!PyArg_ParseTuple(_args, "b",
245 &outlinePreferred))
246 return NULL;
247 SetOutlinePreferred(outlinePreferred);
248 Py_INCREF(Py_None);
249 _res = Py_None;
250 return _res;
253 static PyObject *Fm_GetOutlinePreferred(_self, _args)
254 PyObject *_self;
255 PyObject *_args;
257 PyObject *_res = NULL;
258 Boolean _rv;
259 if (!PyArg_ParseTuple(_args, ""))
260 return NULL;
261 _rv = GetOutlinePreferred();
262 _res = Py_BuildValue("b",
263 _rv);
264 return _res;
267 static PyObject *Fm_SetPreserveGlyph(_self, _args)
268 PyObject *_self;
269 PyObject *_args;
271 PyObject *_res = NULL;
272 Boolean preserveGlyph;
273 if (!PyArg_ParseTuple(_args, "b",
274 &preserveGlyph))
275 return NULL;
276 SetPreserveGlyph(preserveGlyph);
277 Py_INCREF(Py_None);
278 _res = Py_None;
279 return _res;
282 static PyObject *Fm_GetPreserveGlyph(_self, _args)
283 PyObject *_self;
284 PyObject *_args;
286 PyObject *_res = NULL;
287 Boolean _rv;
288 if (!PyArg_ParseTuple(_args, ""))
289 return NULL;
290 _rv = GetPreserveGlyph();
291 _res = Py_BuildValue("b",
292 _rv);
293 return _res;
296 static PyObject *Fm_FlushFonts(_self, _args)
297 PyObject *_self;
298 PyObject *_args;
300 PyObject *_res = NULL;
301 OSErr _err;
302 if (!PyArg_ParseTuple(_args, ""))
303 return NULL;
304 _err = FlushFonts();
305 if (_err != noErr) return PyMac_Error(_err);
306 Py_INCREF(Py_None);
307 _res = Py_None;
308 return _res;
311 static PyObject *Fm_GetSysFont(_self, _args)
312 PyObject *_self;
313 PyObject *_args;
315 PyObject *_res = NULL;
316 short _rv;
317 if (!PyArg_ParseTuple(_args, ""))
318 return NULL;
319 _rv = GetSysFont();
320 _res = Py_BuildValue("h",
321 _rv);
322 return _res;
325 static PyObject *Fm_GetAppFont(_self, _args)
326 PyObject *_self;
327 PyObject *_args;
329 PyObject *_res = NULL;
330 short _rv;
331 if (!PyArg_ParseTuple(_args, ""))
332 return NULL;
333 _rv = GetAppFont();
334 _res = Py_BuildValue("h",
335 _rv);
336 return _res;
339 static PyMethodDef Fm_methods[] = {
340 {"InitFonts", (PyCFunction)Fm_InitFonts, 1,
341 "() -> None"},
342 {"GetFontName", (PyCFunction)Fm_GetFontName, 1,
343 "(short familyID) -> (Str255 name)"},
344 {"GetFNum", (PyCFunction)Fm_GetFNum, 1,
345 "(Str255 name) -> (short familyID)"},
346 {"RealFont", (PyCFunction)Fm_RealFont, 1,
347 "(short fontNum, short size) -> (Boolean _rv)"},
348 {"SetFontLock", (PyCFunction)Fm_SetFontLock, 1,
349 "(Boolean lockFlag) -> None"},
350 {"SetFScaleDisable", (PyCFunction)Fm_SetFScaleDisable, 1,
351 "(Boolean fscaleDisable) -> None"},
352 {"FontMetrics", (PyCFunction)Fm_FontMetrics, 1,
353 "() -> (FMetricRec theMetrics)"},
354 {"SetFractEnable", (PyCFunction)Fm_SetFractEnable, 1,
355 "(Boolean fractEnable) -> None"},
356 {"GetDefFontSize", (PyCFunction)Fm_GetDefFontSize, 1,
357 "() -> (short _rv)"},
358 {"IsOutline", (PyCFunction)Fm_IsOutline, 1,
359 "(Point numer, Point denom) -> (Boolean _rv)"},
360 {"SetOutlinePreferred", (PyCFunction)Fm_SetOutlinePreferred, 1,
361 "(Boolean outlinePreferred) -> None"},
362 {"GetOutlinePreferred", (PyCFunction)Fm_GetOutlinePreferred, 1,
363 "() -> (Boolean _rv)"},
364 {"SetPreserveGlyph", (PyCFunction)Fm_SetPreserveGlyph, 1,
365 "(Boolean preserveGlyph) -> None"},
366 {"GetPreserveGlyph", (PyCFunction)Fm_GetPreserveGlyph, 1,
367 "() -> (Boolean _rv)"},
368 {"FlushFonts", (PyCFunction)Fm_FlushFonts, 1,
369 "() -> None"},
370 {"GetSysFont", (PyCFunction)Fm_GetSysFont, 1,
371 "() -> (short _rv)"},
372 {"GetAppFont", (PyCFunction)Fm_GetAppFont, 1,
373 "() -> (short _rv)"},
374 {NULL, NULL, 0}
380 void initFm()
382 PyObject *m;
383 PyObject *d;
388 m = Py_InitModule("Fm", Fm_methods);
389 d = PyModule_GetDict(m);
390 Fm_Error = PyMac_GetOSErrException();
391 if (Fm_Error == NULL ||
392 PyDict_SetItemString(d, "Error", Fm_Error) != 0)
393 Py_FatalError("can't initialize Fm.Error");
396 /* ========================= End module Fm ========================== */