Limit draw area to avoid extra work

This commit is contained in:
Cédric Krier committed 2008-04-24 10:45:21 +02:00
1 parent 8e55707de5
commit b8b8f6bf1f
2 files changed
+32 -4

No files matched your search

@@ -50,6 +50,7 @@ class Bar(Graph):
return False
highlight = False
draw_bars = []
for bar in self.bars:
if intersect(bar, event):
if not bar.highlight:
@@ -58,13 +59,26 @@ class Bar(Graph):
label += '\n'
label += str(self.labels[bar.xname])
self.popup.set_text(label)
self.queue_draw()
draw_bars.append(bar)
else:
if bar.highlight:
bar.highlight = False
self.queue_draw()
draw_bars.append(bar)
if bar.highlight:
highlight = True
if draw_bars:
minx = self.area.w + self.area.x
miny = self.area.h + self.area.y
maxx = maxy = 0.0
for bar in draw_bars:
x = self.area.w * bar.x + self.area.x
y = self.area.h * bar.y + self.area.y
minx = min(x, minx)
miny = min(y, miny)
maxx = max(x + self.area.w * bar.w, maxx)
maxy = max(y + self.area.h * bar.h, maxy)
self.queue_draw_area(int(minx), int(miny),
int(maxx - minx), int(maxy - miny))
if highlight:
self.popup.show()
else:
@@ -95,6 +95,7 @@ class Line(Graph):
dia = self.area.w ** 2 + self.area.h ** 2
highlight = False
draw_points = []
for point in self.points:
if point == nearest[0] and nearest[1] < dia / 100:
if not point.highlight:
@@ -103,16 +104,29 @@ class Line(Graph):
label += '\n'
label += str(self.labels[point.xname])
self.popup.set_text(label)
self.queue_draw()
draw_points.append(point)
else:
if point.highlight:
point.highlight = False
self.queue_draw()
draw_points.append(point)
if point.highlight:
self.popup.set_position(self,
point.x * self.area.w + self.area.x,
point.y * self.area.h + self.area.y)
highlight = True
if draw_points:
minx = self.area.w + self.area.x
miny = self.area.h + self.area.y
maxx = maxy = 0.0
for point in draw_points:
x = self.area.w * point.x + self.area.x
y = self.area.h * point.y + self.area.y
minx = min(x - 5, minx)
miny = min(y - 5, miny)
maxx = max(x + 5, maxx)
maxy = max(y + 5, maxy)
self.queue_draw_area(int(minx), int(miny),
int(maxx - minx), int(maxy - miny))
if highlight:
self.popup.show()
else: