/* -*- Mode: C; c-basic-offset: 4 -*- * pygtk- Python bindings for the GTK toolkit. * Copyright (C) 1998-2003 James Henstridge * * gdkrectangle.override: gtk.gdk.Rectangle overrides * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ %% override gdk_rectangle_new kwargs static int _wrap_gdk_rectangle_new(PyGBoxed *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "x", "y", "width", "height", NULL }; GdkRectangle rect = {0, 0, 0, 0}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiii:GdkRectangle.__init__", kwlist, &(rect.x), &(rect.y), &(rect.width), &(rect.height))) return -1; self->boxed = g_boxed_copy(GDK_TYPE_RECTANGLE, &rect); self->free_on_dealloc = TRUE; self->gtype = GDK_TYPE_RECTANGLE; return 0; } %% override-slot GdkRectangle.tp_as_sequence static int _wrap_gdk_rectangle_length(PyGBoxed *self) { return 4; } static PyObject * _wrap_gdk_rectangle_getitem(PyGBoxed *self, int pos) { GdkRectangle *rect; if (pos < 0) pos += 4; if (pos < 0 || pos >= 4) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } rect = pyg_boxed_get(self, GdkRectangle); switch (pos) { case 0: return PyInt_FromLong(rect->x); case 1: return PyInt_FromLong(rect->y); case 2: return PyInt_FromLong(rect->width); case 3: return PyInt_FromLong(rect->height); default: g_assert_not_reached(); return NULL; } } static int _wrap_gdk_rectangle_setitem(PyGBoxed *self, int pos, PyObject *value) { GdkRectangle *rect; gint val; if (pos < 0) pos += 4; if (pos < 0 || pos >= 4) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } rect = pyg_boxed_get(self, GdkRectangle); val = PyInt_AsLong(value); if (PyErr_Occurred()) return -1; switch(pos) { case 0: rect->x = val; break; case 1: rect->y = val; break; case 2: rect->width = val; break; case 3: rect->height = val; break; default: g_assert_not_reached(); return -1; } return 0; } static PySequenceMethods _wrap_gdk_rectangle_tp_as_sequence = { (inquiry)_wrap_gdk_rectangle_length, (binaryfunc)0, (intargfunc)0, (intargfunc)_wrap_gdk_rectangle_getitem, (intintargfunc)0, (intobjargproc)_wrap_gdk_rectangle_setitem, (intintobjargproc)0 }; %% override-attr GdkRectangle.x static int _wrap_gdk_rectangle__set_x(PyGBoxed *self, PyObject *value, void *closure) { gint val; val = PyInt_AsLong(value); if (PyErr_Occurred()) return -1; pyg_boxed_get(self, GdkRectangle)->x = val; return 0; } %% override-attr GdkRectangle.y static int _wrap_gdk_rectangle__set_y(PyGBoxed *self, PyObject *value, void *closure) { gint val; val = PyInt_AsLong(value); if (PyErr_Occurred()) return -1; pyg_boxed_get(self, GdkRectangle)->y = val; return 0; } %% override-attr GdkRectangle.width static int _wrap_gdk_rectangle__set_width(PyGBoxed *self, PyObject *value, void *closure) { gint val; val = PyInt_AsLong(value); if (PyErr_Occurred()) return -1; pyg_boxed_get(self, GdkRectangle)->width = val; return 0; } %% override-attr GdkRectangle.height static int _wrap_gdk_rectangle__set_height(PyGBoxed *self, PyObject *value, void *closure) { gint val; val = PyInt_AsLong(value); if (PyErr_Occurred()) return -1; pyg_boxed_get(self, GdkRectangle)->height = val; return 0; } %% override gdk_rectangle_intersect kwargs static PyObject * _wrap_gdk_rectangle_intersect(PyGObject *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "src", NULL }; PyObject *py_src; GdkRectangle src, dest = {0, 0, 0, 0}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GdkRectangle.intersect", kwlist, &py_src)) { return NULL; } if (!pyg_boxed_check(py_src, GDK_TYPE_RECTANGLE)) { if (!pygdk_rectangle_from_pyobject(py_src, &src)) { PyErr_Clear(); PyErr_SetString(PyExc_TypeError, "src must be a GdkRectangle or 4-tuple"); return NULL; } } else { src = *pyg_boxed_get(py_src, GdkRectangle); } gdk_rectangle_intersect(pyg_boxed_get(self, GdkRectangle), &src, &dest); return pyg_boxed_new(GDK_TYPE_RECTANGLE, &dest, TRUE, TRUE); } %% override gdk_rectangle_union kwargs static PyObject * _wrap_gdk_rectangle_union(PyGObject *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "src", NULL }; PyObject *py_src; GdkRectangle src, dest; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:GdkRectangle.union", kwlist, &py_src)) { return NULL; } if (!pyg_boxed_check(py_src, GDK_TYPE_RECTANGLE)) { if (!pygdk_rectangle_from_pyobject(py_src, &src)) { PyErr_Clear(); PyErr_SetString(PyExc_TypeError, "src must be a GdkRectangle or 4-tuple"); return NULL; } } else { src = *pyg_boxed_get(py_src, GdkRectangle); } gdk_rectangle_union(pyg_boxed_get(self, GdkRectangle), &src, &dest); return pyg_boxed_new(GDK_TYPE_RECTANGLE, &dest, TRUE, TRUE); }