2 /* =========================== Module App =========================== */
8 #define SystemSevenOrLater 1
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 <Appearance.h>
47 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
49 static PyObject
*App_Error
;
51 static PyObject
*App_RegisterAppearanceClient(_self
, _args
)
55 PyObject
*_res
= NULL
;
57 if (!PyArg_ParseTuple(_args
, ""))
59 _err
= RegisterAppearanceClient();
60 if (_err
!= noErr
) return PyMac_Error(_err
);
66 static PyObject
*App_UnregisterAppearanceClient(_self
, _args
)
70 PyObject
*_res
= NULL
;
72 if (!PyArg_ParseTuple(_args
, ""))
74 _err
= UnregisterAppearanceClient();
75 if (_err
!= noErr
) return PyMac_Error(_err
);
81 static PyObject
*App_SetThemePen(_self
, _args
)
85 PyObject
*_res
= NULL
;
89 Boolean inIsColorDevice
;
90 if (!PyArg_ParseTuple(_args
, "hhb",
95 _err
= SetThemePen(inBrush
,
98 if (_err
!= noErr
) return PyMac_Error(_err
);
104 static PyObject
*App_SetThemeBackground(_self
, _args
)
108 PyObject
*_res
= NULL
;
112 Boolean inIsColorDevice
;
113 if (!PyArg_ParseTuple(_args
, "hhb",
118 _err
= SetThemeBackground(inBrush
,
121 if (_err
!= noErr
) return PyMac_Error(_err
);
127 static PyObject
*App_SetThemeTextColor(_self
, _args
)
131 PyObject
*_res
= NULL
;
133 ThemeTextColor inColor
;
135 Boolean inIsColorDevice
;
136 if (!PyArg_ParseTuple(_args
, "hhb",
141 _err
= SetThemeTextColor(inColor
,
144 if (_err
!= noErr
) return PyMac_Error(_err
);
150 static PyObject
*App_SetThemeWindowBackground(_self
, _args
)
154 PyObject
*_res
= NULL
;
159 if (!PyArg_ParseTuple(_args
, "O&hb",
160 WinObj_Convert
, &inWindow
,
164 _err
= SetThemeWindowBackground(inWindow
,
167 if (_err
!= noErr
) return PyMac_Error(_err
);
173 static PyObject
*App_DrawThemeWindowHeader(_self
, _args
)
177 PyObject
*_res
= NULL
;
180 ThemeDrawState inState
;
181 if (!PyArg_ParseTuple(_args
, "O&l",
182 PyMac_GetRect
, &inRect
,
185 _err
= DrawThemeWindowHeader(&inRect
,
187 if (_err
!= noErr
) return PyMac_Error(_err
);
193 static PyObject
*App_DrawThemeWindowListViewHeader(_self
, _args
)
197 PyObject
*_res
= NULL
;
200 ThemeDrawState inState
;
201 if (!PyArg_ParseTuple(_args
, "O&l",
202 PyMac_GetRect
, &inRect
,
205 _err
= DrawThemeWindowListViewHeader(&inRect
,
207 if (_err
!= noErr
) return PyMac_Error(_err
);
213 static PyObject
*App_DrawThemePlacard(_self
, _args
)
217 PyObject
*_res
= NULL
;
220 ThemeDrawState inState
;
221 if (!PyArg_ParseTuple(_args
, "O&l",
222 PyMac_GetRect
, &inRect
,
225 _err
= DrawThemePlacard(&inRect
,
227 if (_err
!= noErr
) return PyMac_Error(_err
);
233 static PyObject
*App_DrawThemeEditTextFrame(_self
, _args
)
237 PyObject
*_res
= NULL
;
240 ThemeDrawState inState
;
241 if (!PyArg_ParseTuple(_args
, "O&l",
242 PyMac_GetRect
, &inRect
,
245 _err
= DrawThemeEditTextFrame(&inRect
,
247 if (_err
!= noErr
) return PyMac_Error(_err
);
253 static PyObject
*App_DrawThemeListBoxFrame(_self
, _args
)
257 PyObject
*_res
= NULL
;
260 ThemeDrawState inState
;
261 if (!PyArg_ParseTuple(_args
, "O&l",
262 PyMac_GetRect
, &inRect
,
265 _err
= DrawThemeListBoxFrame(&inRect
,
267 if (_err
!= noErr
) return PyMac_Error(_err
);
273 static PyObject
*App_DrawThemeFocusRect(_self
, _args
)
277 PyObject
*_res
= NULL
;
281 if (!PyArg_ParseTuple(_args
, "O&b",
282 PyMac_GetRect
, &inRect
,
285 _err
= DrawThemeFocusRect(&inRect
,
287 if (_err
!= noErr
) return PyMac_Error(_err
);
293 static PyObject
*App_DrawThemePrimaryGroup(_self
, _args
)
297 PyObject
*_res
= NULL
;
300 ThemeDrawState inState
;
301 if (!PyArg_ParseTuple(_args
, "O&l",
302 PyMac_GetRect
, &inRect
,
305 _err
= DrawThemePrimaryGroup(&inRect
,
307 if (_err
!= noErr
) return PyMac_Error(_err
);
313 static PyObject
*App_DrawThemeSecondaryGroup(_self
, _args
)
317 PyObject
*_res
= NULL
;
320 ThemeDrawState inState
;
321 if (!PyArg_ParseTuple(_args
, "O&l",
322 PyMac_GetRect
, &inRect
,
325 _err
= DrawThemeSecondaryGroup(&inRect
,
327 if (_err
!= noErr
) return PyMac_Error(_err
);
333 static PyObject
*App_DrawThemeSeparator(_self
, _args
)
337 PyObject
*_res
= NULL
;
340 ThemeDrawState inState
;
341 if (!PyArg_ParseTuple(_args
, "O&l",
342 PyMac_GetRect
, &inRect
,
345 _err
= DrawThemeSeparator(&inRect
,
347 if (_err
!= noErr
) return PyMac_Error(_err
);
353 static PyObject
*App_DrawThemeModelessDialogFrame(_self
, _args
)
357 PyObject
*_res
= NULL
;
360 ThemeDrawState inState
;
361 if (!PyArg_ParseTuple(_args
, "O&l",
362 PyMac_GetRect
, &inRect
,
365 _err
= DrawThemeModelessDialogFrame(&inRect
,
367 if (_err
!= noErr
) return PyMac_Error(_err
);
373 static PyObject
*App_DrawThemeGenericWell(_self
, _args
)
377 PyObject
*_res
= NULL
;
380 ThemeDrawState inState
;
381 Boolean inFillCenter
;
382 if (!PyArg_ParseTuple(_args
, "O&lb",
383 PyMac_GetRect
, &inRect
,
387 _err
= DrawThemeGenericWell(&inRect
,
390 if (_err
!= noErr
) return PyMac_Error(_err
);
396 static PyObject
*App_DrawThemeFocusRegion(_self
, _args
)
400 PyObject
*_res
= NULL
;
403 if (!PyArg_ParseTuple(_args
, "b",
406 _err
= DrawThemeFocusRegion((RgnHandle
)0,
408 if (_err
!= noErr
) return PyMac_Error(_err
);
414 static PyObject
*App_IsThemeInColor(_self
, _args
)
418 PyObject
*_res
= NULL
;
421 Boolean inIsColorDevice
;
422 if (!PyArg_ParseTuple(_args
, "hb",
426 _rv
= IsThemeInColor(inDepth
,
428 _res
= Py_BuildValue("b",
433 static PyObject
*App_GetThemeAccentColors(_self
, _args
)
437 PyObject
*_res
= NULL
;
439 CTabHandle outColors
;
440 if (!PyArg_ParseTuple(_args
, ""))
442 _err
= GetThemeAccentColors(&outColors
);
443 if (_err
!= noErr
) return PyMac_Error(_err
);
444 _res
= Py_BuildValue("O&",
445 ResObj_New
, outColors
);
449 static PyObject
*App_DrawThemeMenuBarBackground(_self
, _args
)
453 PyObject
*_res
= NULL
;
456 ThemeMenuBarState inState
;
458 if (!PyArg_ParseTuple(_args
, "O&hl",
459 PyMac_GetRect
, &inBounds
,
463 _err
= DrawThemeMenuBarBackground(&inBounds
,
466 if (_err
!= noErr
) return PyMac_Error(_err
);
472 static PyObject
*App_GetThemeMenuBarHeight(_self
, _args
)
476 PyObject
*_res
= NULL
;
479 if (!PyArg_ParseTuple(_args
, ""))
481 _err
= GetThemeMenuBarHeight(&outHeight
);
482 if (_err
!= noErr
) return PyMac_Error(_err
);
483 _res
= Py_BuildValue("h",
488 static PyObject
*App_DrawThemeMenuBackground(_self
, _args
)
492 PyObject
*_res
= NULL
;
495 ThemeMenuType inMenuType
;
496 if (!PyArg_ParseTuple(_args
, "O&h",
497 PyMac_GetRect
, &inMenuRect
,
500 _err
= DrawThemeMenuBackground(&inMenuRect
,
502 if (_err
!= noErr
) return PyMac_Error(_err
);
508 static PyObject
*App_GetThemeMenuBackgroundRegion(_self
, _args
)
512 PyObject
*_res
= NULL
;
515 ThemeMenuType menuType
;
516 if (!PyArg_ParseTuple(_args
, "O&h",
517 PyMac_GetRect
, &inMenuRect
,
520 _err
= GetThemeMenuBackgroundRegion(&inMenuRect
,
523 if (_err
!= noErr
) return PyMac_Error(_err
);
529 static PyObject
*App_DrawThemeMenuSeparator(_self
, _args
)
533 PyObject
*_res
= NULL
;
536 if (!PyArg_ParseTuple(_args
, "O&",
537 PyMac_GetRect
, &inItemRect
))
539 _err
= DrawThemeMenuSeparator(&inItemRect
);
540 if (_err
!= noErr
) return PyMac_Error(_err
);
546 static PyObject
*App_GetThemeMenuSeparatorHeight(_self
, _args
)
550 PyObject
*_res
= NULL
;
553 if (!PyArg_ParseTuple(_args
, ""))
555 _err
= GetThemeMenuSeparatorHeight(&outHeight
);
556 if (_err
!= noErr
) return PyMac_Error(_err
);
557 _res
= Py_BuildValue("h",
562 static PyObject
*App_GetThemeMenuItemExtra(_self
, _args
)
566 PyObject
*_res
= NULL
;
568 ThemeMenuItemType inItemType
;
571 if (!PyArg_ParseTuple(_args
, "h",
574 _err
= GetThemeMenuItemExtra(inItemType
,
577 if (_err
!= noErr
) return PyMac_Error(_err
);
578 _res
= Py_BuildValue("hh",
584 static PyObject
*App_GetThemeMenuTitleExtra(_self
, _args
)
588 PyObject
*_res
= NULL
;
591 Boolean inIsSquished
;
592 if (!PyArg_ParseTuple(_args
, "b",
595 _err
= GetThemeMenuTitleExtra(&outWidth
,
597 if (_err
!= noErr
) return PyMac_Error(_err
);
598 _res
= Py_BuildValue("h",
603 static PyMethodDef App_methods
[] = {
604 {"RegisterAppearanceClient", (PyCFunction
)App_RegisterAppearanceClient
, 1,
606 {"UnregisterAppearanceClient", (PyCFunction
)App_UnregisterAppearanceClient
, 1,
608 {"SetThemePen", (PyCFunction
)App_SetThemePen
, 1,
609 "(ThemeBrush inBrush, SInt16 inDepth, Boolean inIsColorDevice) -> None"},
610 {"SetThemeBackground", (PyCFunction
)App_SetThemeBackground
, 1,
611 "(ThemeBrush inBrush, SInt16 inDepth, Boolean inIsColorDevice) -> None"},
612 {"SetThemeTextColor", (PyCFunction
)App_SetThemeTextColor
, 1,
613 "(ThemeTextColor inColor, SInt16 inDepth, Boolean inIsColorDevice) -> None"},
614 {"SetThemeWindowBackground", (PyCFunction
)App_SetThemeWindowBackground
, 1,
615 "(WindowPtr inWindow, ThemeBrush inBrush, Boolean inUpdate) -> None"},
616 {"DrawThemeWindowHeader", (PyCFunction
)App_DrawThemeWindowHeader
, 1,
617 "(Rect inRect, ThemeDrawState inState) -> None"},
618 {"DrawThemeWindowListViewHeader", (PyCFunction
)App_DrawThemeWindowListViewHeader
, 1,
619 "(Rect inRect, ThemeDrawState inState) -> None"},
620 {"DrawThemePlacard", (PyCFunction
)App_DrawThemePlacard
, 1,
621 "(Rect inRect, ThemeDrawState inState) -> None"},
622 {"DrawThemeEditTextFrame", (PyCFunction
)App_DrawThemeEditTextFrame
, 1,
623 "(Rect inRect, ThemeDrawState inState) -> None"},
624 {"DrawThemeListBoxFrame", (PyCFunction
)App_DrawThemeListBoxFrame
, 1,
625 "(Rect inRect, ThemeDrawState inState) -> None"},
626 {"DrawThemeFocusRect", (PyCFunction
)App_DrawThemeFocusRect
, 1,
627 "(Rect inRect, Boolean inHasFocus) -> None"},
628 {"DrawThemePrimaryGroup", (PyCFunction
)App_DrawThemePrimaryGroup
, 1,
629 "(Rect inRect, ThemeDrawState inState) -> None"},
630 {"DrawThemeSecondaryGroup", (PyCFunction
)App_DrawThemeSecondaryGroup
, 1,
631 "(Rect inRect, ThemeDrawState inState) -> None"},
632 {"DrawThemeSeparator", (PyCFunction
)App_DrawThemeSeparator
, 1,
633 "(Rect inRect, ThemeDrawState inState) -> None"},
634 {"DrawThemeModelessDialogFrame", (PyCFunction
)App_DrawThemeModelessDialogFrame
, 1,
635 "(Rect inRect, ThemeDrawState inState) -> None"},
636 {"DrawThemeGenericWell", (PyCFunction
)App_DrawThemeGenericWell
, 1,
637 "(Rect inRect, ThemeDrawState inState, Boolean inFillCenter) -> None"},
638 {"DrawThemeFocusRegion", (PyCFunction
)App_DrawThemeFocusRegion
, 1,
639 "(Boolean inHasFocus) -> None"},
640 {"IsThemeInColor", (PyCFunction
)App_IsThemeInColor
, 1,
641 "(SInt16 inDepth, Boolean inIsColorDevice) -> (Boolean _rv)"},
642 {"GetThemeAccentColors", (PyCFunction
)App_GetThemeAccentColors
, 1,
643 "() -> (CTabHandle outColors)"},
644 {"DrawThemeMenuBarBackground", (PyCFunction
)App_DrawThemeMenuBarBackground
, 1,
645 "(Rect inBounds, ThemeMenuBarState inState, UInt32 inAttributes) -> None"},
646 {"GetThemeMenuBarHeight", (PyCFunction
)App_GetThemeMenuBarHeight
, 1,
647 "() -> (SInt16 outHeight)"},
648 {"DrawThemeMenuBackground", (PyCFunction
)App_DrawThemeMenuBackground
, 1,
649 "(Rect inMenuRect, ThemeMenuType inMenuType) -> None"},
650 {"GetThemeMenuBackgroundRegion", (PyCFunction
)App_GetThemeMenuBackgroundRegion
, 1,
651 "(Rect inMenuRect, ThemeMenuType menuType) -> None"},
652 {"DrawThemeMenuSeparator", (PyCFunction
)App_DrawThemeMenuSeparator
, 1,
653 "(Rect inItemRect) -> None"},
654 {"GetThemeMenuSeparatorHeight", (PyCFunction
)App_GetThemeMenuSeparatorHeight
, 1,
655 "() -> (SInt16 outHeight)"},
656 {"GetThemeMenuItemExtra", (PyCFunction
)App_GetThemeMenuItemExtra
, 1,
657 "(ThemeMenuItemType inItemType) -> (SInt16 outHeight, SInt16 outWidth)"},
658 {"GetThemeMenuTitleExtra", (PyCFunction
)App_GetThemeMenuTitleExtra
, 1,
659 "(Boolean inIsSquished) -> (SInt16 outWidth)"},
674 m
= Py_InitModule("App", App_methods
);
675 d
= PyModule_GetDict(m
);
676 App_Error
= PyMac_GetOSErrException();
677 if (App_Error
== NULL
||
678 PyDict_SetItemString(d
, "Error", App_Error
) != 0)
679 Py_FatalError("can't initialize App.Error");
682 /* ========================= End module App ========================= */