diff options
| author | James Henstridge <james@daa.com.au> | 2001-06-29 10:02:45 +0000 |
|---|---|---|
| committer | James Henstridge <jamesh@src.gnome.org> | 2001-06-29 10:02:45 +0000 |
| commit | 0fae0ecd4c47b0d6612ec4cb97c82540d11cb34e (patch) | |
| tree | ec4f8e8d5bbe6d4c88d25f95fee89a06eb9fd457 | |
| parent | ed17cad80b7e89ecca44c410853d27dc5482fd6b (diff) | |
| download | pygtk-0fae0ecd4c47b0d6612ec4cb97c82540d11cb34e.tar.gz | |
constructor for GdkCursor that handles both the standard and pixmap cases
2001-06-29 James Henstridge <james@daa.com.au>
* gtk/gtk.override (_wrap_gdk_cursor_new): constructor for
GdkCursor that handles both the standard and pixmap cases for
cursors.
* gtk/gtk-types.c: remove GdkCursor related stuff from this file.
* gtk/gdk.defs (Cursor): add boxed type for cursor.
(cursor_new): mark as constructor.
(cursor_new_from_pixmap): mark this one as a constructor as well.
| -rw-r--r-- | ChangeLog | 12 | ||||
| -rw-r--r-- | gtk/gdk.defs | 10 | ||||
| -rw-r--r-- | gtk/gtk-types.c | 93 | ||||
| -rw-r--r-- | gtk/gtk.override | 69 | ||||
| -rw-r--r-- | gtk/gtkmodule.c | 1 | ||||
| -rw-r--r-- | gtk/pygtk-private.h | 3 | ||||
| -rw-r--r-- | gtk/pygtk.h | 12 |
7 files changed, 91 insertions, 109 deletions
@@ -1,3 +1,15 @@ +2001-06-29 James Henstridge <james@daa.com.au> + + * gtk/gtk.override (_wrap_gdk_cursor_new): constructor for + GdkCursor that handles both the standard and pixmap cases for + cursors. + + * gtk/gtk-types.c: remove GdkCursor related stuff from this file. + + * gtk/gdk.defs (Cursor): add boxed type for cursor. + (cursor_new): mark as constructor. + (cursor_new_from_pixmap): mark this one as a constructor as well. + 2001-06-27 James Henstridge <james@daa.com.au> * codegen/argtypes.py (arg): don't register a boxed handler for diff --git a/gtk/gdk.defs b/gtk/gdk.defs index ba833b4c..b1d1f8fa 100644 --- a/gtk/gdk.defs +++ b/gtk/gdk.defs @@ -115,6 +115,14 @@ (field (type-and-name guint16 blue)) ) +(boxed Cursor + (in-module Gdk) + (c-name GdkCursor) + (copy-func gdk_cursor_ref) + (release-func gdk_cursor_unref) + (field (type-and-name GdkCursorType type)) +) + ;; Enumerations and flags ... @@ -820,12 +828,14 @@ ;; From /opt/gtk2/include/gtk-2.0/gdk/gdkcursor.h (function cursor_new + (is-constructor-of GdkCursor) (c-name gdk_cursor_new) (return-type GdkCursor*) (parameter (type-and-name GdkCursorType cursor_type)) ) (function cursor_new_from_pixmap + (is-constructor-of GdkCursor) (c-name gdk_cursor_new_from_pixmap) (return-type GdkCursor*) (parameter (type-and-name GdkPixmap* source)) diff --git a/gtk/gtk-types.c b/gtk/gtk-types.c index 2a81379c..0f32e314 100644 --- a/gtk/gtk-types.c +++ b/gtk/gtk-types.c @@ -110,19 +110,6 @@ PyGdkAtom_New(GdkAtom atom) } PyObject * -PyGdkCursor_New(GdkCursor *obj) -{ - PyGdkCursor_Object *self; - - self = (PyGdkCursor_Object *)PyObject_NEW(PyGdkCursor_Object, - &PyGdkCursor_Type); - if (self == NULL) - return NULL; - self->obj = obj; - return (PyObject *)self; -} - -PyObject * PyGtkCTreeNode_New(GtkCTreeNode *node) { PyGtkCTreeNode_Object *self; @@ -2028,85 +2015,6 @@ PyTypeObject PyGdkAtom_Type = { }; static void -pygdk_cursor_dealloc(PyGdkCursor_Object *self) -{ - gdk_cursor_destroy(self->obj); - PyMem_DEL(self); -} - -static int -pygdk_cursor_compare(PyGdkCursor_Object *self, PyGdkCursor_Object *v) -{ - if (self->obj == v->obj) return 0; - if (self->obj > v->obj) return -1; - return 1; -} - -static long -pygdk_cursor_hash(PyGdkCursor_Object *self) -{ - return (long)self->obj; -} - -static PyObject * -pygdk_cursor_repr(PyGdkCursor_Object *self) -{ - char buf[256], *cname = NULL; - - if (self->obj->type == GDK_CURSOR_IS_PIXMAP) - cname = "*pixmap*"; - else { - GtkEnumValue *vals = gtk_type_enum_get_values(GDK_TYPE_CURSOR_TYPE); - while (vals->value_name != NULL && vals->value != self->obj->type) - vals++; - if (vals->value_nick) cname = vals->value_nick; - else cname = "*unknown*"; - } - - g_snprintf(buf, 256, "<GdkCursor '%s'>", cname); - return PyString_FromString(buf); -} - -static PyObject * -pygdk_cursor_getattr(PyGdkCursor_Object *self, char *attr) -{ - if (!strcmp(attr, "type")) - return PyInt_FromLong(self->obj->type); - else if (!strcmp(attr, "name")) { - GtkEnumValue *vals = gtk_type_enum_get_values(GDK_TYPE_CURSOR_TYPE); - - while (vals->value_name != NULL && vals->value != self->obj->type) - vals++; - if (vals->value_nick) return PyString_FromString(vals->value_nick); - return PyString_FromString("*unknown*"); - } - PyErr_SetString(PyExc_AttributeError, attr); - return NULL; -} - -PyTypeObject PyGdkCursor_Type = { - PyObject_HEAD_INIT(NULL) - 0, - "GdkCursor", - sizeof(PyGdkCursor_Object), - 0, - (destructor)pygdk_cursor_dealloc, - (printfunc)0, - (getattrfunc)pygdk_cursor_getattr, - (setattrfunc)0, - (cmpfunc)pygdk_cursor_compare, - (reprfunc)pygdk_cursor_repr, - 0, - 0, - 0, - (hashfunc)pygdk_cursor_hash, - (ternaryfunc)0, - (reprfunc)0, - 0L,0L,0L,0L, - NULL -}; - -static void pygtk_ctree_node_dealloc(PyGtkCTreeNode_Object *self) { PyMem_DEL(self); @@ -2547,7 +2455,6 @@ _pygtk_register_boxed_types(PyObject *moddict) #endif register_tp2(GtkSelectionData, GTK_TYPE_SELECTION_DATA); register_tp(GdkAtom); - register_tp(GdkCursor); register_tp(GtkCTreeNode); register_tp(GdkDevice); pyg_boxed_register(GTK_TYPE_TREE_PATH, diff --git a/gtk/gtk.override b/gtk/gtk.override index dc2aa371..6095631d 100644 --- a/gtk/gtk.override +++ b/gtk/gtk.override @@ -488,6 +488,75 @@ _wrap_gdk_pixmap_colormap_create_from_xpm_d(PyObject *self, PyObject *args, return ret; } %% +ignore gdk_cursor_new_from_pixmap +%% +override gdk_cursor_new kwargs +static PyObject * +_wrap_gdk_cursor_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist1[] = { "cursor_type", NULL }; + static char *kwlist2[] = { "source", "mask", "fg", "bg", "x", "y", NULL }; + PyObject *py_cursor_type; + + self->gtype = GDK_TYPE_CURSOR; + self->free_on_dealloc = FALSE; + self->boxed = NULL; + if (PyArg_ParseTupleAndKeywords(args, kwargs, "O:GdkCursor.__init__", + kwlist1, &py_cursor_type)) { + GdkCursorType cursor_type; + + if (pyg_enum_get_value(GDK_TYPE_CURSOR_TYPE, py_cursor_type, + (gint *)&cursor_type)) + return NULL; + self->boxed = gdk_cursor_new(cursor_type); + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, + "could not create GdkCursor object"); + return NULL; + } + self->free_on_dealloc = TRUE; + } else { + PyGObject *source, *mask; + PyObject *fg, *bg; + gint x, y; + PyErr_Clear(); + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OOOOii:GdkCursor.__init__", kwlist2, + &source, &mask, &fg, &bg, &x, &y)) + return NULL; + if (!pygobject_check(source, &PyGdkPixmap_Type)) { + PyErr_SetString(PyExc_TypeError, "source should be a GdkPixmap"); + return NULL; + } + if (!pygobject_check(mask, &PyGdkPixmap_Type)) { + PyErr_SetString(PyExc_TypeError, "mask should be a GdkPixmap"); + return NULL; + } + if (!pyg_boxed_check(fg, GDK_TYPE_COLOR)) { + PyErr_SetString(PyExc_TypeError, "fg should be a GdkColor"); + return NULL; + } + if (!pyg_boxed_check(bg, GDK_TYPE_COLOR)) { + PyErr_SetString(PyExc_TypeError, "bg should be a GdkColor"); + return NULL; + } + self->boxed = gdk_cursor_new_from_pixmap(GDK_PIXMAP(source->obj), + GDK_PIXMAP(mask->obj), + pyg_boxed_get(fg, GdkColor), + pyg_boxed_get(bg, GdkColor), + x, y); + if (!self->boxed) { + PyErr_SetString(PyExc_RuntimeError, + "could not create GdkCursor object"); + return NULL; + } + self->free_on_dealloc = TRUE; + } + Py_INCREF(Py_None); + return Py_None; +} +%% override gtk_widget_draw kwargs static PyObject * _wrap_gtk_widget_draw(PyGObject *self, PyObject *args, PyObject *kwargs) diff --git a/gtk/gtkmodule.c b/gtk/gtkmodule.c index 24782d16..a39fbeb2 100644 --- a/gtk/gtkmodule.c +++ b/gtk/gtkmodule.c @@ -24,7 +24,6 @@ static struct _PyGtk_FunctionStruct functions = { &PyGdkEvent_Type, PyGdkEvent_New, &PyGtkSelectionData_Type, PyGtkSelectionData_New, &PyGdkAtom_Type, PyGdkAtom_New, - &PyGdkCursor_Type, PyGdkCursor_New, &PyGtkCTreeNode_Type, PyGtkCTreeNode_New, &PyGdkDevice_Type, PyGdkDevice_New, }; diff --git a/gtk/pygtk-private.h b/gtk/pygtk-private.h index a61215d5..4678f659 100644 --- a/gtk/pygtk-private.h +++ b/gtk/pygtk-private.h @@ -17,7 +17,6 @@ extern PyTypeObject PyGdkEvent_Type; extern PyTypeObject PyGtkSelectionData_Type; extern PyTypeObject PyGdkAtom_Type; -extern PyTypeObject PyGdkCursor_Type; extern PyTypeObject PyGtkCTreeNode_Type; extern PyTypeObject PyGdkDevice_Type; @@ -25,7 +24,6 @@ extern PyTypeObject PyGdkDevice_Type; #define PyGdkEvent_Check(v) ((v)->ob_type == &PyGdkEvent_Type) #define PyGtkSelectionData_Check(v) ((v)->ob_type == &PyGtkSelectionData_Type) #define PyGdkAtom_Check(v) ((v)->ob_type == &PyGdkAtom_Type) -#define PyGdkCursor_Check(v) ((v)->ob_type == &PyGdkCursor_Type) #define PyGtkCTreeNode_Check(v) ((v)->ob_type == &PyGtkCTreeNode_Type) #define PyGdkDevice_Check(v) ((v)->ob_type == &PyGdkDevice_Type) @@ -33,7 +31,6 @@ extern PyTypeObject PyGdkDevice_Type; PyObject *PyGdkEvent_New(GdkEvent *event); PyObject *PyGtkSelectionData_New(GtkSelectionData *data); PyObject *PyGdkAtom_New(GdkAtom atom); -PyObject *PyGdkCursor_New(GdkCursor *cursor); PyObject *PyGtkCTreeNode_New(GtkCTreeNode *node); PyObject *PyGdkDevice_New(GdkDevice *device); diff --git a/gtk/pygtk.h b/gtk/pygtk.h index a1e73eec..62bd1601 100644 --- a/gtk/pygtk.h +++ b/gtk/pygtk.h @@ -26,9 +26,6 @@ struct _PyGtk_FunctionStruct { PyTypeObject *gdkAtom_type; PyObject *(* gdkAtom_new)(GdkAtom atom); - PyTypeObject *gdkCursor_type; - PyObject *(* gdkCursor_new)(GdkCursor *cursor); - PyTypeObject *gtkCTreeNode_type; PyObject *(* gtkCTreeNode_new)(GtkCTreeNode *node); @@ -56,11 +53,6 @@ typedef struct { typedef struct { PyObject_HEAD - GdkCursor *obj; -} PyGdkCursor_Object; - -typedef struct { - PyObject_HEAD GtkCTreeNode *node; } PyGtkCTreeNode_Object; @@ -73,7 +65,6 @@ typedef struct { #define PyGdkEvent_Get(v) (((PyGdkEvent_Object *)(v))->obj) #define PyGtkSelectionData_Get(v) (((PyGtkSelectionData_Object *)(v))->obj) #define PyGdkAtom_Get(v) (((PyGdkAtom_Object *)(v))->atom) -#define PyGdkCursor_Get(v) (((PyGdkCursor_Object *)(v))->obj) #define PyGtkCTreeNode_Get(v) (((PyGtkCTreeNode_Object *)(v))->node) #define PyGdkDevice_Get(v) (((PyGdkDevice_Object *)(v))->obj) @@ -94,7 +85,6 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGdkEvent_Type *(_PyGtk_API->gdkEvent_type) #define PyGtkSelectionData_Type *(_PyGtk_API->gtkSelectionData_type) #define PyGdkAtom_Type *(_PyGtk_API->gdkAtom_type) -#define PyGdkCursor_Type *(_PyGtk_API->gdkCursor_type) #define PyGtkCTreeNode_Type *(_PyGtk_API->gtkCTreeNode_type) #define PyGdkDevice_Type *(_PyGtk_API->gdkDevice_type) @@ -102,7 +92,6 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGdkEvent_Check(v) ((v)->ob_type == _PyGtk_API->gdkEvent_type) #define PyGtkSelectionData_Check(v) ((v)->ob_type == _PyGtk_API->gtkSelectionData_type) #define PyGdkAtom_Check(v) ((v)->ob_type == _PyGtk_API->gdkAtom_type) -#define PyGdkCursor_Check(v) ((v)->ob_type == _PyGtk_API->gdkCursor_type) #define PyGtkCTreeNode_Check(v) ((v)->ob_type == _PyGtk_API->gtkCTreeNode_type) #define PyGdkDevice_Check(v) ((v)->ob_type == _PyGtk_API->gdkDevice_type) @@ -110,7 +99,6 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGdkEvent_New (_PyGtk_API->gdkEvent_new) #define PyGtkSelectionData_New (_PyGtk_API->gtkSelectionData_new) #define PyGdkAtom_New (_PyGtk_API->gdkAtom_new) -#define PyGdkCursor_New (_PyGtk_API->gdkCursor_new) #define PyGtkCTreeNode_New (_PyGtk_API->gtkCTreeNode_new) #define PyGdkDevice_New (_PyGtk_API->gdkDevice_new) |
