--- a/tuikit/core/widget.py Sat Feb 21 12:01:57 2015 +0100
+++ b/tuikit/core/widget.py Sun Feb 22 09:53:13 2015 +0100
@@ -23,6 +23,8 @@
self.window = None
#: Theme
self.theme = default_theme
+ #: Timer
+ self.timer = None
#: Position inside parent widget. Modified by layout manager.
self.pos = Point()
@@ -43,6 +45,8 @@
#: Cursor is displayed on screen only when the widget is focused.
self._cursor_visible = False
+ #: True if this widget requests redraw
+ self.need_draw = True
#: Hidden widget does not affect layout.
self.hidden = False
#: Allow keyboard focus for this widget.
@@ -50,7 +54,8 @@
self.sig_keypress = Signal(allow_stop=True)
- ## position and size ##
+ # -------------------------------------------------------------------------
+ # Position and size
@property
def x(self):
@@ -82,14 +87,24 @@
@property
def boundaries(self):
- return Rect._make(self.pos, self._size)
+ return Rect(self.pos, self._size)
- ## drawing, looks ##
+ # -------------------------------------------------------------------------
+ # Presentation
+
+ def draw_if_needed(self, buffer):
+ if self.need_draw:
+ self.draw(buffer)
def draw(self, buffer):
"""Draw self into buffer."""
self.log.debug('Draw into %r at %s (exposed %s)',
buffer, buffer.origin, self.exposed(buffer))
+ self.need_draw = False
+
+ def redraw(self):
+ """Request redraw."""
+ self.need_draw = True
def set_theme(self, theme):
self.theme = theme
@@ -113,14 +128,15 @@
Returns None if cursor is set outside of widget boundaries.
"""
- if self._cursor in Rect._make((0, 0), self._size):
+ if self._cursor in Rect(0, 0, *self._size):
return self._cursor
@property
def cursor_visible(self):
return self._cursor_visible
- ## events ##
+ # -------------------------------------------------------------------------
+ # Events
def resize_event(self, ev):
self.resize(ev.w, ev.h)
@@ -149,21 +165,8 @@
def mousemove_event(self, ev):
self.log.debug('Not consumed: %s', ev)
- ## timeouts ##
-
- def add_timeout(self, delay, callback, *args):
- """Register `callback` to be called after `delay` seconds."""
- self.parent.add_timeout(self, delay, callback, *args)
-
- def remove_timeout(self, callback, *args):
- """Unregister callback previously registered with add_timeout.
-
- Removes all timeouts with the `callback` and `args`.
-
- """
- self.parent.remove_timeout(self, callback, *args)
-
- ## focus ##
+ # -------------------------------------------------------------------------
+ # Focus
def can_focus(self):
return not self.hidden and self.allow_focus
@@ -171,10 +174,11 @@
def has_focus(self):
if self.parent is None:
return True
- return (self.parent.has_focus()
- and self.parent.focus_widget == self)
+ return (self.parent.has_focus() and
+ self.parent.focus_widget == self)
- ## utilities ##
+ # -------------------------------------------------------------------------
+ # Utilities
@property
def log(self):