From 9826a680b47c11bb7e6ff2da82e3cff16e4bf826 Mon Sep 17 00:00:00 2001 From: John Finlay Date: Sat, 12 Jul 2003 07:50:02 +0000 Subject: pango.override (pypango_attr_tp_getattr) (pypango_attr_get_type) Add these * pango.override (pypango_attr_tp_getattr) (pypango_attr_get_type) Add these to provide pango.Attribute type information and access to attribute type specific data. Fixes #116691. --- ChangeLog | 4 +++ pango.override | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index bd61dac3..0ba8e221 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2003-07-11 John Finlay + * pango.override (pypango_attr_tp_getattr) + (pypango_attr_get_type) Add these to provide pango.Attribute type + information and access to attribute type specific data. Fixes #116691. + * pango.defs (pango_color_parse) Make this a constructor for pango.Color. Fixes #116662. diff --git a/pango.override b/pango.override index b7a6579d..b4a891bd 100644 --- a/pango.override +++ b/pango.override @@ -111,14 +111,104 @@ pypango_attr_set_index(PyPangoAttribute *self, PyObject *value, void *closure) return 0; } +static PyObject * +pypango_attr_get_type(PyPangoAttribute *self, void *closure) +{ + return PyInt_FromLong(self->attr->klass->type); +} + static PyGetSetDef pypango_attr_getsets[] = { { "start_index", (getter)pypango_attr_get_index, (setter)pypango_attr_set_index, NULL, GINT_TO_POINTER(0) }, { "end_index", (getter)pypango_attr_get_index, (setter)pypango_attr_set_index, NULL, GINT_TO_POINTER(1) }, + { "type", (getter)pypango_attr_get_type, (setter)0, NULL, NULL }, { NULL, (getter)0, (setter)0, NULL, NULL } }; +static PyObject * +pypango_attr_tp_getattr(PyPangoAttribute *self, char *attr) +{ + PangoAttribute *attribute = self->attr; + PyObject *name, *ret; + + switch (attribute->klass->type) { + case PANGO_ATTR_LANGUAGE: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "value"); + if (!strcmp(attr, "value")) + return pyg_boxed_new(PANGO_TYPE_LANGUAGE, + ((PangoAttrLanguage *)attribute)->value, + TRUE, TRUE); + break; + case PANGO_ATTR_FAMILY: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "value"); + if (!strcmp(attr, "value")) + return PyString_FromString(((PangoAttrString *)attribute)->value); + break; + case PANGO_ATTR_STYLE: + case PANGO_ATTR_WEIGHT: + case PANGO_ATTR_VARIANT: + case PANGO_ATTR_STRETCH: + case PANGO_ATTR_SIZE: + case PANGO_ATTR_UNDERLINE: + case PANGO_ATTR_STRIKETHROUGH: + case PANGO_ATTR_RISE: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "value"); + if (!strcmp(attr, "value")) + return PyInt_FromLong(((PangoAttrInt *)attribute)->value); + break; + case PANGO_ATTR_FONT_DESC: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "desc"); + if (!strcmp(attr, "desc")) + return pyg_boxed_new(PANGO_TYPE_FONT_DESCRIPTION, + ((PangoAttrFontDesc *)attribute)->desc, + TRUE, TRUE); + break; + case PANGO_ATTR_FOREGROUND: + case PANGO_ATTR_BACKGROUND: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "color"); + if (!strcmp(attr, "color")) + return pyg_boxed_new(PANGO_TYPE_COLOR, + &((PangoAttrColor *)attribute)->color, + TRUE, TRUE); + break; + case PANGO_ATTR_SHAPE: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[ss]", "ink_rect", "logical_rect"); + if (!strcmp(attr, "ink_rect")) { + PangoRectangle rect = ((PangoAttrShape *)attribute)->ink_rect; + + return Py_BuildValue("iiii", rect.x, rect.y, + rect.width, rect.height); + } + if (!strcmp(attr, "logical_rect")) { + PangoRectangle rect = ((PangoAttrShape *)attribute)->logical_rect; + + return Py_BuildValue("iiii", rect.x, rect.y, + rect.width, rect.height); + } + break; + case PANGO_ATTR_SCALE: + if (!strcmp(attr, "__members__")) + return Py_BuildValue("[s]", "value"); + if (!strcmp(attr, "value")) + return PyFloat_FromDouble(((PangoAttrFloat *)attribute)->value); + break; + default: + break; + } + + name = PyString_FromString(attr); + ret = PyObject_GenericGetAttr((PyObject *)self, name); + Py_DECREF(name); + return ret; +} + static PyTypeObject PyPangoAttribute_Type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ @@ -128,7 +218,7 @@ static PyTypeObject PyPangoAttribute_Type = { /* methods */ (destructor)pypango_attr_dealloc, /* tp_dealloc */ (printfunc)0, /* tp_print */ - (getattrfunc)0, /* tp_getattr */ + (getattrfunc)pypango_attr_tp_getattr, /* tp_getattr */ (setattrfunc)0, /* tp_setattr */ (cmpfunc)pypango_attr_compare, /* tp_compare */ (reprfunc)0, /* tp_repr */ -- cgit v1.2.1