Mercurial > pyntnclick
diff pyntnclick/widgets/base.py @ 803:bcc9277a23e6 pyntnclick
Refactor widget positioning API. Remove unused widgets
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sun, 27 Jan 2013 14:52:16 +0200 |
parents | efa58c92b304 |
children | 3a875256f795 |
line wrap: on
line diff
--- a/pyntnclick/widgets/base.py Sun Jan 27 14:50:33 2013 +0200 +++ b/pyntnclick/widgets/base.py Sun Jan 27 14:52:16 2013 +0200 @@ -12,12 +12,12 @@ highlight_cursor = False - def __init__(self, rect, gd): - if not isinstance(rect, pygame.Rect): - rect = pygame.Rect(rect, (0, 0)) - self.rect = rect + def __init__(self, pos, gd, size): + self.pos = pos self.gd = gd self.resource = gd.resource + self.size = size + self.rect = pygame.Rect(pos, size if size else (0, 0)) self.modal = False self.parent = None self.disabled = False @@ -103,10 +103,8 @@ class Container(Widget): - def __init__(self, rect, gd): - if rect is None: - rect = pygame.Rect(0, 0, 0, 0) - super(Container, self).__init__(rect, gd) + def __init__(self, pos, gd, size=None): + super(Container, self).__init__(pos, gd, size) self.children = [] def event(self, ev): @@ -134,7 +132,8 @@ widget.set_parent(self) widget.prepare() self.children.append(widget) - self.rect = self.rect.union(widget.rect) + if not self.size: + self.rect = self.rect.union(widget.rect) return widget def remove(self, widget): @@ -153,8 +152,8 @@ class ModalStackContainer(Container): - def __init__(self, rect, gd, obscure_color=None): - super(ModalStackContainer, self).__init__(rect, gd) + def __init__(self, pos, gd, size, obscure_color=None): + super(ModalStackContainer, self).__init__(pos, gd, size) if obscure_color is None: obscure_color = gd.constants.modal_obscure_color self.obscure_color = convert_color(obscure_color) @@ -190,27 +189,13 @@ child.draw(surface) -class GridContainer(Container): - """Hacky container that only supports grids, won't work with Container - children, or modal children. - """ - - def __init__(self, width, rect=None): - super(GridContainer, self).__init__(rect) - self.width = width - - def add(self, widget): - assert not isinstance(widget, Container) - assert not widget.modal - super(GridContainer, self).add(widget) - - class Box(Container): """A container that draws a filled background with a border""" padding = 4 def draw(self, surface): self.do_prepare() + # TODO: Why isn't this done in prepare? expandrect = self.rect.move((-self.padding, -self.padding)) expandrect.width = self.rect.width + 2 * self.padding expandrect.height = self.rect.height + 2 * self.padding @@ -236,17 +221,13 @@ "A wrapper around a widget that removes itself when a mouse click occurs" def __init__(self, widget, close_callback=None): - super(ModalWrapper, self).__init__(widget.rect, widget.gd) + super(ModalWrapper, self).__init__(widget.rect.topleft, widget.gd, + widget.rect.size) self.close_callback = close_callback self.add(widget) self.add_callback(MOUSEBUTTONDOWN, self.close) widget.add_callback(MOUSEBUTTONDOWN, self.close) - def set_parent(self, parent): - super(ModalWrapper, self).set_parent(parent) - if parent: - self.rect = self.parent.rect - def close(self, ev, widget): if self.parent: self.parent.remove(self) @@ -258,11 +239,11 @@ class Image(Widget): """Basic widget that draws an image, with an associated rect""" - def __init__(self, rect, gd, image): - super(Image, self).__init__(rect, gd) + def __init__(self, pos, gd, image, size=None): + super(Image, self).__init__(pos, gd, size) self.image = image - self.rect.width = image.get_rect().width - self.rect.height = image.get_rect().height + if not size: + self.rect.size = image.get_rect().size self.visible = True def draw(self, surface): @@ -274,8 +255,8 @@ class TranslucentImage(Image): """Image that can also be translucent""" - def __init__(self, rect, gd, image): - super(TranslucentImage, self).__init__(rect, gd, image) + def __init__(self, pos, gd, image, size=None): + super(TranslucentImage, self).__init__(pos, gd, image, size) self.translucent = False surf = pygame.surface.Surface((self.rect.width, self.rect.height), SRCALPHA).convert_alpha()