summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2001-06-29 10:02:45 +0000
committerJames Henstridge <jamesh@src.gnome.org>2001-06-29 10:02:45 +0000
commit0fae0ecd4c47b0d6612ec4cb97c82540d11cb34e (patch)
treeec4f8e8d5bbe6d4c88d25f95fee89a06eb9fd457
parented17cad80b7e89ecca44c410853d27dc5482fd6b (diff)
downloadpygtk-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--ChangeLog12
-rw-r--r--gtk/gdk.defs10
-rw-r--r--gtk/gtk-types.c93
-rw-r--r--gtk/gtk.override69
-rw-r--r--gtk/gtkmodule.c1
-rw-r--r--gtk/pygtk-private.h3
-rw-r--r--gtk/pygtk.h12
7 files changed, 91 insertions, 109 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c29811d..037a5260 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)