diff options
author | Tony Anderson <tony_anderson@usa.net> | 2009-06-22 14:04:24 (GMT) |
---|---|---|
committer | Tony Anderson <tony_anderson@usa.net> | 2009-06-22 14:04:24 (GMT) |
commit | 6eb30b09566a53ef510532f2a1705d7fc22985a8 (patch) | |
tree | d52765c093219f91d07f030ed597f9491a7f8493 /pgu/gui/basic.py |
initial commit
Diffstat (limited to 'pgu/gui/basic.py')
-rw-r--r-- | pgu/gui/basic.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/pgu/gui/basic.py b/pgu/gui/basic.py new file mode 100644 index 0000000..093c6ee --- /dev/null +++ b/pgu/gui/basic.py @@ -0,0 +1,124 @@ +"""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. + + <pre>Spacer(width,height)</pre> + + """ + 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. + + <p>The color can be changed at run-time.</p> + + <pre>Color(value=None)</pre> + + <strong>Example</strong> + <code> + c = Color() + c.value = (255,0,0) + c.value = (0,255,0) + </code> + """ + + + 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. + + <pre>Label(value)</pre> + + <dl> + <dt>value<dd>text to be displayed + </dl> + + <strong>Example</strong> + <code> + w = Label(value="I own a rubber chicken!") + + w = Label("3 rubber chickens") + </code> + """ + 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. + + <pre>Image(value)</pre> + + <dl> + <dt>value<dd>a file name or a pygame.Surface + </dl> + + """ + 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)) |