pilas.interfaz.boton

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
    45 -    def _crear_imagenes_de_botones(self):
    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