From 9d57ae40095b2928672b2f4b23a87b8d5927753e Mon Sep 17 00:00:00 2001 From: flavio Date: Wed, 07 Dec 2011 23:10:50 +0000 Subject: CucaraSims Base --- (limited to 'CucaraSims.py') 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() -- cgit v0.9.1