Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/CucaraSims.py
diff options
context:
space:
mode:
Diffstat (limited to 'CucaraSims.py')
-rw-r--r--CucaraSims.py187
1 files changed, 187 insertions, 0 deletions
diff --git a/CucaraSims.py b/CucaraSims.py
new file mode 100644
index 0000000..603ee74
--- /dev/null
+++ b/CucaraSims.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import pygame, gtk, pygtk, os, gtk, pygtk, gobject, sys, socket
+from pygame.locals import *
+from sugar.activity import activity
+
+from Main import Main
+
+class CucaraSims(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle, False)
+ self.set_title('CucaraSims')
+ #self.set_toolbox(activity.ActivityToolbox(self))
+ self.eventbox= PygameCanvas()
+ self.set_canvas(self.eventbox)
+
+ self.add_events(gtk.gdk.ALL_EVENTS_MASK)
+ self.connect("destroy", self.salir)
+
+ self.show_all()
+ self.realize()
+
+ os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
+ gobject.idle_add(self.get_run_game)
+
+ def get_run_game(self):
+ print "Lanzando CucaraSims."
+ pygame.init()
+ x, y, w, y= self.eventbox.get_allocation()
+ Main( (w,y) )
+ #Main()
+ return False
+
+ def salir(self, widget):
+ lambda w: gtk.main_quit()
+ sys.exit()
+
+class PygameCanvas(gtk.EventBox):
+ def __init__(self):
+ gtk.EventBox.__init__(self)
+ self.set_flags(gtk.CAN_FOCUS)
+ self.setup_events()
+ self.socket = gtk.Socket()
+ self.add(self.socket)
+ self.button_state = [0,0,0]
+ self.mouse_pos = (0,0)
+
+ def setup_events(self):
+ self.set_events(gtk.gdk.KEY_PRESS | gtk.gdk.EXPOSE | gtk.gdk.POINTER_MOTION_MASK | \
+ gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_MOTION_MASK | \
+ gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
+
+ self.connect("key-press-event", self.keypress)
+ self.connect("button_press_event", self.mousedown)
+ self.connect("motion-notify-event", self.mousemotion)
+ self.connect('expose-event', self.expose)
+ self.connect('configure-event', self.resize)
+ self.connect("focus-in-event", self.set_focus)
+
+ def keypress(self, selfmain, event, parametros= None):
+ nombre= gtk.gdk.keyval_name(event.keyval)
+ tipo= pygame.KEYDOWN
+ unic= str.lower(nombre)
+ valor= nombre
+ try:
+ valor= getattr(pygame, "K_%s" % (str.upper(nombre)))
+ except:
+ print "no has programado la traduccion de esta tecla: ", nombre
+ return False
+ evt = pygame.event.Event(tipo, key= valor, unicode= unic, mod=None)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def mousedown(self, widget, event):
+ evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN, button= event.button, pos=(int(event.x), int(event.y)))
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def mousemotion(self, widget, event):
+ x, y, state = event.window.get_pointer()
+ rel = (x - self.mouse_pos[0], y - self.mouse_pos[1])
+ self.mouse_pos= (int(x), int(y))
+ self.button_state = [
+ state & gtk.gdk.BUTTON1_MASK and 1 or 0,
+ state & gtk.gdk.BUTTON2_MASK and 1 or 0,
+ state & gtk.gdk.BUTTON3_MASK and 1 or 0,
+ ]
+ evt = pygame.event.Event(pygame.MOUSEMOTION, pos= self.mouse_pos, rel=rel, buttons=self.button_state)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False
+
+ def expose(self, event, widget):
+ if pygame.display.get_init():
+ try:
+ pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE))
+ except:
+ pass
+ return False # continue processing
+
+ def resize(self, widget, event):
+ evt = pygame.event.Event(pygame.VIDEORESIZE, size=(event.width,event.height), width=event.width, height=event.height)
+ try:
+ pygame.event.post(evt)
+ except:
+ pass
+ return False # continue processing
+
+ def set_focus(self, container, widget):
+ try:
+ pygame.display.update()
+ except:
+ pass
+ self.queue_draw()
+ return False
+
+# -----------------------------------------------
+# ******** El Juego en gtk ********
+# -----------------------------------------------
+class VentanaGTK(gtk.Window):
+ def __init__(self):
+ gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+ self.set_title("CucaraSims")
+ self.fullscreen()
+
+ #self.set_size_request(800,600)
+ self.socket = gtk.Socket()
+ self.add(self.socket)
+
+ self.gtkplug= gtkplug()
+ self.socket.add_id(self.gtkplug.get_id())
+
+ self.add_events(gtk.gdk.ALL_EVENTS_MASK)
+ self.connect("destroy", self.salir)
+ self.connect("set-focus-child", self.refresh)
+ self.show_all()
+
+ def refresh(self, widget, datos):
+ try:
+ pygame.display.update()
+ except:
+ pass
+ self.queue_draw()
+ return True
+
+ def salir(self, widget):
+ pygame.quit()
+ sys.exit()
+
+class gtkplug(gtk.Plug):
+ def __init__(self):
+ gtk.Plug.__init__(self, 0L)
+ self.set_title("CucaraSims")
+ self.eventbox= PygameCanvas()
+ self.add(self.eventbox)
+ self.ventana= None
+ self.show_all()
+
+ self.connect("embedded", self.embed_event)
+
+ os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
+ gobject.idle_add(self.get_run_game)
+
+ def get_run_game(self):
+ self.eventbox.socket.window.set_cursor(None)
+ print "Lanzando CucaraSims."
+ pygame.init()
+ #x, y, w, y= self.eventbox.get_allocation()
+ #Main( (w,y) )
+ Main()
+ return False
+
+ def embed_event(self, widget):
+ print "Juego embebido"
+
+if __name__=="__main__":
+ VentanaGTK()
+ gtk.main()