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
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
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)