EINA_COW_WRITE_BEGIN(evas_object_mask_cow, mask->mask, Evas_Object_Mask_Data, mdata)
mdata->redraw = EINA_FALSE;
- if (is_image && !prev_mask && mask->func->engine_data_get &&
- ENFN->image_scaled_update && evas_object_image_filled_get(mask->object))
+ if (is_image)
{
- /* Fast path (for GL) that avoids creating a map surface, render the
- * scaled image in it, when the shaders can just scale on the fly. */
- Eina_Bool smooth = evas_object_image_smooth_scale_get(mask->object);
- void *original = mask->func->engine_data_get(mask->object);
- void *scaled = ENFN->image_scaled_update
- (ENDT, mdata->surface, original, w, h, smooth, EINA_TRUE, EVAS_COLORSPACE_GRY8);
- if (scaled)
+ Eina_Bool filled = EINA_FALSE;
+
+ if (evas_object_image_filled_get(mask->object))
+ filled = EINA_TRUE;
+ else
{
- done = EINA_TRUE;
- if (mdata->surface && (mdata->surface != scaled))
- ENFN->image_map_surface_free(ENDT, mdata->surface);
- mdata->surface = scaled;
- mdata->w = w;
- mdata->h = h;
- mdata->is_alpha = (ENFN->image_colorspace_get(ENDT, scaled) == EVAS_COLORSPACE_GRY8);
+ int fx, fy, fw, fh;
+ evas_object_image_fill_get(mask->object, &fx, &fy, &fw, &fh);
+ if ((fx == 0) && (fy == 0) && (fw == w) && (fh == h))
+ filled = EINA_TRUE;
+ }
+
+ if (filled & !prev_mask && mask->func->engine_data_get &&
+ ENFN->image_scaled_update)
+ {
+ /* Fast path (for GL) that avoids creating a map surface, render the
+ * scaled image in it, when the shaders can just scale on the fly. */
+ Eina_Bool smooth = evas_object_image_smooth_scale_get(mask->object);
+ void *original = mask->func->engine_data_get(mask->object);
+ void *scaled = ENFN->image_scaled_update
+ (ENDT, mdata->surface, original, w, h, smooth, EINA_TRUE, EVAS_COLORSPACE_GRY8);
+ if (scaled)
+ {
+ done = EINA_TRUE;
+ if (mdata->surface && (mdata->surface != scaled))
+ ENFN->image_map_surface_free(ENDT, mdata->surface);
+ mdata->surface = scaled;
+ mdata->w = w;
+ mdata->h = h;
+ mdata->is_alpha = (ENFN->image_colorspace_get(ENDT, scaled) == EVAS_COLORSPACE_GRY8);
+ }
}
}