From b8b8f6bf1fa9c794dfc798c88a94cd7031fa887d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 24 Apr 2008 10:45:21 +0200 Subject: [PATCH] Limit draw area to avoid extra work --- .../gui/window/view_form/view/graph_gtk/bar.py | 18 ++++++++++++++++-- .../window/view_form/view/graph_gtk/line.py | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/tryton/gui/window/view_form/view/graph_gtk/bar.py b/tryton/gui/window/view_form/view/graph_gtk/bar.py index 9f1f7dfffc..4e6033c17a 100644 --- a/tryton/gui/window/view_form/view/graph_gtk/bar.py +++ b/tryton/gui/window/view_form/view/graph_gtk/bar.py @@ -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: diff --git a/tryton/gui/window/view_form/view/graph_gtk/line.py b/tryton/gui/window/view_form/view/graph_gtk/line.py index c31a69abd8..5bf76331e7 100644 --- a/tryton/gui/window/view_form/view/graph_gtk/line.py +++ b/tryton/gui/window/view_form/view/graph_gtk/line.py @@ -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: