From f4e755396a16e302d8821bd0998449c9dce029ad Mon Sep 17 00:00:00 2001 From: raster Date: Fri, 6 Nov 2009 08:44:49 +0000 Subject: [PATCH] fix smart map redraw errors. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@43483 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/canvas/evas_main.c | 18 +++++++++--------- src/lib/canvas/evas_object_gradient.c | 5 +++++ src/lib/canvas/evas_object_gradient2_linear.c | 5 +++++ src/lib/canvas/evas_object_gradient2_radial.c | 5 +++++ src/lib/canvas/evas_object_line.c | 5 +++++ src/lib/canvas/evas_object_polygon.c | 5 +++++ src/lib/canvas/evas_object_rectangle.c | 5 +++++ src/lib/canvas/evas_object_smart.c | 6 ++++++ src/lib/canvas/evas_object_text.c | 5 +++++ src/lib/canvas/evas_object_textblock.c | 5 +++++ src/lib/canvas/evas_render.c | 24 +++++++++++++----------- 11 files changed, 68 insertions(+), 20 deletions(-) diff --git a/src/lib/canvas/evas_main.c b/src/lib/canvas/evas_main.c index 0b90ce5..e0fa3de 100644 --- a/src/lib/canvas/evas_main.c +++ b/src/lib/canvas/evas_main.c @@ -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; } diff --git a/src/lib/canvas/evas_object_gradient.c b/src/lib/canvas/evas_object_gradient.c index 2cbc606..bfe54c3 100644 --- a/src/lib/canvas/evas_object_gradient.c +++ b/src/lib/canvas/evas_object_gradient.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_gradient2_linear.c b/src/lib/canvas/evas_object_gradient2_linear.c index a23dda9..49c3b20 100644 --- a/src/lib/canvas/evas_object_gradient2_linear.c +++ b/src/lib/canvas/evas_object_gradient2_linear.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_gradient2_radial.c b/src/lib/canvas/evas_object_gradient2_radial.c index 3b6910e..d937351 100644 --- a/src/lib/canvas/evas_object_gradient2_radial.c +++ b/src/lib/canvas/evas_object_gradient2_radial.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_line.c b/src/lib/canvas/evas_object_line.c index 1539c76..f6343e8 100644 --- a/src/lib/canvas/evas_object_line.c +++ b/src/lib/canvas/evas_object_line.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_polygon.c b/src/lib/canvas/evas_object_polygon.c index 2b3109e..5f48f5d 100644 --- a/src/lib/canvas/evas_object_polygon.c +++ b/src/lib/canvas/evas_object_polygon.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_rectangle.c b/src/lib/canvas/evas_object_rectangle.c index 0b8f06f..a10ae6d 100644 --- a/src/lib/canvas/evas_object_rectangle.c +++ b/src/lib/canvas/evas_object_rectangle.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_smart.c b/src/lib/canvas/evas_object_smart.c index 579d3c6..6b7941b 100644 --- a/src/lib/canvas/evas_object_smart.c +++ b/src/lib/canvas/evas_object_smart.c @@ -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; } diff --git a/src/lib/canvas/evas_object_text.c b/src/lib/canvas/evas_object_text.c index 8a3bd57..eae61d7 100644 --- a/src/lib/canvas/evas_object_text.c +++ b/src/lib/canvas/evas_object_text.c @@ -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 */ diff --git a/src/lib/canvas/evas_object_textblock.c b/src/lib/canvas/evas_object_textblock.c index b45fb19..d410e0a 100644 --- a/src/lib/canvas/evas_object_textblock.c +++ b/src/lib/canvas/evas_object_textblock.c @@ -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 */ diff --git a/src/lib/canvas/evas_render.c b/src/lib/canvas/evas_render.c index 617fd01..a673ed1 100644 --- a/src/lib/canvas/evas_render.c +++ b/src/lib/canvas/evas_render.c @@ -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); } /** -- 2.7.4