[pitivi] timeline: On dragEnd, get the set of toplevel elements contained
- From: Mathieu Duponchelle <mathieudu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] timeline: On dragEnd, get the set of toplevel elements contained
- Date: Mon, 15 Jul 2013 21:56:35 +0000 (UTC)
commit fec5fec65c09702f6a677524fa8dfe6eec7ed9e0
Author: Mathieu Duponchelle <mathieu duponchelle epitech eu>
Date: Wed Jul 10 02:09:37 2013 +0200
timeline: On dragEnd, get the set of toplevel elements contained
in the lasso selection.
pitivi/timeline/timeline.py | 65 +++++++++++++++++++++++++++++++-----------
1 files changed, 48 insertions(+), 17 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 4835377..9b90b27 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -309,6 +309,42 @@ class TimelineStage(Clutter.ScrollActor, Zoomable):
# Internal API
+ def _elementIsInLasso(self, element, x1, y1, x2, y2):
+ xE1 = element.props.x
+ xE2 = element.props.x + element.props.width
+ yE1 = element.props.y
+ yE2 = element.props.y + element.props.height
+
+ return self._overlap((x1, x2), (xE1, xE2)) and self._overlap((y1, y2), (yE1, yE2))
+
+ def _overlap(self, a, b):
+ x = max(a[0], b[0])
+ y = min(a[1], b[1])
+ return x < y
+
+ def _translate(self, event):
+ event.x -= CONTROL_WIDTH
+ event.x += self._scroll_point.x
+ event.y += self._scroll_point.y
+
+ delta_x = event.x - self.dragBeginStartX
+ delta_y = event.y - self.dragBeginStartY
+
+ newX = self.dragBeginStartX
+ newY = self.dragBeginStartY
+
+ # This is needed when you start to click and go left or up.
+
+ if delta_x < 0:
+ newX = event.x
+ delta_x = abs(delta_x)
+
+ if delta_y < 0:
+ newY = event.y
+ delta_y = abs(delta_y)
+
+ return (newX, newY, delta_x, delta_y)
+
def _setUpDragAndDrop(self):
self.set_reactive(True)
@@ -509,31 +545,26 @@ class TimelineStage(Clutter.ScrollActor, Zoomable):
if not self.drawMarquee:
return False
- event.x -= CONTROL_WIDTH
- event.x += self._scroll_point.x
- event.y += self._scroll_point.y
+ x, y, width, height = self._translate(event)
- delta_x = event.x - self.dragBeginStartX
- delta_y = event.y - self.dragBeginStartY
+ self.marquee.set_position(x, y)
- newX = self.dragBeginStartX
- newY = self.dragBeginStartY
+ self.marquee.set_size(width, height)
- if delta_x < 0:
- newX = event.x
- delta_x = abs(delta_x)
+ return False
- if delta_y < 0:
- newY = event.y
- delta_y = abs(delta_y)
+ def _dragEndCb(self, actor, event):
+ if not self.drawMarquee:
+ return
- self.marquee.set_position(newX, newY)
+ x, y, width, height = self._translate(event)
- self.marquee.set_size(delta_x, delta_y)
+ elements = set({})
- return False
+ for element in self.elements:
+ if self._elementIsInLasso(element, x, y, x + width, y + height):
+ elements.add(element.bElement.get_toplevel_parent())
- def _dragEndCb(self, actor, event):
self.marquee.hide()
# snapping indicator
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]