--- a/tuikit/core/widget.py Thu Mar 27 08:03:51 2014 +0100
+++ b/tuikit/core/widget.py Fri Mar 28 10:44:29 2014 +0100
@@ -1,6 +1,8 @@
from tuikit.core.coords import Point, Size
from tuikit.core.theme import default_theme
+import logging
+
class Widget:
@@ -9,8 +11,10 @@
_num_instances = 0
def __init__(self):
+ self._num_instances += 1
+ self._log = logging.getLogger(__name__)
+
#: Widget name is used for logging etc. Not visible anywhere.
- self._num_instances += 1
self.name = '{}{}'.format(
self.__class__.__name__,
self._num_instances)
@@ -60,14 +64,28 @@
def resize(self, w, h):
self._size.update(w, h)
- ## appearance ##
+ ## drawing, looks ##
- def draw(self, buffer, x, y):
- pass
+ def draw(self, buffer):
+ """Draw self into buffer."""
+ self._log.debug('%s draw into %r at %s (exposed %s)',
+ self.name, buffer, buffer.origin, self.exposed(buffer))
def set_theme(self, theme):
self.theme = theme
+ @staticmethod
+ def exposed(buffer):
+ """Exposed part of widget.
+
+ Only this area needs to be drawn.
+
+ Returns exposed Rect in widget's local coordinates,
+ where 0,0 is left top corner of widget to be drawn.
+
+ """
+ return buffer.clip_rect.moved(-buffer.origin.x, -buffer.origin.y)
+
## timeouts ##
def add_timeout(self, delay, callback, *args):