mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Converted the Carbon modules to use PEP252-style objects, with
descriptors in stead of manual getattr hooks to get at attributes of the objects. For Qd I have in stead gotten rid of most of the attribute access in favor of the carbon-style accessor methods (with the exception of visRgn, to be done later), and of the Carbon.Qd.qd global object, for which accessor functions are also available. For List I have fixed the fact that various methods were incorrectly generated as functions. CF is untouched: PEP252 doesn't allow "poor-mans-inheritance" with basechain, so it will have to wait for PEP253 support.
This commit is contained in:
parent
818855939a
commit
dbd5701d73
48 changed files with 2447 additions and 2507 deletions
|
@ -850,52 +850,137 @@ static PyMethodDef TEObj_methods[] = {
|
|||
{NULL, NULL, 0}
|
||||
};
|
||||
|
||||
PyMethodChain TEObj_chain = { TEObj_methods, NULL };
|
||||
|
||||
static PyObject *TEObj_getattr(TEObject *self, char *name)
|
||||
static PyObject *TEObj_get_destRect(TEObject *self, void *closure)
|
||||
{
|
||||
|
||||
if( strcmp(name, "destRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->destRect);
|
||||
if( strcmp(name, "viewRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->viewRect);
|
||||
if( strcmp(name, "selRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->selRect);
|
||||
if( strcmp(name, "lineHeight") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->lineHeight);
|
||||
if( strcmp(name, "fontAscent") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->fontAscent);
|
||||
if( strcmp(name, "selPoint") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildPoint,
|
||||
(*self->ob_itself)->selPoint);
|
||||
if( strcmp(name, "selStart") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selStart);
|
||||
if( strcmp(name, "selEnd") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selEnd);
|
||||
if( strcmp(name, "active") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->active);
|
||||
if( strcmp(name, "just") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->just);
|
||||
if( strcmp(name, "teLength") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->teLength);
|
||||
if( strcmp(name, "txFont") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFont);
|
||||
if( strcmp(name, "txFace") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFace);
|
||||
if( strcmp(name, "txMode") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txMode);
|
||||
if( strcmp(name, "txSize") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txSize);
|
||||
if( strcmp(name, "nLines") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->nLines);
|
||||
|
||||
return Py_FindMethodInChain(&TEObj_chain, (PyObject *)self, name);
|
||||
return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->destRect);
|
||||
}
|
||||
|
||||
#define TEObj_setattr NULL
|
||||
#define TEObj_set_destRect NULL
|
||||
|
||||
static PyObject *TEObj_get_viewRect(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->viewRect);
|
||||
}
|
||||
|
||||
#define TEObj_set_viewRect NULL
|
||||
|
||||
static PyObject *TEObj_get_selRect(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->selRect);
|
||||
}
|
||||
|
||||
#define TEObj_set_selRect NULL
|
||||
|
||||
static PyObject *TEObj_get_lineHeight(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->lineHeight);
|
||||
}
|
||||
|
||||
#define TEObj_set_lineHeight NULL
|
||||
|
||||
static PyObject *TEObj_get_fontAscent(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->fontAscent);
|
||||
}
|
||||
|
||||
#define TEObj_set_fontAscent NULL
|
||||
|
||||
static PyObject *TEObj_get_selPoint(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->selPoint);
|
||||
}
|
||||
|
||||
#define TEObj_set_selPoint NULL
|
||||
|
||||
static PyObject *TEObj_get_selStart(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selStart);
|
||||
}
|
||||
|
||||
#define TEObj_set_selStart NULL
|
||||
|
||||
static PyObject *TEObj_get_selEnd(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selEnd);
|
||||
}
|
||||
|
||||
#define TEObj_set_selEnd NULL
|
||||
|
||||
static PyObject *TEObj_get_active(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->active);
|
||||
}
|
||||
|
||||
#define TEObj_set_active NULL
|
||||
|
||||
static PyObject *TEObj_get_just(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->just);
|
||||
}
|
||||
|
||||
#define TEObj_set_just NULL
|
||||
|
||||
static PyObject *TEObj_get_teLength(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->teLength);
|
||||
}
|
||||
|
||||
#define TEObj_set_teLength NULL
|
||||
|
||||
static PyObject *TEObj_get_txFont(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFont);
|
||||
}
|
||||
|
||||
#define TEObj_set_txFont NULL
|
||||
|
||||
static PyObject *TEObj_get_txFace(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFace);
|
||||
}
|
||||
|
||||
#define TEObj_set_txFace NULL
|
||||
|
||||
static PyObject *TEObj_get_txMode(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txMode);
|
||||
}
|
||||
|
||||
#define TEObj_set_txMode NULL
|
||||
|
||||
static PyObject *TEObj_get_txSize(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txSize);
|
||||
}
|
||||
|
||||
#define TEObj_set_txSize NULL
|
||||
|
||||
static PyObject *TEObj_get_nLines(TEObject *self, void *closure)
|
||||
{
|
||||
return Py_BuildValue("h", (*self->ob_itself)->nLines);
|
||||
}
|
||||
|
||||
#define TEObj_set_nLines NULL
|
||||
|
||||
static PyGetSetDef TEObj_getsetlist[] = {
|
||||
{"destRect", (getter)TEObj_get_destRect, (setter)TEObj_set_destRect, "Destination rectangle"},
|
||||
{"viewRect", (getter)TEObj_get_viewRect, (setter)TEObj_set_viewRect, "Viewing rectangle"},
|
||||
{"selRect", (getter)TEObj_get_selRect, (setter)TEObj_set_selRect, "Selection rectangle"},
|
||||
{"lineHeight", (getter)TEObj_get_lineHeight, (setter)TEObj_set_lineHeight, "Height of a line"},
|
||||
{"fontAscent", (getter)TEObj_get_fontAscent, (setter)TEObj_set_fontAscent, "Ascent of a line"},
|
||||
{"selPoint", (getter)TEObj_get_selPoint, (setter)TEObj_set_selPoint, "Selection Point"},
|
||||
{"selStart", (getter)TEObj_get_selStart, (setter)TEObj_set_selStart, "Start of selection"},
|
||||
{"selEnd", (getter)TEObj_get_selEnd, (setter)TEObj_set_selEnd, "End of selection"},
|
||||
{"active", (getter)TEObj_get_active, (setter)TEObj_set_active, "TBD"},
|
||||
{"just", (getter)TEObj_get_just, (setter)TEObj_set_just, "Justification"},
|
||||
{"teLength", (getter)TEObj_get_teLength, (setter)TEObj_set_teLength, "TBD"},
|
||||
{"txFont", (getter)TEObj_get_txFont, (setter)TEObj_set_txFont, "Current font"},
|
||||
{"txFace", (getter)TEObj_get_txFace, (setter)TEObj_set_txFace, "Current font variant"},
|
||||
{"txMode", (getter)TEObj_get_txMode, (setter)TEObj_set_txMode, "Current text-drawing mode"},
|
||||
{"txSize", (getter)TEObj_get_txSize, (setter)TEObj_set_txSize, "Current font size"},
|
||||
{"nLines", (getter)TEObj_get_nLines, (setter)TEObj_set_nLines, "TBD"},
|
||||
};
|
||||
|
||||
|
||||
#define TEObj_compare NULL
|
||||
|
||||
|
@ -912,14 +997,31 @@ PyTypeObject TE_Type = {
|
|||
/* methods */
|
||||
(destructor) TEObj_dealloc, /*tp_dealloc*/
|
||||
0, /*tp_print*/
|
||||
(getattrfunc) TEObj_getattr, /*tp_getattr*/
|
||||
(setattrfunc) TEObj_setattr, /*tp_setattr*/
|
||||
(getattrfunc)0, /*tp_getattr*/
|
||||
(setattrfunc)0, /*tp_setattr*/
|
||||
(cmpfunc) TEObj_compare, /*tp_compare*/
|
||||
(reprfunc) TEObj_repr, /*tp_repr*/
|
||||
(PyNumberMethods *)0, /* tp_as_number */
|
||||
(PySequenceMethods *)0, /* tp_as_sequence */
|
||||
(PyMappingMethods *)0, /* tp_as_mapping */
|
||||
(hashfunc) TEObj_hash, /*tp_hash*/
|
||||
0, /*tp_call*/
|
||||
0, /*tp_str*/
|
||||
PyObject_GenericGetAttr, /*tp_getattro*/
|
||||
PyObject_GenericSetAttr, /*tp_setattro */
|
||||
0, /*outputHook_tp_as_buffer*/
|
||||
0, /*outputHook_tp_flags*/
|
||||
0, /*outputHook_tp_doc*/
|
||||
0, /*outputHook_tp_traverse*/
|
||||
0, /*outputHook_tp_clear*/
|
||||
0, /*outputHook_tp_richcompare*/
|
||||
0, /*outputHook_tp_weaklistoffset*/
|
||||
0, /*outputHook_tp_iter*/
|
||||
0, /*outputHook_tp_iternext*/
|
||||
TEObj_methods, /* tp_methods */
|
||||
0, /*outputHook_tp_members*/
|
||||
TEObj_getsetlist, /*tp_getset*/
|
||||
0, /*outputHook_tp_base*/
|
||||
};
|
||||
|
||||
/* ----------------------- End object type TE ----------------------- */
|
||||
|
|
|
@ -93,7 +93,91 @@ class TEMethodGenerator(OSErrWeakLinkMethodGenerator):
|
|||
|
||||
|
||||
|
||||
class MyObjectDefinition(GlobalObjectDefinition):
|
||||
class MyObjectDefinition(PEP252Mixin, GlobalObjectDefinition):
|
||||
# Attributes that can be set.
|
||||
getsetlist = [
|
||||
(
|
||||
'destRect',
|
||||
'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->destRect);',
|
||||
None,
|
||||
'Destination rectangle'
|
||||
), (
|
||||
'viewRect',
|
||||
'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->viewRect);',
|
||||
None,
|
||||
'Viewing rectangle'
|
||||
), (
|
||||
'selRect',
|
||||
'return Py_BuildValue("O&", PyMac_BuildRect, &(*self->ob_itself)->selRect);',
|
||||
None,
|
||||
'Selection rectangle'
|
||||
), (
|
||||
'lineHeight',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->lineHeight);',
|
||||
None,
|
||||
'Height of a line'
|
||||
), (
|
||||
'fontAscent',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->fontAscent);',
|
||||
None,
|
||||
'Ascent of a line'
|
||||
), (
|
||||
"selPoint",
|
||||
'return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->selPoint);',
|
||||
None,
|
||||
'Selection Point'
|
||||
), (
|
||||
'selStart',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->selStart);',
|
||||
None,
|
||||
'Start of selection'
|
||||
), (
|
||||
'selEnd',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->selEnd);',
|
||||
None,
|
||||
'End of selection'
|
||||
), (
|
||||
'active',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->active);',
|
||||
None,
|
||||
'TBD'
|
||||
), (
|
||||
'just',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->just);',
|
||||
None,
|
||||
'Justification'
|
||||
), (
|
||||
'teLength',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->teLength);',
|
||||
None,
|
||||
'TBD'
|
||||
), (
|
||||
'txFont',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->txFont);',
|
||||
None,
|
||||
'Current font'
|
||||
), (
|
||||
'txFace',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->txFace);',
|
||||
None,
|
||||
'Current font variant'
|
||||
), (
|
||||
'txMode',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->txMode);',
|
||||
None,
|
||||
'Current text-drawing mode'
|
||||
), (
|
||||
'txSize',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->txSize);',
|
||||
None,
|
||||
'Current font size'
|
||||
), (
|
||||
'nLines',
|
||||
'return Py_BuildValue("h", (*self->ob_itself)->nLines);',
|
||||
None,
|
||||
'TBD'
|
||||
)]
|
||||
|
||||
def outputCheckNewArg(self):
|
||||
Output("""if (itself == NULL) {
|
||||
PyErr_SetString(TE_Error,"Cannot create null TE");
|
||||
|
@ -102,45 +186,6 @@ class MyObjectDefinition(GlobalObjectDefinition):
|
|||
def outputFreeIt(self, itselfname):
|
||||
Output("TEDispose(%s);", itselfname)
|
||||
|
||||
def outputGetattrHook(self):
|
||||
Output("""
|
||||
if( strcmp(name, "destRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->destRect);
|
||||
if( strcmp(name, "viewRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->viewRect);
|
||||
if( strcmp(name, "selRect") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildRect,
|
||||
&(*self->ob_itself)->selRect);
|
||||
if( strcmp(name, "lineHeight") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->lineHeight);
|
||||
if( strcmp(name, "fontAscent") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->fontAscent);
|
||||
if( strcmp(name, "selPoint") == 0 )
|
||||
return Py_BuildValue("O&", PyMac_BuildPoint,
|
||||
(*self->ob_itself)->selPoint);
|
||||
if( strcmp(name, "selStart") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selStart);
|
||||
if( strcmp(name, "selEnd") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->selEnd);
|
||||
if( strcmp(name, "active") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->active);
|
||||
if( strcmp(name, "just") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->just);
|
||||
if( strcmp(name, "teLength") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->teLength);
|
||||
if( strcmp(name, "txFont") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFont);
|
||||
if( strcmp(name, "txFace") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txFace);
|
||||
if( strcmp(name, "txMode") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txMode);
|
||||
if( strcmp(name, "txSize") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->txSize);
|
||||
if( strcmp(name, "nLines") == 0 )
|
||||
return Py_BuildValue("h", (*self->ob_itself)->nLines);
|
||||
""")
|
||||
|
||||
# From here on it's basically all boiler plate...
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue