Evas: Merge evas_object_image changes from Tizen to upstream EFL.

SVN revision: 73198
This commit is contained in:
Christopher Michael 2012-07-03 07:30:05 +00:00
parent 382c380bb2
commit 8689cb87a0
1 changed files with 69 additions and 36 deletions

View File

@ -860,6 +860,7 @@ evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
{ {
Evas_Object_Image *o; Evas_Object_Image *o;
DATA32 *data; DATA32 *data;
void* result = NULL;
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
return NULL; return NULL;
@ -880,14 +881,20 @@ evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
o->video.update_pixels(o->video.data, obj, &o->video); o->video.update_pixels(o->video.data, obj, &o->video);
if (o->cur.cspace == to_cspace) return NULL; if (o->cur.cspace == to_cspace) return NULL;
data = NULL; data = NULL;
o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output, o->engine_data =
o->engine_data, obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
0, o->engine_data, 0, &data,
&data, &o->load_error);
&o->load_error); result = evas_object_image_data_convert_internal(o, data, to_cspace);
return evas_object_image_data_convert_internal(o, data, to_cspace); if (o->engine_data)
} {
o->engine_data =
obj->layer->evas->engine.func->image_data_put(obj->layer->evas->engine.data.output,
o->engine_data, data);
}
return result;
}
EAPI void EAPI void
evas_object_image_data_set(Evas_Object *obj, void *data) evas_object_image_data_set(Evas_Object *obj, void *data)
{ {
@ -906,16 +913,22 @@ evas_object_image_data_set(Evas_Object *obj, void *data)
if (data) if (data)
{ {
if (o->engine_data) if (o->engine_data)
o->engine_data = obj->layer->evas->engine.func->image_data_put(obj->layer->evas->engine.data.output, {
o->engine_data, o->engine_data =
data); obj->layer->evas->engine.func->image_data_put(obj->layer->evas->engine.data.output,
o->engine_data,
data);
}
else else
o->engine_data = obj->layer->evas->engine.func->image_new_from_data(obj->layer->evas->engine.data.output, {
o->cur.image.w, o->engine_data =
o->cur.image.h, obj->layer->evas->engine.func->image_new_from_data(obj->layer->evas->engine.data.output,
data, o->cur.image.w,
o->cur.has_alpha, o->cur.image.h,
o->cur.cspace); data,
o->cur.has_alpha,
o->cur.cspace);
}
if (o->engine_data) if (o->engine_data)
{ {
int stride = 0; int stride = 0;
@ -988,11 +1001,11 @@ evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing)
obj->layer->evas->engine.func->image_content_hint_set obj->layer->evas->engine.func->image_content_hint_set
(obj->layer->evas->engine.data.output, (obj->layer->evas->engine.data.output,
o->engine_data, o->content_hint); o->engine_data, o->content_hint);
o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output, o->engine_data =
o->engine_data, obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
for_writing, o->engine_data,
&data, for_writing, &data,
&o->load_error); &o->load_error);
/* if we fail to get engine_data, we have to return NULL */ /* if we fail to get engine_data, we have to return NULL */
if (!o->engine_data) return NULL; if (!o->engine_data) return NULL;
@ -1079,19 +1092,21 @@ evas_object_image_data_copy_set(Evas_Object *obj, void *data)
if (o->engine_data) if (o->engine_data)
obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output, obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output,
o->engine_data); o->engine_data);
o->engine_data = obj->layer->evas->engine.func->image_new_from_copied_data(obj->layer->evas->engine.data.output, o->engine_data =
o->cur.image.w, obj->layer->evas->engine.func->image_new_from_copied_data(obj->layer->evas->engine.data.output,
o->cur.image.h, o->cur.image.w,
data, o->cur.image.h,
o->cur.has_alpha, data,
o->cur.cspace); o->cur.has_alpha,
o->cur.cspace);
if (o->engine_data) if (o->engine_data)
{ {
int stride = 0; int stride = 0;
o->engine_data = obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output, o->engine_data =
o->engine_data, obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output,
o->cur.has_alpha); o->engine_data,
o->cur.has_alpha);
if (obj->layer->evas->engine.func->image_scale_hint_set) if (obj->layer->evas->engine.func->image_scale_hint_set)
obj->layer->evas->engine.func->image_scale_hint_set obj->layer->evas->engine.func->image_scale_hint_set
(obj->layer->evas->engine.data.output, (obj->layer->evas->engine.data.output,
@ -1160,9 +1175,10 @@ evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool has_alpha)
{ {
int stride = 0; int stride = 0;
o->engine_data = obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output, o->engine_data =
o->engine_data, obj->layer->evas->engine.func->image_alpha_set(obj->layer->evas->engine.data.output,
o->cur.has_alpha); o->engine_data,
o->cur.has_alpha);
if (obj->layer->evas->engine.func->image_scale_hint_set) if (obj->layer->evas->engine.func->image_scale_hint_set)
obj->layer->evas->engine.func->image_scale_hint_set obj->layer->evas->engine.func->image_scale_hint_set
(obj->layer->evas->engine.data.output, (obj->layer->evas->engine.data.output,
@ -1330,6 +1346,9 @@ evas_object_image_save(const Evas_Object *obj, const char *file, const char *key
evas_cache_image_drop(&im->cache_entry); evas_cache_image_drop(&im->cache_entry);
} }
o->engine_data = obj->layer->evas->engine.func->image_data_put(obj->layer->evas->engine.data.output,
o->engine_data,
data);
return ok; return ok;
} }
@ -3591,6 +3610,7 @@ evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
DATA32 *data; DATA32 *data;
int w, h, stride, iw, ih; int w, h, stride, iw, ih;
int a; int a;
int return_value;
o = (Evas_Object_Image *)(obj->object_data); o = (Evas_Object_Image *)(obj->object_data);
@ -3694,8 +3714,12 @@ evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
0, 0,
&data, &data,
&o->load_error); &o->load_error);
if (!data) if (!data)
return 0; {
return_value = 0;
goto finish;
}
switch (o->cur.cspace) switch (o->cur.cspace)
{ {
@ -3709,11 +3733,20 @@ evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
a = (*((DATA8*)(data))) & 0x1f; a = (*((DATA8*)(data))) & 0x1f;
break; break;
default: default:
return 1; return_value = 1;
goto finish;
break; break;
} }
return (a != 0); return_value = (a != 0);
goto finish;
finish:
obj->layer->evas->engine.func->image_data_put(obj->layer->evas->engine.data.output,
o->engine_data,
data);
return return_value;
} }
static int static int