devilhorns pushed a commit to branch master.
commit d673cbc3982399a11be74a42f909e68b0f380dea
Author: Chris Michael <[email protected]>
Date: Wed Sep 11 13:00:23 2013 +0100
Readd the master clip for rendering of wayland engines.
NB: Master clip is needed so that things don't draw outside the client
area.
NB: This is a partial fix. Still a work in progress. Some remaining
issues with some various elm_tests that use evas_map.
Signed-off-by: Chris Michael <[email protected]>
---
src/lib/evas/canvas/evas_render.c | 67 +++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/src/lib/evas/canvas/evas_render.c
b/src/lib/evas/canvas/evas_render.c
index 3f8d942..bdf147a 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -1538,6 +1538,7 @@ evas_render_updates_internal(Evas *eo_e,
#ifdef EVAS_RENDER_DEBUG_TIMING
double start_time = _time_get();
#endif
+ Eina_Rectangle clip_rect;
MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS);
return EINA_FALSE;
@@ -1582,6 +1583,51 @@ evas_render_updates_internal(Evas *eo_e,
&e->render_objects,
&redraw_all);
+ if (!strncmp(e->engine.module->definition->name, "wayland", 7))
+ {
+ /* check for master clip */
+ if (!e->framespace.clip)
+ {
+ e->framespace.clip = evas_object_rectangle_add(eo_e);
+ evas_object_color_set(e->framespace.clip, 255, 255, 255, 255);
+ evas_object_move(e->framespace.clip, 0, 0);
+ evas_object_resize(e->framespace.clip,
+ e->viewport.w - e->framespace.w,
+ e->viewport.h - e->framespace.h);
+ evas_object_show(e->framespace.clip);
+ }
+
+ /* setup master clip rectangle for comparison to objects */
+ EINA_RECTANGLE_SET(&clip_rect, e->framespace.x, e->framespace.y,
+ e->viewport.w - e->framespace.w,
+ e->viewport.h - e->framespace.h);
+
+ for (i = 0; i < e->render_objects.count; ++i)
+ {
+ Eina_Rectangle obj_rect;
+
+ obj = eina_array_data_get(&e->render_objects, i);
+ if (obj->delete_me) continue;
+ if (obj->is_frame) continue;
+ if (obj->object == e->framespace.clip) continue;
+
+ /* setup object rectangle for comparison to clip rectangle */
+ EINA_RECTANGLE_SET(&obj_rect,
+ obj->cur->geometry.x, obj->cur->geometry.y,
+ obj->cur->geometry.w, obj->cur->geometry.h);
+
+ /* check if this object intersects with the master clip */
+ if (!eina_rectangles_intersect(&clip_rect, &obj_rect))
+ continue;
+
+ if (!evas_object_clip_get(obj->object))
+ {
+ /* clip this object to the master clip */
+ evas_object_clip_set(obj->object, e->framespace.clip);
+ }
+ }
+ }
+
/* phase 1.5. check if the video should be inlined or stay in their overlay
*/
alpha = e->engine.func->canvas_alpha_get(e->engine.data.output,
e->engine.data.context);
@@ -1914,6 +1960,27 @@ evas_render_updates_internal(Evas *eo_e,
}
}
+ if (!strncmp(e->engine.module->definition->name, "wayland", 7))
+ {
+ /* unclip objects from master clip */
+ for (i = 0; i < e->render_objects.count; ++i)
+ {
+ obj = eina_array_data_get(&e->render_objects, i);
+ if (obj->is_frame) continue;
+ if (obj->object == e->framespace.clip) continue;
+
+ if (evas_object_clip_get(obj->object) == e->framespace.clip)
+ {
+ /* unclip this object from the master clip */
+ evas_object_clip_unset(obj->object);
+ }
+ }
+
+ /* delete master clip */
+ evas_object_del(e->framespace.clip);
+ e->framespace.clip = NULL;
+ }
+
e->changed = EINA_FALSE;
e->viewport.changed = EINA_FALSE;
e->output.changed = EINA_FALSE;
--
------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. Consolidate legacy IT systems to a single system of record for IT
2. Standardize and globalize service processes across IT
3. Implement zero-touch automation to replace manual, redundant tasks
http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk