1 Files evas/.git/index and /tmp/evas/.git/index differ
2 diff -upNr evas/src/lib/Evas.h /tmp/evas/src/lib/Evas.h
3 --- evas/src/lib/Evas.h 2008-02-18 17:42:01.000000000 -0200
4 +++ /tmp/evas/src/lib/Evas.h 2008-02-18 17:41:49.000000000 -0200
5 @@ -492,6 +492,7 @@ extern "C" {
6 EAPI void evas_object_image_size_get (const Evas_Object *obj, int *w, int *h);
7 EAPI int evas_object_image_stride_get (const Evas_Object *obj);
8 EAPI int evas_object_image_load_error_get (const Evas_Object *obj);
9 + EAPI void *evas_object_image_data_convert (Evas_Object *obj, Evas_Colorspace to_cspace);
10 EAPI void evas_object_image_data_set (Evas_Object *obj, void *data);
11 EAPI void *evas_object_image_data_get (const Evas_Object *obj, Evas_Bool for_writing);
12 EAPI void evas_object_image_data_copy_set (Evas_Object *obj, void *data);
13 diff -upNr evas/src/lib/canvas/evas_object_image.c /tmp/evas/src/lib/canvas/evas_object_image.c
14 --- evas/src/lib/canvas/evas_object_image.c 2008-02-18 17:42:01.000000000 -0200
15 +++ /tmp/evas/src/lib/canvas/evas_object_image.c 2008-02-18 17:41:49.000000000 -0200
16 @@ -69,6 +69,8 @@ static int evas_object_image_is_opaque(E
17 static int evas_object_image_was_opaque(Evas_Object *obj);
18 static int evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
20 +static void *evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace);
22 static const Evas_Object_Func object_func =
24 /* methods (compulsory) */
25 @@ -701,6 +703,46 @@ evas_object_image_load_error_get(const E
29 + * Converts the raw image data of the given image object to the
30 + * specified colorspace.
32 + * Note that this function does not modify the raw image data.
33 + * If the requested colorspace is the same as the image colorspace
34 + * nothing is done and NULL is returned. You should use
35 + * evas_object_image_colorspace_get() to check the current image
38 + * See @ref evas_object_image_colorspace_get.
40 + * @param obj The given image object.
41 + * @param to_cspace The colorspace to which the image raw data will be converted.
42 + * @return data A newly allocated data in the format specified by to_cspace.
43 + * @ingroup Evas_Object_Image_Data
46 +evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
48 + Evas_Object_Image *o;
51 + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
54 + o = (Evas_Object_Image *)(obj->object_data);
55 + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
58 + if (!o->engine_data) return NULL;
59 + if (!o->cur.cspace == to_cspace) return NULL;
61 + o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
65 + return evas_object_image_data_convert_internal(o, data, to_cspace);
69 * @defgroup Evas_Object_Image_Data Image Object Image Data Functions
71 * Functions that allow you to access or modify the image pixel data of an
72 @@ -1126,11 +1168,22 @@ evas_object_image_save(const Evas_Object
74 if (o->cur.has_alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
76 - im->image->data = data;
77 - im->image->w = o->cur.image.w;
78 - im->image->h = o->cur.image.h;
79 - im->image->no_free = 1;
80 - ok = evas_common_save_image_to_file(im, file, key, quality, compress);
81 + if (o->cur.cspace == EVAS_COLORSPACE_ARGB8888)
82 + im->image->data = data;
84 + im->image->data = evas_object_image_data_convert_internal(o,
86 + EVAS_COLORSPACE_ARGB8888);
87 + if (im->image->data)
89 + im->image->w = o->cur.image.w;
90 + im->image->h = o->cur.image.h;
91 + im->image->no_free = 1;
92 + ok = evas_common_save_image_to_file(im, file, key, quality, compress);
94 + if (o->cur.cspace != EVAS_COLORSPACE_ARGB8888)
95 + free(im->image->data);
98 evas_cache_image_drop(im);
100 @@ -2376,3 +2429,36 @@ evas_object_image_is_inside(Evas_Object
106 +evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace)
113 + switch (o->cur.cspace)
115 + case EVAS_COLORSPACE_ARGB8888:
116 + out = evas_common_convert_argb8888_to(data,
119 + o->cur.image.stride,
123 + case EVAS_COLORSPACE_RGB565_A5P:
124 + out = evas_common_convert_rgb565_a5p_to(data,
127 + o->cur.image.stride,
137 diff -upNr evas/src/lib/engines/common/Makefile.am /tmp/evas/src/lib/engines/common/Makefile.am
138 --- evas/src/lib/engines/common/Makefile.am 2008-02-18 17:42:01.000000000 -0200
139 +++ /tmp/evas/src/lib/engines/common/Makefile.am 2008-02-18 17:41:49.000000000 -0200
140 @@ -23,6 +23,7 @@ evas_op_mul_main_.c \
143 evas_convert_color.c \
144 +evas_convert_colorspace.c \
145 evas_convert_gry_1.c \
146 evas_convert_gry_4.c \
147 evas_convert_gry_8.c \
148 diff -upNr evas/src/lib/engines/common/Makefile.in /tmp/evas/src/lib/engines/common/Makefile.in
149 --- evas/src/lib/engines/common/Makefile.in 2008-02-18 17:42:30.000000000 -0200
150 +++ /tmp/evas/src/lib/engines/common/Makefile.in 2008-02-18 17:42:49.000000000 -0200
151 @@ -48,13 +48,14 @@ am_libevas_engine_common_la_OBJECTS = ev
152 evas_op_blend_main_.lo evas_op_add_main_.lo \
153 evas_op_sub_main_.lo evas_op_mask_main_.lo \
154 evas_op_mul_main_.lo evas_blend_main.lo evas_blit_main.lo \
155 - evas_convert_color.lo evas_convert_gry_1.lo \
156 - evas_convert_gry_4.lo evas_convert_gry_8.lo \
157 - evas_convert_main.lo evas_convert_rgb_16.lo \
158 - evas_convert_rgb_24.lo evas_convert_rgb_32.lo \
159 - evas_convert_rgb_8.lo evas_convert_yuv.lo evas_cpu.lo \
160 - evas_draw_main.lo evas_font_draw.lo evas_font_load.lo \
161 - evas_font_main.lo evas_font_query.lo evas_gradient_main.lo \
162 + evas_convert_color.lo evas_convert_colorspace.lo \
163 + evas_convert_gry_1.lo evas_convert_gry_4.lo \
164 + evas_convert_gry_8.lo evas_convert_main.lo \
165 + evas_convert_rgb_16.lo evas_convert_rgb_24.lo \
166 + evas_convert_rgb_32.lo evas_convert_rgb_8.lo \
167 + evas_convert_yuv.lo evas_cpu.lo evas_draw_main.lo \
168 + evas_font_draw.lo evas_font_load.lo evas_font_main.lo \
169 + evas_font_query.lo evas_gradient_main.lo \
170 evas_gradient_linear.lo evas_gradient_radial.lo \
171 evas_gradient_angular.lo evas_gradient_rectangular.lo \
172 evas_gradient_sinusoidal.lo evas_image_load.lo \
173 @@ -286,6 +287,7 @@ evas_op_mul_main_.c \
176 evas_convert_color.c \
177 +evas_convert_colorspace.c \
178 evas_convert_gry_1.c \
179 evas_convert_gry_4.c \
180 evas_convert_gry_8.c \
181 @@ -390,6 +392,7 @@ distclean-compile:
182 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_blend_main.Plo@am__quote@
183 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_blit_main.Plo@am__quote@
184 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_color.Plo@am__quote@
185 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_colorspace.Plo@am__quote@
186 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_1.Plo@am__quote@
187 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_4.Plo@am__quote@
188 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_8.Plo@am__quote@
189 diff -upNr evas/src/lib/engines/common/evas_convert_colorspace.c /tmp/evas/src/lib/engines/common/evas_convert_colorspace.c
190 --- evas/src/lib/engines/common/evas_convert_colorspace.c 1969-12-31 21:00:00.000000000 -0300
191 +++ /tmp/evas/src/lib/engines/common/evas_convert_colorspace.c 2008-02-18 17:41:49.000000000 -0200
193 +#include "evas_common.h"
195 +#define CONVERT_RGB_565_TO_RGB_888(s) \
196 + (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \
197 + ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \
198 + ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
200 +#define CONVERT_A5P_TO_A8(s) \
201 + ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7))
203 +static inline void *
204 +evas_common_convert_argb8888_to_rgb565_a5p(void *data, int w, int h, int stride, Evas_Bool has_alpha)
208 +static inline void *
209 +evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Evas_Bool has_alpha)
216 + end = src + (stride * h);
217 + ret = malloc(w * h * sizeof(DATA32));
225 + for (; src < end; src++, alpha++, dst++)
226 + *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) |
227 + CONVERT_RGB_565_TO_RGB_888(*src);
231 + for (; src < end; src++, dst++)
232 + *dst = CONVERT_RGB_565_TO_RGB_888(*src);
238 +evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
242 + case EVAS_COLORSPACE_RGB565_A5P:
243 + return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha);
251 +evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
255 + case EVAS_COLORSPACE_ARGB8888:
256 + return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha);
263 diff -upNr evas/src/lib/include/evas_common.h /tmp/evas/src/lib/include/evas_common.h
264 --- evas/src/lib/include/evas_common.h 2008-02-18 17:42:01.000000000 -0200
265 +++ /tmp/evas/src/lib/include/evas_common.h 2008-02-18 17:41:49.000000000 -0200
266 @@ -999,6 +999,9 @@ EAPI void evas_common_convert_color_rgb_
267 EAPI void evas_common_convert_color_hsv_to_rgb_int (int h, int s, int v, int *r, int *g, int *b);
268 EAPI void evas_common_convert_color_rgb_to_hsv_int (int r, int g, int b, int *h, int *s, int *v);
270 +EAPI void *evas_common_convert_argb8888_to (void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace);
271 +EAPI void *evas_common_convert_rgb565_a5p_to (void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace);
274 EAPI void evas_common_scale_init (void);