Re: [pygtk] Problem with ExposeEvent changes

2002-06-09 Thread James Henstridge

Matt Wilson wrote:

>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 ...
>>
>>
And I checked in a patch to fix this yesterday.  It should now work okay 
(no gtk.gdk.EventExpose object, but added some casts to the code 
generator to get rid of the warnings.

James.

-- 
Email: [EMAIL PROTECTED]  | Linux.conf.au 2003 Call for Papers out
WWW:   http://www.daa.com.au/~james/ |   http://conf.linux.org.au/cfp.html




___
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/



Re: [pygtk] Problem with ExposeEvent changes

2002-06-08 Thread Matt Wilson


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/
___