From 68c87bbd0a701df74f0e35ebf012ff461ebc8ef4 Mon Sep 17 00:00:00 2001 From: Alan Aguiar Date: Wed, 16 Oct 2013 16:03:29 +0000 Subject: update sugargame to latest version --- diff --git a/sugargame/__init__.py b/sugargame/__init__.py index 439eb0c..439eb0c 100755..100644 --- a/sugargame/__init__.py +++ b/sugargame/__init__.py diff --git a/sugargame/canvas.py b/sugargame/canvas.py index 980cb73..a43bf55 100755..100644 --- a/sugargame/canvas.py +++ b/sugargame/canvas.py @@ -27,6 +27,9 @@ class PygameCanvas(gtk.EventBox): self._socket = gtk.Socket() self.add(self._socket) + + self._initialized = False + self.show_all() def run_pygame(self, main_fn): @@ -37,11 +40,14 @@ class PygameCanvas(gtk.EventBox): gobject.idle_add(self._run_pygame_cb, main_fn) def _run_pygame_cb(self, main_fn): - assert pygame.display.get_surface() is None, "PygameCanvas.run_pygame can only be called once." + # PygameCanvas.run_pygame can only be called once + if self._initialized: + return # Preinitialize Pygame with the X window ID. - assert pygame.display.get_init() == False, "Pygame must not be initialized before calling PygameCanvas.run_pygame." os.environ['SDL_WINDOWID'] = str(self._socket.get_id()) + if pygame.display.get_surface() is not None: + pygame.display.quit() pygame.init() # Restore the default cursor. @@ -56,6 +62,9 @@ class PygameCanvas(gtk.EventBox): # Run the Pygame main loop. main_fn() + + self._initialized = True + return False def get_pygame_widget(self): diff --git a/sugargame/event.py b/sugargame/event.py index 4cc3be8..299c277 100755..100644 --- a/sugargame/event.py +++ b/sugargame/event.py @@ -2,7 +2,6 @@ import gtk import gobject import pygame import pygame.event -import logging class _MockEvent(object): def __init__(self, keyval): @@ -47,7 +46,8 @@ class Translator(object): # (add instead of set here because the main window is already realized) self._mainwindow.add_events( gtk.gdk.KEY_PRESS_MASK | \ - gtk.gdk.KEY_RELEASE_MASK \ + gtk.gdk.KEY_RELEASE_MASK | \ + gtk.gdk.VISIBILITY_NOTIFY_MASK ) self._inner_evb.set_events( @@ -55,7 +55,7 @@ class Translator(object): gtk.gdk.POINTER_MOTION_HINT_MASK | \ gtk.gdk.BUTTON_MOTION_MASK | \ gtk.gdk.BUTTON_PRESS_MASK | \ - gtk.gdk.BUTTON_RELEASE_MASK + gtk.gdk.BUTTON_RELEASE_MASK ) self._mainwindow.set_flags(gtk.CAN_FOCUS) @@ -63,6 +63,7 @@ class Translator(object): # Callback functions to link the event systems self._mainwindow.connect('unrealize', self._quit_cb) + self._mainwindow.connect('visibility_notify_event', self._visibility_cb) self._inner_evb.connect('key_press_event', self._keydown_cb) self._inner_evb.connect('key_release_event', self._keyup_cb) self._inner_evb.connect('button_press_event', self._mousedown_cb) @@ -70,6 +71,7 @@ class Translator(object): self._inner_evb.connect('motion-notify-event', self._mousemove_cb) self._inner_evb.connect('expose-event', self._expose_cb) self._inner_evb.connect('configure-event', self._resize_cb) + self._inner_evb.connect('screen-changed', self._screen_changed_cb) # Internal data self.__stopped = False @@ -87,8 +89,11 @@ class Translator(object): pygame.key.set_repeat = self._set_repeat pygame.mouse.get_pressed = self._get_mouse_pressed pygame.mouse.get_pos = self._get_mouse_pos + + def update_display(self): + pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE)) - def _expose_cb(self, event, widget): + def _expose_cb(self, widget, event): if pygame.display.get_init(): pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE)) return True @@ -99,10 +104,19 @@ class Translator(object): pygame.event.post(evt) return False # continue processing + def _screen_changed_cb(self, widget, screen): + if pygame.display.get_init(): + self.update_display() + def _quit_cb(self, data=None): self.__stopped = True pygame.event.post(pygame.event.Event(pygame.QUIT)) + def _visibility_cb(self, widget, event): + if pygame.display.get_init(): + self.update_display() + return False + def _keydown_cb(self, widget, event): key = event.keyval if key in self.__held: -- cgit v0.9.1