tuikit/core/widget.py
changeset 94 e50dae408fe9
parent 93 c1e79acb9fcb
child 97 0c2e0c09ba5c
--- 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):