Really fixed python-setuptools dependency info
[maemo-efl] / trunk / evas / debian / patches / 02_evas_colorspace_convert.diff
1 diff -upNr evas/src/lib/Evas.h evas.new/src/lib/Evas.h
2 --- evas/src/lib/Evas.h 2008-05-07 15:06:26.000000000 -0300
3 +++ evas.new/src/lib/Evas.h     2008-05-07 15:07:35.000000000 -0300
4 @@ -532,6 +532,7 @@ extern "C" {
5     EAPI int               evas_object_image_stride_get      (const Evas_Object *obj);
6     EAPI int               evas_object_image_load_error_get  (const Evas_Object *obj);
7     EAPI void              evas_object_image_data_set        (Evas_Object *obj, void *data);
8 +   EAPI void             *evas_object_image_data_convert    (Evas_Object *obj, Evas_Colorspace to_cspace);
9     EAPI void             *evas_object_image_data_get        (const Evas_Object *obj, Evas_Bool for_writing);
10     EAPI void              evas_object_image_data_copy_set   (Evas_Object *obj, void *data);
11     EAPI void              evas_object_image_data_update_add (Evas_Object *obj, int x, int y, int w, int h);
12 diff -upNr evas/src/lib/canvas/evas_object_image.c evas.new/src/lib/canvas/evas_object_image.c
13 --- evas/src/lib/canvas/evas_object_image.c     2008-05-07 15:06:26.000000000 -0300
14 +++ evas.new/src/lib/canvas/evas_object_image.c 2008-05-07 15:07:35.000000000 -0300
15 @@ -67,6 +67,8 @@ static int evas_object_image_is_opaque(E
16  static int evas_object_image_was_opaque(Evas_Object *obj);
17  static int evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
18  
19 +static void *evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace);
20 +
21  static const Evas_Object_Func object_func =
22  {
23     /* methods (compulsory) */
24 @@ -706,6 +708,46 @@ evas_object_image_load_error_get(const E
25   */
26  
27  /**
28 + * Converts the raw image data of the given image object to the
29 + * specified colorspace.
30 + *
31 + * Note that this function does not modify the raw image data.
32 + * If the requested colorspace is the same as the image colorspace
33 + * nothing is done and NULL is returned. You should use
34 + * evas_object_image_colorspace_get() to check the current image
35 + * colorspace.
36 + *
37 + * See @ref evas_object_image_colorspace_get.
38 + *
39 + * @param obj The given image object.
40 + * @param to_cspace The colorspace to which the image raw data will be converted.
41 + * @return data A newly allocated data in the format specified by to_cspace.
42 + * @ingroup Evas_Object_Image_Data
43 + */
44 +EAPI void *
45 +evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace)
46 +{
47 +   Evas_Object_Image *o;
48 +   DATA32 *data;
49 +
50 +   MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
51 +   return NULL;
52 +   MAGIC_CHECK_END();
53 +   o = (Evas_Object_Image *)(obj->object_data);
54 +   MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
55 +   return NULL;
56 +   MAGIC_CHECK_END();
57 +   if (!o->engine_data) return NULL;
58 +   if (!o->cur.cspace == to_cspace) return NULL;
59 +   data = NULL;
60 +   o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output,
61 +                                                                 o->engine_data,
62 +                                                                 0,
63 +                                                                 &data);
64 +   return evas_object_image_data_convert_internal(o, data, to_cspace);
65 +}
66 +
67 +/**
68   * Sets the raw image data of the given image object.
69   *
70   * Note that the raw data must be of the same size and colorspace
71 @@ -1127,7 +1169,19 @@ evas_object_image_save(const Evas_Object
72                                              EVAS_COLORSPACE_ARGB8888);
73     if (im)
74       {
75 -        ok = evas_common_save_image_to_file(im, file, key, quality, compress);
76 +       if (o->cur.cspace == EVAS_COLORSPACE_ARGB8888)
77 +         im->image.data = data;
78 +       else
79 +         im->image.data = evas_object_image_data_convert_internal(o,
80 +                                                                  data,
81 +                                                                  EVAS_COLORSPACE_ARGB8888);
82 +       if (im->image.data)
83 +         {
84 +            ok = evas_common_save_image_to_file(im, file, key, quality, compress);
85 +
86 +            if (o->cur.cspace != EVAS_COLORSPACE_ARGB8888)
87 +              free(im->image.data);
88 +         }
89  
90         evas_cache_image_drop(&im->cache_entry);
91       }
92 @@ -2373,3 +2427,36 @@ evas_object_image_is_inside(Evas_Object 
93  
94     return (a != 0);
95  }
96 +
97 +static void *
98 +evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_Colorspace to_cspace)
99 +{
100 +   void *out = NULL;
101 +
102 +   if (!data)
103 +     return NULL;
104 +
105 +   switch (o->cur.cspace)
106 +     {
107 +       case EVAS_COLORSPACE_ARGB8888:
108 +         out = evas_common_convert_argb8888_to(data,
109 +                                               o->cur.image.w,
110 +                                               o->cur.image.h,
111 +                                               o->cur.image.stride,
112 +                                               o->cur.has_alpha,
113 +                                               to_cspace);
114 +         break;
115 +       case EVAS_COLORSPACE_RGB565_A5P:
116 +         out = evas_common_convert_rgb565_a5p_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 +       default:
124 +         break;
125 +     }
126 +
127 +   return out;
128 +}
129 diff -upNr evas/src/lib/engines/common/Makefile.am evas.new/src/lib/engines/common/Makefile.am
130 --- evas/src/lib/engines/common/Makefile.am     2008-05-07 15:06:27.000000000 -0300
131 +++ evas.new/src/lib/engines/common/Makefile.am 2008-05-07 15:07:35.000000000 -0300
132 @@ -24,6 +24,7 @@ evas_op_mul_main_.c \
133  evas_blend_main.c \
134  evas_blit_main.c \
135  evas_convert_color.c \
136 +evas_convert_colorspace.c \
137  evas_convert_gry_1.c \
138  evas_convert_gry_4.c \
139  evas_convert_gry_8.c \
140 diff -upNr evas/src/lib/engines/common/Makefile.in evas.new/src/lib/engines/common/Makefile.in
141 --- evas/src/lib/engines/common/Makefile.in     2008-05-07 15:08:04.000000000 -0300
142 +++ evas.new/src/lib/engines/common/Makefile.in 2008-05-07 15:08:32.000000000 -0300
143 @@ -48,13 +48,14 @@ am_libevas_engine_common_la_OBJECTS = ev
144         evas_op_blend_main_.lo evas_op_add_main_.lo \
145         evas_op_sub_main_.lo evas_op_mask_main_.lo \
146         evas_op_mul_main_.lo evas_blend_main.lo evas_blit_main.lo \
147 -       evas_convert_color.lo evas_convert_gry_1.lo \
148 -       evas_convert_gry_4.lo evas_convert_gry_8.lo \
149 -       evas_convert_main.lo evas_convert_rgb_16.lo \
150 -       evas_convert_rgb_24.lo evas_convert_rgb_32.lo \
151 -       evas_convert_rgb_8.lo evas_convert_yuv.lo evas_cpu.lo \
152 -       evas_draw_main.lo evas_font_draw.lo evas_font_load.lo \
153 -       evas_font_main.lo evas_font_query.lo evas_gradient_main.lo \
154 +       evas_convert_color.lo evas_convert_colorspace.lo \
155 +       evas_convert_gry_1.lo evas_convert_gry_4.lo \
156 +       evas_convert_gry_8.lo evas_convert_main.lo \
157 +       evas_convert_rgb_16.lo evas_convert_rgb_24.lo \
158 +       evas_convert_rgb_32.lo evas_convert_rgb_8.lo \
159 +       evas_convert_yuv.lo evas_cpu.lo evas_draw_main.lo \
160 +       evas_font_draw.lo evas_font_load.lo evas_font_main.lo \
161 +       evas_font_query.lo evas_gradient_main.lo \
162         evas_gradient_linear.lo evas_gradient_radial.lo \
163         evas_gradient_angular.lo evas_gradient_rectangular.lo \
164         evas_gradient_sinusoidal.lo evas_image_load.lo \
165 @@ -293,6 +294,7 @@ evas_op_mul_main_.c \
166  evas_blend_main.c \
167  evas_blit_main.c \
168  evas_convert_color.c \
169 +evas_convert_colorspace.c \
170  evas_convert_gry_1.c \
171  evas_convert_gry_4.c \
172  evas_convert_gry_8.c \
173 @@ -397,6 +399,7 @@ distclean-compile:
174  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_blend_main.Plo@am__quote@
175  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_blit_main.Plo@am__quote@
176  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_color.Plo@am__quote@
177 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_colorspace.Plo@am__quote@
178  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_1.Plo@am__quote@
179  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_4.Plo@am__quote@
180  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_convert_gry_8.Plo@am__quote@
181 diff -upNr evas/src/lib/engines/common/evas_convert_colorspace.c evas.new/src/lib/engines/common/evas_convert_colorspace.c
182 --- evas/src/lib/engines/common/evas_convert_colorspace.c       1969-12-31 21:00:00.000000000 -0300
183 +++ evas.new/src/lib/engines/common/evas_convert_colorspace.c   2008-05-07 15:07:35.000000000 -0300
184 @@ -0,0 +1,69 @@
185 +#include "evas_common.h"
186 +
187 +#define CONVERT_RGB_565_TO_RGB_888(s) \
188 +       (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \
189 +        ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \
190 +        ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
191 +
192 +#define CONVERT_A5P_TO_A8(s) \
193 +       ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7))
194 +
195 +static inline void *
196 +evas_common_convert_argb8888_to_rgb565_a5p(void *data, int w, int h, int stride, Evas_Bool has_alpha)
197 +{
198 +}
199 +
200 +static inline void *
201 +evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Evas_Bool has_alpha)
202 +{
203 +   DATA16 *src, *end;
204 +   DATA32 *ret, *dst;
205 +   int r, g, b;
206 +
207 +   src = data;
208 +   end = src + (stride * h);
209 +   ret = malloc(w * h * sizeof(DATA32));
210 +
211 +   dst = ret;
212 +   if (has_alpha)
213 +     {
214 +       DATA8 *alpha;
215 +
216 +       alpha = end;
217 +       for (; src < end; src++, alpha++, dst++)
218 +         *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) |
219 +                 CONVERT_RGB_565_TO_RGB_888(*src);
220 +     }
221 +   else
222 +     {
223 +       for (; src < end; src++, dst++)
224 +         *dst = CONVERT_RGB_565_TO_RGB_888(*src);
225 +     }
226 +   return ret;
227 +}
228 +
229 +EAPI void *
230 +evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
231 +{
232 +   switch (cspace)
233 +     {
234 +       case EVAS_COLORSPACE_RGB565_A5P:
235 +         return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha);
236 +       default:
237 +         break;
238 +     }
239 +   return NULL;
240 +}
241 +
242 +EAPI void *
243 +evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
244 +{
245 +   switch (cspace)
246 +     {
247 +       case EVAS_COLORSPACE_ARGB8888:
248 +         return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha);
249 +       default:
250 +         break;
251 +     }
252 +   return NULL;
253 +}
254 diff -upNr evas/src/lib/include/evas_common.h evas.new/src/lib/include/evas_common.h
255 --- evas/src/lib/include/evas_common.h  2008-05-07 15:06:27.000000000 -0300
256 +++ evas.new/src/lib/include/evas_common.h      2008-05-07 15:07:35.000000000 -0300
257 @@ -1039,6 +1039,9 @@ EAPI void evas_common_convert_color_rgb_
258  EAPI void evas_common_convert_color_hsv_to_rgb_int                 (int h, int s, int v, int *r, int *g, int *b);
259  EAPI void evas_common_convert_color_rgb_to_hsv_int                 (int r, int g, int b, int *h, int *s, int *v);
260  
261 +EAPI void *evas_common_convert_argb8888_to                         (void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace);
262 +EAPI void *evas_common_convert_rgb565_a5p_to                       (void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace);
263 +
264  /****/
265  EAPI void evas_common_scale_init                            (void);
266