def __init__(self, app, player, font=None, colour=None, shadowColour=None, backColour=None): pygame.sprite.Sprite.__init__(self) if font is None: font = app.fonts.countdownFont if colour is None: colour = app.theme.colours.countDownColour if shadowColour is None: shadowColour = app.theme.colours.countDownShadow self.app = app self.player = player self.font = font self.colour = colour self.shadowColour = shadowColour self.foreText = TextImage(' ', font, colour, backColour, antialias=True) self.shadowText = TextImage('', font, shadowColour, backColour, antialias=True)
class CountDown(pygame.sprite.Sprite): def __init__(self, app, player, font=None, colour=None, shadowColour=None, backColour=None): pygame.sprite.Sprite.__init__(self) if font is None: font = app.fonts.countdownFont if colour is None: colour = app.theme.colours.countDownColour if shadowColour is None: shadowColour = app.theme.colours.countDownShadow self.app = app self.player = player self.font = font self.colour = colour self.shadowColour = shadowColour self.foreText = TextImage(' ', font, colour, backColour, antialias=True) self.shadowText = TextImage('', font, shadowColour, backColour, antialias=True) def update(self): bomber = self.player.items.get(Bomber) counter = int(5.99 * bomber.timeRemaining / bomber.totalTimeLimit) if counter == 0: text = '' else: text = str(counter) if text == self.foreText.text: return self.foreText.text = text self.shadowText.text = text image1 = self.foreText.getImage(self.app) image2 = self.shadowText.getImage(self.app) self.image = pygame.Surface( (image1.get_width() + 2, image1.get_height() + 2), pygame.SRCALPHA) self.rect = self.image.get_rect() self.image.blit(image2, (2, 2)) self.image.blit(image1, (0, 0))
def __init__(self, app, pos, text, font, stdColour, hvrColour, hotkey=None, backColour=None, onClick=None): self.stdImage = TextImage(text, font, stdColour, backColour) self.hvrImage = TextImage(text, font, hvrColour, backColour) super(TextButton, self).__init__(app, pos, self.stdImage, self.hvrImage, hotkey, onClick) self.app.screenManager.onResize.addListener(self.appResized)
def __init__(self, app, text, font, pos, colour=(0, 128, 0), anchor='topleft', shadow=False, backColour=None, antialias=True): super(TextElement, self).__init__(app) self.pos = pos self.anchor = anchor self.image = TextImage(text, font, colour, backColour, antialias) self.__shadow = None self.setShadow(shadow) self._surface = None self.rect = None app.screenManager.onResize.addListener(self.appResized)
def __init__(self, app, area, items, font, colour, hlColour=None, showBtns=True): super(ListBox, self).__init__(app) self.area = area self.items = items self.font = font self.showBtns = showBtns self.onValueChanged = Event() self.setColour(colour, hlColour) self.offset = 0 self.index = -1 # Create up and down buttons. if showBtns: img1 = TextImage('up', font, colour) img2 = TextImage('up', font, self.hlColour) self.upBtn = HoverButton( self.app, Location(AttachedPoint((0, 0), self._getRect, 'topright'), 'topright'), img1, img2) self.upBtn.onClick.addListener(self.upClick) img1 = TextImage('down', font, colour) img2 = TextImage('down', font, self.hlColour) self.dnBtn = HoverButton( self.app, Location(AttachedPoint((0, 0), self._getRect, 'bottomright'), 'bottomright'), img1, img2) self.dnBtn.onClick.addListener(self.dnClick)
class TextButton(HoverButton): 'A HoverButton which has text rather than images.' def __init__(self, app, pos, text, font, stdColour, hvrColour, hotkey=None, backColour=None, onClick=None): self.stdImage = TextImage(text, font, stdColour, backColour) self.hvrImage = TextImage(text, font, hvrColour, backColour) super(TextButton, self).__init__(app, pos, self.stdImage, self.hvrImage, hotkey, onClick) self.app.screenManager.onResize.addListener(self.appResized) def appResized(self): # The font may be scaled, so refresh the images self.stdImage.refresh() self.hvrImage.refresh() def setText(self, text): self.stdImage.text = text self.hvrImage.text = text def setFont(self, font): self.stdImage.setFont(font) self.hvrImage.setFont(font) def setColour(self, colour): self.stdImage.setColour(colour) def setHoverColour(self, colour): self.hvrImage.setColour(colour) def setBackColour(self, colour): self.hvrImage.setBackColour(colour) self.stdImage.setBackColour(colour)
class TextElement(Element): '''Shows text at a specified screen location. @param pos: should be an instance of trosnoth.ui.common.Location''' def __init__(self, app, text, font, pos, colour=(0, 128, 0), anchor='topleft', shadow=False, backColour=None, antialias=True): super(TextElement, self).__init__(app) self.pos = pos self.anchor = anchor self.image = TextImage(text, font, colour, backColour, antialias) self.__shadow = None self.setShadow(shadow) self._surface = None self.rect = None app.screenManager.onResize.addListener(self.appResized) def appResized(self): self.rect = None self._surface = None def _getImage(self): if self._surface is None: self.image.refresh() self._surface = self.image.getImage(self.app) return self._surface def getRect(self, app): assert app is self.app return self._getRect() def _getRect(self): if self.rect is not None: return self.rect rect = self._getImage().get_rect() pos = self.pos if hasattr(pos, 'apply'): pos.apply(self.app, rect) else: setattr(rect, defaultAnchor, pos) self.rect = rect return rect def getText(self): return self.image.text def setColour(self, colour): self.image.colour = colour self._surface = None def setText(self, text): if self.image.text != text: self._surface = None self.image.text = text if self.__shadow is not None: self.__shadow.setText(text) def setFont(self, font): if self.image.font != font: self.image.font = font if self.__shadow is not None: self.__shadow.setFont(font) self._surface = None def setPos(self, pos): if self.pos != pos: self.pos = pos if self.__shadow is not None: self.__shadow.setPos(self.__getShadowPos()) self._surface = None self.rect = None def __getShadowPos(self): x = self._shadowOffset pos = RelativeLocation(self.pos, (x, x)) return pos def setShadow(self, shadow, offset=None): if shadow: if self.__shadow is None: if offset is None: height = self.image.font.getHeight(self.app) self._shadowOffset = (height / 45) + 1 else: self._shadowOffset = offset self.__shadow = TextElement(self.app, self.image.text, self.image.font, self.__getShadowPos(), colours.shadowDefault, self.anchor, False) self._surface = None else: if self.__shadow is not None: self.__shadow = None self._surface = None def setShadowOffset(self, offset): if self.__shadow is not None: self.setShadow(False) self.setShadow(True, offset) def setShadowColour(self, colour): if self.__shadow is not None: self.__shadow.setColour(colour) self._surface = None def draw(self, screen): if self.__shadow is not None: assert self.__shadow.__shadow is None self.__shadow.draw(screen) rect = self._getRect() # Adjust text position based on anchor. image = self._getImage() rectPos = getattr(rect, self.anchor) imagePos = getattr(image.get_rect(), self.anchor) pos = (rectPos[0] - imagePos[0], rectPos[1] - imagePos[1]) screen.blit(image, pos)