e->engine.func->context_free(e->engine.data.output, ctx);
ctx = e->engine.func->context_new(e->engine.data.output);
+
+ Eina_Bool source_clip = evas_object_image_source_clip_get(proxy);
+
+ Evas_Proxy_Render_Data proxy_render_data = {
+ .proxy_obj = proxy,
+ .src_obj = source,
+ .source_clip = source_clip
+ };
+
evas_render_mapped(e, source, ctx, source->proxy.surface,
-source->cur.geometry.x,
-source->cur.geometry.y,
- 1, 0, 0, e->output.w, e->output.h, proxy
+ 1, 0, 0, e->output.w, e->output.h, &proxy_render_data
#ifdef REND_DBG
, 1
#endif
Eina_Bool
evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
int off_x, int off_y, int mapped,
- int ecx, int ecy, int ecw, int ech, Evas_Object *proxy_obj
+ int ecx, int ecy, int ecw, int ech,
+ Evas_Proxy_Render_Data *proxy_render_data
#ifdef REND_DBG
, int level
#endif
Eina_Bool clean_them = EINA_FALSE;
Eina_Bool proxy_src_clip = EINA_TRUE;
- if (!proxy_obj)
+ if (!proxy_render_data)
{
if (evas_object_is_source_invisible(obj))
return clean_them;
}
else
- proxy_src_clip = evas_object_image_source_clip_get(proxy_obj);
+ proxy_src_clip = proxy_render_data->source_clip;
evas_object_clip_recalc(obj);
obj->map.surface,
off_x2, off_y2, 1,
ecx, ecy, ecw, ech,
- proxy_obj
+ proxy_render_data
#ifdef REND_DBG
, level + 1
#endif
surface,
off_x, off_y, 1,
ecx, ecy, ecw, ech,
- proxy_obj
+ proxy_render_data
#ifdef REND_DBG
, level + 1
#endif
}
else
{
+ if (_evas_render_has_map(obj))
+ evas_object_clip_recalc(obj);
+
//FIXME: Consider to clip by the proxy clipper.
- if (proxy_obj && (proxy_obj != obj))
+ if (proxy_render_data->src_obj != obj)
{
- if (_evas_render_has_map(obj))
- evas_object_clip_recalc(obj);
-
x = obj->cur.clipper->cur.geometry.x + off_x;
y = obj->cur.clipper->cur.geometry.y + off_y;
w = obj->cur.clipper->cur.geometry.w;
h = obj->cur.clipper->cur.geometry.h;
- e->engine.func->context_clip_set(e->engine.data.output,
- ctx, x, y, w, h);
}
+ else
+ {
+ Evas_Object *proxy =
+ proxy_render_data->proxy_obj;
+ x = proxy->cur.clipper->cur.geometry.x + off_x;
+ y = proxy->cur.clipper->cur.geometry.y + off_y;
+ w = proxy->cur.clipper->cur.geometry.w;
+ h = proxy->cur.clipper->cur.geometry.h;
+ }
+ e->engine.func->context_clip_set(e->engine.data.output,
+ ctx, x, y, w, h);
+
}
}
obj->func->render(obj, e->engine.data.output, ctx,
typedef struct _Evas_Smart_Interfaces_Array Evas_Smart_Interfaces_Array;
typedef struct _Evas_Post_Callback Evas_Post_Callback;
typedef struct _Evas_Coord_Touch_Point Evas_Coord_Touch_Point;
+typedef struct _Evas_Proxy_Render_Data Evas_Proxy_Render_Data;
enum _Evas_Font_Style
{
RGBA_Font *font;
};
+struct _Evas_Proxy_Render_Data
+{
+ Evas_Object *proxy_obj;
+ Evas_Object *src_obj;
+ Eina_Bool source_clip : 1;
+};
+
int evas_async_events_init(void);
int evas_async_events_shutdown(void);
int evas_async_target_del(const void *target);
void *context, void *surface,
int off_x, int off_y, int mapped,
int ecx, int ecy, int ecw, int ech,
- Evas_Object *proxy_obj
+ Evas_Proxy_Render_Data *proxy_render_data
#ifdef REND_DBG
, int level
#endif