* evas: Another attempt to fix clip cache. Now invalid clip cache every time
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 14 Apr 2009 10:47:15 +0000 (10:47 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 14 Apr 2009 10:47:15 +0000 (10:47 +0000)
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: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@40039 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_object_line.c
src/lib/canvas/evas_object_main.c
src/lib/canvas/evas_object_polygon.c
src/lib/canvas/evas_object_text.c
src/lib/include/evas_inline.x

index b6144b0..0432c1d 100644 (file)
@@ -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,
index 0bfdb2d..4a29994 100644 (file)
@@ -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);
index 418dede..7f651d6 100644 (file)
@@ -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,
index 18d1c4c..ec7c3c6 100644 (file)
@@ -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,
index 1a498f3..410567f 100644 (file)
@@ -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;