Mercurial > mamba
view mamba/widgets/levelbutton.py @ 322:86c5c6afdac0
Thumbnails on the level screen
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 16 Sep 2011 20:01:13 +0200 |
parents | fba74abad7b7 |
children | cbbba6ddc77d |
line wrap: on
line source
import pygame from pygame.locals import SRCALPHA from mamba.constants import COLOR, FOCUS_COLOR from mamba.data import load_image from mamba.widgets.base import Button from mamba.widgets.text import TextWidget class LevelButton(Button): def __init__(self, rect, level, done=False): super(LevelButton, self).__init__(rect) self.level = level self.text = level.name self.done = done self.focussable = True self.border = 2 self.rect.width = 100 self.rect.height = 100 self.prepare() def prepare(self): self.surface = pygame.Surface(self.rect.size, SRCALPHA) self.surface.fill(0) # Level Thumbnail level_surface = pygame.Surface(self.level.get_size(), SRCALPHA) self.level.draw(level_surface) dest_rect = pygame.Rect((self.border, self.border), (self.rect.width - self.border, self.rect.height - self.border)) size = level_surface.get_rect().fit(dest_rect).size level_thumbnail = pygame.transform.scale(level_surface, size) self.surface.blit(level_thumbnail, dest_rect) if self.done: image = load_image('menus/tick.png') self.surface.blit(image, image.get_rect()) self._text = TextWidget((0, 0), self.text, fontsize=12) self._text.prepare() text_rect = pygame.Rect((0, 0), self.rect.size).inflate( self._text.rect.width - self.rect.width, self._text.rect.height - self.rect.height) text_rect.top = self.rect.height - self._text.rect.height - self.border self.surface.blit(self._text.surface, text_rect) color = pygame.Color(FOCUS_COLOR if self.focussed else COLOR) pygame.draw.rect(self.surface, color, self.surface.get_rect(), self.border + 1) self._state = (self.done, self.focussed) def draw(self, surface): if self._state != (self.done, self.focussed): self.prepare() surface.blit(self.surface, self.rect)