"""These widgets are all grouped together because they are non-interactive widgets. """ import pygame from const import * import widget # Turns a descriptive string or a tuple into a pygame color def parse_color(desc): if (isinstance(desc, pygame.Color)): # Already a color return desc elif (desc and desc[0] == "#"): # Because of a bug in pygame 1.8.1 we need to explicitly define the # alpha value otherwise it will default to transparent. if (len(desc) == 7): desc += "FF" return pygame.Color(desc) class Spacer(widget.Widget): """A invisible space.
Spacer(width,height)
""" def __init__(self,width,height,**params): params.setdefault('focusable',False) widget.Widget.__init__(self,width=width,height=height,**params) class Color(widget.Widget): """A block of color.

The color can be changed at run-time.

Color(value=None)
Example c = Color() c.value = (255,0,0) c.value = (0,255,0) """ def __init__(self,value=None,**params): params.setdefault('focusable',False) if value != None: params['value']=value widget.Widget.__init__(self,**params) def paint(self,s): if hasattr(self,'value'): s.fill(self.value) def __setattr__(self,k,v): if k == 'value' and type(v) == str: v = parse_color(v) _v = self.__dict__.get(k,NOATTR) self.__dict__[k]=v if k == 'value' and _v != NOATTR and _v != v: self.send(CHANGE) self.repaint() class Label(widget.Widget): """A text label.
Label(value)
value
text to be displayed
Example w = Label(value="I own a rubber chicken!") w = Label("3 rubber chickens") """ def __init__(self,value,**params): params.setdefault('focusable',False) params.setdefault('cls','label') widget.Widget.__init__(self,**params) self.value = value self.font = self.style.font self.style.width, self.style.height = self.font.size(self.value) def paint(self,s): s.blit(self.font.render(self.value, 1, self.style.color),(0,0)) class Image(widget.Widget): """An image.
Image(value)
value
a file name or a pygame.Surface
""" def __init__(self,value,**params): params.setdefault('focusable',False) widget.Widget.__init__(self,**params) if type(value) == str: value = pygame.image.load(value) ow,oh = iw,ih = value.get_width(),value.get_height() sw,sh = self.style.width,self.style.height if sw and not sh: iw,ih = sw,ih*sw/iw elif sh and not sw: iw,ih = iw*sh/ih,sh elif sw and sh: iw,ih = sw,sh if (ow,oh) != (iw,ih): value = pygame.transform.scale(value,(iw,ih)) self.style.width,self.style.height = iw,ih self.value = value def paint(self,s): s.blit(self.value,(0,0))