# -*- coding: utf-8 -*- import pygame from api.Label import CLabel class CMultiLabel(CLabel): """ accepts a string separate with \n, creates a multi-line label to display text same properties as label except textLines is a list of strings. There is no text property. Set the size manually. Vertical size should be at least 30 pixels per line (with the default font) """ def __init__(self): CLabel.__init__(self) self.vSize = 35 def set_vertical(self, aVer=35): self.vSize = aVer def _update_image(self): self.image = pygame.Surface(self.size) self.image.fill(self.bgColor) if self.transparent: self.image.set_colorkey(self.bgColor) textLines = self.text.split('\n') numLines = len(textLines) #self.vSize = self.image.get_height() / numLines total_text_height = self.vSize * numLines fix = (self.image.get_height() - total_text_height) / 2 for lineNum in range(numLines): currentLine = textLines[lineNum] if self.transparent: fontSurface = self.font.render(currentLine, True, self.fgColor) else: fontSurface = self.font.render(currentLine, True, self.fgColor, self.bgColor) #center the text xPos = (self.image.get_width() - fontSurface.get_width())/2 yPos = lineNum * self.vSize + fix self.image.blit(fontSurface, (xPos, yPos)) self.rect = self.image.get_rect() self.rect.center = self.center