summaryrefslogtreecommitdiff
path: root/grc/gui/Element.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/gui/Element.py')
-rw-r--r--grc/gui/Element.py54
1 files changed, 14 insertions, 40 deletions
diff --git a/grc/gui/Element.py b/grc/gui/Element.py
index cdbf548941..30bc640127 100644
--- a/grc/gui/Element.py
+++ b/grc/gui/Element.py
@@ -45,13 +45,8 @@ class Element(object):
self.rotation = 0
self.highlighted = False
- self.areas = []
- self.lines = []
-
- def clear(self):
- """Empty the lines and areas."""
- del self.areas[:]
- del self.lines[:]
+ self.area = []
+ self.line = []
def is_horizontal(self, rotation=None):
"""
@@ -94,34 +89,11 @@ class Element(object):
Create shapes (if applicable) and call on all children.
Call this base method before creating shapes in the element.
"""
- self.clear()
for child in self.get_children():
child.create_shapes()
- def draw(self, widget, cr, border_color, bg_color):
- """
- Draw in the given window.
-
- Args:
- widget:
- cr:
- border_color: the color for lines and rectangle borders
- bg_color: the color for the inside of the rectangle
- """
- cr.translate(*self.coordinate)
- for area in self.areas:
- cr.set_source_rgb(*bg_color)
- cr.rectangle(*area)
- cr.fill()
- cr.set_source_rgb(*border_color)
- cr.rectangle(*area)
- cr.stroke()
-
- cr.set_source_rgb(*border_color)
- for line in self.lines:
- for point in line:
- cr.line_to(*point)
- cr.stroke()
+ def draw(self, widget, cr):
+ raise NotImplementedError()
def rotate(self, rotation):
"""
@@ -168,7 +140,8 @@ class Element(object):
if coor_m:
x_m, y_m = [a - b for a, b in zip(coor_m, self.coordinate)]
# handle rectangular areas
- for x1, y1, w, h in self.areas:
+ if self.area:
+ x1, y1, w, h = self.area
if (
in_between(x1, x, x_m) and in_between(y1, y, y_m) or
in_between(x1 + w, x, x_m) and in_between(y1, y, y_m) or
@@ -177,9 +150,9 @@ class Element(object):
):
return self
# handle horizontal or vertical lines
- for line in self.lines:
- last_point = line[0]
- for x2, y2 in line[1:]:
+ elif self.line:
+ last_point = self.line[0]
+ for x2, y2 in self.line[1:]:
(x1, y1), last_point = last_point, (x2, y2)
if (
in_between(x1, x, x_m) and in_between(y1, y, y_m) or
@@ -189,13 +162,14 @@ class Element(object):
return None
else:
# handle rectangular areas
- for x1, y1, w, h in self.areas:
+ if self.area:
+ x1, y1, w, h = self.area
if in_between(x, x1, x1+w) and in_between(y, y1, y1+h):
return self
# handle horizontal or vertical lines
- for line in self.lines:
- last_point = line[0]
- for x2, y2 in line[1:]:
+ elif self.line:
+ last_point = self.line[0]
+ for x2, y2 in self.line[1:]:
(x1, y1), last_point = last_point, (x2, y2)
if x1 == x2:
x1, x2 = x1 - LINE_SELECT_SENSITIVITY, x2 + LINE_SELECT_SENSITIVITY