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/
_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to