Esempio n. 1
0
    def __init__(self, posx, posy, texto, size, tipo_texto, limite_der, dic = 0):
        """
        Similar a la clase texto, con la diferencia que este metodo acepta imagenes para ser
        intercaladas en el texto. Los parametros son iguales a la clase texto, exceptuando al parametro dic.
        Esta clase tiene ciertos defectos a la hora de justificar con imagenes en los bordes.
        @param dic: representa un diccionario de la estructura (X:Z) en donde X (tipo string)
        es la palabra del texto a sustituir por la imagen, y Z representa a la imagen (tipo pygame.Surface)
        que sera usada en la posicion de la palabra.
        @type dic: dict
        """            
        self.posx = posx
        self.posy = posy
        self.x = posx
        self.y = posy
        self.tipo_texto = tipo_texto
        self.img_palabras = []
        self.texto = texto
        self.buffer = ""
        self.espacio = 6
        self.nro_linea = 0
        self.ancho_final = 0
        self.dic = dic
        
        for i in self.texto:
            self.buffer += i
            if i == " ":
                if (self.buffer == u"Reproducción " and self.tipo_texto != "texto_act")  or (self.buffer == u"reproducción " and self.tipo_texto != "texto_act"):
                    pass
                else:
                    self.img_palabras.append(palabra(self.buffer.strip(" "), size, self.tipo_texto))
                    self.buffer = ""
        
        self.limite_izq = posx
        self.limite_der = limite_der
#        medidas, ancho, alto_lineas = self.calcular(self.posx)
        medidas,ancho,alto_lineas = self.calcular2(self.posx)
        self.ancho_final = ancho 
        self.espacio = 6 + medidas[self.nro_linea]
        
        for i in self.img_palabras:            
            if (self.posx + i.rect.width > self.limite_der) or (i.palabra == "|"):
                self.nro_linea += 1
                self.espacio = 6 + medidas[self.nro_linea]
                self.posx = self.limite_izq 
#                posy += alto_lineas[self.nro_linea-1]
                posy += alto_lineas
            i.rect.left = self.posx
#            i.rect.y = posy + alto_lineas[self.nro_linea]/2 - i.rect.h/2    
            i.rect.y = posy + alto_lineas/2 - i.rect.h/2    
            
            if not self.dic == 0 :                                    
                for n in self.dic.keys():
                    if n == i.palabra:                            
                        i.image = self.dic[n]
                        i.rect.width,i.rect.height = i.image.get_size()  
                        i.rect.x = self.posx
                        i.rect.y = posy        
            self.posx += i.rect.width + self.espacio                
Esempio n. 2
0
 def renderizado(self):
     """
     Se encarga de dar formato y renderizar el texto deseado en la superficie seleccionada.
     """
     palabras = ""
     for i in self.palabra:
         palabras += i
     self.palabra_f = palabras
     palabras += self.indicador
     x = palabra(palabras, 20, "caja_texto")
     self.letras_caja.image = x.get_palabra()
     self.letras_caja.image.set_colorkey((255, 255, 255))
     self.letras_caja.rect = self.letras_caja.image.get_rect()
     rect = (self.letras_caja.rect.width - self.ancho, 0, self.ancho, self.letras_caja.rect.height)
     if self.letras_caja.rect.width > self.ancho:
         self.letras_caja.image = self.letras_caja.image.subsurface(rect)
     self.letras_caja.rect = x.get_rect()
     self.letras_caja.rect.top = self.rect.top
     self.letras_caja.rect.left = self.rect.left
Esempio n. 3
0
    def __init__(self, posx, posy, texto, size, tipo_texto, limite_der, personalizado = True):
        """
        Inicializa el el objeto, define los valores por defecto, calcula la justificación y los margenes
        correspondientes.
        
        @param posx: Coordenada X donde se desea dibujar el texto.
        @type posx: int
        @param posy: Coordenada Y donde se desea dibujar el texto.
        @type posy: int
        @param texto: Texto que se desea imprimir.
        @type texto: str
        @param size: Tamaño del texto que se desea imprimir. Debe estar entre 18 y 22.
        @type size: int
        @param tipo_texto: Clasificación del texto de acuerdo a la función que desempeña.
        @type tipo_texto: str
        @param limite_der: Indica el margen derecho desde donde se comienza a dibujar el texto.
        @type limite_der: int
        @param personalizado: Si es True, los margenes son ajustados manualmente. Si es False, 
        los margenes son ajustados automáticamente según el tipo de texto y la posición.
        @type personalizado: bool
        """
        self.posx = posx
        self.posy = posy
        self.x = posx
        self.y = posy
        self.tipo_texto = tipo_texto
        self.img_palabras = []
        self.texto = texto
        self.buffer = ""
        self.espacio = 6
        self.nro_linea = 0
        self.ancho_final = 0        
        
        for i in self.texto:
            self.buffer += i
            if i == " ":
                if (self.buffer == u"Reproducción " and self.tipo_texto != "texto_act")  or (self.buffer == u"reproducción " and self.tipo_texto != "texto_act"):
                    pass
                else:
                    self.img_palabras.append(palabra(self.buffer.strip(" "), size, self.tipo_texto))
                    self.buffer = ""

        n_lineas = self.calcular_margenes()
        
        if personalizado == True:
            self.limite_izq = posx
            self.limite_der = limite_der
            medidas, ancho, lineas = self.calcular(self.posx, posy)
            self.ancho_final = ancho * lineas
            self.espacio = 6 + medidas[self.nro_linea]
            for i in self.img_palabras:
                if self.posx + i.rect.width > self.limite_der:
                    self.nro_linea += 1
                    self.espacio = 6 + medidas[self.nro_linea]
                    self.posx = self.limite_izq
                    posy += i.rect.height
                i.rect.left = self.posx
                i.rect.top = posy
                self.posx += i.rect.width + self.espacio
                
            width = 0
            for i in self.img_palabras:
                width += i.image.get_width()
            self.rect = pygame.Rect(self.x, self.y, width, self.ancho_final)
                
        elif personalizado == False:
            
            if self.tipo_texto == "instruccion":
                self.limite_izq, self.limite_der = (self.x, limite_der)
                self.posx = self.x + 32
            
            elif n_lineas == 1:
                self.limite_izq, self.limite_der = (256, 768)
                self.posx = 256
            
            elif n_lineas ==  2:
                self.limite_izq, self.limite_der = (192, 832)
                self.posx = 224
            
            elif n_lineas >= 3:
                self.limite_izq, self.limite_der = (32, 992)
                self.posx = 64
              
            else:
                self.limite_izq, self.limite_der = (0, 1024)
                self.posx = 0
            medidas, ancho, lineas = self.calcular(self.posx, posy) 
            ancho_total = ancho * lineas
            posy = 382 - (ancho_total/2)
            if self.tipo_texto == "instruccion":
                posy = self.y
            self.espacio = 6 + medidas[self.nro_linea]
            for i in self.img_palabras:
                if self.posx + i.rect.width > self.limite_der:
                    self.nro_linea += 1
                    self.espacio = 6 + medidas[self.nro_linea]
                    self.posx = self.limite_izq
                    posy += i.rect.height
                i.rect.left = self.posx
                i.rect.top = posy
                self.posx += i.rect.width + self.espacio
            width = 0
            for i in self.img_palabras:
                width += i.image.get_width()
            self.rect = pygame.Rect(self.x, self.y, width, ancho_total)