From 205078e79ade5fdcf048f5b71a0b138f548c2ee3 Mon Sep 17 00:00:00 2001 From: cedric Date: Tue, 14 Apr 2009 10:47:15 +0000 Subject: [PATCH] * evas: Another attempt to fix clip cache. Now invalid clip cache every time we change cur.geometry in the code (did a grep to locate this). I hope I did spot all users, as I didn't see bug in exec_buf, efm and in window title, I am confident enought to break svn again. * WARNING * This change can cause visual bug. Please report. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@40039 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/canvas/evas_object_line.c | 1 + src/lib/canvas/evas_object_main.c | 1 + src/lib/canvas/evas_object_polygon.c | 2 ++ src/lib/canvas/evas_object_text.c | 4 ++++ src/lib/include/evas_inline.x | 5 +++-- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/canvas/evas_object_line.c b/src/lib/canvas/evas_object_line.c index b6144b0..0432c1d 100644 --- a/src/lib/canvas/evas_object_line.c +++ b/src/lib/canvas/evas_object_line.c @@ -165,6 +165,7 @@ evas_object_line_xy_set(Evas_Object *obj, Evas_Coord x1, Evas_Coord y1, Evas_Coo o->changed = 1; evas_object_change(obj); evas_object_coords_recalc(obj); + evas_object_clip_dirty(obj); if (obj->layer->evas->events_frozen <= 0) { is = evas_object_is_in_output_rect(obj, diff --git a/src/lib/canvas/evas_object_main.c b/src/lib/canvas/evas_object_main.c index 0bfdb2d..4a29994 100644 --- a/src/lib/canvas/evas_object_main.c +++ b/src/lib/canvas/evas_object_main.c @@ -1202,6 +1202,7 @@ evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a) obj->cur.color.r = r; obj->cur.color.g = g; obj->cur.color.b = b; + evas_object_clip_dirty(obj); if ((obj->cur.color.a == 0) && (a == 0)) return; obj->cur.color.a = a; evas_object_change(obj); diff --git a/src/lib/canvas/evas_object_polygon.c b/src/lib/canvas/evas_object_polygon.c index 418dede..7f651d6 100644 --- a/src/lib/canvas/evas_object_polygon.c +++ b/src/lib/canvas/evas_object_polygon.c @@ -160,6 +160,7 @@ evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y) //// obj->cur.cache.geometry.validity = 0; o->changed = 1; evas_object_change(obj); + evas_object_clip_dirty(obj); evas_object_coords_recalc(obj); if (obj->layer->evas->events_frozen != 0) { @@ -210,6 +211,7 @@ evas_object_polygon_points_clear(Evas_Object *obj) //// obj->cur.cache.geometry.validity = 0; o->changed = 1; evas_object_change(obj); + evas_object_clip_dirty(obj); evas_object_coords_recalc(obj); is = evas_object_is_in_output_rect(obj, obj->layer->evas->pointer.x, diff --git a/src/lib/canvas/evas_object_text.c b/src/lib/canvas/evas_object_text.c index 18d1c4c..ec7c3c6 100644 --- a/src/lib/canvas/evas_object_text.c +++ b/src/lib/canvas/evas_object_text.c @@ -257,6 +257,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz } o->changed = 1; evas_object_change(obj); + evas_object_clip_dirty(obj); evas_object_coords_recalc(obj); if (obj->layer->evas->events_frozen <= 0) { @@ -361,6 +362,7 @@ evas_object_text_text_set(Evas_Object *obj, const char *text) } o->changed = 1; evas_object_change(obj); + evas_object_clip_dirty(obj); evas_object_coords_recalc(obj); is = evas_object_is_in_output_rect(obj, obj->layer->evas->pointer.x, @@ -698,6 +700,7 @@ evas_object_text_style_set(Evas_Object *obj, Evas_Text_Style_Type style) obj->cur.geometry.w = 0; obj->cur.geometry.h += (t - pt) + (b - pb); evas_object_change(obj); + evas_object_clip_dirty(obj); } /** @@ -1803,6 +1806,7 @@ _evas_object_text_rehint(Evas_Object *obj) } o->changed = 1; evas_object_change(obj); + evas_object_clip_dirty(obj); evas_object_coords_recalc(obj); is = evas_object_is_in_output_rect(obj, obj->layer->evas->pointer.x, diff --git a/src/lib/include/evas_inline.x b/src/lib/include/evas_inline.x index 1a498f3..410567f 100644 --- a/src/lib/include/evas_inline.x +++ b/src/lib/include/evas_inline.x @@ -172,7 +172,8 @@ evas_object_clip_recalc(Evas_Object *obj) int nx, ny, nw, nh, nvis, nr, ng, nb, na; if (obj->layer->evas->events_frozen > 0) return; -// if (!obj->cur.clipper->cur.cache.clip.dirty) return; + if (!(obj->cur.clipper == NULL || obj->cur.clipper->cur.cache.clip.dirty) + && !obj->cur.cache.clip.dirty) return; evas_object_coords_recalc(obj); cx = obj->cur.geometry.x; cy = obj->cur.geometry.y; cw = obj->cur.geometry.w; ch = obj->cur.geometry.h; @@ -185,7 +186,7 @@ evas_object_clip_recalc(Evas_Object *obj) if (obj->cur.clipper) { // this causes problems... hmmm -// if (obj->cur.clipper->cur.cache.clip.dirty) + if (obj->cur.clipper->cur.cache.clip.dirty) evas_object_clip_recalc(obj->cur.clipper); nx = obj->cur.clipper->cur.cache.clip.x; ny = obj->cur.clipper->cur.cache.clip.y; -- 2.7.4