# HG changeset patch # User Neil Muller # Date 1358282690 -7200 # Node ID efa58c92b304cda89431011575e82c6c96c2f8fd # Parent 65e9b5c4023385a671a08f9a96e5c16d8dbd7ea8 Move prepare out of __init__ and into everywhere else diff -r 65e9b5c40233 -r efa58c92b304 gamelib/custom_widgets.py --- a/gamelib/custom_widgets.py Tue Jan 15 21:57:42 2013 +0200 +++ b/gamelib/custom_widgets.py Tue Jan 15 22:44:50 2013 +0200 @@ -14,7 +14,9 @@ bg_color=pygame.Color(255, 175, 127, 191), color=pygame.Color(0, 0, 0), border_color=pygame.Color(127, 15, 0)) + + def prepare(self): # Centre the widget - # Should this happen automatically in state? - self.rect.center = (gd.constants.screen[0] / 2, - gd.constants.screen[1] / 2) + super(JimLabel, self).prepare() + self.rect.center = (self.gd.constants.screen[0] / 2, + self.gd.constants.screen[1] / 2) diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/gamescreen.py --- a/pyntnclick/gamescreen.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/gamescreen.py Tue Jan 15 22:44:50 2013 +0200 @@ -15,7 +15,6 @@ from pyntnclick.widgets.imagebutton import ImageButtonWidget - class InventorySlot(ImageButtonWidget): SELECTED_COLOR = Color("yellow") SELECTED_WIDTH = 2 @@ -148,6 +147,7 @@ self.is_detail = is_detail if is_detail: self.close_button = TextButton((0, 0), self.gd, "Close") + self.close_button.do_prepare() self.close_button.rect.midbottom = self.rect.midbottom self.close_button.add_callback('clicked', self.close) self.add(self.close_button) @@ -222,6 +222,7 @@ rect = Rect(rect, (width, self.rect.height)) tool = cls(rect, *args, **kw) self.add(tool) + tool.do_prepare() self.left += tool.rect.width return tool @@ -339,6 +340,7 @@ rect = Rect((0, 0), (1, 1)) max_width = self.gd.constants.screen[0] - 100 widget = WrappedTextLabel(rect, self.gd, message, max_width=max_width) + widget.do_prepare() widget.rect.center = self.container.rect.center self.queue_widget(widget) diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/state.py --- a/pyntnclick/state.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/state.py Tue Jan 15 22:44:50 2013 +0200 @@ -273,6 +273,7 @@ if text is None: return None label = LabelWidget((0, 10), self.gd, text) + label.do_prepare() label.rect.left += (dest_rect.width - label.rect.width) / 2 return label diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/widgets/base.py --- a/pyntnclick/widgets/base.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/widgets/base.py Tue Jan 15 22:44:50 2013 +0200 @@ -24,6 +24,7 @@ self.callbacks = collections.defaultdict(list) # To track which widget the mouse is over self.mouseover_widget = self + self.is_prepared = False def set_parent(self, parent): self.parent = parent @@ -53,17 +54,26 @@ "Override me" pass + def prepare(self): + """Override me""" + pass + + def do_prepare(self): + if not self.is_prepared: + self.prepare() + self.is_prepared = True + def disable(self): if not self.disabled: self.disabled = True - if hasattr(self, 'prepare'): - self.prepare() + self.prepare() + self.is_prepared = True def enable(self): if self.disabled: self.disabled = False - if hasattr(self, 'prepare'): - self.prepare() + self.prepare() + self.is_prepared = True def global_to_local(self, pos): x, y = pos @@ -122,6 +132,7 @@ def add(self, widget): widget.set_parent(self) + widget.prepare() self.children.append(widget) self.rect = self.rect.union(widget.rect) return widget @@ -135,6 +146,7 @@ self.remove(widget) def draw(self, surface): + self.do_prepare() for child in self.children: child.draw(surface) @@ -170,6 +182,7 @@ return self.top is widget def draw(self, surface): + self.do_prepare() obscure = pygame.Surface(self.rect.size, SRCALPHA) obscure.fill(self.obscure_color) for child in self.children: @@ -197,6 +210,7 @@ padding = 4 def draw(self, surface): + self.do_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 @@ -252,6 +266,7 @@ self.visible = True def draw(self, surface): + self.do_prepare() if self.visible: surface.blit(self.image, self.rect) @@ -269,6 +284,7 @@ self.trans_image = surf def draw(self, surface): + self.do_prepare() if self.visible: if self.translucent: surface.blit(self.trans_image, self.rect) diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/widgets/listbox.py --- a/pyntnclick/widgets/listbox.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/widgets/listbox.py Tue Jan 15 22:44:50 2013 +0200 @@ -9,7 +9,6 @@ super(ListBox, self).__init__(rect, gd) self.message = TextWidget(rect, text) self.toolbar = ToolListWidget(rect, widget_list, page_length) - self.prepare() self.modal = True def prepare(self): diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/widgets/messagebox.py --- a/pyntnclick/widgets/messagebox.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/widgets/messagebox.py Tue Jan 15 22:44:50 2013 +0200 @@ -12,7 +12,6 @@ self.font_size = fontsize self.post_callback = post_callback self.color = color - self.prepare() self.modal = True def prepare(self): diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/widgets/text.py --- a/pyntnclick/widgets/text.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/widgets/text.py Tue Jan 15 22:44:50 2013 +0200 @@ -15,7 +15,6 @@ self.fontname = fontname or constants.font self.fontsize = fontsize or constants.font_size self.color = color or constants.text_color - self.prepare() def prepare(self): self.font = self.resource.get_font(self.fontname, self.fontsize) @@ -27,6 +26,7 @@ self.rect.height = max(self.rect.height, height) def draw(self, surface): + self.do_prepare() surface.blit(self.surface, self.rect) @@ -57,6 +57,7 @@ self.surface = new_surface def draw(self, surface): + self.do_prepare() surface.blit(self.surface, self.rect) @@ -108,7 +109,6 @@ self._wrap_width = None self._text_lines = None super(WrappedTextLabel, self).__init__(rect, gd, *args, **kwargs) - self.prepare() def prepare(self): if self._wrap_width is None: diff -r 65e9b5c40233 -r efa58c92b304 pyntnclick/widgets/toollist.py --- a/pyntnclick/widgets/toollist.py Tue Jan 15 21:57:42 2013 +0200 +++ b/pyntnclick/widgets/toollist.py Tue Jan 15 22:44:50 2013 +0200 @@ -15,6 +15,8 @@ super(ToolListWidget, self).__init__(rect, gd) self.prev_but = None self.next_but = None + + def prepare(self): self.fill_page() def fill_page(self):