Limit draw area to avoid extra work
This commit is contained in:
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:
|
||||
|
||||
Reference in new issue
Block a user