Beispiel #1
0
    def log(self, params):
        if (self._widgetlog == None):
            self._widgetlog = WidgetLog()
        else:
            self._widgetlog.show()

        self._widgetlog.imprimir(params)
Beispiel #2
0
    def log(self, params):
        if (self._widgetlog == None):
            self._widgetlog = WidgetLog()
        else:
            self._widgetlog.show()

        self._widgetlog.imprimir(params)
Beispiel #3
0
class Motor(object):
    """Representa la ventana principal de pilas.

    Esta clase construirá el objeto apuntado por el atributo
    ``pilas.motor``, asi que será el representante de todas
    las funcionalidades multimedia.

    Internamente, este motor, tratará de usar OpenGl para acelerar
    el dibujado en pantalla si la tarjeta de video lo soporta.
    """

    def __init__(self, usar_motor, permitir_depuracion, audio):
        import sys

        if not '-i' in sys.argv:
            self._iniciar_aplicacion()

        self.usar_motor = usar_motor

        self.nombre = usar_motor
        self.permitir_depuracion = permitir_depuracion

        self._inicializar_variables()
        self._inicializar_sistema_de_audio(audio)

        # Creamos la variable para controlar la ventana de log
        self._widgetlog = None

    def _iniciar_aplicacion(self):
        self.app = QtGui.QApplication([])
        self.app.setApplicationName("pilas")

    def _inicializar_variables(self):
        self.camara_x = 0
        self.camara_y = 0
        self.libreria_imagenes = LibreriaImagenes()

    def _inicializar_sistema_de_audio(self, audio):
        sistemas_de_sonido = ['deshabilitado', 'pygame', 'phonon', 'gst']

        if audio not in sistemas_de_sonido:
            error = "El sistema de audio '%s' es invalido" % (audio)
            sugerencia = ". Use alguno de los siguientes: %s" % (str(sistemas_de_sonido))
            raise Exception(error + sugerencia)

        if audio == 'gst':
            try:
                import gst
            except ImportError:
                raise Exception("Error, el sistema de audio GST (gstreamer) no esta disponible.")
        elif audio == 'phonon':
            from PyQt4 import phonon
            self.media = phonon.Phonon.MediaObject()
            self.audio = phonon.Phonon.AudioOutput(phonon.Phonon.MusicCategory)
            self.path = phonon.Phonon.createPath(self.media, self.audio)
            self.player = self.media
            self.clase_sonido = SonidoPhonon
            self.clase_musica = MusicaPhonon
        elif audio == 'pygame':
            try:
                import pygame
                pygame.mixer.init()
                self.player = None
                self.clase_sonido = SonidoPygame
                self.clase_musica = MusicaPygame
            except ImportError:
                raise Exception("Error, el sistema de audio pygame no esta disponible")
                audio = "deshabilitado"
        elif audio == 'gst':
            self.player = gst.element_factory_make("playbin2", "player")
            self.clase_sonido = SonidoGST
            self.clase_musica = MusicaGST

        # Si se deshabilita el sistema de sonido completo.
        if audio == 'deshabilitado':
            self.player = None
            self.clase_sonido = SonidoDeshabilitado
            self.clase_musica = MusicaDeshabilitada

    def terminar(self):
        self.ventana.close()

    def iniciar_ventana(self, ancho, alto, titulo, pantalla_completa,
                        gestor_escenas, rendimiento, centrado):
        self.ventana = Ventana()
        self.ventana.resize(ancho, alto)

        if centrado:
            resolucion_pantalla = QtGui.QDesktopWidget().screenGeometry()
            self.ventana.move((resolucion_pantalla.width() - ancho)/2, (resolucion_pantalla.height() - alto)/2)

        mostrar_ventana = True

        if self.usar_motor == 'qtgl':
            self.canvas = CanvasOpenGlWidget(self, ancho, alto, gestor_escenas,
                                             self.permitir_depuracion, rendimiento)
        else:
            self.canvas = CanvasNormalWidget(self, ancho, alto, gestor_escenas,
                                             self.permitir_depuracion, rendimiento)

        self.ventana.set_canvas(self.canvas)
        self.canvas.setFocus()

        self.ancho_original = ancho
        self.alto_original = alto
        self.titulo = titulo
        self.ventana.setWindowTitle(self.titulo)

        if mostrar_ventana:
            self.ventana.show()
            self.ventana.raise_()

        if pantalla_completa:
            self.canvas.pantalla_completa()

    def modificar_ventana(self, ancho, alto, titulo, pantalla_completa):
        self.titulo = titulo
        self.ventana.setWindowTitle(self.titulo)
        self.canvas.original_width = ancho
        self.canvas.original_height = alto
        self.ventana.resize(ancho, alto)

        if pantalla_completa:
            self.canvas.pantalla_completa()
        else:
            self.canvas.pantalla_modo_ventana()

    def ocultar_puntero_del_mouse(self):
        self.canvas.setCursor(QtGui.QCursor(Qt.BlankCursor))

    def mostrar_puntero_del_mouse(self):
        self.canvas.setCursor(QtGui.QCursor(Qt.ArrowCursor))

    def ejecutar_bucle_principal(self):
        if getattr(self, 'app', None):
            sys.exit(self.app.exec_())

    def definir_centro_de_la_camara(self, x, y):
        self.camara_x = x
        self.camara_y = y

    def obtener_centro_de_la_camara(self):
        return (self.camara_x, self.camara_y)

    def centro_fisico(self):
        "Centro de la ventana para situar el punto (0, 0)"
        return self.ancho_original/2, self.alto_original/2

    @dev.deprecated(se_desactiva_en="0.80", se_elimina_en="0.81",
                    reemplazo="pilas.mundo.obtener_area")
    def obtener_area(self):
        return (self.ancho_original, self.alto_original)

    def obtener_area_de_texto(self, cadena, magnitud=10, vertical=False, fuente=None, ancho=0):
        pic = QtGui.QPicture()
        p = QtGui.QPainter(pic)

        if fuente:
            nombre_de_fuente = Texto.cargar_fuente_desde_cache(fuente)
        else:
            nombre_de_fuente = p.font().family()

        font = QtGui.QFont(nombre_de_fuente, magnitud)
        p.setFont(font)

        alto = 0

        if vertical:
            lineas = [t for t in cadena]
        else:
            lineas = cadena.split('\n')

        if not ancho:
            flags = QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop
        else:
            flags = QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap | QtCore.Qt.AlignTop

        for line in lineas:
            if line == '':
                line = ' '

            brect = p.drawText(QtCore.QRect(0, 0, ancho, 2000), flags, line)
            ancho = max(ancho, brect.width())
            alto += brect.height()

        p.end()
        return (ancho, alto)

    def obtener_actor(self, imagen, x, y):
        return Actor(imagen, x, y)

    def obtener_texto(self, texto, magnitud, vertical=False, fuente=None, color=pilas.colores.negro, ancho=None):
        return Texto(texto, magnitud, self, vertical, fuente, color=color, ancho=ancho)

    def obtener_grilla(self, ruta, columnas, filas):
        return Grilla(ruta, columnas, filas)

    def cargar_sonido(self, ruta):
        return self.clase_sonido(self.player, ruta)

    def cargar_musica(self, ruta):
        return self.clase_musica(self.player, ruta)

    def deshabilitar_sonido(self, estado=True):
        self.clase_sonido.deshabilitado = estado

    def deshabilitar_musica(self, estado=True):
        self.clase_musica.deshabilitado = estado

    def cargar_imagen(self, ruta):
        #if pilas.mundo.motor.libreria_imagenes.tiene(ruta):
        #    return pilas.mundo.motor.libreria_imagenes.obtener_imagen(ruta)
        #else:
        #  return Imagen(ruta)
        return Imagen(ruta)

    def obtener_lienzo(self):
        return Lienzo()

    def obtener_superficie(self, ancho, alto):
        return Superficie(ancho, alto)

    def log(self, params):
        if (self._widgetlog == None):
            self._widgetlog = WidgetLog()
        else:
            self._widgetlog.show()

        self._widgetlog.imprimir(params)

    def capturar_pantalla(self, nombre_archivo):
        self.canvas.save_to_disk(nombre_archivo)
