|
@@ -1,5 +1,6 @@
|
|
|
from area import Area
|
|
from area import Area
|
|
|
from screen import screen_size
|
|
from screen import screen_size
|
|
|
|
|
+from events import PointMoveEvent, PointUpEvent
|
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = ['RectangularArea', 'CircularArea', 'FullscreenArea']
|
|
__all__ = ['RectangularArea', 'CircularArea', 'FullscreenArea']
|
|
@@ -25,10 +26,26 @@ class RectangularArea(Area):
|
|
|
def get_size(self):
|
|
def get_size(self):
|
|
|
return self.width, self.height
|
|
return self.width, self.height
|
|
|
|
|
|
|
|
|
|
+ def contains(self, x, y):
|
|
|
|
|
+ return self.x <= x <= self.x + self.width \
|
|
|
|
|
+ and self.y <= y <= self.y + self.height
|
|
|
|
|
+
|
|
|
def contains_event(self, event):
|
|
def contains_event(self, event):
|
|
|
- ex, ey = event.get_position()
|
|
|
|
|
- return self.x <= ex <= self.x + self.width \
|
|
|
|
|
- and self.y <= ey <= self.y + self.height
|
|
|
|
|
|
|
+ if self.contains(*event.get_position()):
|
|
|
|
|
+ return True
|
|
|
|
|
+
|
|
|
|
|
+ if isinstance(event, PointMoveEvent):
|
|
|
|
|
+ px, py = event.point.get_previous_position()
|
|
|
|
|
+
|
|
|
|
|
+ if self.parent:
|
|
|
|
|
+ x, y = self.parent.get_screen_offset()
|
|
|
|
|
+ else:
|
|
|
|
|
+ x = y = 0
|
|
|
|
|
+
|
|
|
|
|
+ if self.contains(px - x, py - y):
|
|
|
|
|
+ self.handle_event(PointUpEvent(event.point))
|
|
|
|
|
+
|
|
|
|
|
+ return False
|
|
|
|
|
|
|
|
|
|
|
|
|
class CircularArea(Area):
|
|
class CircularArea(Area):
|