Skip to content
Snippets Groups Projects
Commit 918eb1b3 authored by Taddeus Kroes's avatar Taddeus Kroes
Browse files

Positions are now expressed in numbers instead of objects.

parent a7a2067c
No related branches found
No related tags found
No related merge requests found
......@@ -43,25 +43,28 @@ class Area(Positionable, Logger):
if not self.parent:
return self.get_position()
return self.get_position() + self.parent.get_screen_position()
ox, oy = self.parent.get_screen_position()
return ox + self.x, oy + self.y
def get_root_position(self):
"""
Get the position relative to the root area.
"""
if not self.parent:
return Positionable(0, 0)
return 0, 0
return self.get_position() + self.parent.get_root_position()
ox, oy = self.parent.get_root_position()
return ox + self.x, oy + self.y
def get_offset(self, offset_area):
"""
Get the position relative to an ancestor area.
"""
if self.parent == offset_area:
return self.get_position()
if self == offset_area:
return 0, 0
return self.get_position() + self.parent.get_offset(offset_area)
ox, oy = self.parent.get_offset(offset_area)
return ox + self.x, oy + self.y
def add_area(self, area):
"""
......@@ -178,11 +181,11 @@ class Area(Positionable, Logger):
child_found = False
if self.children:
event.set_area(self)
# Delegate to children in reverse order because areas that are
# added later, should be placed over previously added siblings
for child in reversed(self.children):
event.set_area(self)
if child.contains_event(event):
child_found = True
child.delegate_event(event)
......
......@@ -26,9 +26,9 @@ class RectangularArea(Area):
return self.width, self.height
def contains_event(self, event):
x, y = event.get_offset()
return self.x <= x <= self.x + self.width \
and self.y <= y <= self.y + self.height
ex, ey = event.get_position()
return self.x <= ex <= self.x + self.width \
and self.y <= ey <= self.y + self.height
class CircularArea(Area):
......
......@@ -21,9 +21,7 @@ class EventDriver(Logger):
Delegate an event that has been triggered by the event driver to the
area tree.
"""
if self.root_area.contains_event(event):
event.set_area(self.root_area)
self.root_area.delegate_event(event)
self.root_area.delegate_event(event)
def start(self):
"""
......
from copy import copy
from geometry import Positionable
from touch_objects import OBJECT_NAMES
......@@ -40,7 +42,7 @@ class Event(Positionable):
def get_offset(self, area):
ox, oy = area.get_screen_position()
return Positionable(self.x - ox, self.y - oy)
return self.x - ox, self.y - oy
def get_type(self):
return self._type
......@@ -60,3 +62,6 @@ class Event(Positionable):
def is_immediate_propagation_stopped(self):
return self.stopped_immidiate
def clone(self):
return copy(self)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment