diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c index d412e435fa..69e8efb89c 100644 --- a/legacy/evas/src/lib/canvas/evas_clip.c +++ b/legacy/evas/src/lib/canvas/evas_clip.c @@ -42,9 +42,7 @@ evas_object_clippers_was_visible(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Pr { if (obj->prev.clipper) { - Evas_Object_Protected_Data *prev_clipper = - eo_data_get(obj->prev.clipper, EVAS_OBJ_CLASS); - return evas_object_clippers_is_visible(obj->prev.clipper, prev_clipper); + return evas_object_clippers_is_visible(obj->prev.eo_clipper, obj->prev.clipper); } return 1; } @@ -127,8 +125,7 @@ evas_object_clip_across_check(Evas_Object *eo_obj, Evas_Object_Protected_Data *o { #ifdef MAP_ACROSS if (!obj->cur.clipper) return; - Evas_Object_Protected_Data *clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); - if (clipper->cur.map_parent != obj->cur.map_parent) + if (obj->cur.clipper->cur.map_parent != obj->cur.map_parent) evas_object_child_map_across_mark(eo_obj, obj, obj->cur.map_parent, 1); #endif } @@ -198,18 +195,22 @@ evas_object_clip_set( void _clip_set(Eo *eo_obj, void *_pd, va_list *list) { + Evas_Object_Protected_Data *clip; Evas_Object *eo_clip = va_arg(*list, Evas_Object *); Evas_Object_Protected_Data *obj = _pd; + if (!eo_clip) { evas_object_clip_unset(eo_obj); return; } + MAGIC_CHECK(eo_clip, Evas_Object, MAGIC_OBJ); return; MAGIC_CHECK_END(); - Evas_Object_Protected_Data *clip = eo_data_get(eo_clip, EVAS_OBJ_CLASS); - if (obj->cur.clipper == eo_clip) return; + + clip = eo_data_get(eo_clip, EVAS_OBJ_CLASS); + if (obj->cur.eo_clipper == eo_clip) return; if (eo_obj == eo_clip) { CRIT("Setting clip %p on itself", eo_obj); @@ -255,21 +256,21 @@ _clip_set(Eo *eo_obj, void *_pd, va_list *list) if (obj->cur.clipper) { /* unclip */ - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); - cur_clipper->clip.clipees = eina_list_remove(cur_clipper->clip.clipees, eo_obj); - if (!cur_clipper->clip.clipees) + obj->cur.clipper->clip.clipees = eina_list_remove(obj->cur.clipper->clip.clipees, eo_obj); + if (!obj->cur.clipper->clip.clipees) { - cur_clipper->cur.have_clipees = 0; - if (cur_clipper->cur.visible) - evas_damage_rectangle_add(cur_clipper->layer->evas->evas, - cur_clipper->cur.geometry.x, - cur_clipper->cur.geometry.y, - cur_clipper->cur.geometry.w, - cur_clipper->cur.geometry.h); + obj->cur.clipper->cur.have_clipees = 0; + if (obj->cur.clipper->cur.visible) + evas_damage_rectangle_add(obj->cur.clipper->layer->evas->evas, + obj->cur.clipper->cur.geometry.x, + obj->cur.clipper->cur.geometry.y, + obj->cur.clipper->cur.geometry.w, + obj->cur.clipper->cur.geometry.h); } - evas_object_change(obj->cur.clipper, cur_clipper); + evas_object_change(obj->cur.eo_clipper, obj->cur.clipper); evas_object_change(eo_obj, obj); obj->cur.clipper = NULL; + obj->cur.eo_clipper = NULL; } /* clip me */ if ((!clip->clip.clipees) && (clip->cur.visible)) @@ -281,7 +282,8 @@ _clip_set(Eo *eo_obj, void *_pd, va_list *list) clip->cur.geometry.x, clip->cur.geometry.y, clip->cur.geometry.w, clip->cur.geometry.h); } - obj->cur.clipper = eo_clip; + obj->cur.eo_clipper = eo_clip; + obj->cur.clipper = clip; clip->clip.clipees = eina_list_append(clip->clip.clipees, eo_obj); if (clip->clip.clipees) { @@ -339,7 +341,7 @@ _clip_get(Eo *eo_obj EINA_UNUSED, void *_pd, va_list *list) { Evas_Object **clip = va_arg(*list, Evas_Object **); const Evas_Object_Protected_Data *obj = _pd; - *clip = obj->cur.clipper; + *clip = obj->cur.eo_clipper; } EAPI void @@ -355,6 +357,7 @@ void _clip_unset(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED) { Evas_Object_Protected_Data *obj = _pd; + if (!obj->cur.clipper) return; /* unclip */ if (evas_object_intercept_call_clip_unset(eo_obj)) return; @@ -364,21 +367,21 @@ _clip_unset(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED) } if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); - cur_clipper->clip.clipees = eina_list_remove(cur_clipper->clip.clipees, eo_obj); - if (!cur_clipper->clip.clipees) + obj->cur.clipper->clip.clipees = eina_list_remove(obj->cur.clipper->clip.clipees, eo_obj); + if (!obj->cur.clipper->clip.clipees) { - cur_clipper->cur.have_clipees = 0; - if (cur_clipper->cur.visible) - evas_damage_rectangle_add(cur_clipper->layer->evas->evas, - cur_clipper->cur.geometry.x, - cur_clipper->cur.geometry.y, - cur_clipper->cur.geometry.w, - cur_clipper->cur.geometry.h); + obj->cur.clipper->cur.have_clipees = 0; + if (obj->cur.clipper->cur.visible) + evas_damage_rectangle_add(obj->cur.clipper->layer->evas->evas, + obj->cur.clipper->cur.geometry.x, + obj->cur.clipper->cur.geometry.y, + obj->cur.clipper->cur.geometry.w, + obj->cur.clipper->cur.geometry.h); } - evas_object_change(obj->cur.clipper, cur_clipper); + evas_object_change(obj->cur.eo_clipper, obj->cur.clipper); } obj->cur.clipper = NULL; + obj->cur.eo_clipper = NULL; evas_object_change(eo_obj, obj); evas_object_clip_dirty(eo_obj, obj); evas_object_recalc_clippees(eo_obj, obj); diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index 09d642d96c..549e028e78 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -95,7 +95,7 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in, else { if (!obj->child_has_map) - evas_object_smart_bouding_box_update(eo_obj); + evas_object_smart_bounding_box_update(eo_obj, obj); if (obj->child_has_map || (obj->cur.bounding_box.x <= x && obj->cur.bounding_box.x + obj->cur.bounding_box.w >= x && diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 0063f1be62..a63675bf3b 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -2703,7 +2703,7 @@ _proxy_subrender(Evas *eo_e, Evas_Object *eo_source) e->engine.func->context_free(e->engine.data.output, ctx); ctx = e->engine.func->context_new(e->engine.data.output); - evas_render_mapped(eo_e, eo_source, source, ctx, source->proxy.surface, + evas_render_mapped(e, eo_source, source, ctx, source->proxy.surface, -source->cur.geometry.x, -source->cur.geometry.y, 1, 0, 0, e->output.w, e->output.h @@ -3556,10 +3556,9 @@ evas_object_image_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *ob /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, clipper); - clipper->func->render_pre(obj->cur.clipper, clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* Proxy: Do it early */ if (o->cur.source) @@ -3797,12 +3796,11 @@ evas_object_image_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *ob h = obj->cur.cache.clip.h; if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); RECTS_CLIP_TO_RECT(x, y, w, h, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); } e->engine.func->output_redraws_rect_del(e->engine.data.output, x, y, w, h); diff --git a/legacy/evas/src/lib/canvas/evas_object_line.c b/legacy/evas/src/lib/canvas/evas_object_line.c index 8f7ed6eef7..538488a4a9 100644 --- a/legacy/evas/src/lib/canvas/evas_object_line.c +++ b/legacy/evas/src/lib/canvas/evas_object_line.c @@ -296,10 +296,9 @@ evas_object_line_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, cur_clipper); - cur_clipper->func->render_pre(obj->cur.clipper, cur_clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index 6ee429a0bf..25ce68a3e5 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -204,26 +204,20 @@ evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *eo_obj) { Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, MY_CLASS); - Evas_Object_Protected_Data *cur_clipper = NULL; - Evas_Object_Protected_Data *prev_clipper = NULL; if (obj->is_smart) return; if (obj->cur.clipper == obj->prev.clipper) return; - if (obj->cur.clipper) - cur_clipper = eo_data_get(obj->cur.clipper, MY_CLASS); - if (obj->prev.clipper) - prev_clipper = eo_data_get(obj->prev.clipper, MY_CLASS); if ((obj->cur.clipper) && (obj->prev.clipper)) { /* get difference rects between clippers */ evas_rects_return_difference_rects(rects, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h, - prev_clipper->prev.cache.clip.x, - prev_clipper->prev.cache.clip.y, - prev_clipper->prev.cache.clip.w, - prev_clipper->prev.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h, + obj->prev.clipper->prev.cache.clip.x, + obj->prev.clipper->prev.cache.clip.y, + obj->prev.clipper->prev.cache.clip.w, + obj->prev.clipper->prev.cache.clip.h); } else if (obj->cur.clipper) { @@ -236,10 +230,10 @@ evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *eo_obj) //// obj->cur.cache.geometry.y, //// obj->cur.cache.geometry.w, //// obj->cur.cache.geometry.h, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); } else if (obj->prev.clipper) { @@ -252,10 +246,10 @@ evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *eo_obj) //// obj->prev.cache.geometry.y, //// obj->prev.cache.geometry.w, //// obj->prev.cache.geometry.h, - prev_clipper->prev.cache.clip.x, - prev_clipper->prev.cache.clip.y, - prev_clipper->prev.cache.clip.w, - prev_clipper->prev.cache.clip.h); + obj->prev.clipper->prev.cache.clip.x, + obj->prev.clipper->prev.cache.clip.y, + obj->prev.clipper->prev.cache.clip.w, + obj->prev.clipper->prev.cache.clip.h); } } @@ -312,15 +306,14 @@ void evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, int is_v, int was_v EINA_UNUSED) { Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, MY_CLASS); - if (!obj) return; - Eina_Rectangle *r; - Evas_Object *eo_clipper; Eina_List *l; unsigned int i; Eina_Array_Iterator it; int x, y, w, h; + if (!obj) return; + if (obj->is_smart) goto end; /* FIXME: was_v isn't used... why? */ if (!obj->clip.clipees) @@ -357,10 +350,11 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in /* if the object is actually visible, take any parent clip changes */ if (is_v) { - eo_clipper = obj->cur.clipper; - while (eo_clipper) + Evas_Object_Protected_Data *clipper; + + clipper = obj->cur.clipper; + while (clipper) { - Evas_Object_Protected_Data *clipper = eo_data_get(eo_clipper, MY_CLASS); EINA_LIST_FOREACH(clipper->clip.changes, l, r) { /* get updates and clip to current clip */ @@ -384,7 +378,7 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, x, y, w, h); } - eo_clipper = clipper->cur.clipper; + clipper = clipper->cur.clipper; } } } diff --git a/legacy/evas/src/lib/canvas/evas_object_polygon.c b/legacy/evas/src/lib/canvas/evas_object_polygon.c index b3df079f89..3f94317ed0 100644 --- a/legacy/evas/src/lib/canvas/evas_object_polygon.c +++ b/legacy/evas/src/lib/canvas/evas_object_polygon.c @@ -353,10 +353,9 @@ evas_object_polygon_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data * /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, cur_clipper); - cur_clipper->func->render_pre(obj->cur.clipper, cur_clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_object_rectangle.c b/legacy/evas/src/lib/canvas/evas_object_rectangle.c index 07a720f613..b04b4fdfd6 100644 --- a/legacy/evas/src/lib/canvas/evas_object_rectangle.c +++ b/legacy/evas/src/lib/canvas/evas_object_rectangle.c @@ -164,10 +164,9 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper_obj = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, cur_clipper_obj); - cur_clipper_obj->func->render_pre(obj->cur.clipper, cur_clipper_obj); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_object_smart.c b/legacy/evas/src/lib/canvas/evas_object_smart.c index 338847ce04..a1c73f821a 100644 --- a/legacy/evas/src/lib/canvas/evas_object_smart.c +++ b/legacy/evas/src/lib/canvas/evas_object_smart.c @@ -1216,8 +1216,9 @@ evas_object_smart_need_bounding_box_update(Evas_Object *eo_obj) } void -evas_object_smart_bouding_box_update(Evas_Object *eo_obj) +evas_object_smart_bounding_box_update(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { + Evas_Object_Smart *os; Eina_Inlist *list; Evas_Object_Protected_Data *o; Evas_Coord minx; @@ -1228,8 +1229,8 @@ evas_object_smart_bouding_box_update(Evas_Object *eo_obj) MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); return; MAGIC_CHECK_END(); - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); - Evas_Object_Smart *os = eo_data_get(eo_obj, MY_CLASS); + + os = eo_data_get(eo_obj, MY_CLASS); if (!os->update_boundingbox_needed) return ; os->update_boundingbox_needed = EINA_FALSE; @@ -1250,7 +1251,7 @@ evas_object_smart_bouding_box_update(Evas_Object *eo_obj) if (eo_isa(o->object, EVAS_OBJ_SMART_CLASS)) { - evas_object_smart_bouding_box_update(o->object); + evas_object_smart_bounding_box_update(o->object, o); tx = o->cur.bounding_box.x; ty = o->cur.bounding_box.y; diff --git a/legacy/evas/src/lib/canvas/evas_object_text.c b/legacy/evas/src/lib/canvas/evas_object_text.c index 8e436b9036..66637190f8 100644 --- a/legacy/evas/src/lib/canvas/evas_object_text.c +++ b/legacy/evas/src/lib/canvas/evas_object_text.c @@ -1617,12 +1617,11 @@ evas_object_text_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, vo #define COLOR_SET(object, sub, col) \ if (obj->cur.clipper)\ { \ - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); \ ENFN->context_color_set(output, context, \ - ((int)object->sub.col.r * ((int)cur_clipper->cur.cache.clip.r + 1)) >> 8, \ - ((int)object->sub.col.g * ((int)cur_clipper->cur.cache.clip.g + 1)) >> 8, \ - ((int)object->sub.col.b * ((int)cur_clipper->cur.cache.clip.b + 1)) >> 8, \ - ((int)object->sub.col.a * ((int)cur_clipper->cur.cache.clip.a + 1)) >> 8); \ + ((int)object->sub.col.r * ((int)obj->cur.clipper->cur.cache.clip.r + 1)) >> 8, \ + ((int)object->sub.col.g * ((int)obj->cur.clipper->cur.cache.clip.g + 1)) >> 8, \ + ((int)object->sub.col.b * ((int)obj->cur.clipper->cur.cache.clip.b + 1)) >> 8, \ + ((int)object->sub.col.a * ((int)obj->cur.clipper->cur.cache.clip.a + 1)) >> 8); \ } \ else\ ENFN->context_color_set(output, context, \ @@ -1634,12 +1633,11 @@ evas_object_text_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, vo #define COLOR_SET_AMUL(object, sub, col, amul) \ if (obj->cur.clipper) \ { \ - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); \ ENFN->context_color_set(output, context, \ - (((int)object->sub.col.r) * ((int)cur_clipper->cur.cache.clip.r) * (amul)) / 65025, \ - (((int)object->sub.col.g) * ((int)cur_clipper->cur.cache.clip.g) * (amul)) / 65025, \ - (((int)object->sub.col.b) * ((int)cur_clipper->cur.cache.clip.b) * (amul)) / 65025, \ - (((int)object->sub.col.a) * ((int)cur_clipper->cur.cache.clip.a) * (amul)) / 65025); \ + (((int)object->sub.col.r) * ((int)obj->cur.clipper->cur.cache.clip.r) * (amul)) / 65025, \ + (((int)object->sub.col.g) * ((int)obj->cur.clipper->cur.cache.clip.g) * (amul)) / 65025, \ + (((int)object->sub.col.b) * ((int)obj->cur.clipper->cur.cache.clip.b) * (amul)) / 65025, \ + (((int)object->sub.col.a) * ((int)obj->cur.clipper->cur.cache.clip.a) * (amul)) / 65025); \ } \ else \ ENFN->context_color_set(output, context, \ @@ -1834,10 +1832,9 @@ evas_object_text_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, clipper); - clipper->func->render_pre(obj->cur.clipper, clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index 0496a6f50d..f8a59bda57 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -10070,10 +10070,9 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper_obj = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, cur_clipper_obj); - cur_clipper_obj->func->render_pre(obj->cur.clipper, cur_clipper_obj); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_object_textgrid.c b/legacy/evas/src/lib/canvas/evas_object_textgrid.c index 78fa7322a0..40b22a78c7 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textgrid.c +++ b/legacy/evas/src/lib/canvas/evas_object_textgrid.c @@ -709,10 +709,9 @@ evas_object_textgrid_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data /* if someone is clipping this obj - go calculate the clipper */ if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); if (obj->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, cur_clipper); - cur_clipper->func->render_pre(obj->cur.clipper, cur_clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, obj->cur.clipper); + obj->cur.clipper->func->render_pre(obj->cur.eo_clipper, obj->cur.clipper); } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 6409699666..1f6bff970d 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -125,9 +125,8 @@ _canvas_obscured_clear(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list EINA_UNUSE } static Eina_Bool -_evas_render_had_map(Evas_Object *eo_obj) +_evas_render_had_map(Evas_Object_Protected_Data *obj) { - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); return ((obj->prev.map) && (obj->prev.usemap)); // return ((!obj->cur.map) && (obj->prev.usemap)); } @@ -141,17 +140,14 @@ _evas_render_is_relevant(Evas_Object *eo_obj) } static Eina_Bool -_evas_render_can_render(Evas_Object *eo_obj) +_evas_render_can_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); return (evas_object_is_visible(eo_obj, obj) && (!obj->cur.have_clipees)); } static void -_evas_render_prev_cur_clip_cache_add(Evas *eo_e, Evas_Object *eo_obj) +_evas_render_prev_cur_clip_cache_add(Evas_Public_Data *e, Evas_Object_Protected_Data *obj) { - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); e->engine.func->output_redraws_rect_add(e->engine.data.output, obj->prev.cache.clip.x, obj->prev.cache.clip.y, @@ -165,10 +161,8 @@ _evas_render_prev_cur_clip_cache_add(Evas *eo_e, Evas_Object *eo_obj) } static void -_evas_render_cur_clip_cache_del(Evas *eo_e, Evas_Object *eo_obj) +_evas_render_cur_clip_cache_del(Evas_Public_Data *e, Evas_Object_Protected_Data *obj) { - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); Evas_Coord x, y, w, h; x = obj->cur.cache.clip.x; @@ -177,19 +171,18 @@ _evas_render_cur_clip_cache_del(Evas *eo_e, Evas_Object *eo_obj) h = obj->cur.cache.clip.h; if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); RECTS_CLIP_TO_RECT(x, y, w, h, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); } e->engine.func->output_redraws_rect_del(e->engine.data.output, x, y, w, h); } static void -_evas_render_phase1_direct(Evas *eo_e, +_evas_render_phase1_direct(Evas_Public_Data *e, Eina_Array *active_objects, Eina_Array *restack_objects EINA_UNUSED, Eina_Array *delete_objects EINA_UNUSED, @@ -230,7 +223,7 @@ _evas_render_phase1_direct(Evas *eo_e, evas_object_clip_recalc(eo_obj, obj); obj->func->render_pre(eo_obj, obj); if (obj->proxy.redraw) - _evas_render_prev_cur_clip_cache_add(eo_e, eo_obj); + _evas_render_prev_cur_clip_cache_add(e, obj); if (obj->proxy.proxies) { obj->proxy.redraw = EINA_TRUE; @@ -238,7 +231,7 @@ _evas_render_phase1_direct(Evas *eo_e, { Evas_Object_Protected_Data *proxy = eo_data_get(eo_proxy, EVAS_OBJ_CLASS); proxy->func->render_pre(eo_proxy, proxy); - _evas_render_prev_cur_clip_cache_add(eo_e, eo_proxy); + _evas_render_prev_cur_clip_cache_add(e, proxy); } } @@ -247,13 +240,13 @@ _evas_render_phase1_direct(Evas *eo_e, evas_object_smart_members_get_direct(eo_obj), obj->cur.map, obj->cur.usemap, obj->prev.map, obj->prev.usemap, - _evas_render_has_map(eo_obj), - _evas_render_had_map(eo_obj)); + _evas_render_has_map(eo_obj, obj), + _evas_render_had_map(obj)); if ((obj->is_smart) && - (_evas_render_has_map(eo_obj))) + (_evas_render_has_map(eo_obj, obj))) { RD(" has map + smart\n"); - _evas_render_prev_cur_clip_cache_add(eo_e, eo_obj); + _evas_render_prev_cur_clip_cache_add(e, obj); } } else @@ -266,7 +259,7 @@ _evas_render_phase1_direct(Evas *eo_e, (evas_object_is_opaque(eo_obj, obj) && evas_object_is_visible(eo_obj, obj))) { RD(" rect del\n"); - _evas_render_cur_clip_cache_del(eo_e, eo_obj); + _evas_render_cur_clip_cache_del(e, obj); } } } @@ -274,7 +267,7 @@ _evas_render_phase1_direct(Evas *eo_e, } static Eina_Bool -_evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, +_evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, Eina_Array *active_objects, Eina_Array *restack_objects, Eina_Array *delete_objects, @@ -287,7 +280,6 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, #endif ) { - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); Eina_Bool clean_them = EINA_FALSE; int is_active; Eina_Bool map, hmap; @@ -325,8 +317,8 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, } #endif - map = _evas_render_has_map(eo_obj); - hmap = _evas_render_had_map(eo_obj); + map = _evas_render_has_map(eo_obj, obj); + hmap = _evas_render_had_map(obj); if ((restack) && (!map)) { @@ -352,7 +344,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, (evas_object_was_visible(eo_obj, obj) && (!obj->prev.have_clipees)))) { eina_array_push(render_objects, obj); - _evas_render_prev_cur_clip_cache_add(eo_e, eo_obj); + _evas_render_prev_cur_clip_cache_add(e, obj); obj->render_pre = EINA_TRUE; if (obj->is_smart) @@ -360,7 +352,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj2; EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), obj2) { - _evas_render_phase1_object_process(eo_e, obj2->object, + _evas_render_phase1_object_process(e, obj2->object, active_objects, restack_objects, delete_objects, @@ -383,7 +375,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, RDI(level); RD(" had map - restack objs\n"); // eina_array_push(restack_objects, obj); - _evas_render_prev_cur_clip_cache_add(eo_e, eo_obj); + _evas_render_prev_cur_clip_cache_add(e, obj); if (obj->changed) { if (!map) @@ -410,7 +402,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), obj2) { - _evas_render_phase1_object_process(eo_e, obj2->object, + _evas_render_phase1_object_process(e, obj2->object, active_objects, restack_objects, delete_objects, @@ -454,7 +446,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, obj->cur.cache.clip.a, evas_object_was_visible(eo_obj, obj)); if ((!obj->clip.clipees) && (obj->delete_me == 0) && - (_evas_render_can_render(eo_obj) || + (_evas_render_can_render(eo_obj, obj) || (evas_object_was_visible(eo_obj, obj) && (!obj->prev.have_clipees)))) { if (obj->is_smart) @@ -467,7 +459,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, EINA_INLIST_FOREACH (evas_object_smart_members_get_direct(eo_obj), obj2) { - _evas_render_phase1_object_process(eo_e, obj2->object, + _evas_render_phase1_object_process(e, obj2->object, active_objects, restack_objects, delete_objects, @@ -514,7 +506,7 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, EINA_INLIST_FOREACH (evas_object_smart_members_get_direct(eo_obj), obj2) { - _evas_render_phase1_object_process(eo_e, obj2, + _evas_render_phase1_object_process(e, obj2, active_objects, restack_objects, delete_objects, @@ -536,14 +528,13 @@ _evas_render_phase1_object_process(Evas *eo_e, Evas_Object *eo_obj, } static Eina_Bool -_evas_render_phase1_process(Evas *eo_e, +_evas_render_phase1_process(Evas_Public_Data *e, Eina_Array *active_objects, Eina_Array *restack_objects, Eina_Array *delete_objects, Eina_Array *render_objects, int *redraw_all) { - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); Evas_Layer *lay; Eina_Bool clean_them = EINA_FALSE; @@ -555,7 +546,7 @@ _evas_render_phase1_process(Evas *eo_e, EINA_INLIST_FOREACH(lay->objects, obj) { clean_them |= _evas_render_phase1_object_process - (eo_e, obj->object, active_objects, restack_objects, delete_objects, + (e, obj->object, active_objects, restack_objects, delete_objects, render_objects, 0, redraw_all, EINA_FALSE #ifdef REND_DBG , 1 @@ -584,7 +575,7 @@ _evas_render_check_pending_objects(Eina_Array *pending_objects, Evas *eo_e EINA_ if (!obj->layer) goto clean_stuff; //If the children are in active objects, They should be cleaned up. - if (obj->changed_map && _evas_render_has_map(eo_obj)) + if (obj->changed_map && _evas_render_has_map(eo_obj, obj)) goto clean_stuff; evas_object_clip_recalc(eo_obj, obj); @@ -607,7 +598,7 @@ _evas_render_check_pending_objects(Eina_Array *pending_objects, Evas *eo_e EINA_ } else if ((is_active) && (obj->restack) && (!obj->clip.clipees) && - (_evas_render_can_render(eo_obj) || + (_evas_render_can_render(eo_obj, obj) || (evas_object_was_visible(eo_obj, obj) && (!obj->prev.have_clipees)))) { if (!(obj->render_pre || obj->rect_del)) @@ -615,7 +606,7 @@ _evas_render_check_pending_objects(Eina_Array *pending_objects, Evas *eo_e EINA_ } else if (is_active && (!obj->clip.clipees) && - (_evas_render_can_render(eo_obj) || + (_evas_render_can_render(eo_obj, obj) || (evas_object_was_visible(eo_obj, obj) && (!obj->prev.have_clipees)))) { if (obj->render_pre || obj->rect_del) ok = EINA_TRUE; @@ -664,9 +655,8 @@ pending_change(void *data, void *gdata EINA_UNUSED) } static Eina_Bool -_evas_render_can_use_overlay(Evas *eo_e, Evas_Object *eo_obj) +_evas_render_can_use_overlay(Evas_Public_Data *e, Evas_Object *eo_obj) { - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); Eina_Rectangle *r; Evas_Object *eo_tmp; Eina_List *alphas = NULL; @@ -676,20 +666,21 @@ _evas_render_can_use_overlay(Evas *eo_e, Evas_Object *eo_obj) Evas_Coord xc1, yc1, xc2, yc2; unsigned int i; Eina_Bool nooverlay; + Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); + Evas_Object_Protected_Data *tmp = NULL; video_parent = _evas_object_image_video_parent_get(eo_obj); /* Check if any one is the stack make this object mapped */ eo_tmp = eo_obj; - while (eo_tmp && !_evas_render_has_map(eo_tmp)) + while (tmp && !_evas_render_has_map(eo_tmp, tmp)) { - Evas_Object_Protected_Data *tmp = eo_data_get(eo_tmp, EVAS_OBJ_CLASS); + tmp = eo_data_get(eo_tmp, EVAS_OBJ_CLASS); eo_tmp = tmp->smart.parent; } - if (eo_tmp && _evas_render_has_map(eo_tmp)) return EINA_FALSE; /* we are mapped, we can't be an overlay */ + if (tmp && _evas_render_has_map(eo_tmp, tmp)) return EINA_FALSE; /* we are mapped, we can't be an overlay */ - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); if (!evas_object_is_visible(eo_obj, obj)) return EINA_FALSE; /* no need to update the overlay if it's not visible */ /* If any recoloring of the surface is needed, n overlay to */ @@ -864,7 +855,7 @@ _evas_render_can_use_overlay(Evas *eo_e, Evas_Object *eo_obj) } Eina_Bool -evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, +evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, void *context, void *surface, int off_x, int off_y, int mapped, int ecx, int ecy, int ecw, int ech @@ -873,7 +864,6 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * #endif ) { - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); void *ctx; Evas_Object_Protected_Data *obj2; Eina_Bool clean_them = EINA_FALSE; @@ -893,7 +883,7 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * } } else if (!(((evas_object_is_active(eo_obj, obj) && (!obj->clip.clipees) && - (_evas_render_can_render(eo_obj)))) + (_evas_render_can_render(eo_obj, obj)))) )) { RDI(level); @@ -906,8 +896,8 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * RD(" Hasmap: %p (%d) %p %d -> %d\n",obj->func->can_map, obj->func->can_map ? obj->func->can_map(eo_obj): -1, obj->cur.map, obj->cur.usemap, - _evas_render_has_map(eo_obj)); - if (_evas_render_has_map(eo_obj)) + _evas_render_has_map(eo_obj, obj)); + if (_evas_render_has_map(eo_obj, obj)) { int sw, sh; Eina_Bool changed = EINA_FALSE, rendered = EINA_FALSE; @@ -1017,7 +1007,7 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * EINA_INLIST_FOREACH (evas_object_smart_members_get_direct(eo_obj), obj2) { - clean_them |= evas_render_mapped(eo_e, obj2->object, obj2, ctx, + clean_them |= evas_render_mapped(e, obj2->object, obj2, ctx, obj->map.surface, off_x2, off_y2, 1, ecx, ecy, ecw, ech @@ -1064,8 +1054,8 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * { if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); int x, y, w, h; + evas_object_clip_recalc(eo_obj, obj); x = obj->cur.cache.clip.x; y = obj->cur.cache.clip.y; @@ -1078,15 +1068,15 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * obj->cur.cache.clip.dirty = EINA_TRUE; tobj = obj->cur.map_parent; - obj->cur.map_parent = cur_clipper->cur.map_parent; + obj->cur.map_parent = obj->cur.clipper->cur.map_parent; obj->cur.map_parent = tobj; } RECTS_CLIP_TO_RECT(x, y, w, h, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); e->engine.func->context_clip_set(e->engine.data.output, context, @@ -1129,7 +1119,7 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * EINA_INLIST_FOREACH (evas_object_smart_members_get_direct(eo_obj), obj2) { - clean_them |= evas_render_mapped(eo_e, obj2->object, obj2, ctx, + clean_them |= evas_render_mapped(e, obj2->object, obj2, ctx, surface, off_x, off_y, 1, ecx, ecy, ecw, ech @@ -1155,16 +1145,15 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * obj->cur.geometry.w, obj->cur.geometry.h); - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); RD(" clipper: %i %i %ix%i\n", - cur_clipper->cur.cache.clip.x + off_x, - cur_clipper->cur.cache.clip.y + off_y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x + off_x, + obj->cur.clipper->cur.cache.clip.y + off_y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); int x, y, w, h; - if (_evas_render_has_map(eo_obj)) + if (_evas_render_has_map(eo_obj, obj)) evas_object_clip_recalc(eo_obj, obj); x = obj->cur.cache.clip.x + off_x; @@ -1173,10 +1162,10 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * h = obj->cur.cache.clip.h; RECTS_CLIP_TO_RECT(x, y, w, h, - cur_clipper->cur.cache.clip.x + off_x, - cur_clipper->cur.cache.clip.y + off_y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x + off_x, + obj->cur.clipper->cur.cache.clip.y + off_y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); e->engine.func->context_clip_set(e->engine.data.output, ctx, x, y, w, h); @@ -1190,20 +1179,19 @@ evas_render_mapped(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data * { if (obj->cur.clipper) { - Evas_Object_Protected_Data *cur_clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); int x, y, w, h; - if (_evas_render_has_map(eo_obj)) + if (_evas_render_has_map(eo_obj, obj)) evas_object_clip_recalc(eo_obj, obj); x = obj->cur.cache.clip.x; y = obj->cur.cache.clip.y; w = obj->cur.cache.clip.w; h = obj->cur.cache.clip.h; RECTS_CLIP_TO_RECT(x, y, w, h, - cur_clipper->cur.cache.clip.x, - cur_clipper->cur.cache.clip.y, - cur_clipper->cur.cache.clip.w, - cur_clipper->cur.cache.clip.h); + obj->cur.clipper->cur.cache.clip.x, + obj->cur.clipper->cur.cache.clip.y, + obj->cur.clipper->cur.cache.clip.w, + obj->cur.clipper->cur.cache.clip.h); e->engine.func->context_clip_set(e->engine.data.output, context, x + off_x, y + off_y, w, h); @@ -1241,13 +1229,13 @@ _evas_render_cutout_add(Evas *eo_e, Evas_Object *eo_obj, int off_x, int off_y) if ((obj->cur.map) && (obj->cur.usemap)) { Evas_Object *eo_oo; + Evas_Object_Protected_Data *oo; - eo_oo = eo_obj; - Evas_Object_Protected_Data *oo = eo_data_get(eo_oo, EVAS_OBJ_CLASS); + eo_oo = eo_obj; + oo = eo_data_get(eo_oo, EVAS_OBJ_CLASS); while (oo->cur.clipper) { - Evas_Object_Protected_Data *oo_cur_clipper = eo_data_get(oo->cur.clipper, EVAS_OBJ_CLASS); - if ((oo_cur_clipper->cur.map_parent + if ((oo->cur.clipper->cur.map_parent != oo->cur.map_parent) && (!((oo->cur.map) && (oo->cur.usemap)))) break; @@ -1256,8 +1244,8 @@ _evas_render_cutout_add(Evas *eo_e, Evas_Object *eo_obj, int off_x, int off_y) oo->cur.geometry.y, oo->cur.geometry.w, oo->cur.geometry.h); - eo_oo = oo->cur.clipper; - oo = eo_data_get(eo_oo, EVAS_OBJ_CLASS); + eo_oo = oo->cur.eo_clipper; + oo = oo->cur.clipper; } } e->engine.func->context_cutout_add @@ -1295,6 +1283,7 @@ evas_render_updates_internal(Evas *eo_e, { Evas_Object *eo_obj; Evas_Object_Protected_Data *obj; + Evas_Public_Data *e; Eina_List *updates = NULL; Eina_List *ll; void *surface; @@ -1310,7 +1299,8 @@ evas_render_updates_internal(Evas *eo_e, MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); return NULL; MAGIC_CHECK_END(); - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); + + e = eo_data_get(eo_e, EVAS_CLASS); if (!e->changed) return NULL; #ifdef EVAS_CSERVE2 @@ -1329,7 +1319,7 @@ evas_render_updates_internal(Evas *eo_e, /* phase 1. add extra updates for changed objects */ if (e->invalidate || e->render_objects.count <= 0) - clean_them = _evas_render_phase1_process(eo_e, + clean_them = _evas_render_phase1_process(e, &e->active_objects, &e->restack_objects, &e->delete_objects, @@ -1343,13 +1333,13 @@ evas_render_updates_internal(Evas *eo_e, EINA_LIST_FOREACH(e->video_objects, ll, eo_obj) { /* we need the surface to be transparent to display the underlying overlay */ - if (alpha && _evas_render_can_use_overlay(eo_e, eo_obj)) + if (alpha && _evas_render_can_use_overlay(e, eo_obj)) _evas_object_image_video_overlay_show(eo_obj); else _evas_object_image_video_overlay_hide(eo_obj); } /* phase 1.8. pre render for proxy */ - _evas_render_phase1_direct(eo_e, &e->active_objects, &e->restack_objects, + _evas_render_phase1_direct(e, &e->active_objects, &e->restack_objects, &e->delete_objects, &e->render_objects); /* phase 2. force updates for restacks */ @@ -1358,7 +1348,7 @@ evas_render_updates_internal(Evas *eo_e, obj = eina_array_data_get(&e->restack_objects, i); eo_obj = obj->object; obj->func->render_pre(eo_obj, obj); - _evas_render_prev_cur_clip_cache_add(eo_e, eo_obj); + _evas_render_prev_cur_clip_cache_add(e, obj); } eina_array_clean(&e->restack_objects); @@ -1643,7 +1633,7 @@ evas_render_updates_internal(Evas *eo_e, _evas_render_cutout_add(eo_e, obj2->object, off_x, off_y); } #endif - clean_them |= evas_render_mapped(eo_e, eo_obj, obj, e->engine.data.context, + clean_them |= evas_render_mapped(e, eo_obj, obj, e->engine.data.context, surface, off_x, off_y, 0, cx, cy, cw, ch #ifdef REND_DBG @@ -1933,10 +1923,12 @@ _canvas_render_dump(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) void evas_render_invalidate(Evas *eo_e) { + Evas_Public_Data *e; + MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); return; MAGIC_CHECK_END(); - Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS); + e = eo_data_get(eo_e, EVAS_CLASS); eina_array_clean(&e->active_objects); eina_array_clean(&e->render_objects); @@ -1950,10 +1942,13 @@ evas_render_invalidate(Evas *eo_e) void evas_render_object_recalc(Evas_Object *eo_obj) { + Evas_Object_Protected_Data *obj; + MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); return; MAGIC_CHECK_END(); - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); + + obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); if ((!obj->changed) && (obj->delete_me < 2)) { Evas_Public_Data *e; diff --git a/legacy/evas/src/lib/include/evas_inline.x b/legacy/evas/src/lib/include/evas_inline.x index b9ae608af6..e40fdd2d6e 100644 --- a/legacy/evas/src/lib/include/evas_inline.x +++ b/legacy/evas/src/lib/include/evas_inline.x @@ -2,9 +2,8 @@ #define EVAS_INLINE_H static inline Eina_Bool -_evas_render_has_map(Evas_Object *eo_obj) +_evas_render_has_map(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { - Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); return ((!((obj->func->can_map) && (obj->func->can_map(eo_obj)))) && ((obj->cur.map) && (obj->cur.usemap))); // return ((obj->cur.map) && (obj->cur.usemap)); @@ -127,11 +126,10 @@ evas_object_clippers_is_visible(Evas_Object *eo_obj __UNUSED__, Evas_Object_Prot { if (obj->cur.visible) { - Evas_Object_Protected_Data *clipper_pd = NULL; if (obj->cur.clipper) { - clipper_pd = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); - return evas_object_clippers_is_visible(obj->cur.clipper, clipper_pd); + return evas_object_clippers_is_visible(obj->cur.eo_clipper, + obj->cur.clipper); } return 1; } @@ -205,13 +203,12 @@ evas_object_coords_recalc(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) static inline void evas_object_clip_recalc(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { + Evas_Object_Protected_Data *clipper = NULL; int cx, cy, cw, ch, cr, cg, cb, ca; int nx, ny, nw, nh, nr, ng, nb, na; Eina_Bool cvis, nvis; - Evas_Object_Protected_Data *clipper = NULL; - if (obj->cur.clipper) - clipper = eo_data_get(obj->cur.clipper, EVAS_OBJ_CLASS); + clipper = obj->cur.clipper; if ((!obj->cur.cache.clip.dirty) && !(!obj->cur.clipper || clipper->cur.cache.clip.dirty)) return; @@ -242,11 +239,11 @@ evas_object_clip_recalc(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) cr = obj->cur.color.r; cg = obj->cur.color.g; cb = obj->cur.color.b; ca = obj->cur.color.a; - if (obj->cur.clipper) + if (clipper) { // this causes problems... hmmm ????? if (clipper->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper, clipper); + evas_object_clip_recalc(obj->cur.eo_clipper, clipper); // I don't know why this test was here in the first place. As I have // no issue showing up due to this, I keep it and move color out of it. diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 6f27fe3f97..62e7ec3b11 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -528,7 +528,8 @@ struct _Evas_Object_Protected_Data struct { Evas_Map *map; - Evas_Object *clipper; + Evas_Object_Protected_Data *clipper; + Evas_Object *eo_clipper; Evas_Object *mask; Evas_Object *map_parent; double scale; @@ -1023,7 +1024,7 @@ void evas_object_smart_member_stack_below(Evas_Object *member, Evas_Object *othe const Eina_Inlist *evas_object_smart_members_get_direct(const Evas_Object *obj); void _evas_object_smart_members_all_del(Evas_Object *obj); void evas_call_smarts_calculate(Evas *e); -void evas_object_smart_bouding_box_update(Evas_Object *obj); +void evas_object_smart_bounding_box_update(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj); void evas_object_smart_need_bounding_box_update(Evas_Object *obj); void *evas_mem_calloc(int size); void _evas_post_event_callback_call(Evas *e, Evas_Public_Data* e_pd); @@ -1227,7 +1228,7 @@ void _evas_unwalk(Evas_Public_Data *e_pd); EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name); EAPI const char *_evas_module_libdir_get(void); -Eina_Bool evas_render_mapped(Evas *e, Evas_Object *obj, Evas_Object_Protected_Data *source_pd, +Eina_Bool evas_render_mapped(Evas_Public_Data *e, Evas_Object *obj, Evas_Object_Protected_Data *source_pd, void *context, void *surface, int off_x, int off_y, int mapped, int ecx, int ecy, int ecw, int ech