hugoruscitti/pilas

View on GitHub
pilasengine/imagenes/imagen.py

Summary

Maintainability
A
2 hrs
Test Coverage
# -*- encoding: utf-8 -*-
# pilas engine: un motor para hacer videojuegos
#
# Copyright 2010-2014 - Hugo Ruscitti
# License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html)
#
# Website - http://www.pilas-engine.com.ar
import os
from PyQt4 import QtGui


class Imagen(object):

    def __init__(self, pilas, ruta):
        self.ruta_original = ruta
        self.pilas = pilas
        self.repetir_horizontal = False
        self.repetir_vertical = False

        if isinstance(ruta, QtGui.QPixmap):
            self._imagen = ruta
        else:
            if ruta.lower().endswith("jpeg") or ruta.lower().endswith("jpg"):
                try:
                    self._imagen = self.cargar_jpeg(ruta)
                except:
                    self._imagen = QtGui.QPixmap(ruta)
            else:
                self._imagen = QtGui.QPixmap(ruta)

    def ancho(self):
        return self._imagen.size().width()

    def alto(self):
        return self._imagen.size().height()

    def centro(self):
        "Retorna una tupla con la coordenada del punto medio del la imagen."
        return (self.ancho()/2, self.alto()/2)

    def dibujar(self, painter, composicion):
        """Dibuja la imagen sobre la ventana que muestra el motor.

           x, y: indican la posicion dentro del mundo.
           dx, dy: es el punto centro de la imagen (importante para rotaciones).
           escala_x, escala_yindican cambio de tamano (1 significa normal).
           rotacion: angulo de inclinacion en sentido de las agujas del reloj.
        """
        if composicion:
            painter.setCompositionMode(composicion)
            self._dibujar_pixmap(painter)
        else:
            self._dibujar_pixmap(painter)

    def _dibujar_pixmap(self, painter):
        if self.repetir_horizontal or self.repetir_vertical:
            x = 0
            y = 0

            if self.repetir_horizontal:
                x = self.ancho() * 200

            if self.repetir_vertical:
                y = self.ancho() * 200

            painter.drawTiledPixmap(-x, -y, self.ancho() + x*2, self.alto() +y*2, self._imagen)
        else:
            painter.drawPixmap(0, 0, self._imagen)

    def __repr__(self):
        nombre_imagen = os.path.basename(self.ruta_original)
        return "<Imagen del archivo '%s'>" % (nombre_imagen)

    def definir_cuadro(self, cuadro):
        pass

    def avanzar(self, velocidad=60):
        pass