[evince] libview: Don't queue a redraw when damaged region hasn't changed
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] libview: Don't queue a redraw when damaged region hasn't changed
- Date: Thu, 27 Jun 2013 13:05:35 +0000 (UTC)
commit 4093541cef545ac30cfe64eb0f4fb7bd7a11fb34
Author: Carlos Garcia Campos <carlosgc gnome org>
Date: Thu Jun 27 14:34:14 2013 +0200
libview: Don't queue a redraw when damaged region hasn't changed
When the region covered by old and new selection is the same, don't
schedule a new redraw for the union.
libview/ev-view.c | 50 ++++++++++++++++++++++++++------------------------
1 files changed, 26 insertions(+), 24 deletions(-)
---
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 4bc12e7..042a621 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -7285,30 +7285,32 @@ merge_selection_region (EvView *view,
/* Now we figure out what needs redrawing */
if (old_sel && new_sel) {
if (old_sel->covered_region && new_sel->covered_region) {
- /* Anything that was previously or currently selected may
- * have changed */
- region = cairo_region_copy (old_sel->covered_region);
- cairo_region_union (region, new_sel->covered_region);
-
- if (cairo_region_is_empty (region)) {
- cairo_region_destroy (region);
- region = NULL;
- } else {
- gint num_rectangles = cairo_region_num_rectangles (region);
- GdkRectangle r;
-
- /* We need to make the damage region a little bigger
- * because the edges of the old selection might change
- */
- cairo_region_get_rectangle (region, 0, &r);
- r.x -= 5;
- r.width = 5;
- cairo_region_union_rectangle (region, &r);
-
- cairo_region_get_rectangle (region, num_rectangles - 1, &r);
- r.x += r.width;
- r.width = 5;
- cairo_region_union_rectangle (region, &r);
+ if (!cairo_region_equal (old_sel->covered_region, new_sel->covered_region)) {
+ /* Anything that was previously or currently selected may
+ * have changed */
+ region = cairo_region_copy (old_sel->covered_region);
+ cairo_region_union (region, new_sel->covered_region);
+
+ if (cairo_region_is_empty (region)) {
+ cairo_region_destroy (region);
+ region = NULL;
+ } else {
+ gint num_rectangles = cairo_region_num_rectangles (region);
+ GdkRectangle r;
+
+ /* We need to make the damage region a little bigger
+ * because the edges of the old selection might change
+ */
+ cairo_region_get_rectangle (region, 0, &r);
+ r.x -= 5;
+ r.width = 5;
+ cairo_region_union_rectangle (region, &r);
+
+ cairo_region_get_rectangle (region, num_rectangles - 1, &r);
+ r.x += r.width;
+ r.width = 5;
+ cairo_region_union_rectangle (region, &r);
+ }
}
} else if (old_sel->covered_region) {
region = cairo_region_copy (old_sel->covered_region);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]