Updated packages and dependencies info.
[maemo-efl] / trunk / evas / debian / patches / 02_evas_colorspace_convert.diff
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);
19  
20 +static void *evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace);
21 +
22  static const Evas_Object_Func object_func =
23  {
24     /* methods (compulsory) */
25 @@ -701,6 +703,46 @@ evas_object_image_load_error_get(const E
26  }
27  
28  /**
29 + * Converts the raw image data of the given image object to the
30 + * specified colorspace.
31 + *
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
36 + * colorspace.
37 + *
38 + * See @ref evas_object_image_colorspace_get.
39 + *
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
44 + */
45 +EAPI void *
46 +evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
47 +{
48 +   Evas_Object_Image *o;
49 +   DATA32 *data;
50 +
51 +   MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
52 +   return NULL;
53 +   MAGIC_CHECK_END();
54 +   o = (Evas_Object_Image *)(obj->object_data);
55 +   MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
56 +   return NULL;
57 +   MAGIC_CHECK_END();
58 +   if (!o->engine_data) return NULL;
59 +   if (!o->cur.cspace == to_cspace) return NULL;
60 +   data = NULL;
61 +   o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
62 +                                                                 o->engine_data,
63 +                                                                 0,
64 +                                                                 &data);
65 +   return evas_object_image_data_convert_internal(o, data, to_cspace);
66 +}
67 +
68 +/**
69   * @defgroup Evas_Object_Image_Data Image Object Image Data Functions
70   *
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
73       {
74         if (o->cur.has_alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
75  
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;
83 +       else
84 +         im->image->data = evas_object_image_data_convert_internal(o,
85 +                                                                   data,
86 +                                                                   EVAS_COLORSPACE_ARGB8888);
87 +       if (im->image->data)
88 +         {
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);
93 +
94 +            if (o->cur.cspace != EVAS_COLORSPACE_ARGB8888)
95 +              free(im->image->data);
96 +         }
97  
98         evas_cache_image_drop(im);
99       }
100 @@ -2376,3 +2429,36 @@ evas_object_image_is_inside(Evas_Object 
101  
102     return (a != 0);
103  }
104 +
105 +static void *
106 +evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace)
107 +{
108 +   void *out = NULL;
109 +
110 +   if (!data)
111 +     return NULL;
112 +
113 +   switch (o->cur.cspace)
114 +     {
115 +       case EVAS_COLORSPACE_ARGB8888:
116 +         out = evas_common_convert_argb8888_to(data,
117 +                                               o->cur.image.w,
118 +                                               o->cur.image.h,
119 +                                               o->cur.image.stride,
120 +                                               o->cur.has_alpha,
121 +                                               to_cspace);
122 +         break;
123 +       case EVAS_COLORSPACE_RGB565_A5P:
124 +         out = evas_common_convert_rgb565_a5p_to(data,
125 +                                                 o->cur.image.w,
126 +                                                 o->cur.image.h,
127 +                                                 o->cur.image.stride,
128 +                                                 o->cur.has_alpha,
129 +                                                 to_cspace);
130 +         break;
131 +       default:
132 +         break;
133 +     }
134 +
135 +   return out;
136 +}
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 \
141  evas_blend_main.c \
142  evas_blit_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 \
174  evas_blend_main.c \
175  evas_blit_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
192 @@ -0,0 +1,70 @@
193 +#include "evas_common.h"
194 +
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)))
199 +
200 +#define CONVERT_A5P_TO_A8(s) \
201 +       ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7))
202 +
203 +static inline void *
204 +evas_common_convert_argb8888_to_rgb565_a5p(void *data, int w, int h, int stride, Evas_Bool has_alpha)
205 +{
206 +}
207 +
208 +static inline void *
209 +evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Evas_Bool has_alpha)
210 +{
211 +   DATA16 *src, *end;
212 +   DATA32 *ret, *dst;
213 +   int r, g, b;
214 +
215 +   src = data;
216 +   end = src + (stride * h);
217 +   ret = malloc(w * h * sizeof(DATA32));
218 +
219 +   dst = ret;
220 +   if (has_alpha)
221 +     {
222 +       DATA8 *alpha;
223 +
224 +       alpha = end;
225 +       for (; src < end; src++, alpha++, dst++)
226 +         *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) |
227 +                 CONVERT_RGB_565_TO_RGB_888(*src);
228 +     }
229 +   else
230 +     {
231 +       for (; src < end; src++, dst++)
232 +         *dst = CONVERT_RGB_565_TO_RGB_888(*src);
233 +     }
234 +   return ret;
235 +}
236 +
237 +EAPI void *
238 +evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
239 +{
240 +   switch (cspace)
241 +     {
242 +       case EVAS_COLORSPACE_RGB565_A5P:
243 +         return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha);
244 +       default:
245 +         break;
246 +     }
247 +   return NULL;
248 +}
249 +
250 +EAPI void *
251 +evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
252 +{
253 +   switch (cspace)
254 +     {
255 +       case EVAS_COLORSPACE_ARGB8888:
256 +         return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha);
257 +       default:
258 +         break;
259 +     }
260 +   return NULL;
261 +}
262 +
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);
269  
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);
272 +
273  /****/
274  EAPI void evas_common_scale_init                            (void);
275