I broke it. Will fix early next week.
Matt
On Thu, Jun 06, 2002 at 02:10:03PM -0500, Art Haas wrote:
> Hi.
>
> The latest pygtk2 has lost the 'area' field in expose events. Here's
> the warning that now pops up when I run a drawing example program
> I have ...
>
> File "win8.py", line 472, in expose_event
> area = event.area
> AttributeError: 'gtk.gdk.EventExpose' object has no attribute
> 'area'
>
> The code is the handler for an expose_event in a drawing area ...
>
> def expose_event(widget, event):
> global pixmap
> area = event.area
> gc = widget.get_style().fg_gc[gtk.STATE_NORMAL]
> win = widget.window
> win.draw_drawable(gc, pixmap, area[0], area[1],
> area[0], area[1], area[2], area[3])
> return gtk.FALSE
>
> A CVS update today has pulled in the following changes which seem
> like the likely cause ...
>
> 2002-06-03 Matt Wilson <[EMAIL PROTECTED]>
>
> * gtk/gdk-types.defs (EventExpose): added to make the code
> generator write GdkEventExpose * for
> _wrap_gtk_container_propagate_expose (gets rid of a warning)
>
> I tried adding the appropriate "fields" bits to the scheme code
> in the hope that their addition would fix the problem, but the
> resulting python module segfaulted immediately, so my efforts
> were a failure. :-(
>
> Below is a hacked-up version of the "scribble.py" script
> found in the examples/simple directory that I made run under
> pygtk2. It demonstrates the warning. Feel free to swap out
> the existing scribble.py script which is more for the older
> pygtk release with mine if you want.
>
> =
> #!/usr/bin/env python
>
> #this is a simple translation of the scribble example that comes with GTK+
>
> import gtk
>
> pixmap = None
>
> def configure_event(widget, event):
> global pixmap
> win = widget.window
> width = win.get_geometry()[2]
> height = win.get_geometry()[3]
> pixmap = gtk.gdk.Pixmap(win, width, height, -1)
> pixmap.draw_rectangle(widget.get_style().white_gc, gtk.TRUE,
> 0, 0, width, height)
> return gtk.TRUE
>
> def expose_event(widget, event):
> area = event.area
> gc = widget.get_style().fg_gc[gtk.STATE_NORMAL]
> win = widget.window
> win.draw_drawable(gc, pixmap, area[0], area[1], area[0],
> area[1], area[2], area[3])
> return gtk.FALSE
>
> def draw_brush(widget, x, y):
> rect = (x-5, y-5, 10, 10)
> pixmap.draw_rectangle(widget.get_style().black_gc, gtk.TRUE,
> x-5, y-5, 10, 10)
> widget.queue_draw()
>
> def button_press_event(widget, event):
> if event.button == 1 and pixmap != None:
> draw_brush(widget, event.x, event.y)
> return gtk.TRUE
>
> def motion_notify_event(widget, event):
> if event.is_hint:
> x, y, state = event.window.get_pointer()
> else:
> x = event.x; y = event.y
> state = event.state
> if state & gtk.gdk.BUTTON1_MASK and pixmap != None:
> draw_brush(widget, x, y)
> return gtk.TRUE
>
> def main():
> win = gtk.Window()
> win.set_title('Test Input')
> win.connect('destroy', lambda win: gtk.main_quit())
> win.set_border_width(5)
>
> vbox = gtk.VBox(spacing=3)
> win.add(vbox)
> vbox.show()
>
> drawing_area = gtk.DrawingArea()
> drawing_area.set_size_request(200, 200)
> vbox.pack_start(drawing_area)
> drawing_area.show()
>
> drawing_area.connect("expose_event", expose_event)
> drawing_area.connect("configure_event", configure_event)
> drawing_area.connect("motion_notify_event", motion_notify_event)
> drawing_area.connect("button_press_event", button_press_event)
> drawing_area.set_events(gtk.gdk.EXPOSURE_MASK |
> gtk.gdk.LEAVE_NOTIFY_MASK |
> gtk.gdk.BUTTON_PRESS_MASK |
> gtk.gdk.POINTER_MOTION_MASK |
> gtk.gdk.POINTER_MOTION_HINT_MASK)
>
> button = gtk.Button("Quit")
> vbox.pack_start(button, expand=gtk.FALSE, fill=gtk.FALSE)
> button.connect("clicked", lambda widget, win=win: win.destroy())
> button.show()
> win.show()
> gtk.main()
>
> if __name__ == '__main__':
> main()
> =
>
> Thanks for all the work on PyGTK.
>
> --
> They that can give up essential liberty to obtain a little temporary
> safety deserve neither liberty nor safety.
> -- Benjamin Franklin, Historical Review of Pennsylvania, 1759
> ___
> pygtk mailing list [EMAIL PROTECTED]
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
___