diff options
Diffstat (limited to 'canvas.py')
-rw-r--r-- | canvas.py | 29 |
1 files changed, 22 insertions, 7 deletions
@@ -56,8 +56,6 @@ class Canvas(gtk.DrawingArea): rect.x = 0 rect.y = 0 - logging.debug('__expose_event_cb1 %r %r %r %r' % (event.area.x, event.area.y, - event.area.width, event.area.height)) context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() @@ -67,7 +65,6 @@ class Canvas(gtk.DrawingArea): for element in self._elements: rect = element.get_rect() - logging.debug('__expose_event_cb %r %r %r %r' % (rect.x, rect.y, rect.width, rect.height)) if rect.intersect(event.area): context.save() @@ -154,12 +151,19 @@ class Canvas(gtk.DrawingArea): def __motion_notify_event_cb(self, widget, event): if self._last_clicked_element is None: - return True + for element in self._elements: + rect = element.get_rect() + if (event.x >= rect.x and event.x <= rect.x + rect.width) and \ + (event.y >= rect.y and event.y <= rect.y + rect.height): + element.hovering = True + else: + element.hovering = False + return False # if the mouse button is not pressed, no drag should occurr if not event.state & gtk.gdk.BUTTON1_MASK: self._cleanup_drag() - return True + return False if event.is_hint: x, y, state_ = event.window.get_pointer() @@ -169,7 +173,7 @@ class Canvas(gtk.DrawingArea): if self._dragging: self.dragging_motion.send(self, position=(x, y)) - return True + return False logging.debug('motion_notify_event_cb') @@ -181,12 +185,13 @@ class Canvas(gtk.DrawingArea): self.dragging_started.send(self, position=(x, y), element=self._last_clicked_element) - return True + return False class CanvasElement(object): def __init__(self): self.invalidated = dispatch.Signal() self.previous_rect = gtk.gdk.Rectangle(0, 0, 0, 0) + self._hovering = False def draw(self, context): self.previous_rect = self.get_rect() @@ -197,3 +202,13 @@ class CanvasElement(object): def get_rect(self): pass + def set_hovering(self, hovering): + if self._hovering != hovering: + self._hovering = hovering + self.invalidate() + + def get_hovering(self): + return self._hovering + + hovering = property(get_hovering, set_hovering) + |