Package pilas :: Package interfaz :: Module boton
[hide private]
[frames] | no frames]

Source Code for Module pilas.interfaz.boton

 1  # -*- encoding: utf-8 -*- 
 2  # pilas engine - a video game framework. 
 3  # 
 4  # copyright 2010 - hugo ruscitti 
 5  # license: lgplv3 (see http://www.gnu.org/licenses/lgpl.html) 
 6  # 
 7  # website - http://www.pilas-engine.com.ar 
 8   
 9  import pilas 
10  from pilas.interfaz.base_interfaz import BaseInterfaz 
11   
12 -class Boton(BaseInterfaz):
13 """Representa un botón que se puede pulsar y disparar una acción.""" 14
15 - def __init__(self, texto="Sin texto", x=0, y=0, icono=None):
16 """Inicializa al actor. 17 18 :param texto: Texto que se mostrará dentro de botón. 19 :param x: Posición horizontal inicial. 20 :param y: Posición vertical inicial. 21 :param icono: Imagen que se mostrará sobre el botón. 22 """ 23 BaseInterfaz.__init__(self, x=x, y=y) 24 self.texto = texto 25 self._crear_imagenes_de_botones() 26 self.centro = ("centro", "centro") 27 self.funcion = None 28 self.fijo = True 29 30 if icono: 31 self.icono = pilas.imagenes.cargar(icono) 32 else: 33 self.icono = None 34 35 self.escena.mueve_mouse.conectar(self.cuando_mueve_el_mouse) 36 self.escena.click_de_mouse.conectar(self.cuando_hace_click)
37
38 - def conectar(self, funcion):
39 """Asocia la función a ejecutar cuando se haga click sobre el botón. 40 41 :param funcion: Referencia a la función que se desea vincular. 42 """ 43 self.funcion = funcion
44
46 "Genera las 3 imagenes de los botones." 47 ancho, alto = pilas.utils.obtener_area_de_texto(self.texto) 48 tema = pilas.imagenes.cargar("boton/tema.png") 49 50 self.imagen_normal = self._crear_imagen(tema, self.texto, ancho, 0) 51 self.imagen_sobre = self._crear_imagen(tema, self.texto, ancho, 103) 52 self.imagen_click = self._crear_imagen(tema, self.texto, ancho, 205) 53 54 self.imagen = self.imagen_normal
55
56 - def cuando_mueve_el_mouse(self, evento):
57 """Detecta el movimiento del mouse. 58 59 :param evento: El objeto que representa el movimiento del mouse. 60 """ 61 if self.activo: 62 if self.colisiona_con_un_punto(evento.x, evento.y): 63 self.imagen = self.imagen_sobre 64 else: 65 self.imagen = self.imagen_normal
66
67 - def cuando_hace_click(self, evento):
68 """Gestiona los clicks sobre el botón. 69 70 :param evento: Evento que representa al click. 71 """ 72 if self.activo: 73 if self.imagen == self.imagen_sobre: 74 self.imagen = self.imagen_click 75 76 if self.funcion: 77 self.funcion()
78
79 - def _crear_imagen(self, tema, texto, ancho, dx):
80 "Genera una imagen de superficie de boton." 81 imagen = pilas.imagenes.cargar_superficie(20 + ancho, 30) 82 imagen.pintar_parte_de_imagen(tema, dx, 0, 5, 25, 0, 0) 83 84 for x in range(1, ancho + 20, 5): 85 imagen.pintar_parte_de_imagen(tema, dx + 5, 0, 5, 25, x, 0) 86 87 imagen.pintar_parte_de_imagen(tema, dx + 75, 0, 5, 25, ancho + 15, 0) 88 imagen.texto(texto, 10, 17) 89 return imagen
90