fix smart map redraw errors.
authorCarsten Haitzler <raster@rasterman.com>
Fri, 6 Nov 2009 08:44:49 +0000 (08:44 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Fri, 6 Nov 2009 08:44:49 +0000 (08:44 +0000)
SVN revision: 43483

legacy/evas/src/lib/canvas/evas_main.c
legacy/evas/src/lib/canvas/evas_object_gradient.c
legacy/evas/src/lib/canvas/evas_object_gradient2_linear.c
legacy/evas/src/lib/canvas/evas_object_gradient2_radial.c
legacy/evas/src/lib/canvas/evas_object_line.c
legacy/evas/src/lib/canvas/evas_object_polygon.c
legacy/evas/src/lib/canvas/evas_object_rectangle.c
legacy/evas/src/lib/canvas/evas_object_smart.c
legacy/evas/src/lib/canvas/evas_object_text.c
legacy/evas/src/lib/canvas/evas_object_textblock.c
legacy/evas/src/lib/canvas/evas_render.c

index 0b90ce5..e0fa3de 100644 (file)
@@ -126,15 +126,15 @@ evas_new(void)
    e->hinting = EVAS_FONT_HINTING_BYTECODE;
    e->name_hash = eina_hash_string_superfast_new(NULL);
 
-   eina_array_step_set(&e->delete_objects, 16);
-   eina_array_step_set(&e->active_objects, 16);
-   eina_array_step_set(&e->restack_objects, 16);
-   eina_array_step_set(&e->render_objects, 16);
-   eina_array_step_set(&e->pending_objects, 16);
-   eina_array_step_set(&e->obscuring_objects, 16);
-   eina_array_step_set(&e->temporary_objects, 16);
-   eina_array_step_set(&e->calculate_objects, 16);
-   eina_array_step_set(&e->clip_changes, 16);
+   eina_array_step_set(&e->delete_objects, 256);
+   eina_array_step_set(&e->active_objects, 256);
+   eina_array_step_set(&e->restack_objects, 256);
+   eina_array_step_set(&e->render_objects, 256);
+   eina_array_step_set(&e->pending_objects, 256);
+   eina_array_step_set(&e->obscuring_objects, 256);
+   eina_array_step_set(&e->temporary_objects, 256);
+   eina_array_step_set(&e->calculate_objects, 256);
+   eina_array_step_set(&e->clip_changes, 256);
 
    return e;
 }
index 2cbc606..bfe54c3 100644 (file)
@@ -1051,6 +1051,11 @@ evas_object_gradient_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* its not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index a23dda9..49c3b20 100644 (file)
@@ -352,6 +352,11 @@ evas_object_gradient2_linear_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* its not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 3b6910e..d937351 100644 (file)
@@ -349,6 +349,11 @@ evas_object_gradient2_radial_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* its not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 1539c76..f6343e8 100644 (file)
@@ -343,6 +343,11 @@ evas_object_line_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* it's not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 2b3109e..5f48f5d 100644 (file)
@@ -358,6 +358,11 @@ evas_object_polygon_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* it's not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 0b8f06f..a10ae6d 100644 (file)
@@ -207,6 +207,11 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* it's not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 579d3c6..6b7941b 100644 (file)
@@ -819,6 +819,12 @@ static void
 evas_object_smart_render_pre(Evas_Object *obj)
 {
    if (obj->pre_render_done) return;
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
+   done:
    obj->pre_render_done = 1;
 }
 
index 8a3bd57..eae61d7 100644 (file)
@@ -1637,6 +1637,11 @@ evas_object_text_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* its not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index b45fb19..d410e0a 100644 (file)
@@ -5630,6 +5630,11 @@ evas_object_textblock_render_pre(Evas_Object *obj)
        evas_object_render_pre_visible_change(&obj->layer->evas->clip_changes, obj, is_v, was_v);
        goto done;
      }
+   if (obj->cur.map != obj->prev.map)
+     {
+       evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, obj);
+        goto done;
+     }
    /* it's not visible - we accounted for it appearing or not so just abort */
    if (!is_v) goto done;
    /* clipper changed this is in addition to anything else for obj */
index 617fd01..a673ed1 100644 (file)
@@ -2,7 +2,7 @@
 #include "evas_private.h"
 
 static Eina_List *
-evas_render_updates_internal(Evas *e, Evas_Object *smart, unsigned char make_updates, unsigned char do_draw);
+evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char do_draw);
 
 /**
  * Add a damage rectangle.
@@ -169,7 +169,9 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Eina_Array *active
 
    obj->is_active = is_active;
    if ((is_active) || (obj->delete_me != 0))
-     eina_array_push(active_objects, obj);
+     {
+        eina_array_push(active_objects, obj);
+     }
    if (restack)
      {
        if (!obj->changed)
@@ -511,7 +513,6 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, int
 
 static Eina_List *
 evas_render_updates_internal(Evas *e,
-                             Evas_Object *smart, // is this a good idea?
                              unsigned char make_updates,
                              unsigned char do_draw)
 {
@@ -530,11 +531,6 @@ evas_render_updates_internal(Evas *e,
    MAGIC_CHECK_END();
    if (!e->changed) return NULL;
 
-   if (smart)
-     {
-        // FIXME: if smart, only consider child objects
-     }
-
    evas_call_smarts_calculate(e);
 
    /* Check if the modified object mean recalculating every thing */
@@ -806,6 +802,12 @@ evas_render_updates_internal(Evas *e,
             obj->restack = 0;
             obj->changed = 0;
          }
+        else if (obj->cur.map != obj->prev.map)
+          {
+            obj->func->render_post(obj);
+            obj->restack = 0;
+            obj->changed = 0;
+          }
 /* moved to other pre-process phase 1
        if (obj->delete_me == 2)
          {
@@ -886,7 +888,7 @@ evas_render_updates(Evas *e)
    MAGIC_CHECK_END();
 
    if (!e->changed) return NULL;
-   return evas_render_updates_internal(e, NULL, 1, 1);
+   return evas_render_updates_internal(e, 1, 1);
 }
 
 /**
@@ -905,7 +907,7 @@ evas_render(Evas *e)
    MAGIC_CHECK_END();
 
    if (!e->changed) return;
-   evas_render_updates_internal(e, NULL, 0, 1);
+   evas_render_updates_internal(e, 0, 1);
 }
 
 /**
@@ -929,7 +931,7 @@ evas_norender(Evas *e)
    MAGIC_CHECK_END();
 
 //   if (!e->changed) return;
-   evas_render_updates_internal(e, NULL, 0, 0);
+   evas_render_updates_internal(e, 0, 0);
 }
 
 /**