summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Finlay <finlay@src.gnome.org>2003-07-12 07:50:02 +0000
committerJohn Finlay <finlay@src.gnome.org>2003-07-12 07:50:02 +0000
commit9826a680b47c11bb7e6ff2da82e3cff16e4bf826 (patch)
tree16b5f9cd2bfd2d7a58b8c3d8b50071aa48fced27
parentdd7e8fc4e53f93c0f9225d16f1c6d58e47d9927d (diff)
downloadpygtk-9826a680b47c11bb7e6ff2da82e3cff16e4bf826.tar.gz
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.
-rw-r--r--ChangeLog4
-rw-r--r--pango.override92
2 files changed, 95 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index bd61dac3..0ba8e221 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2003-07-11 John Finlay <finlay@moeraki.com>
+ * 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 */