unsigned char dirty_pixels : 1;
unsigned char filled : 1;
unsigned char proxyrendering : 1;
+ unsigned char preloading : 1;
};
/* private methods for image objects */
o->prev.key = NULL;
if (o->engine_data)
{
- obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
- o->engine_data,
- obj);
+ if (o->preloading)
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
o->engine_data);
}
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if (w < 1) w = 1;
if (h < 1) h = 1;
if (w > 32768) return;
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return NULL;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if (!o->engine_data) return NULL;
if (!o->cur.cspace == to_cspace) return NULL;
data = NULL;
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
#ifdef EVAS_FRAME_QUEUING
if (o->engine_data)
evas_common_pipe_op_image_flush(o->engine_data);
MAGIC_CHECK_END();
if (!o->engine_data)
{
+ o->preloading = 1;
evas_object_inform_call_image_preloaded(obj);
return;
}
+ // FIXME: if already busy preloading, then dont request again until
+ // preload done
if (cancel)
- obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
- o->engine_data,
- obj);
+ {
+ if (o->preloading)
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
+ }
else
- obj->layer->evas->engine.func->image_data_preload_request(obj->layer->evas->engine.data.output,
- o->engine_data,
- obj);
+ {
+ if (!o->preloading)
+ {
+ obj->layer->evas->engine.func->image_data_preload_request(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ o->preloading = 1;
+ }
+ }
}
EAPI void
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if ((o->cur.image.w <= 0) ||
(o->cur.image.h <= 0)) return;
if (o->engine_data)
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if (((has_alpha) && (o->cur.has_alpha)) ||
((!has_alpha) && (!o->cur.has_alpha)))
return;
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if ((!o->cur.file) ||
(o->pixels_checked_out > 0)) return;
if (o->engine_data)
return 0;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if ((pixels->w != o->cur.image.w) || (pixels->h != o->cur.image.h)) return 0;
switch (pixels->format)
{
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
#ifdef EVAS_FRAME_QUEUING
if ((Evas_Colorspace)o->cur.cspace != cspace)
{
MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
return;
MAGIC_CHECK_END();
+ if ((o->preloading) && (o->engine_data))
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
if (o->cur.source) _proxy_unset(obj);
if (!obj->layer->evas->engine.func->image_native_set) return;
if ((surf) &&
}
if (o->engine_data)
{
- obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
- o->engine_data,
- obj);
+ if (o->preloading)
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
o->engine_data);
}
if (o->cur.source) _proxy_unset(obj);
if (o->engine_data)
{
- obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
- o->engine_data,
- obj);
+ if (o->preloading)
+ {
+ o->preloading = 0;
+ obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output,
+ o->engine_data,
+ obj);
+ }
obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
o->engine_data);
}
evas_object_image_fill_set(obj, 0, 0, w, h);
}
+
+Eina_Bool
+_evas_object_image_preloading_get(const Evas_Object *obj)
+{
+ Evas_Object_Image *o = (Evas_Object_Image *)(obj->object_data);
+ return o->preloading;
+}
+
+void
+_evas_object_image_preloading_set(Evas_Object *obj, Eina_Bool preloading)
+{
+ Evas_Object_Image *o = (Evas_Object_Image *)(obj->object_data);
+ o->preloading = preloading;
+}
+
/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/