forked from enlightenment/efl
Evas masking: Try to reduce memory footprint a little
Move some mask object pointers around to spare a few bytes of memory. Fixes T2025.
This commit is contained in:
parent
30a2311879
commit
0793dee86a
|
@ -28,7 +28,7 @@ static const Evas_Object_Map_Data default_map = {
|
|||
};
|
||||
static const Evas_Object_Protected_State default_state = {
|
||||
NULL, { 0, 0, 0, 0 },
|
||||
{ { NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, EINA_FALSE, EINA_FALSE } },
|
||||
{ { 0, 0, 0, 0, 0, 0, 0, 0, EINA_FALSE, EINA_FALSE } },
|
||||
{ 255, 255, 255, 255 },
|
||||
1.0, 0, EVAS_RENDER_BLEND, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE
|
||||
};
|
||||
|
|
|
@ -1534,8 +1534,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj,
|
|||
if (_evas_render_object_is_mask(obj->cur->clipper))
|
||||
{
|
||||
// This path can be hit when we're multiplying masks on top of each other...
|
||||
Evas_Object_Protected_Data *mask =
|
||||
(Evas_Object_Protected_Data *) obj->cur->clipper;
|
||||
Evas_Object_Protected_Data *mask = obj->cur->clipper;
|
||||
if (mask->mask->redraw || !mask->mask->surface)
|
||||
evas_render_mask_subrender(obj->layer->evas, mask, NULL);
|
||||
|
||||
|
@ -2287,10 +2286,10 @@ evas_render_updates_internal(Evas *eo_e,
|
|||
|
||||
/* Clipper masks */
|
||||
if (_evas_render_object_is_mask(obj->cur->clipper))
|
||||
mask = (Evas_Object_Protected_Data *) obj->cur->clipper; // main object clipped by this mask
|
||||
else if (obj->cur->cache.clip.mask)
|
||||
mask = (Evas_Object_Protected_Data *) obj->cur->cache.clip.mask; // propagated clip
|
||||
prev_mask = (Evas_Object_Protected_Data *) obj->cur->cache.clip.prev_mask;
|
||||
mask = obj->cur->clipper; // main object clipped by this mask
|
||||
else if (obj->clip.mask)
|
||||
mask = obj->clip.mask; // propagated clip
|
||||
prev_mask = obj->clip.prev_mask;
|
||||
|
||||
if (mask)
|
||||
{
|
||||
|
|
|
@ -72,7 +72,7 @@ evas_object_is_opaque(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
{
|
||||
/* If has mask image: Always assume non opaque */
|
||||
if ((obj->cur->clipper && obj->cur->clipper->mask->is_mask) ||
|
||||
(obj->cur->cache.clip.mask))
|
||||
(obj->clip.mask))
|
||||
return 0;
|
||||
if (obj->func->is_opaque)
|
||||
return obj->func->is_opaque(eo_obj, obj, obj->private_data);
|
||||
|
@ -246,7 +246,6 @@ evas_object_clip_recalc(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;
|
||||
const Evas_Object_Protected_Data *mask = NULL, *prev_mask = NULL;
|
||||
Eina_Bool cvis, nvis;
|
||||
Evas_Object *eo_obj;
|
||||
|
||||
|
@ -300,28 +299,30 @@ evas_object_clip_recalc(Evas_Object_Protected_Data *obj)
|
|||
RECTS_CLIP_TO_RECT(cx, cy, cw, ch, nx, ny, nw, nh);
|
||||
}
|
||||
|
||||
obj->clip.prev_mask = NULL;
|
||||
if (clipper->mask->is_mask)
|
||||
{
|
||||
// Set complex masks the object being clipped (parent)
|
||||
mask = clipper;
|
||||
obj->clip.mask = clipper;
|
||||
|
||||
// Forward any mask from the parents
|
||||
if (EINA_LIKELY(obj->smart.parent != NULL))
|
||||
{
|
||||
Evas_Object_Protected_Data *parent =
|
||||
eo_data_scope_get(obj->smart.parent, EVAS_OBJECT_CLASS);
|
||||
if (parent->cur->cache.clip.mask)
|
||||
if (parent->clip.mask)
|
||||
{
|
||||
if (parent->cur->cache.clip.mask != mask)
|
||||
prev_mask = parent->cur->cache.clip.mask;
|
||||
if (parent->clip.mask != obj->clip.mask)
|
||||
obj->clip.prev_mask = parent->clip.mask;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (clipper->cur->cache.clip.mask)
|
||||
else if (clipper->clip.mask)
|
||||
{
|
||||
// Pass complex masks to children
|
||||
mask = clipper->cur->cache.clip.mask;
|
||||
obj->clip.mask = clipper->clip.mask;
|
||||
}
|
||||
else obj->clip.mask = NULL;
|
||||
|
||||
nvis = clipper->cur->cache.clip.visible;
|
||||
nr = clipper->cur->cache.clip.r;
|
||||
|
@ -347,9 +348,7 @@ evas_object_clip_recalc(Evas_Object_Protected_Data *obj)
|
|||
obj->cur->cache.clip.g == cg &&
|
||||
obj->cur->cache.clip.b == cb &&
|
||||
obj->cur->cache.clip.a == ca &&
|
||||
obj->cur->cache.clip.dirty == EINA_FALSE &&
|
||||
obj->cur->cache.clip.mask == mask &&
|
||||
obj->cur->cache.clip.prev_mask == prev_mask)
|
||||
obj->cur->cache.clip.dirty == EINA_FALSE)
|
||||
return ;
|
||||
|
||||
EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
|
||||
|
@ -364,8 +363,6 @@ evas_object_clip_recalc(Evas_Object_Protected_Data *obj)
|
|||
state_write->cache.clip.b = cb;
|
||||
state_write->cache.clip.a = ca;
|
||||
state_write->cache.clip.dirty = EINA_FALSE;
|
||||
state_write->cache.clip.mask = mask;
|
||||
state_write->cache.clip.prev_mask = prev_mask;
|
||||
}
|
||||
EINA_COW_STATE_WRITE_END(obj, state_write, cur);
|
||||
}
|
||||
|
|
|
@ -908,8 +908,6 @@ struct _Evas_Object_Protected_State
|
|||
Evas_Coord_Rectangle geometry;
|
||||
struct {
|
||||
struct {
|
||||
const Evas_Object_Protected_Data *mask, *prev_mask;
|
||||
|
||||
Evas_Coord x, y, w, h;
|
||||
unsigned char r, g, b, a;
|
||||
Eina_Bool visible : 1;
|
||||
|
@ -956,6 +954,7 @@ struct _Evas_Object_Protected_Data
|
|||
Eina_List *clipees;
|
||||
Eina_List *cache_clipees_answer;
|
||||
Eina_List *changes;
|
||||
Evas_Object_Protected_Data *mask, *prev_mask;
|
||||
} clip;
|
||||
|
||||
const Evas_Object_Func *func;
|
||||
|
|
Loading…
Reference in New Issue