attached you'll find a patch against current cvs. Although
it is created on win32 almost all changes are _not_ win32
related. The ChangeLog entry follows. Ok to commit ?
2002-04-01 Hans Breuer <[EMAIL PROTECTED]>
* codegen/override.py : extended to allow 'sys.platform'
specific ignores
* examples/pygtk-demo/demos/colorsel.py : use
color = gtk.gdk.color_parse("blue")
to get the initial color
* examples/pygtk-demo/demos/draw.py : (new file)
demonstrating some simple drawing operations. It is
using the gtk.GC interface additions below.
* gtk/gdk.override : implement GdkGC.tp_getattr,
GdkGC.tp_setattr and gdk_gc_set_dashes (ported from #if 0'ed
code in gtk/gtk-types.c (should be removed there ?)
* gtk/gtk.override : ignore-win32 GTK_TYPE_PLUG
GTK_TYPE_SOCKET gtk_socket_new (the TYPE ignores do not work yet)
* config.h.win32 makefile.msc pygtk/makefile.msc :
new files to build pygtk on windoze using the established
glib/build/win32 infrastructure
* pygtk/gtk-fake-win32.c : (new file) implementing
gtk_plug_get_type() and gtk_socket_get_type(). It could
vanish if codegen/codegen.py has learned something like
'ignore-class-$(sys.platform) or my GtkPlug/GtkSocket
patch gets accepted with Gtk.
* gtk/gtkmodule.c : added a g_assert() to ensure importing
pygobject did work.
BTW: the makefile.msc's do export init$(MODULE) functions 'by hand'.
IMO using the Python define DL_EXPORT() can't work for inter-module
dependencies [explanation if there is interest].
Regards,
Hans
diff --exclude-from=c:\util\tool\diff.ign -u -r
from-cvs/gnome-python/pygtk/codegen/override.py
my-gtk/gnome-python/pygtk/codegen/override.py
--- from-cvs/gnome-python/pygtk/codegen/override.py Wed Mar 20 22:36:20 2002
+++ my-gtk/gnome-python/pygtk/codegen/override.py Mon Apr 01 16:37:14 2002
@@ -59,7 +59,7 @@
else:
line = buffer ; rest = ''
words = string.split(line)
- if words[0] == 'ignore':
+ if words[0] == 'ignore' or words[0] == 'ignore-' + sys.platform :
for func in words[1:]: self.ignores[func] = 1
for func in string.split(rest): self.ignores[func] = 1
elif words[0] == 'ignore-glob':
Only in my-gtk/gnome-python/pygtk: config.h.win32
diff --exclude-from=c:\util\tool\diff.ign -u -r
from-cvs/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py
my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py
--- from-cvs/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py Thu Jan 24
14:18:30 2002
+++ my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py Sun Mar 31
+00:03:02 2002
@@ -34,13 +34,7 @@
def main():
global window, color, da
- # How do I get a GdkColor?
- # GdkColormap.alloc() wants a GtkColor, not strings nor (r, g, b) and
- # gtk.gdk.Color isn't implemented...
- #color = gtk.gdk.Color()
- #color.red = 0
- #color.blue = 0xFFFF
- #color.green = 0
+ color = gtk.gdk.color_parse("blue")
window = gtk.Window()
window.set_title("Color selection")
@@ -60,7 +54,6 @@
da = gtk.DrawingArea()
da.set_size_request(200, 200)
- color = da.get_style().white
da.modify_bg(gtk.STATE_NORMAL, color)
frame.add(da)
Only in my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos: draw.py
diff --exclude-from=c:\util\tool\diff.ign -u -r
from-cvs/gnome-python/pygtk/gtk/gdk.override my-gtk/gnome-python/pygtk/gtk/gdk.override
--- from-cvs/gnome-python/pygtk/gtk/gdk.override Wed Mar 20 22:36:28 2002
+++ my-gtk/gnome-python/pygtk/gtk/gdk.override Sat Mar 30 19:24:00 2002
@@ -1206,6 +1206,160 @@
return pygc;
}
%%
+override-slot GdkGC.tp_getattr
+PyObject *
+_wrap_gdk_gc_tp_getattr(PyGObject *self, char *key)
+{
+ GdkGCValues gc;
+
+ if (!strcmp(key, "__members__"))
+ return Py_BuildValue("[ssssssssssssssssss]", "background", "cap_style",
+ "clip_mask", "clip_x_origin", "clip_y_origin",
+ "fill", "font", "foreground", "function",
+ "graphics_exposures", "join_style", "line_style",
+ "line_width", "stipple", "sub_window", "tile",
+ "ts_x_origin", "ts_y_origin");
+ gdk_gc_get_values(GDK_GC(self->obj), &gc);
+ if (!strcmp(key, "foreground")) return pyg_boxed_new(GDK_TYPE_COLOR,
+&(gc.foreground), TRUE, TRUE);
+ if (!strcmp(key, "background")) return pyg_boxed_new(GDK_TYPE_COLOR,
+&(gc.background), TRUE, TRUE);
+ if (!strcmp(key, "font")) return pyg_boxed_new(GDK_TYPE_FONT, gc.font, TRUE,
+TRUE);
+ if (!strcmp(key, "function")) return PyInt_FromLong(gc.function);
+ if (!strcmp(key, "fill")) return PyInt_FromLong(gc.fill);
+ if (!strcmp(key, "tile")) {
+ if (gc.tile != NULL) return pygobject_new((GObject *)gc.tile);
+ Py_INCREF(Py_None); return Py_None;
+ }
+ if (!strcmp(key, "stipple")) {
+ if (gc.stipple != NULL) return pygobject_new((GObject *)gc.stipple);
+ Py_INCREF(Py_None); return Py_None;
+ }
+ if (!strcmp(key, "clip_mask")) {
+ if (gc.clip_mask!=NULL) return pygobject_new((GObject *)gc.clip_mask);
+ Py_INCREF(Py_None); return Py_None;
+ }
+ if (!strcmp(key, "subwindow_mode"))
+ return PyInt_FromLong(gc.subwindow_mode);
+ if (!strcmp(key, "ts_x_origin")) return PyInt_FromLong(gc.ts_x_origin);
+ if (!strcmp(key, "ts_y_origin")) return PyInt_FromLong(gc.ts_y_origin);
+ if (!strcmp(key, "clip_x_origin")) return PyInt_FromLong(gc.clip_x_origin);
+ if (!strcmp(key, "clip_y_origin")) return PyInt_FromLong(gc.clip_y_origin);
+ if (!strcmp(key, "graphics_exposures"))
+ return PyInt_FromLong(gc.graphics_exposures);
+ if (!strcmp(key, "line_width")) return PyInt_FromLong(gc.line_width);
+ if (!strcmp(key, "line_style")) return PyInt_FromLong(gc.line_style);
+ if (!strcmp(key, "cap_style")) return PyInt_FromLong(gc.cap_style);
+ if (!strcmp(key, "join_style")) return PyInt_FromLong(gc.join_style);
+
+ return Py_FindMethod(_PyGdkGC_methods, (PyObject *)self, key);
+}
+%%
+override-slot GdkGC.tp_setattr
+static int
+_wrap_gdk_gc_tp_setattr(PyGObject *self, char *key, PyObject *value)
+{
+ GdkGC *gc = GDK_GC(self->obj);
+
+ if (value == NULL) {
+ PyErr_SetString(PyExc_TypeError, "can't delete attributes");
+ return -1;
+ }
+ if (PyInt_Check(value)) {
+ int i = PyInt_AsLong(value);
+ GdkGCValues v;
+ gdk_gc_get_values(gc, &v);
+ if (!strcmp(key, "function")) gdk_gc_set_function(gc, i);
+ else if (!strcmp(key, "fill")) gdk_gc_set_fill(gc, i);
+ else if (!strcmp(key, "subwindow_mode")) gdk_gc_set_subwindow(gc, i);
+ else if (!strcmp(key, "ts_x_origin"))
+ gdk_gc_set_ts_origin(gc, i, v.ts_y_origin);
+ else if (!strcmp(key, "ts_y_origin"))
+ gdk_gc_set_ts_origin(gc, v.ts_x_origin, i);
+ else if (!strcmp(key, "clip_x_origin"))
+ gdk_gc_set_clip_origin(gc, i, v.clip_y_origin);
+ else if (!strcmp(key, "clip_y_origin"))
+ gdk_gc_set_clip_origin(gc, v.clip_x_origin, i);
+ else if (!strcmp(key, "graphics_exposures")) gdk_gc_set_exposures(gc, i);
+ else if (!strcmp(key, "line_width"))
+ gdk_gc_set_line_attributes(gc, i,v.line_style,v.cap_style,v.join_style);
+ else if (!strcmp(key, "line_style"))
+ gdk_gc_set_line_attributes(gc, v.line_width,i,v.cap_style,v.join_style);
+ else if (!strcmp(key, "cap_style"))
+ gdk_gc_set_line_attributes(gc, v.line_width,v.line_style,i,v.join_style);
+ else if (!strcmp(key, "join_style"))
+ gdk_gc_set_line_attributes(gc, v.line_width,v.line_style,v.cap_style,i);
+ else {
+ PyErr_SetString(PyExc_TypeError,"type mismatch");
+ return -1;
+ }
+ } else if (pyg_boxed_check(value, GDK_TYPE_COLOR)) {
+ GdkColor *c = pyg_boxed_get(value, GdkColor);
+ if (!strcmp(key, "foreground")) gdk_gc_set_foreground(gc, c);
+ else if (!strcmp(key, "background")) gdk_gc_set_background(gc, c);
+ else {
+ PyErr_SetString(PyExc_TypeError,"type mismatch");
+ return -1;
+ }
+ } else if (pyg_boxed_check(value, GDK_TYPE_FONT)) {
+ if (!strcmp(key, "font")) gdk_gc_set_font(gc, pyg_boxed_get(value, GdkFont));
+ else{
+ PyErr_SetString(PyExc_TypeError,"type mismatch");
+ return -1;
+ }
+ } else if (pygobject_check(value, &PyGdkWindow_Type) || value == Py_None) {
+ PyGObject *window = (PyGObject *)value;
+ GdkWindow *w = (value==Py_None)?NULL:GDK_WINDOW(window->obj);
+ if (!strcmp(key, "tile")) gdk_gc_set_tile(gc, w);
+ else if (!strcmp(key, "stipple")) gdk_gc_set_stipple(gc, w);
+ else if (!strcmp(key, "clip_mask")) gdk_gc_set_clip_mask(gc, w);
+ else {
+ PyErr_SetString(PyExc_TypeError,"type mismatch");
+ return -1;
+ }
+ } else {
+ PyErr_SetString(PyExc_TypeError,"type mismatch");
+ return -1;
+ }
+ return 0;
+}
+%%
+override gdk_gc_set_dashes
+static PyObject *
+_wrap_gdk_gc_set_dashes(PyGObject *self, PyObject *args)
+{
+ gint dash_offset, n, i;
+ PyObject *list;
+ guchar *dash_list;
+
+ if (!PyArg_ParseTuple(args, "iO:GdkGC.set_dashes", &dash_offset, &list))
+ return NULL;
+ if (!PySequence_Check(list)) {
+ PyErr_SetString(PyExc_TypeError, "second argument must be a sequence");
+ return NULL;
+ }
+ n = PySequence_Length(list);
+ dash_list = g_new(char, n);
+ for (i = 0; i < n; i++) {
+ PyObject *item = PySequence_GetItem(list, i);
+ Py_DECREF(item);
+
+ if (!PyInt_Check(item)) {
+ PyErr_SetString(PyExc_TypeError, "sequence member must be an int");
+ g_free(dash_list);
+ return NULL;
+ }
+ dash_list[i] = (guchar)PyInt_AsLong(item);
+ if (dash_list[i] == 0) {
+ PyErr_SetString(PyExc_TypeError, "sequence member must not be 0");
+ g_free(dash_list);
+ return NULL;
+ }
+ }
+ gdk_gc_set_dashes(GDK_GC(self->obj), dash_offset, dash_list, n);
+ g_free(dash_list);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+%%
override gdk_drawable_get_size noargs
static PyObject *
_wrap_gdk_drawable_get_size(PyGObject *self)
Only in my-gtk/gnome-python/pygtk/gtk: gtk-fake-win32.c
diff --exclude-from=c:\util\tool\diff.ign -u -r
from-cvs/gnome-python/pygtk/gtk/gtk.override my-gtk/gnome-python/pygtk/gtk/gtk.override
--- from-cvs/gnome-python/pygtk/gtk/gtk.override Wed Mar 20 22:36:36 2002
+++ my-gtk/gnome-python/pygtk/gtk/gtk.override Sun Mar 31 10:57:48 2002
@@ -4934,3 +4934,8 @@
&max_size);
return Py_BuildValue("(dddd)", lower, upper, position, max_size);
}
+%%
+ignore-win32
+ GTK_TYPE_PLUG
+ GTK_TYPE_SOCKET
+ gtk_socket_new
diff --exclude-from=c:\util\tool\diff.ign -u -r
from-cvs/gnome-python/pygtk/gtk/gtkmodule.c my-gtk/gnome-python/pygtk/gtk/gtkmodule.c
--- from-cvs/gnome-python/pygtk/gtk/gtkmodule.c Sun Mar 31 22:42:40 2002
+++ my-gtk/gnome-python/pygtk/gtk/gtkmodule.c Sun Mar 31 22:43:46 2002
@@ -35,6 +35,7 @@
/* initialise gobject */
init_pygobject();
+ g_assert(pygobject_register_class != NULL);
/* set the default python encoding to utf-8 */
PyUnicode_SetDefaultEncoding("utf-8");
-------- Hans "at" Breuer "dot" Org -----------
Tell me what you need, and I'll tell you how to
get along without it. -- Dilbert