diff options
author | Rafael Antognolli <rafael.antognolli@intel.com> | 2013-04-26 15:01:44 -0300 |
---|---|---|
committer | Rafael Antognolli <rafael.antognolli@intel.com> | 2013-04-26 20:19:30 -0300 |
commit | d9b6b1b2c5107053e7d3754e0161af87e045560e (patch) | |
tree | e9cfab1c6716fcf1f4ad1a8178b6d0137a6e1d0d | |
parent | 1feec81121864082777a557876792504da5d4033 (diff) | |
download | efl-devs/antognolli/framespace.tar.gz |
add support for framespace offset render translation.devs/antognolli/framespace
-rw-r--r-- | src/lib/evas/canvas/evas_clip.c | 29 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_image.c | 4 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_main.c | 29 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_render.c | 29 | ||||
-rw-r--r-- | src/lib/evas/include/evas_inline.x | 20 | ||||
-rw-r--r-- | src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c | 1 | ||||
-rw-r--r-- | src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c | 5 | ||||
-rw-r--r-- | src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c | 3 |
8 files changed, 70 insertions, 50 deletions
diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c index 67d575b07b..2256e360b3 100644 --- a/src/lib/evas/canvas/evas_clip.c +++ b/src/lib/evas/canvas/evas_clip.c @@ -192,6 +192,7 @@ _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; + Evas_Public_Data *e; if (!eo_clip) { @@ -256,10 +257,11 @@ _clip_set(Eo *eo_obj, void *_pd, va_list *list) } EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur); + e = obj->cur->clipper->layer->evas; 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, + evas_damage_rectangle_add(e->evas, + obj->cur->clipper->cur->geometry.x + e->framespace.x, + obj->cur->clipper->cur->geometry.y + e->framespace.y, obj->cur->clipper->cur->geometry.w, obj->cur->clipper->cur->geometry.h); } @@ -277,9 +279,11 @@ _clip_set(Eo *eo_obj, void *_pd, va_list *list) { /* Basically it just went invisible */ clip->changed = 1; - clip->layer->evas->changed = 1; - evas_damage_rectangle_add(clip->layer->evas->evas, - clip->cur->geometry.x, clip->cur->geometry.y, + e = clip->layer->evas; + e->changed = 1; + evas_damage_rectangle_add(e->evas, + clip->cur->geometry.x + e->framespace.x, + clip->cur->geometry.y + e->framespace.y, clip->cur->geometry.w, clip->cur->geometry.h); } EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) @@ -387,11 +391,14 @@ _clip_unset(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED) EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur); 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_Public_Data *e = obj->cur->clipper->layer->evas; + evas_damage_rectangle_add(e->evas, + obj->cur->clipper->cur->geometry.x + e->framespace.x, + obj->cur->clipper->cur->geometry.y + e->framespace.y, + obj->cur->clipper->cur->geometry.w, + obj->cur->clipper->cur->geometry.h); + } } evas_object_change(obj->cur->clipper->object, obj->cur->clipper); } diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index db572b4840..ded36c9076 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -4260,7 +4260,9 @@ evas_object_image_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *ob obj->cur->clipper->cur->cache.clip.h); } e->engine.func->output_redraws_rect_del(e->engine.data.output, - x, y, w, h); + x + e->framespace.x, + y + e->framespace.y, + w, h); } done: evas_object_render_pre_effect_updates(&e->clip_changes, eo_obj, is_v, was_v); diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 87eb903913..e51e9347cb 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -408,6 +408,8 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in /* FIXME: was_v isn't used... why? */ if (!obj->clip.clipees) { + Evas_Public_Data *e; + e = obj->layer->evas; EINA_ARRAY_ITER_NEXT(rects, i, r, it) { /* get updates and clip to current clip */ @@ -421,8 +423,10 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in obj->cur->cache.clip.w, obj->cur->cache.clip.h); if ((w > 0) && (h > 0)) - obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, - x, y, w, h); + obj->layer->evas->engine.func->output_redraws_rect_add(e->engine.data.output, + x + e->framespace.x, + y + e->framespace.y, + w, h); /* get updates and clip to previous clip */ x = r->x; y = r->y; @@ -434,8 +438,10 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in obj->prev->cache.clip.w, obj->prev->cache.clip.h); if ((w > 0) && (h > 0)) - obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, - x, y, w, h); + obj->layer->evas->engine.func->output_redraws_rect_add(e->engine.data.output, + x + e->framespace.x, + y + e->framespace.y, + w, h); } /* if the object is actually visible, take any parent clip changes */ if (is_v) @@ -455,8 +461,10 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in obj->cur->cache.clip.w, obj->cur->cache.clip.h); if ((w > 0) && (h > 0)) - obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, - x, y, w, h); + obj->layer->evas->engine.func->output_redraws_rect_add(e->engine.data.output, + x + e->framespace.x, + y + e->framespace.y, + w, h); /* get updates and clip to previous clip */ x = r->x; y = r->y; w = r->w; h = r->h; RECTS_CLIP_TO_RECT(x, y, w, h, @@ -465,8 +473,10 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in obj->prev->cache.clip.w, obj->prev->cache.clip.h); if ((w > 0) && (h > 0)) - obj->layer->evas->engine.func->output_redraws_rect_add(obj->layer->evas->engine.data.output, - x, y, w, h); + obj->layer->evas->engine.func->output_redraws_rect_add(e->engine.data.output, + x + e->framespace.x, + y + e->framespace.y, + w, h); } clipper = clipper->cur->clipper; } @@ -672,7 +682,6 @@ _position_set(Eo *eo_obj, void *_pd, va_list *list) Evas_Coord x = va_arg(*list, Evas_Coord); Evas_Coord y = va_arg(*list, Evas_Coord); - Evas_Public_Data *evas; Eina_Bool is, was = EINA_FALSE; Eina_Bool pass = EINA_FALSE, freeze = EINA_FALSE; Eina_Bool source_invisible = EINA_FALSE; @@ -680,8 +689,6 @@ _position_set(Eo *eo_obj, void *_pd, va_list *list) if (obj->delete_me) return; if (!obj->layer) return; - evas = obj->layer->evas; - if (evas_object_intercept_call_move(eo_obj, obj, x, y)) return; if (obj->doing.in_move > 0) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 368a88c8d2..8d72ef7398 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -220,13 +220,13 @@ static void _evas_render_prev_cur_clip_cache_add(Evas_Public_Data *e, Evas_Object_Protected_Data *obj) { e->engine.func->output_redraws_rect_add(e->engine.data.output, - obj->prev->cache.clip.x, - obj->prev->cache.clip.y, + obj->prev->cache.clip.x + e->framespace.x, + obj->prev->cache.clip.y + e->framespace.y, obj->prev->cache.clip.w, obj->prev->cache.clip.h); e->engine.func->output_redraws_rect_add(e->engine.data.output, - obj->cur->cache.clip.x, - obj->cur->cache.clip.y, + obj->cur->cache.clip.x + e->framespace.x, + obj->cur->cache.clip.y + e->framespace.y, obj->cur->cache.clip.w, obj->cur->cache.clip.h); } @@ -249,7 +249,8 @@ _evas_render_cur_clip_cache_del(Evas_Public_Data *e, Evas_Object_Protected_Data obj->cur->clipper->cur->cache.clip.h); } e->engine.func->output_redraws_rect_del(e->engine.data.output, - x, y, w, h); + x + e->framespace.x, + y + e->framespace.y, w, h); } static void @@ -1620,6 +1621,8 @@ evas_render_updates_internal(Evas *eo_e, if (do_draw) { unsigned int offset = 0; + int fx = e->framespace.x; + int fy = e->framespace.y; while ((surface = e->engine.func->output_redraws_next_update_get @@ -1663,13 +1666,13 @@ evas_render_updates_internal(Evas *eo_e, obj = (Evas_Object_Protected_Data *)eina_array_data_get (&e->obscuring_objects, i); eo_obj = obj->object; - if (evas_object_is_in_output_rect(eo_obj, obj, ux, uy, uw, uh)) + if (evas_object_is_in_output_rect(eo_obj, obj, ux - fx, uy - fy, uw, uh)) { eina_array_push(&e->temporary_objects, obj); /* reset the background of the area if needed (using cutout and engine alpha flag to help) */ if (alpha) - _evas_render_cutout_add(e, obj, off_x, off_y); + _evas_render_cutout_add(e, obj, off_x + fx, off_y + fy); } } if (alpha) @@ -1700,7 +1703,7 @@ evas_render_updates_internal(Evas *eo_e, /* if it's in our outpout rect and it doesn't clip anything */ RD(" OBJ: [%p] '%s' %i %i %ix%i\n", obj, obj->type, obj->cur->geometry.x, obj->cur->geometry.y, obj->cur->geometry.w, obj->cur->geometry.h); - if ((evas_object_is_in_output_rect(eo_obj, obj, ux, uy, uw, uh) || + if ((evas_object_is_in_output_rect(eo_obj, obj, ux - fx, uy - fy, uw, uh) || (obj->is_smart)) && (!obj->clip.clipees) && (obj->cur->visible) && @@ -1721,8 +1724,8 @@ evas_render_updates_internal(Evas *eo_e, if (!obj->is_smart) { RECTS_CLIP_TO_RECT(x, y, w, h, - obj->cur->cache.clip.x + off_x, - obj->cur->cache.clip.y + off_y, + obj->cur->cache.clip.x + off_x + fx, + obj->cur->cache.clip.y + off_y + fy, obj->cur->cache.clip.w, obj->cur->cache.clip.h); } @@ -1737,12 +1740,12 @@ evas_render_updates_internal(Evas *eo_e, obj2 = (Evas_Object_Protected_Data *)eina_array_data_get (&e->temporary_objects, j); - _evas_render_cutout_add(e, obj2, off_x, off_y); + _evas_render_cutout_add(e, obj2, off_x + fx, off_y + fy); } #endif clean_them |= evas_render_mapped(e, eo_obj, obj, e->engine.data.context, - surface, off_x, - off_y, 0, + surface, off_x + fx, + off_y + fy, 0, cx, cy, cw, ch, EINA_FALSE #ifdef REND_DBG diff --git a/src/lib/evas/include/evas_inline.x b/src/lib/evas/include/evas_inline.x index 3229b0073b..88f047aea2 100644 --- a/src/lib/evas/include/evas_inline.x +++ b/src/lib/evas/include/evas_inline.x @@ -168,23 +168,27 @@ evas_object_is_active(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { if (evas_object_is_visible(eo_obj, obj) || evas_object_was_visible(eo_obj, obj)) { + Evas_Public_Data *e = obj->layer->evas; + int fx, fy; + fx = e->framespace.x; + fy = e->framespace.y; if (obj->is_smart) { int mapsmt = 0; if (obj->map->cur.map && obj->map->cur.usemap) mapsmt = 1; if (!mapsmt) return 1; - if (evas_object_is_in_output_rect(eo_obj, obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h) || - evas_object_was_in_output_rect(eo_obj, obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h)) + if (evas_object_is_in_output_rect(eo_obj, obj, -fx, -fy, + e->output.w, e->output.h) || + evas_object_was_in_output_rect(eo_obj, obj, -fx, -fy, + e->output.w, e->output.h)) return 1; } else { - if (evas_object_is_in_output_rect(eo_obj, obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h) || - evas_object_was_in_output_rect(eo_obj, obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h)) + if (evas_object_is_in_output_rect(eo_obj, obj, -fx, -fy, + e->output.w, e->output.h) || + evas_object_was_in_output_rect(eo_obj, obj, -fx, -fy, + e->output.w, e->output.h)) return 1; } } diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index 66094c68f9..6c8d52593f 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -769,7 +769,6 @@ _ecore_evas_wl_common_frame_border_size_set(Evas_Object *obj, int fx, int fy, in else if ((sd->border_size[i] > 0) && (!sd->border[i])) { sd->border[i] = evas_object_rectangle_add(e); - evas_object_is_frame_object_set(sd->border[i], EINA_TRUE); evas_object_color_set(sd->border[i], 249, 249, 249, 255); evas_object_show(sd->border[i]); evas_object_smart_member_add(sd->border[i], obj); diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c index 9c45bf7270..919adf3e66 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c @@ -205,12 +205,11 @@ ecore_evas_wayland_egl_new_internal(const char *disp_name, unsigned int parent, ecore_evas_callback_pre_free_set(ee, _ecore_evas_wl_common_pre_free); - if (ee->prop.draw_frame) + if (ee->prop.draw_frame) { wdata->frame = _ecore_evas_wl_common_frame_add(ee->evas); _ecore_evas_wl_common_frame_border_size_set(wdata->frame, fx, fy, fw, fh); - evas_object_is_frame_object_set(wdata->frame, EINA_TRUE); - evas_object_move(wdata->frame, 0, 0); + evas_object_move(wdata->frame, -fx, -fy); evas_object_layer_set(wdata->frame, EVAS_LAYER_MAX - 1); } diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c index 764e6f9c48..18c1c58d5f 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c @@ -214,8 +214,7 @@ ecore_evas_wayland_shm_new_internal(const char *disp_name, unsigned int parent, { wdata->frame = _ecore_evas_wl_common_frame_add(ee->evas); _ecore_evas_wl_common_frame_border_size_set(wdata->frame, fx, fy, fw, fh); - evas_object_is_frame_object_set(wdata->frame, EINA_TRUE); - evas_object_move(wdata->frame, 0, 0); + evas_object_move(wdata->frame, -fx, -fy); evas_object_layer_set(wdata->frame, EVAS_LAYER_MAX - 1); } |