Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Aguiar <alanjas@hotmail.com>2013-10-16 01:19:33 (GMT)
committer Alan Aguiar <alanjas@hotmail.com>2013-10-16 01:19:33 (GMT)
commit52fd3338d859c3b4084c74ca068d8ee045cae110 (patch)
tree12815b18a27403f380c5be82f9ce27fd1feb592d
parentdf16081ef46cd342546702423581ea90ef4a926c (diff)
update sugargame to latest version
-rw-r--r--[-rwxr-xr-x]sugargame/__init__.py0
-rw-r--r--[-rwxr-xr-x]sugargame/canvas.py13
-rw-r--r--[-rwxr-xr-x]sugargame/event.py22
3 files changed, 29 insertions, 6 deletions
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: