aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-03-16 19:37:04 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-03-17 13:10:35 +0900
commit8367f497b8f1e9a7b365c815f12deeab9c92e1a5 (patch)
tree97adbbe04befc36d413cb68dd5f5524ab3f6a813
parentEvas: Improve EVAS_OBJECT_LEGACY_API a bit more (diff)
downloadefl-8367f497b8f1e9a7b365c815f12deeab9c92e1a5.tar.gz
Evas.Image: Create Efl.Canvas.Image for file & data images
This replaces standard Evas_Object_Image when it is used "normally", ie. it's an image from a file or from a pixel buffer. All other APIs (proxy, snapshot, 3d, gl, ...) are disabled on this object. Also, reduce number of failing calls when the object is not a legacy object, but a legacy function is called. This is because a lot of image APIs are called internally using the legacy APIs, often in order to reset the state of the image object (eg. set file to NULL, etc...)
-rw-r--r--src/Makefile_Evas.am2
-rw-r--r--src/examples/evas/evas-3d-proxy.c2
-rw-r--r--src/lib/evas/Evas_Eo.h2
-rw-r--r--src/lib/evas/canvas/efl_canvas_proxy.c2
-rw-r--r--src/lib/evas/canvas/evas_image.eo38
-rw-r--r--src/lib/evas/canvas/evas_image_legacy.c217
-rw-r--r--src/lib/evas/canvas/evas_image_private.h50
-rw-r--r--src/lib/evas/canvas/evas_object_image.c462
-rw-r--r--src/lib/evas/canvas/evas_object_main.c4
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_preload.c2
10 files changed, 251 insertions, 530 deletions
diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index 57fe9c4546..4f5656470b 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -41,6 +41,7 @@ evas_eolian_pub_files = \
lib/evas/canvas/efl_vg_gradient.eo \
lib/evas/canvas/efl_vg_gradient_radial.eo \
lib/evas/canvas/efl_vg_gradient_linear.eo \
+ lib/evas/canvas/efl_canvas_image.eo \
lib/evas/canvas/efl_canvas_snapshot.eo \
lib/evas/canvas/efl_canvas_proxy.eo \
lib/evas/canvas/efl_canvas_scene3d.eo \
@@ -183,6 +184,7 @@ lib/evas/canvas/evas_touch_point.c \
lib/evas/canvas/evas_map.c \
lib/evas/canvas/evas_gl.c \
lib/evas/canvas/evas_out.c \
+lib/evas/canvas/efl_canvas_image.c \
lib/evas/canvas/efl_canvas_proxy.c \
lib/evas/canvas/efl_canvas_snapshot.c \
lib/evas/canvas/efl_canvas_scene3d.c \
diff --git a/src/examples/evas/evas-3d-proxy.c b/src/examples/evas/evas-3d-proxy.c
index 0ae5693a58..06ff5bb2cd 100644
--- a/src/examples/evas/evas-3d-proxy.c
+++ b/src/examples/evas/evas-3d-proxy.c
@@ -90,7 +90,7 @@ _animate_scene(void *data)
}
//efl_gfx_buffer_set(source, pixels, 0, 0, stride, 0, 0, 0, 0, 0, 0);
- //evas_obj_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
+ //evas_object_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
evas_object_image_data_set(source, pixels);
evas_object_image_data_update_add(source, 0, 0, IMG_WIDTH, IMG_HEIGHT);
diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h
index 718c984c85..02d01b7710 100644
--- a/src/lib/evas/Evas_Eo.h
+++ b/src/lib/evas/Evas_Eo.h
@@ -341,7 +341,7 @@ typedef void (Evas_Canvas3D_Surface_Func)(Evas_Real *out_x,
#include "canvas/evas_canvas3d_scene.eo.h"
#include "canvas/evas_image.eo.h"
-
+#include "canvas/efl_canvas_image.eo.h"
#include "canvas/efl_canvas_snapshot.eo.h"
#include "canvas/efl_canvas_proxy.eo.h"
#include "canvas/efl_canvas_scene3d.eo.h"
diff --git a/src/lib/evas/canvas/efl_canvas_proxy.c b/src/lib/evas/canvas/efl_canvas_proxy.c
index af94ec0806..9648027424 100644
--- a/src/lib/evas/canvas/efl_canvas_proxy.c
+++ b/src/lib/evas/canvas/efl_canvas_proxy.c
@@ -219,7 +219,7 @@ _evas_image_proxy_set(Evas_Object *eo_proxy, Evas_Object *eo_src)
Evas_Object_Protected_Data *proxy = eo_data_scope_get(eo_proxy, EVAS_OBJECT_CLASS);
Evas_Image_Data *o = eo_data_scope_get(eo_proxy, EVAS_IMAGE_CLASS);
- evas_object_image_file_set(eo_proxy, NULL, NULL);
+ _evas_image_file_set(eo_proxy, NULL, NULL);
EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy, Evas_Object_Proxy_Data, proxy_write)
proxy_write->is_proxy = EINA_TRUE;
diff --git a/src/lib/evas/canvas/evas_image.eo b/src/lib/evas/canvas/evas_image.eo
index bf48249a75..576138459d 100644
--- a/src/lib/evas/canvas/evas_image.eo
+++ b/src/lib/evas/canvas/evas_image.eo
@@ -1,9 +1,12 @@
type @extern Evas_Object_Image_Pixels_Get_Cb: __undefined_type; /* FIXME: func pointers are not supported. */
-class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Image_Load, Efl.Image_Animated, Efl.Gfx.Buffer, Efl.Gfx.Fill, Efl.Gfx.View, Evas.Filter)
+class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Image_Load,
+ Efl.Image_Animated, Efl.Gfx.Buffer, Efl.Gfx.Fill,
+ Efl.Gfx.View, Evas.Filter)
{
+ /* Legacy is implement inside Efl.Canvas.Image */
legacy_prefix: evas_object_image;
- eo_prefix: evas_obj_image;
+ eo_prefix: null;
methods {
/* GL View */
@property pixels_dirty {
@@ -46,10 +49,6 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Image_Load, Efl.Image_An
Eo.Base.destructor;
Eo.Base.dbg_info_get;
Eo.Base.finalize;
- Efl.File.file.set;
- Efl.File.file.get;
- Efl.File.mmap.set;
- Efl.File.mmap.get;
Efl.File.save;
Efl.Image.orientation.get;
Efl.Image.orientation.set;
@@ -66,27 +65,6 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Image_Load, Efl.Image_An
Efl.Image.scale_hint.set;
Efl.Image.content_hint.get;
Efl.Image.content_hint.set;
- Efl.Image_Animated.animated.get;
- Efl.Image_Animated.animated_frame.get;
- Efl.Image_Animated.animated_frame.set;
- Efl.Image_Animated.animated_frame_count.get;
- Efl.Image_Animated.animated_loop_type.get;
- Efl.Image_Animated.animated_loop_count.get;
- Efl.Image_Animated.animated_frame_duration.get;
- Efl.Image_Load.load_error.get;
- Efl.Image_Load.load_async_start;
- Efl.Image_Load.load_async_cancel;
- Efl.Image_Load.load_dpi.get;
- Efl.Image_Load.load_dpi.set;
- Efl.Image_Load.load_size.set;
- Efl.Image_Load.load_size.get;
- Efl.Image_Load.load_orientation.get;
- Efl.Image_Load.load_orientation.set;
- Efl.Image_Load.load_scale_down.get;
- Efl.Image_Load.load_scale_down.set;
- Efl.Image_Load.load_region.get;
- Efl.Image_Load.load_region.set;
- Efl.Image_Load.load_region_support.get;
Efl.Gfx.Buffer.alpha.get;
Efl.Gfx.Buffer.alpha.set;
Efl.Gfx.Buffer.buffer_update_add;
@@ -104,5 +82,11 @@ class Evas.Image (Evas.Object, Efl.File, Efl.Image, Efl.Image_Load, Efl.Image_An
Evas.Filter.filter_input_alpha;
Evas.Filter.filter_input_render;
Evas.Filter.filter_dirty;
+
+ /* FIXME: Efl.File does not belong here */
+ Efl.File.file.set;
+ Efl.File.file.get;
+ Efl.File.mmap.set;
+ Efl.File.mmap.get;
}
}
diff --git a/src/lib/evas/canvas/evas_image_legacy.c b/src/lib/evas/canvas/evas_image_legacy.c
index 351ae9112d..9b510ddba0 100644
--- a/src/lib/evas/canvas/evas_image_legacy.c
+++ b/src/lib/evas/canvas/evas_image_legacy.c
@@ -1,11 +1,15 @@
#include "evas_image_private.h"
-#define EVAS_IMAGE_LEGACY_API(_o, ...) \
- do { EVAS_OBJECT_LEGACY_API(_o, __VA_ARGS__); \
- if (EINA_UNLIKELY(!eo_isa(_o, EVAS_IMAGE_CLASS))) { \
- EINA_SAFETY_ERROR("object is not an image!"); \
- return __VA_ARGS__; \
- } } while(0)
+#define EVAS_IMAGE_API(_o, ...) do { \
+ if (EINA_UNLIKELY(!eo_isa(_o, EVAS_IMAGE_CLASS))) { \
+ EINA_SAFETY_ERROR("object is not an image!"); \
+ return __VA_ARGS__; \
+ } } while (0)
+
+#define EVAS_IMAGE_LEGACY_API(_o, ...) do { \
+ EVAS_OBJECT_LEGACY_API(_o, __VA_ARGS__); \
+ EVAS_IMAGE_API(_o, __VA_ARGS__); \
+ } while (0)
EAPI Evas_Object *
evas_object_image_add(Evas *eo_e)
@@ -29,7 +33,7 @@ evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *f
{
Eina_File *f;
- EVAS_IMAGE_LEGACY_API(eo_obj);
+ EVAS_IMAGE_API(eo_obj);
f = eina_file_virtualize(NULL, data, size, EINA_TRUE);
if (!f) return ;
@@ -38,284 +42,327 @@ evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *f
}
EAPI void
-evas_object_image_fill_set(Evas_Image *obj,
+evas_object_image_fill_set(Evas_Object *obj,
Evas_Coord x, Evas_Coord y,
Evas_Coord w, Evas_Coord h)
{
- efl_gfx_fill_set((Evas_Image *)obj, x, y, w, h);
+ EVAS_IMAGE_API(obj);
+ efl_gfx_fill_set(obj, x, y, w, h);
}
EAPI void
evas_object_image_preload(Evas_Object *eo_obj, Eina_Bool cancel)
{
+ EVAS_IMAGE_API(eo_obj);
if (cancel)
- efl_image_load_async_cancel(eo_obj);
+ _evas_image_load_async_cancel(eo_obj);
else
- efl_image_load_async_start(eo_obj);
+ _evas_image_load_async_start(eo_obj);
}
EAPI Eina_Bool
evas_object_image_filled_get(const Evas_Object *eo_obj)
{
+ EVAS_IMAGE_API(eo_obj, EINA_FALSE);
return efl_gfx_fill_filled_get(eo_obj);
}
EAPI void
evas_object_image_filled_set(Evas_Object *eo_obj, Eina_Bool value)
{
+ EVAS_IMAGE_API(eo_obj);
efl_gfx_fill_filled_set(eo_obj, value);
}
EAPI void
-evas_object_image_fill_get(const Evas_Image *obj,
+evas_object_image_fill_get(const Evas_Object *obj,
Evas_Coord *x, Evas_Coord *y,
Evas_Coord *w, Evas_Coord *h)
{
+ EVAS_IMAGE_API(obj);
efl_gfx_fill_get(obj, x, y, w, h);
}
EAPI void
evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha)
{
- EVAS_IMAGE_LEGACY_API(obj);
+ EVAS_IMAGE_API(obj);
efl_gfx_buffer_alpha_set(obj, alpha);
}
EAPI Eina_Bool
evas_object_image_alpha_get(const Evas_Object *obj)
{
- EVAS_IMAGE_LEGACY_API(obj, EINA_FALSE);
+ EVAS_IMAGE_API(obj, EINA_FALSE);
return efl_gfx_buffer_alpha_get(obj);
}
EAPI void
evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b)
{
+ EVAS_IMAGE_API(obj);
efl_image_border_set(obj, l, r, t, b);
}
EAPI void
evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b)
{
+ EVAS_IMAGE_API(obj);
efl_image_border_get(obj, l, r, t, b);
}
EAPI void
evas_object_image_border_scale_set(Evas_Object *obj, double scale)
{
+ EVAS_IMAGE_API(obj);
efl_image_border_scale_set(obj, scale);
}
EAPI double
evas_object_image_border_scale_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, 1.0);
return efl_image_border_scale_get(obj);
}
EAPI void
evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill)
{
+ EVAS_IMAGE_API(obj);
efl_image_border_center_fill_set(obj, (Efl_Gfx_Border_Fill_Mode) fill);
}
EAPI Evas_Border_Fill_Mode
evas_object_image_border_center_fill_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EVAS_BORDER_FILL_DEFAULT);
return (Evas_Border_Fill_Mode) efl_image_border_center_fill_get(obj);
}
EAPI void
-evas_object_image_size_get(const Evas_Image *obj, int *w, int *h)
+evas_object_image_size_get(const Evas_Object *obj, int *w, int *h)
{
+ EVAS_IMAGE_API(obj);
efl_gfx_view_size_get(obj, w, h);
}
EAPI Evas_Colorspace
evas_object_image_colorspace_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EVAS_COLORSPACE_ARGB8888);
return (Evas_Colorspace) efl_gfx_buffer_colorspace_get(obj);
}
EAPI int
evas_object_image_stride_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, 0);
return efl_gfx_buffer_stride_get(obj);
}
EAPI void
evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h)
{
+ EVAS_IMAGE_API(obj);
efl_gfx_buffer_update_add(obj, x, y, w, h);
}
EAPI void
-evas_object_image_file_set(Eo *obj, const char *file, const char *key)
+evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key)
{
- efl_file_set(obj, file, key);
+ EVAS_IMAGE_API(obj);
+ _evas_image_file_set(obj, file, key);
}
EAPI void
-evas_object_image_file_get(const Eo *obj, const char **file, const char **key)
+evas_object_image_file_get(const Evas_Object *obj, const char **file, const char **key)
{
- efl_file_get(obj, file, key);
+ EVAS_IMAGE_API(obj);
+ _evas_image_file_get(obj, file, key);
}
EAPI void
-evas_object_image_mmap_set(Evas_Image *obj, const Eina_File *f, const char *key)
+evas_object_image_mmap_set(Evas_Object *obj, const Eina_File *f, const char *key)
{
- efl_file_mmap_set(obj, f, key);
+ EVAS_IMAGE_API(obj);
+ _evas_image_mmap_set(obj, f, key);
}
EAPI void
-evas_object_image_mmap_get(const Evas_Image *obj, const Eina_File **f, const char **key)
+evas_object_image_mmap_get(const Evas_Object *obj, const Eina_File **f, const char **key)
{
- efl_file_mmap_get(obj, f, key);
+ EVAS_IMAGE_API(obj);
+ _evas_image_mmap_get(obj, f, key);
}
EAPI Eina_Bool
-evas_object_image_save(const Eo *obj, const char *file, const char *key, const char *flags)
+evas_object_image_save(const Evas_Object *obj, const char *file, const char *key, const char *flags)
{
+ EVAS_IMAGE_API(obj, EINA_FALSE);
return efl_file_save(obj, file, key, flags);
}
EAPI Eina_Bool
-evas_object_image_animated_get(const Eo *obj)
+evas_object_image_animated_get(const Evas_Object *obj)
{
- return efl_image_animated_get(obj);
+ EVAS_IMAGE_API(obj, EINA_FALSE);
+ return _evas_image_animated_get(obj);
}
EAPI void
evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index)
{
- efl_image_animated_frame_set(obj, frame_index);
+ EVAS_IMAGE_API(obj);
+ _evas_image_animated_frame_set(obj, frame_index);
}
EAPI int
evas_object_image_animated_frame_count_get(const Evas_Object *obj)
{
- return efl_image_animated_frame_count_get(obj);
+ EVAS_IMAGE_API(obj, 0);
+ return _evas_image_animated_frame_count_get(obj);
}
EAPI Evas_Image_Animated_Loop_Hint
evas_object_image_animated_loop_type_get(const Evas_Object *obj)
{
- return (Evas_Image_Animated_Loop_Hint) efl_image_animated_loop_type_get(obj);
+ EVAS_IMAGE_API(obj, EVAS_IMAGE_ANIMATED_HINT_NONE);
+ return (Evas_Image_Animated_Loop_Hint) _evas_image_animated_loop_type_get(obj);
}
EAPI int
evas_object_image_animated_loop_count_get(const Evas_Object *obj)
{
- return efl_image_animated_loop_count_get(obj);
+ EVAS_IMAGE_API(obj, 0);
+ return _evas_image_animated_loop_count_get(obj);
}
EAPI double
evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num)
{
- return efl_image_animated_frame_duration_get(obj, start_frame, frame_num);
+ EVAS_IMAGE_API(obj, 0.0);
+ return _evas_image_animated_frame_duration_get(obj, start_frame, frame_num);
}
EAPI void
-evas_object_image_load_size_set(Eo *obj, int w, int h)
+evas_object_image_load_size_set(Evas_Object *obj, int w, int h)
{
- efl_image_load_size_set(obj, w, h);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_size_set(obj, w, h);
}
EAPI void
-evas_object_image_load_size_get(const Eo *obj, int *w, int *h)
+evas_object_image_load_size_get(const Evas_Object *obj, int *w, int *h)
{
- efl_image_load_size_get(obj, w, h);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_size_get(obj, w, h);
}
EAPI void
evas_object_image_load_dpi_set(Evas_Object *obj, double dpi)
{
- efl_image_load_dpi_set(obj, dpi);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_dpi_set(obj, dpi);
}
EAPI double
evas_object_image_load_dpi_get(const Evas_Object *obj)
{
- return efl_image_load_dpi_get(obj);
+ EVAS_IMAGE_API(obj, 0.0);
+ return _evas_image_load_dpi_get(obj);
}
EAPI void
evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h)
{
- efl_image_load_region_set(obj, x, y, w, h);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_region_set(obj, x, y, w, h);
}
EAPI void
evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h)
{
- efl_image_load_region_get(obj, x, y, w, h);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_region_get(obj, x, y, w, h);
}
EAPI Eina_Bool
-evas_object_image_region_support_get(const Evas_Image *obj)
+evas_object_image_region_support_get(const Evas_Object *obj)
{
- return efl_image_load_region_support_get(obj);
+ EVAS_IMAGE_API(obj, EINA_FALSE);
+ return _evas_image_load_region_support_get(obj);
}
EAPI void
evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable)
{
- efl_image_load_orientation_set(obj, enable);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_orientation_set(obj, enable);
}
EAPI Eina_Bool
evas_object_image_load_orientation_get(const Evas_Object *obj)
{
- return efl_image_load_orientation_get(obj);
+ EVAS_IMAGE_API(obj, EINA_FALSE);
+ return _evas_image_load_orientation_get(obj);
}
EAPI void
evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down)
{
- efl_image_load_scale_down_set(obj, scale_down);
+ EVAS_IMAGE_API(obj);
+ _evas_image_load_scale_down_set(obj, scale_down);
}
EAPI int
evas_object_image_load_scale_down_get(const Evas_Object *obj)
{
- return efl_image_load_scale_down_get(obj);
+ EVAS_IMAGE_API(obj, 1);
+ return _evas_image_load_scale_down_get(obj);
}
EAPI Evas_Load_Error
evas_object_image_load_error_get(const Evas_Object *obj)
{
- return (Evas_Load_Error) efl_image_load_error_get(obj);
+ EVAS_IMAGE_API(obj, EVAS_LOAD_ERROR_GENERIC);
+ return (Evas_Load_Error) _evas_image_load_error_get(obj);
}
EAPI void
-evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale)
+evas_object_image_smooth_scale_set(Evas_Object *obj, Eina_Bool smooth_scale)
{
+ EVAS_IMAGE_API(obj);
efl_image_smooth_scale_set(obj, smooth_scale);
}
EAPI Eina_Bool
-evas_object_image_smooth_scale_get(const Eo *obj)
+evas_object_image_smooth_scale_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EINA_FALSE);
return efl_image_smooth_scale_get(obj);
}
EAPI void
-evas_object_image_orient_set(Evas_Image *obj, Evas_Image_Orient orient)
+evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient)
{
+ EVAS_IMAGE_API(obj);
efl_image_orientation_set(obj, (Efl_Gfx_Orientation) orient);
}
EAPI Evas_Image_Orient
-evas_object_image_orient_get(const Evas_Image *obj)
+evas_object_image_orient_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EVAS_IMAGE_ORIENT_NONE);
return (Evas_Image_Orient) efl_image_orientation_get(obj);
}
EAPI void
evas_object_image_snapshot_set(Evas_Object *eo, Eina_Bool s)
{
+ EVAS_IMAGE_API(eo);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo, EVAS_OBJECT_CLASS);
- EVAS_IMAGE_LEGACY_API(eo);
if (obj->cur->snapshot == s) return;
EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
@@ -326,105 +373,111 @@ evas_object_image_snapshot_set(Evas_Object *eo, Eina_Bool s)
EAPI Eina_Bool
evas_object_image_snapshot_get(const Evas_Object *eo)
{
+ EVAS_IMAGE_API(eo, EINA_FALSE);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo, EVAS_OBJECT_CLASS);
- EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
return obj->cur->snapshot;
}
EAPI Eina_Bool
evas_object_image_source_set(Evas_Object *eo, Evas_Object *src)
{
- EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
+ EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_set(eo, src);
}
EAPI Evas_Object *
evas_object_image_source_get(const Evas_Object *eo)
{
- EVAS_IMAGE_LEGACY_API(eo, NULL);
+ EVAS_IMAGE_API(eo, NULL);
return _evas_image_proxy_source_get(eo);
}
EAPI Eina_Bool
evas_object_image_source_unset(Evas_Object *eo_obj)
{
- EVAS_IMAGE_LEGACY_API(eo_obj, EINA_FALSE);
+ EVAS_IMAGE_API(eo_obj, EINA_FALSE);
return _evas_image_proxy_source_set(eo_obj, NULL);
}
EAPI void
evas_object_image_source_clip_set(Evas_Object *eo, Eina_Bool source_clip)
{
- EVAS_IMAGE_LEGACY_API(eo);
+ EVAS_IMAGE_API(eo);
_evas_image_proxy_source_clip_set(eo, source_clip);
}
EAPI Eina_Bool
evas_object_image_source_clip_get(const Evas_Object *eo)
{
- EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
+ EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_clip_get(eo);
}
EAPI void
evas_object_image_source_events_set(Evas_Object *eo, Eina_Bool repeat)
{
- EVAS_IMAGE_LEGACY_API(eo);
+ EVAS_IMAGE_API(eo);
_evas_image_proxy_source_events_set(eo, repeat);
}
EAPI Eina_Bool
evas_object_image_source_events_get(const Evas_Object *eo)
{
- EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
+ EVAS_IMAGE_API(eo, EINA_FALSE);
return _evas_image_proxy_source_events_get(eo);
}
EAPI void
evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint)
{
+ EVAS_IMAGE_API(obj);
return efl_image_content_hint_set(obj, hint);
}
EAPI Evas_Image_Content_Hint
evas_object_image_content_hint_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EVAS_IMAGE_CONTENT_HINT_NONE);
return efl_image_content_hint_get(obj);
}
EAPI void
evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint)
{
+ EVAS_IMAGE_API(obj);
return efl_image_scale_hint_set(obj, (Efl_Image_Scale_Hint) hint);
}
EAPI Evas_Image_Scale_Hint
evas_object_image_scale_hint_get(const Evas_Object *obj)
{
+ EVAS_IMAGE_API(obj, EVAS_IMAGE_SCALE_HINT_NONE);
return (Evas_Image_Scale_Hint) efl_image_scale_hint_get(obj);
}
EAPI void
evas_object_image_native_surface_set(Evas_Object *eo_obj, Evas_Native_Surface *surf)
{
- EVAS_IMAGE_LEGACY_API(eo_obj);
+ EVAS_IMAGE_API(eo_obj);
_evas_image_native_surface_set(eo_obj, surf);
}
EAPI Evas_Native_Surface *
evas_object_image_native_surface_get(const Evas_Object *eo_obj)
{
- EVAS_IMAGE_LEGACY_API(eo_obj, NULL);
+ EVAS_IMAGE_API(eo_obj, NULL);
return _evas_image_native_surface_get(eo_obj);
}
-/* eo equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
+/* Evas_Object equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
EAPI void
-evas_object_image_size_set(Eo *eo_obj, int w, int h)
+evas_object_image_size_set(Evas_Object *eo_obj, int w, int h)
{
+ EVAS_IMAGE_API(eo_obj);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Image_Data *o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
-
int stride = 0;
if (o->cur->scene) return;
@@ -484,14 +537,16 @@ evas_object_image_size_set(Eo *eo_obj, int w, int h)
evas_object_change(eo_obj, obj);
}
-/* eo equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
+/* Evas_Object equivalent: pixels_set(null, w, h, cspace) to (re)allocate an image */
EAPI void
evas_object_image_colorspace_set(Evas_Object *eo_obj, Evas_Colorspace cspace)
{
+ EVAS_IMAGE_API(eo_obj);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Image_Data *o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
- evas_object_async_block(obj);
+ evas_object_async_block(obj);
_evas_image_cleanup(eo_obj, obj, o);
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
@@ -604,7 +659,7 @@ evas_object_image_video_surface_caps_get(const Evas_Object *eo_obj)
/* deprecated */
EAPI void
-evas_object_image_fill_spread_set(Evas_Image *obj EINA_UNUSED, Evas_Fill_Spread spread)
+evas_object_image_fill_spread_set(Evas_Object *obj EINA_UNUSED, Evas_Fill_Spread spread)
{
/* not implemented! */
if (spread != EFL_GFX_FILL_REPEAT)
@@ -613,7 +668,7 @@ evas_object_image_fill_spread_set(Evas_Image *obj EINA_UNUSED, Evas_Fill_Spread
/* deprecated */
EAPI Evas_Fill_Spread
-evas_object_image_fill_spread_get(const Evas_Image *obj EINA_UNUSED)
+evas_object_image_fill_spread_get(const Evas_Object *obj EINA_UNUSED)
{
return EFL_GFX_FILL_REPEAT;
}
@@ -629,12 +684,12 @@ evas_object_image_source_visible_set(Evas_Object *eo, Eina_Bool visible)
* -- jpeg, 2016/03/07
*/
+ EVAS_IMAGE_LEGACY_API(eo);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo, EVAS_OBJECT_CLASS);
Evas_Object_Protected_Data *src_obj;
Evas_Image_Data *o;
- EVAS_IMAGE_LEGACY_API(eo);
-
o = eo_data_scope_get(eo, EVAS_IMAGE_CLASS);
if (!o->cur->source) return;
@@ -661,12 +716,12 @@ evas_object_image_source_visible_get(const Evas_Object *eo)
{
/* FIXME: see evas_object_image_source_visible_set */
+ EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
+
Evas_Object_Protected_Data *src_obj;
Evas_Image_Data *o;
Eina_Bool visible;
- EVAS_IMAGE_LEGACY_API(eo, EINA_FALSE);
-
o = eo_data_scope_get(eo, EVAS_IMAGE_CLASS);
if (!o->cur->source) visible = EINA_FALSE;
src_obj = eo_data_scope_get(o->cur->source, EVAS_OBJECT_CLASS);
@@ -680,14 +735,13 @@ evas_object_image_source_visible_get(const Evas_Object *eo)
EAPI void*
evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
{
+ EVAS_IMAGE_LEGACY_API(eo_obj, NULL);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Image_Data *o;
DATA32 *data;
void* result = NULL;
- EVAS_IMAGE_LEGACY_API(eo_obj, NULL);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eo_isa(eo_obj, EVAS_IMAGE_CLASS), NULL);
-
evas_object_async_block(obj);
o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
if ((o->preloading) && (o->engine_data))
@@ -712,14 +766,13 @@ evas_object_image_data_convert(Evas_Object *eo_obj, Evas_Colorspace to_cspace)
/* deprecated */
EAPI void
-evas_object_image_reload(Eo *eo_obj)
+evas_object_image_reload(Evas_Object *eo_obj)
{
+ EVAS_IMAGE_LEGACY_API(eo_obj);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Image_Data *o;
- EVAS_IMAGE_LEGACY_API(eo_obj);
- EINA_SAFETY_ON_FALSE_RETURN(eo_isa(eo_obj, EVAS_IMAGE_CLASS));
-
evas_object_async_block(obj);
o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
if ((o->preloading) && (o->engine_data))
@@ -751,12 +804,11 @@ evas_object_image_reload(Eo *eo_obj)
EAPI Eina_Bool
evas_object_image_pixels_import(Evas_Object *eo_obj, Evas_Pixel_Import_Source *pixels)
{
+ EVAS_IMAGE_LEGACY_API(eo_obj, EINA_FALSE);
+
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Image_Data *o;
- EVAS_IMAGE_LEGACY_API(eo_obj, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(eo_isa(eo_obj, EVAS_IMAGE_CLASS), EINA_FALSE);
-
evas_object_async_block(obj);
o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
_evas_image_cleanup(eo_obj, obj, o);
@@ -821,4 +873,5 @@ EAPI void
evas_object_image_alpha_mask_set(Evas_Object *eo_obj EINA_UNUSED, Eina_Bool ismask EINA_UNUSED)
{
DBG("This function is not implemented, has never been and never will be.");
+ EVAS_IMAGE_LEGACY_API(eo_obj);
}
diff --git a/src/lib/evas/canvas/evas_image_private.h b/src/lib/evas/canvas/evas_image_private.h
index 3a33961a93..ff7ffcded4 100644
--- a/src/lib/evas/canvas/evas_image_private.h
+++ b/src/lib/evas/canvas/evas_image_private.h
@@ -25,6 +25,7 @@
#include "../common/evas_convert_colorspace.h"
#include "../common/evas_convert_yuv.h"
+#include "canvas/evas_image.eo.h"
#include "evas_filter.eo.h"
#include "evas_filter.h"
@@ -140,18 +141,55 @@ struct _Evas_Image_Data
void _evas_image_init_set(const Eina_File *f, const char *file, const char *key, Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o, Evas_Image_Load_Opts *lo);
void _evas_image_done_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o);
void _evas_image_cleanup(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o);
+
+/* Efl.File */
+Eina_Bool _evas_image_mmap_set(Eo *eo_obj, const Eina_File *f, const char *key);
+void _evas_image_mmap_get(const Eo *eo_obj, const Eina_File **f, const char **key);
+Eina_Bool _evas_image_file_set(Eo *eo_obj, const char *file, const char *key);
+void _evas_image_file_get(const Eo *eo_obj, const char **file, const char **key);
+
+/* Efl.Image.Load */
+Efl_Image_Load_Error _evas_image_load_error_get(const Eo *eo_obj);
+void _evas_image_load_async_start(Eo *eo_obj);
+void _evas_image_load_async_cancel(Eo *eo_obj);
+void _evas_image_load_dpi_set(Eo *eo_obj, double dpi);
+double _evas_image_load_dpi_get(const Eo *eo_obj);
+void _evas_image_load_size_set(Eo *eo_obj, int w, int h);
+void _evas_image_load_size_get(const Eo *eo_obj, int *w, int *h);
+void _evas_image_load_scale_down_set(Eo *eo_obj, int scale_down);
+int _evas_image_load_scale_down_get(const Eo *eo_obj);
+void _evas_image_load_region_set(Eo *eo_obj, int x, int y, int w, int h);
+void _evas_image_load_region_get(const Eo *eo_obj, int *x, int *y, int *w, int *h);
+void _evas_image_load_orientation_set(Eo *eo_obj, Eina_Bool enable);
+Eina_Bool _evas_image_load_orientation_get(const Eo *eo_obj);
+Eina_Bool _evas_image_load_region_support_get(const Eo *eo_obj);
+
+/* Efl.Image.Animated */
+Eina_Bool _evas_image_animated_get(const Eo *eo_obj);
+int _evas_image_animated_frame_count_get(const Eo *eo_obj);
+Efl_Image_Animated_Loop_Hint _evas_image_animated_loop_type_get(const Eo *eo_obj);
+int _evas_image_animated_loop_count_get(const Eo *eo_obj);
+double _evas_image_animated_frame_duration_get(const Eo *eo_obj, int start_frame, int frame_num);
+Eina_Bool _evas_image_animated_frame_set(Eo *eo_obj, int frame_index);
+int _evas_image_animated_frame_get(const Eo *eo_obj);
+
+/* Efl.Canvas.Proxy */
void _evas_image_proxy_unset(Evas_Object *proxy, Evas_Object_Protected_Data *obj, Evas_Image_Data *o);
void _evas_image_proxy_set(Evas_Object *proxy, Evas_Object *src);
void _evas_image_proxy_error(Evas_Object *proxy, void *context, void *output, void *surface, int x, int y, Eina_Bool do_async);
-void _evas_image_3d_render(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o, Evas_Canvas3D_Scene *scene);
-void _evas_image_3d_set(Evas_Object *eo_obj, Evas_Canvas3D_Scene *scene);
-void _evas_image_3d_unset(Evas_Object *eo_obj, Evas_Object_Protected_Data *image, Evas_Image_Data *o);
Eina_Bool _evas_image_proxy_source_set(Eo *eo_obj, Evas_Object *eo_src);
Evas_Object *_evas_image_proxy_source_get(const Eo *eo_obj);
void _evas_image_proxy_source_clip_set(Eo *eo_obj, Eina_Bool source_clip);
Eina_Bool _evas_image_proxy_source_clip_get(const Eo *eo_obj);
void _evas_image_proxy_source_events_set(Eo *eo_obj, Eina_Bool source_events);
Eina_Bool _evas_image_proxy_source_events_get(const Eo *eo_obj);
+
+/* Efl.Canvas.Scene3d */
+void _evas_image_3d_render(Evas *eo_e, Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o, Evas_Canvas3D_Scene *scene);
+void _evas_image_3d_set(Evas_Object *eo_obj, Evas_Canvas3D_Scene *scene);
+void _evas_image_3d_unset(Evas_Object *eo_obj, Evas_Object_Protected_Data *image, Evas_Image_Data *o);
+
+/* Efl.Canvas.Surface */
Eina_Bool _evas_image_native_surface_set(Eo *eo_obj, Evas_Native_Surface *surf);
Evas_Native_Surface *_evas_image_native_surface_get(const Evas_Object *eo_obj);
@@ -176,6 +214,12 @@ void _evas_image_load(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas
# define EINA_COW_PIXEL_WRITE_END(Obj, Write) \
EINA_COW_WRITE_END(evas_object_image_pixels_cow, Obj->pixels, Write)
+# define EINA_COW_LOAD_OPTS_WRITE_BEGIN(Obj, Write) \
+ EINA_COW_WRITE_BEGIN(evas_object_image_load_opts_cow, Obj->load_opts, Evas_Object_Image_Load_Opts, Write)
+
+# define EINA_COW_LOAD_OPTS_WRITE_END(Obj, Write) \
+ EINA_COW_WRITE_END(evas_object_image_load_opts_cow, Obj->load_opts, Write)
+
#define FRAME_MAX 1024
#endif // EVAS_IMAGE_PRIVATE_H
diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c
index 9abf1c9d6d..2320f6fb54 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -23,7 +23,7 @@ static void _evas_image_render(Eo *eo_obj, Evas_Object_Protected_Data *obj,
static void evas_object_image_free(Evas_Object *eo_obj,
Evas_Object_Protected_Data *obj);
static void evas_object_image_render_pre(Evas_Object *eo_obj,
- Evas_Object_Protected_Data *obj,
+ Evas_Object_Protected_Data *obj,
void *type_private_data);
static void evas_object_image_render_post(Evas_Object *eo_obj,
Evas_Object_Protected_Data *obj,
@@ -111,12 +111,6 @@ Eina_Cow *evas_object_image_load_opts_cow = NULL;
Eina_Cow *evas_object_image_pixels_cow = NULL;
Eina_Cow *evas_object_image_state_cow = NULL;
-# define EINA_COW_LOAD_OPTS_WRITE_BEGIN(Obj, Write) \
- EINA_COW_WRITE_BEGIN(evas_object_image_load_opts_cow, Obj->load_opts, Evas_Object_Image_Load_Opts, Write)
-
-# define EINA_COW_LOAD_OPTS_WRITE_END(Obj, Write) \
- EINA_COW_WRITE_END(evas_object_image_load_opts_cow, Obj->load_opts, Write)
-
# define EVAS_OBJECT_WRITE_IMAGE_FREE_FILE_AND_KEY(Obj) \
if ((!Obj->cur->mmaped_source && Obj->cur->u.file) || Obj->cur->key) \
{ \
@@ -354,79 +348,6 @@ _evas_image_done_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Dat
evas_object_change(eo_obj, obj);
}
-EOLIAN static Eina_Bool
-_evas_image_efl_file_mmap_set(Eo *eo_obj,
- Evas_Image_Data *o,
- const Eina_File *f, const char *key)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- Evas_Image_Load_Opts lo;
-
- if (o->cur->u.f == f)
- {
- if ((!o->cur->key) && (!key))
- return EINA_FALSE;
- if ((o->cur->key) && (key) && (!strcmp(o->cur->key, key)))
- return EINA_FALSE;
- }
- evas_object_async_block(obj);
- _evas_image_init_set(f, NULL, key, eo_obj, obj, o, &lo);
- o->engine_data = ENFN->image_mmap(ENDT, o->cur->u.f, o->cur->key, &o->load_error, &lo);
- _evas_image_done_set(eo_obj, obj, o);
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_image_efl_file_mmap_get(Eo *eo_obj EINA_UNUSED,
- Evas_Image_Data *o,
- const Eina_File **f, const char **key)
-{
- if (f)
- *f = o->cur->mmaped_source ? o->cur->u.f : NULL;
- if (key)
- *key = o->cur->key;
-}
-
-EOLIAN static Eina_Bool
-_evas_image_efl_file_file_set(Eo *eo_obj, Evas_Image_Data *o, const char *file, const char *key)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- Evas_Image_Load_Opts lo;
-
- if ((o->cur->u.file) && (file) && (!strcmp(o->cur->u.file, file)))
- {
- if ((!o->cur->key) && (!key))
- return EINA_FALSE;
- if ((o->cur->key) && (key) && (!strcmp(o->cur->key, key)))
- return EINA_FALSE;
- }
- /*
- * WTF? why cancel a null image preload? this is just silly (tm)
- if (!o->engine_data)
- ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
- */
- evas_object_async_block(obj);
- _evas_image_init_set(NULL, file, key, eo_obj, obj, o, &lo);
- o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo);
- _evas_image_done_set(eo_obj, obj, o);
-
- return EINA_TRUE;
-}
-
-EOLIAN static void
-_evas_image_efl_file_file_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, const char **file, const char **key)
-{
- if (file)
- {
- if (o->cur->mmaped_source)
- *file = eina_file_filename_get(o->cur->u.f);
- else
- *file = o->cur->u.file;
- }
- if (key) *key = o->cur->key;
-}
-
EOLIAN static void
_evas_image_efl_image_orientation_set(Eo *eo_obj, Evas_Image_Data *o, Efl_Gfx_Orientation _orient)
{
@@ -483,7 +404,6 @@ _evas_image_efl_image_orientation_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o
return (Efl_Gfx_Orientation) o->cur->orient;
}
-
EOLIAN static void
_evas_image_eo_base_dbg_info_get(Eo *eo_obj, Evas_Image_Data *o, Eo_Dbg_Info *root)
{
@@ -505,9 +425,9 @@ _evas_image_eo_base_dbg_info_get(Eo *eo_obj, Evas_Image_Data *o, Eo_Dbg_Info *ro
if (efl_image_load_error_get(eo_obj) != EVAS_LOAD_ERROR_NONE)
{
Evas_Load_Error error = EVAS_LOAD_ERROR_GENERIC;
- error = (Evas_Load_Error) efl_image_load_error_get(eo_obj);
+ error = (Evas_Load_Error) _evas_image_load_error_get(eo_obj);
EO_DBG_INFO_APPEND(group, "Load Error", EINA_VALUE_TYPE_STRING,
- evas_load_error_str(error));
+ evas_load_error_str(error));
}
}
@@ -711,60 +631,6 @@ _evas_image_efl_gfx_buffer_stride_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o
return o->cur->image.stride;
}
-EOLIAN static Efl_Image_Load_Error
-_evas_image_efl_image_load_load_error_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
-{
- return (Efl_Image_Load_Error) o->load_error;
-}
-
-static void
-_image_preload_internal(Eo *eo_obj, void *_pd, Eina_Bool cancel)
-{
- Evas_Image_Data *o = _pd;
-
- if (!o->engine_data)
- {
- o->preloading = EINA_TRUE;
- evas_object_inform_call_image_preloaded(eo_obj);
- return;
- }
- // FIXME: if already busy preloading, then dont request again until
- // preload done
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if (cancel)
- {
- if (o->preloading)
- {
- o->preloading = EINA_FALSE;
- ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
- }
- }
- else
- {
- if (!o->preloading)
- {
- o->preloading = EINA_TRUE;
- ENFN->image_data_preload_request(ENDT, o->engine_data, eo_obj);
- }
- }
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_async_start(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- evas_object_async_block(obj);
- _image_preload_internal(eo_obj, _pd, EINA_FALSE);
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_async_cancel(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- evas_object_async_block(obj);
- _image_preload_internal(eo_obj, _pd, EINA_TRUE);
-}
-
EOLIAN static void
_evas_image_efl_gfx_buffer_buffer_update_add(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h)
{
@@ -1104,142 +970,6 @@ _evas_image_pixels_dirty_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
return (o->dirty_pixels ? 1 : 0);
}
-EOLIAN static void
-_evas_image_efl_image_load_load_dpi_set(Eo *eo_obj, Evas_Image_Data *o, double dpi)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if (dpi == o->load_opts->dpi) return;
- evas_object_async_block(obj);
- EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
- low->dpi = dpi;
- EINA_COW_LOAD_OPTS_WRITE_END(o, low);
-
- if (o->cur->u.file)
- {
- _evas_image_unload(eo_obj, obj, 0);
- evas_object_inform_call_image_unloaded(eo_obj);
- _evas_image_load(eo_obj, obj, o);
- o->changed = EINA_TRUE;
- evas_object_change(eo_obj, obj);
- }
-}
-
-EOLIAN static double
-_evas_image_efl_image_load_load_dpi_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
-{
- return o->load_opts->dpi;
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_size_set(Eo *eo_obj, Evas_Image_Data *o, int w, int h)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if ((o->load_opts->w == w) && (o->load_opts->h == h)) return;
- evas_object_async_block(obj);
- EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
- {
- low->w = w;
- low->h = h;
- }
- EINA_COW_LOAD_OPTS_WRITE_END(o, low);
-
- if (o->cur->u.file)
- {
- _evas_image_unload(eo_obj, obj, 0);
- evas_object_inform_call_image_unloaded(eo_obj);
- _evas_image_load(eo_obj, obj, o);
- o->changed = EINA_TRUE;
- evas_object_change(eo_obj, obj);
- }
- o->proxyerror = 0;
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_size_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, int *w, int *h)
-{
- if (w) *w = o->load_opts->w;
- if (h) *h = o->load_opts->h;
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_scale_down_set(Eo *eo_obj, Evas_Image_Data *o, int scale_down)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if (o->load_opts->scale_down_by == scale_down) return;
- evas_object_async_block(obj);
- EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
- low->scale_down_by = scale_down;
- EINA_COW_LOAD_OPTS_WRITE_END(o, low);
-
- if (o->cur->u.file)
- {
- _evas_image_unload(eo_obj, obj, 0);
- evas_object_inform_call_image_unloaded(eo_obj);
- _evas_image_load(eo_obj, obj, o);
- o->changed = EINA_TRUE;
- evas_object_change(eo_obj, obj);
- }
-}
-
-EOLIAN static int
-_evas_image_efl_image_load_load_scale_down_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
-{
- return o->load_opts->scale_down_by;
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_region_set(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if ((o->load_opts->region.x == x) && (o->load_opts->region.y == y) &&
- (o->load_opts->region.w == w) && (o->load_opts->region.h == h)) return;
- evas_object_async_block(obj);
- EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
- {
- low->region.x = x;
- low->region.y = y;
- low->region.w = w;
- low->region.h = h;
- }
- EINA_COW_LOAD_OPTS_WRITE_END(o, low);
-
- if (o->cur->u.file)
- {
- _evas_image_unload(eo_obj, obj, 0);
- evas_object_inform_call_image_unloaded(eo_obj);
- _evas_image_load(eo_obj, obj, o);
- o->changed = EINA_TRUE;
- evas_object_change(eo_obj, obj);
- }
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_region_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, int *x, int *y, int *w, int *h)
-{
- if (x) *x = o->load_opts->region.x;
- if (y) *y = o->load_opts->region.y;
- if (w) *w = o->load_opts->region.w;
- if (h) *h = o->load_opts->region.h;
-}
-
-EOLIAN static void
-_evas_image_efl_image_load_load_orientation_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool enable)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- if (o->load_opts->orientation == !!enable) return;
- evas_object_async_block(obj);
-
- EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
- low->orientation = !!enable;
- EINA_COW_LOAD_OPTS_WRITE_END(o, low);
-}
-
-EOLIAN static Eina_Bool
-_evas_image_efl_image_load_load_orientation_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
-{
- return o->load_opts->orientation;;
-}
-
EOLIAN static Efl_Gfx_Colorspace
_evas_image_efl_gfx_buffer_colorspace_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
{
@@ -1353,136 +1083,6 @@ _evas_image_efl_image_content_hint_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *
return o->content_hint;
}
-EOLIAN static Eina_Bool
-_evas_image_efl_image_load_load_region_support_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
-
- return ENFN->image_can_region_get(ENDT, o->engine_data);
-}
-
-/* animated feature */
-EOLIAN static Eina_Bool
-_evas_image_efl_image_animated_animated_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- Eina_Bool animated;
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
-
- animated =
- ENFN->image_animated_get ?
- ENFN->image_animated_get(ENDT, o->engine_data) :
- EINA_FALSE;
-
- return animated;
-}
-
-EOLIAN static int
-_evas_image_efl_image_animated_animated_frame_count_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- int frame_count;
- frame_count = -1;
-
- if (!evas_object_image_animated_get(eo_obj)) return frame_count;
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
-
- if (ENFN->image_animated_frame_count_get)
- frame_count = ENFN->image_animated_frame_count_get(ENDT, o->engine_data);
-
- return frame_count;
-}
-
-EOLIAN static Efl_Image_Animated_Loop_Hint
-_evas_image_efl_image_animated_animated_loop_type_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- Efl_Image_Animated_Loop_Hint hint = EFL_IMAGE_ANIMATED_LOOP_HINT_NONE;
-
- if (!evas_object_image_animated_get(eo_obj)) return hint;
-
- if (ENFN->image_animated_loop_type_get)
- hint = (Efl_Image_Animated_Loop_Hint) ENFN->image_animated_loop_type_get(ENDT, o->engine_data);
-
- return hint;
-}
-
-EOLIAN static int
-_evas_image_efl_image_animated_animated_loop_count_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
-
- int loop_count;
- loop_count = -1;
- if (!evas_object_image_animated_get(eo_obj)) return loop_count;
-
- loop_count =
- ENFN->image_animated_loop_count_get ?
- ENFN->image_animated_loop_count_get(ENDT, o->engine_data) :
- -1;
-
- return loop_count;
-}
-
-EOLIAN static double
-_evas_image_efl_image_animated_animated_frame_duration_get(Eo *eo_obj, Evas_Image_Data *o, int start_frame, int frame_num)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- double frame_duration = -1;
- int frame_count = 0;
-
- if (!ENFN->image_animated_frame_count_get) return frame_duration;
-
- frame_count = ENFN->image_animated_frame_count_get(ENDT, o->engine_data);
-
- if ((start_frame + frame_num) > frame_count) return frame_duration;
- if (ENFN->image_animated_frame_duration_get)
- frame_duration = ENFN->image_animated_frame_duration_get(ENDT, o->engine_data, start_frame, frame_num);
-
- return frame_duration;
-}
-
-EOLIAN static Eina_Bool
-_evas_image_efl_image_animated_animated_frame_set(Eo *eo_obj, Evas_Image_Data *o, int frame_index)
-{
- Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- int frame_count = 0;
-
- if (!o->cur->u.file) return EINA_FALSE;
- if (o->cur->frame == frame_index) return EINA_TRUE;
-
- if (!evas_object_image_animated_get(eo_obj)) return EINA_FALSE;
- evas_object_async_block(obj);
- frame_count = evas_object_image_animated_frame_count_get(eo_obj);
-
- /* limit the size of frame to FRAME_MAX */
- if ((frame_count > FRAME_MAX) || (frame_count < 0) || (frame_index > frame_count))
- return EINA_FALSE;
-
- if (!ENFN->image_animated_frame_set) return EINA_FALSE;
- ENFN->image_animated_frame_set(ENDT, o->engine_data, frame_index);
-// if (!ENFN->image_animated_frame_set(ENDT, o->engine_data, frame_index)) return;
-
- EINA_COW_WRITE_BEGIN(evas_object_image_state_cow, o->prev, Evas_Object_Image_State, prev_write)
- prev_write->frame = o->cur->frame;
- EINA_COW_WRITE_END(evas_object_image_state_cow, o->prev, prev_write);
-
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- state_write->frame = frame_index;
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
-
- o->changed = EINA_TRUE;
- evas_object_change(eo_obj, obj);
-
- return EINA_TRUE;
-}
-
-EOLIAN static int
-_evas_image_efl_image_animated_animated_frame_get(Eo *eo_obj, Evas_Image_Data *o)
-{
- if (!o->cur->u.file) return EINA_FALSE;
- if (!evas_object_image_animated_get(eo_obj)) return EINA_FALSE;
- return o->cur->frame;
-}
-
EOLIAN void
_evas_canvas_image_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
{
@@ -1500,24 +1100,24 @@ _evas_canvas_image_cache_reload(Eo *eo_e, Evas_Public_Data *e)
evas_image_cache_flush(eo_e);
EINA_INLIST_FOREACH(e->layers, layer)
{
- Evas_Object_Protected_Data *obj;
+ Evas_Object_Protected_Data *obj;
- EINA_INLIST_FOREACH(layer->objects, obj)
- {
+ EINA_INLIST_FOREACH(layer->objects, obj)
+ {
if (eo_isa(obj->object, MY_CLASS))
{
_evas_image_unload(obj->object, obj, 1);
evas_object_inform_call_image_unloaded(obj->object);
}
- }
+ }
}
evas_image_cache_flush(eo_e);
EINA_INLIST_FOREACH(e->layers, layer)
{
- Evas_Object_Protected_Data *obj;
+ Evas_Object_Protected_Data *obj;
- EINA_INLIST_FOREACH(layer->objects, obj)
- {
+ EINA_INLIST_FOREACH(layer->objects, obj)
+ {
if (eo_isa(obj->object, MY_CLASS))
{
Evas_Image_Data *o = eo_data_scope_get(obj->object, MY_CLASS);
@@ -1525,7 +1125,7 @@ _evas_canvas_image_cache_reload(Eo *eo_e, Evas_Public_Data *e)
o->changed = EINA_TRUE;
evas_object_change(obj->object, obj);
}
- }
+ }
}
evas_image_cache_flush(eo_e);
}
@@ -1718,11 +1318,12 @@ evas_object_image_init(Evas_Object *eo_obj)
}
EOLIAN static void
-_evas_image_eo_base_destructor(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED)
+_evas_image_eo_base_destructor(Eo *eo_obj, Evas_Image_Data *o EINA_UNUSED)
{
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
- evas_object_image_video_surface_set(eo_obj, NULL);
+ if (obj->legacy)
+ evas_object_image_video_surface_set(eo_obj, NULL);
evas_object_image_free(eo_obj, obj);
eo_destructor(eo_super(eo_obj, MY_CLASS));
}
@@ -3913,6 +3514,41 @@ evas_object_image_data_copy_set(Eo *eo_obj, void *data)
EVAS_OBJECT_WRITE_IMAGE_FREE_FILE_AND_KEY(o);
}
+/* FIXME: Temporarily allow efl_file_ APIs on Evas.Image.
+ * They don't belong here, as only Efl.Canvas.Image should support them.
+ * Elm.Image uses them, though, instead of using the legacy APIs...
+ */
+
+EOLIAN static Eina_Bool
+_evas_image_efl_file_file_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char *file, const char *key)
+{
+ DBG("efl_file_set shouldn't be used on Evas.Image. please switch to Efl.Canvas.Image");
+ return _evas_image_file_set(obj, file, key);
+}
+
+EOLIAN static void
+_evas_image_efl_file_file_get(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char **file, const char **key)
+{
+ DBG("efl_file_get shouldn't be used on Evas.Image. please switch to Efl.Canvas.Image");
+ _evas_image_file_get(obj, file, key);
+}
+
+EOLIAN static Eina_Bool
+_evas_image_efl_file_mmap_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const Eina_File *f, const char *key)
+{
+ DBG("efl_file_mmap_set shouldn't be used on Evas.Image. please switch to Efl.Canvas.Image");
+ return _evas_image_mmap_set(obj, f, key);
+}
+
+
+EOLIAN static void
+_evas_image_efl_file_mmap_get(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const Eina_File **f, const char **key)
+{
+ DBG("efl_file_mmap_get shouldn't be used on Evas.Image. please switch to Efl.Canvas.Image");
+ _evas_image_mmap_get(obj, f, key);
+}
+
+
#include "canvas/evas_image.eo.c"
/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index 71e0276437..c423567c43 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -788,11 +788,13 @@ _evas_object_eo_base_destructor(Eo *eo_obj, Evas_Object_Protected_Data *obj)
evas_object_clip_unset(tmp->object);
}
}
+
+ /* FIXME: Proxies should listen to source death */
EINA_LIST_FOREACH_SAFE(obj->proxy->proxies, l, l2, proxy)
{
if (eo_isa(proxy, EVAS_IMAGE_CLASS))
evas_object_image_source_unset(proxy);
- else if (eo_isa(proxy, EVAS_TEXT_CLASS))
+ if (eo_isa(proxy, EFL_GFX_FILTER_INTERFACE))
efl_gfx_filter_source_set(proxy, NULL, eo_obj);
}
diff --git a/src/modules/evas/engines/gl_common/evas_gl_preload.c b/src/modules/evas/engines/gl_common/evas_gl_preload.c
index 52a8429092..d97ce950d8 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_preload.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_preload.c
@@ -105,7 +105,7 @@ _evas_gl_preload_main_loop_wakeup(void)
if (async->tex)
{
EINA_LIST_FREE(async->tex->targets, target)
- evas_obj_image_pixels_dirty_set(target, EINA_TRUE);
+ evas_object_image_pixels_dirty_set(target, EINA_TRUE);
}
async->im->cache_entry.flags.preload_done = 0;
if (async->tex)