Beispiel #4
0
class Motor(object):
    """Representa la ventana principal de pilas.

    Esta clase construirá el objeto apuntado por el atributo
    ``pilas.motor``, asi que será el representante de todas
    las funcionalidades multimedia.

    Internamente, este motor, tratará de usar OpenGl para acelerar
    el dibujado en pantalla si la tarjeta de video lo soporta.
    """
    def __init__(self, usar_motor, permitir_depuracion, audio):
        import sys

        if not '-i' in sys.argv:
            self._iniciar_aplicacion()

        self.usar_motor = usar_motor

        self.nombre = usar_motor
        self.permitir_depuracion = permitir_depuracion

        self._inicializar_variables()
        self._inicializar_sistema_de_audio(audio)

        # Creamos la variable para controlar la ventana de log
        self._widgetlog = None

    def _iniciar_aplicacion(self):
        self.app = QtGui.QApplication([])
        self.app.setApplicationName("pilas")

    def _inicializar_variables(self):
        self.camara_x = 0
        self.camara_y = 0
        self.libreria_imagenes = LibreriaImagenes()

    def _inicializar_sistema_de_audio(self, audio):
        sistemas_de_sonido = ['deshabilitado', 'pygame', 'phonon', 'gst']

        if audio not in sistemas_de_sonido:
            error = "El sistema de audio '%s' es invalido" % (audio)
            sugerencia = ". Use alguno de los siguientes: %s" % (
                str(sistemas_de_sonido))
            raise Exception(error + sugerencia)

        if audio == 'gst':
            try:
                import gst
            except ImportError:
                raise Exception(
                    "Error, el sistema de audio GST (gstreamer) no esta disponible."
                )
        elif audio == 'phonon':
            from PyQt4 import phonon
            self.media = phonon.Phonon.MediaObject()
            self.audio = phonon.Phonon.AudioOutput(phonon.Phonon.MusicCategory)
            self.path = phonon.Phonon.createPath(self.media, self.audio)
            self.player = self.media
            self.clase_sonido = SonidoPhonon
            self.clase_musica = MusicaPhonon
        elif audio == 'pygame':
            try:
                import pygame
                pygame.mixer.init()
                self.player = None
                self.clase_sonido = SonidoPygame
                self.clase_musica = MusicaPygame
            except ImportError:
                raise Exception(
                    "Error, el sistema de audio pygame no esta disponible")
                audio = "deshabilitado"
        elif audio == 'gst':
            self.player = gst.element_factory_make("playbin2", "player")
            self.clase_sonido = SonidoGST
            self.clase_musica = MusicaGST

        # Si se deshabilita el sistema de sonido completo.
        if audio == 'deshabilitado':
            self.player = None
            self.clase_sonido = SonidoDeshabilitado
            self.clase_musica = MusicaDeshabilitada

    def terminar(self):
        self.ventana.close()

    def iniciar_ventana(self, ancho, alto, titulo, pantalla_completa,
                        gestor_escenas, rendimiento, centrado):
        self.ventana = Ventana()
        self.ventana.resize(ancho, alto)

        if centrado:
            resolucion_pantalla = QtGui.QDesktopWidget().screenGeometry()
            self.ventana.move((resolucion_pantalla.width() - ancho) / 2,
                              (resolucion_pantalla.height() - alto) / 2)

        mostrar_ventana = True

        if self.usar_motor == 'qtgl':
            self.canvas = CanvasOpenGlWidget(self, ancho, alto, gestor_escenas,
                                             self.permitir_depuracion,
                                             rendimiento)
        else:
            self.canvas = CanvasNormalWidget(self, ancho, alto, gestor_escenas,
                                             self.permitir_depuracion,
                                             rendimiento)

        self.ventana.set_canvas(self.canvas)
        self.canvas.setFocus()

        self.ancho_original = ancho
        self.alto_original = alto
        self.titulo = titulo
        self.ventana.setWindowTitle(self.titulo)

        if mostrar_ventana:
            self.ventana.show()
            self.ventana.raise_()

        if pantalla_completa:
            self.canvas.pantalla_completa()

    def modificar_ventana(self, ancho, alto, titulo, pantalla_completa):
        self.titulo = titulo
        self.ventana.setWindowTitle(self.titulo)
        self.canvas.original_width = ancho
        self.canvas.original_height = alto
        self.ventana.resize(ancho, alto)

        if pantalla_completa:
            self.canvas.pantalla_completa()
        else:
            self.canvas.pantalla_modo_ventana()

    def ocultar_puntero_del_mouse(self):
        self.canvas.setCursor(QtGui.QCursor(Qt.BlankCursor))

    def mostrar_puntero_del_mouse(self):
        self.canvas.setCursor(QtGui.QCursor(Qt.ArrowCursor))

    def ejecutar_bucle_principal(self):
        if getattr(self, 'app', None):
            sys.exit(self.app.exec_())

    def definir_centro_de_la_camara(self, x, y):
        self.camara_x = x
        self.camara_y = y

    def obtener_centro_de_la_camara(self):
        return (self.camara_x, self.camara_y)

    def centro_fisico(self):
        "Centro de la ventana para situar el punto (0, 0)"
        return self.ancho_original / 2, self.alto_original / 2

    @dev.deprecated(se_desactiva_en="0.80",
                    se_elimina_en="0.81",
                    reemplazo="pilas.mundo.obtener_area")
    def obtener_area(self):
        return (self.ancho_original, self.alto_original)

    def obtener_area_de_texto(self,
                              cadena,
                              magnitud=10,
                              vertical=False,
                              fuente=None,
                              ancho=0):
        pic = QtGui.QPicture()
        p = QtGui.QPainter(pic)

        if fuente:
            nombre_de_fuente = Texto.cargar_fuente_desde_cache(fuente)
        else:
            nombre_de_fuente = p.font().family()

        font = QtGui.QFont(nombre_de_fuente, magnitud)
        p.setFont(font)

        alto = 0

        if vertical:
            lineas = [t for t in cadena]
        else:
            lineas = cadena.split('\n')

        if not ancho:
            flags = QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop
        else:
            flags = QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap | QtCore.Qt.AlignTop

        for line in lineas:
            if line == '':
                line = ' '

            brect = p.drawText(QtCore.QRect(0, 0, ancho, 2000), flags, line)
            ancho = max(ancho, brect.width())
            alto += brect.height()

        p.end()
        return (ancho, alto)

    def obtener_actor(self, imagen, x, y):
        return Actor(imagen, x, y)

    def obtener_texto(self,
                      texto,
                      magnitud,
                      vertical=False,
                      fuente=None,
                      color=pilas.colores.negro,
                      ancho=None):
        return Texto(texto,
                     magnitud,
                     self,
                     vertical,
                     fuente,
                     color=color,
                     ancho=ancho)

    def obtener_grilla(self, ruta, columnas, filas):
        return Grilla(ruta, columnas, filas)

    def cargar_sonido(self, ruta):
        return self.clase_sonido(self.player, ruta)

    def cargar_musica(self, ruta):
        return self.clase_musica(self.player, ruta)

    def deshabilitar_sonido(self, estado=True):
        self.clase_sonido.deshabilitado = estado

    def deshabilitar_musica(self, estado=True):
        self.clase_musica.deshabilitado = estado

    def cargar_imagen(self, ruta):
        #if pilas.mundo.motor.libreria_imagenes.tiene(ruta):
        #    return pilas.mundo.motor.libreria_imagenes.obtener_imagen(ruta)
        #else:
        #  return Imagen(ruta)
        return Imagen(ruta)

    def obtener_lienzo(self):
        return Lienzo()

    def obtener_superficie(self, ancho, alto):
        return Superficie(ancho, alto)

    def log(self, params):
        if (self._widgetlog == None):
            self._widgetlog = WidgetLog()
        else:
            self._widgetlog.show()

        self._widgetlog.imprimir(params)

    def capturar_pantalla(self, nombre_archivo):
        self.canvas.save_to_disk(nombre_archivo)