parent
384892d7fa
commit
7b88f0d723
|
@ -6,7 +6,7 @@
|
||||||
#include "evas_common.h"
|
#include "evas_common.h"
|
||||||
#include "evas_private.h"
|
#include "evas_private.h"
|
||||||
|
|
||||||
#include "assert.h"
|
#include <assert.h>
|
||||||
|
|
||||||
#ifdef BUILD_NEON
|
#ifdef BUILD_NEON
|
||||||
# define BUILD_NEON0 1
|
# define BUILD_NEON0 1
|
||||||
|
@ -70,8 +70,6 @@ static Eina_Bool greyscale_filter(Evas_Filter_Info*, RGBA_Image*, RGBA_Image*);
|
||||||
static Eina_Bool brightness_filter(Evas_Filter_Info*, RGBA_Image*, RGBA_Image*);
|
static Eina_Bool brightness_filter(Evas_Filter_Info*, RGBA_Image*, RGBA_Image*);
|
||||||
static Eina_Bool contrast_filter(Evas_Filter_Info *, RGBA_Image*, RGBA_Image*);
|
static Eina_Bool contrast_filter(Evas_Filter_Info *, RGBA_Image*, RGBA_Image*);
|
||||||
|
|
||||||
static Eina_Bool negation_filter_neon(Evas_Filter_Info *, RGBA_Image *src, RGBA_Image *);
|
|
||||||
|
|
||||||
struct filterinfo filterinfo[] =
|
struct filterinfo filterinfo[] =
|
||||||
{
|
{
|
||||||
/* None */
|
/* None */
|
||||||
|
@ -110,11 +108,13 @@ static struct fieldinfo greyfields[] =
|
||||||
{ "all", TYPE_FLOAT, offsetof(Evas_Filter_Info_GreyScale, b) },
|
{ "all", TYPE_FLOAT, offsetof(Evas_Filter_Info_GreyScale, b) },
|
||||||
{ NULL, 0, 0 },
|
{ NULL, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct fieldinfo brightnessfields[] =
|
static struct fieldinfo brightnessfields[] =
|
||||||
{
|
{
|
||||||
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Brightness, adjust) },
|
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Brightness, adjust) },
|
||||||
{ NULL, 0, 0 },
|
{ NULL, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct fieldinfo contrastfields[] =
|
static struct fieldinfo contrastfields[] =
|
||||||
{
|
{
|
||||||
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Contrast, adjust) },
|
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Contrast, adjust) },
|
||||||
|
@ -139,8 +139,9 @@ evas_object_filter_mode_set(Evas_Object *o, Evas_Filter_Mode mode)
|
||||||
{
|
{
|
||||||
Evas_Filter_Info *info;
|
Evas_Filter_Info *info;
|
||||||
|
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o) return EINA_FALSE; /* nash: do Magic check */
|
return EINA_FALSE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
if (mode != EVAS_FILTER_MODE_OBJECT && mode != EVAS_FILTER_MODE_BELOW)
|
if (mode != EVAS_FILTER_MODE_OBJECT && mode != EVAS_FILTER_MODE_BELOW)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
@ -161,8 +162,10 @@ evas_object_filter_mode_set(Evas_Object *o, Evas_Filter_Mode mode)
|
||||||
EAPI Evas_Filter_Mode
|
EAPI Evas_Filter_Mode
|
||||||
evas_object_filter_mode_get(Evas_Object *o)
|
evas_object_filter_mode_get(Evas_Object *o)
|
||||||
{
|
{
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o) return EVAS_FILTER_MODE_OBJECT; /* nash magic */
|
return EVAS_FILTER_MODE_OBJECT;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
if (!o->filter) filter_alloc(o);
|
if (!o->filter) filter_alloc(o);
|
||||||
if (!o->filter) return EVAS_FILTER_MODE_OBJECT;
|
if (!o->filter) return EVAS_FILTER_MODE_OBJECT;
|
||||||
return o->filter->mode;
|
return o->filter->mode;
|
||||||
|
@ -174,8 +177,9 @@ evas_object_filter_set(Evas_Object *o, Evas_Filter filter)
|
||||||
Evas_Filter_Info *info;
|
Evas_Filter_Info *info;
|
||||||
struct filterinfo *finfo;
|
struct filterinfo *finfo;
|
||||||
|
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o) return EINA_FALSE; /* nash: magic */
|
return EINA_FALSE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
/* force filter to be signed: else gcc complains, but enums may always be
|
/* force filter to be signed: else gcc complains, but enums may always be
|
||||||
* signed */
|
* signed */
|
||||||
|
@ -213,8 +217,11 @@ evas_object_filter_set(Evas_Object *o, Evas_Filter filter)
|
||||||
EAPI Evas_Filter
|
EAPI Evas_Filter
|
||||||
evas_object_filter_get(Evas_Object *o)
|
evas_object_filter_get(Evas_Object *o)
|
||||||
{
|
{
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o || !o->filter) return EVAS_FILTER_NONE;
|
return EVAS_FILTER_NONE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
|
if (!o->filter) return EVAS_FILTER_NONE;
|
||||||
return o->filter->filter;
|
return o->filter->filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,14 +233,15 @@ evas_object_filter_param_set_int(Evas_Object *o, const char *param, int val)
|
||||||
Eina_Bool found;
|
Eina_Bool found;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
|
if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
|
||||||
|
|
||||||
fields = filterfields[o->filter->filter];
|
fields = filterfields[o->filter->filter];
|
||||||
data = o->filter->data;
|
data = o->filter->data;
|
||||||
|
found = EINA_FALSE;
|
||||||
found = EINA_FALSE;
|
|
||||||
|
|
||||||
for (i = 0; fields[i].field; i++)
|
for (i = 0; fields[i].field; i++)
|
||||||
{
|
{
|
||||||
if (!strcmp(fields[i].field, param))
|
if (!strcmp(fields[i].field, param))
|
||||||
|
@ -256,8 +264,11 @@ evas_object_filter_param_get_int(Evas_Object *o, const char *param)
|
||||||
int val;
|
int val;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o || !o->filter || !o->filter->data) return -1;
|
return EINA_FALSE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
|
if ((!o->filter) || (!o->filter->data)) return -1;
|
||||||
|
|
||||||
fields = blurfields;
|
fields = blurfields;
|
||||||
data = o->filter->data;
|
data = o->filter->data;
|
||||||
|
@ -271,7 +282,6 @@ evas_object_filter_param_get_int(Evas_Object *o, const char *param)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,8 +310,11 @@ evas_object_filter_param_set_float(Evas_Object *o, const char *param,
|
||||||
int i;
|
int i;
|
||||||
Eina_Bool rv;
|
Eina_Bool rv;
|
||||||
|
|
||||||
// FIXME: do real magic check
|
MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
|
||||||
if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
|
if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
|
||||||
|
|
||||||
rv = EINA_FALSE;
|
rv = EINA_FALSE;
|
||||||
fields = blurfields;
|
fields = blurfields;
|
||||||
|
@ -386,7 +399,8 @@ evas_filter_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
blur_size_get(Evas_Filter_Info *info, int inw, int inh, int *outw, int *outh, Eina_Bool inv)
|
blur_size_get(Evas_Filter_Info *info, int inw, int inh, int *outw, int *outh,
|
||||||
|
Eina_Bool inv)
|
||||||
{
|
{
|
||||||
Evas_Filter_Info_Blur *blur = info->data;
|
Evas_Filter_Info_Blur *blur = info->data;
|
||||||
|
|
||||||
|
@ -421,7 +435,7 @@ gaussian_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
|
||||||
struct Evas_Filter_Info_Blur *blur;
|
struct Evas_Filter_Info_Blur *blur;
|
||||||
uint8_t *key;
|
uint8_t *key;
|
||||||
|
|
||||||
if (!info || !info->data) return NULL;
|
if ((!info) || (!info->data)) return NULL;
|
||||||
blur = info->data;
|
blur = info->data;
|
||||||
|
|
||||||
if (lenp) *lenp = 4;
|
if (lenp) *lenp = 4;
|
||||||
|
@ -450,6 +464,7 @@ filter_alloc(Evas_Object *o)
|
||||||
Evas_Filter_Info *info;
|
Evas_Filter_Info *info;
|
||||||
if (!o) return NULL;
|
if (!o) return NULL;
|
||||||
|
|
||||||
|
// FIXME: handle alloc failure
|
||||||
info = calloc(1,sizeof(struct Evas_Filter_Info));
|
info = calloc(1,sizeof(struct Evas_Filter_Info));
|
||||||
info->dirty = 1;
|
info->dirty = 1;
|
||||||
info->filter = EVAS_FILTER_NONE;
|
info->filter = EVAS_FILTER_NONE;
|
||||||
|
@ -482,18 +497,18 @@ filter_alloc(Evas_Object *o)
|
||||||
|
|
||||||
typedef int (*FilterH)(int, uint32_t *, int, uint32_t *);
|
typedef int (*FilterH)(int, uint32_t *, int, uint32_t *);
|
||||||
typedef int (*FilterV)(int, uint32_t *, int, int, uint32_t *);
|
typedef int (*FilterV)(int, uint32_t *, int, int, uint32_t *);
|
||||||
int gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out);
|
|
||||||
int gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out);
|
|
||||||
int gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out);
|
|
||||||
int gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
|
||||||
int gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
|
||||||
int gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
|
||||||
const uint32_t *gaussian_row_get(int row, int *npoints, uint32_t *weight);
|
|
||||||
const uint64_t *gaussian_row_get64(int row, int *npoints, uint64_t *weight);
|
|
||||||
const double *gaussian_row_getd(int row, int *npoints, double *weight);
|
|
||||||
|
|
||||||
// FIXME: why not static?
|
static int gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out);
|
||||||
Eina_Bool
|
static int gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out);
|
||||||
|
static int gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out);
|
||||||
|
static int gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
||||||
|
static int gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
||||||
|
static int gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out);
|
||||||
|
static const uint32_t *gaussian_row_get(int row, int *npoints, uint32_t *weight);
|
||||||
|
static const uint64_t *gaussian_row_get64(int row, int *npoints, uint64_t *weight);
|
||||||
|
static const double *gaussian_row_getd(int row, int *npoints, double *weight);
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
gaussian_filter(Evas_Filter_Info *filter, RGBA_Image *src, RGBA_Image *dst)
|
gaussian_filter(Evas_Filter_Info *filter, RGBA_Image *src, RGBA_Image *dst)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -544,8 +559,7 @@ gaussian_filter(Evas_Filter_Info *filter, RGBA_Image *src, RGBA_Image *dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blur only horizontally */
|
/* Blur only horizontally */
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
|
gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
{
|
{
|
||||||
const uint32_t *points;
|
const uint32_t *points;
|
||||||
|
@ -577,8 +591,7 @@ gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blur only horizontally */
|
/* Blur only horizontally */
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
|
gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
{
|
{
|
||||||
const double *points;
|
const double *points;
|
||||||
|
@ -611,8 +624,7 @@ gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
|
|
||||||
|
|
||||||
/* Blur only horizontally */
|
/* Blur only horizontally */
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
|
gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
{
|
{
|
||||||
const uint64_t *points;
|
const uint64_t *points;
|
||||||
|
@ -641,8 +653,7 @@ gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
{
|
{
|
||||||
const uint32_t *points;
|
const uint32_t *points;
|
||||||
|
@ -676,8 +687,7 @@ gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
{
|
{
|
||||||
const uint64_t *points;
|
const uint64_t *points;
|
||||||
|
@ -711,8 +721,7 @@ gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static int
|
||||||
int
|
|
||||||
gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
{
|
{
|
||||||
const double *points;
|
const double *points;
|
||||||
|
@ -746,8 +755,7 @@ gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static const uint32_t *
|
||||||
const uint32_t *
|
|
||||||
gaussian_row_get(int row, int *npoints, uint32_t *weight)
|
gaussian_row_get(int row, int *npoints, uint32_t *weight)
|
||||||
{
|
{
|
||||||
static uint32_t *points = NULL;
|
static uint32_t *points = NULL;
|
||||||
|
@ -786,8 +794,7 @@ gaussian_row_get(int row, int *npoints, uint32_t *weight)
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static const uint64_t *
|
||||||
const uint64_t *
|
|
||||||
gaussian_row_get64(int row, int *npoints, uint64_t *weight)
|
gaussian_row_get64(int row, int *npoints, uint64_t *weight)
|
||||||
{
|
{
|
||||||
static uint64_t *points = NULL;
|
static uint64_t *points = NULL;
|
||||||
|
@ -827,8 +834,7 @@ gaussian_row_get64(int row, int *npoints, uint64_t *weight)
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: why not static?
|
static const double *
|
||||||
const double *
|
|
||||||
gaussian_row_getd(int row, int *npoints, double *weight)
|
gaussian_row_getd(int row, int *npoints, double *weight)
|
||||||
{
|
{
|
||||||
static double *points = NULL;
|
static double *points = NULL;
|
||||||
|
@ -869,58 +875,10 @@ gaussian_row_getd(int row, int *npoints, double *weight)
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
#if BUILD_NEON0
|
||||||
negation_filter(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
|
|
||||||
{
|
|
||||||
uint32_t *in, *out;
|
|
||||||
int i,j;
|
|
||||||
int w,h;
|
|
||||||
uint32_t mask,a;
|
|
||||||
|
|
||||||
// FIXME: dont call if img has alpha
|
|
||||||
if (BUILD_NEON0 && evas_common_cpu_has_feature(CPU_FEATURE_NEON))
|
|
||||||
return negation_filter_neon(info, src, dst);
|
|
||||||
|
|
||||||
in = src->image.data;
|
|
||||||
out = dst->image.data;
|
|
||||||
w = src->cache_entry.w;
|
|
||||||
h = src->cache_entry.h;
|
|
||||||
|
|
||||||
if (src->cache_entry.flags.alpha)
|
|
||||||
{
|
|
||||||
for (i = 0; i < h; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < w; j++)
|
|
||||||
{
|
|
||||||
a = (*in >> 24) & 0xff;
|
|
||||||
mask = a | (a << 8) | (a << 16);
|
|
||||||
// FIXME: use *out = ARGB_JOIN(a, r, g, b);
|
|
||||||
*out = (mask - (*in & 0xffffff)) | (a << 24);
|
|
||||||
out++;
|
|
||||||
in++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < h; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < w; j++)
|
|
||||||
{
|
|
||||||
// FIXME: use *out = ARGB_JOIN(a, r, g, b);
|
|
||||||
*out = ~(*in & ~0xff000000) | ((*in) & 0xff000000);
|
|
||||||
out++;
|
|
||||||
in++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
|
negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
|
||||||
{
|
{
|
||||||
#if BUILD_NEON0
|
|
||||||
uint32_t tmp;
|
uint32_t tmp;
|
||||||
|
|
||||||
if (src->cache_entry.flags.alpha)
|
if (src->cache_entry.flags.alpha)
|
||||||
|
@ -971,9 +929,59 @@ negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
|
||||||
);
|
);
|
||||||
#undef AP
|
#undef AP
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
info = NULL; src = NULL; dst = NULL;
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
negation_filter(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
|
||||||
|
{
|
||||||
|
uint32_t *in, *out;
|
||||||
|
int i,j;
|
||||||
|
int w,h;
|
||||||
|
uint32_t mask,a;
|
||||||
|
|
||||||
|
#if BUILD_NEON0
|
||||||
|
if (evas_common_cpu_has_feature(CPU_FEATURE_NEON) &&
|
||||||
|
(!src->cache_entry.flags.alpha))
|
||||||
|
return negation_filter_neon(info, src, dst);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
in = src->image.data;
|
||||||
|
out = dst->image.data;
|
||||||
|
w = src->cache_entry.w;
|
||||||
|
h = src->cache_entry.h;
|
||||||
|
|
||||||
|
if (src->cache_entry.flags.alpha)
|
||||||
|
{
|
||||||
|
for (i = 0; i < h; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < w; j++)
|
||||||
|
{
|
||||||
|
a = (*in >> 24) & 0xff;
|
||||||
|
mask = a | (a << 8) | (a << 16);
|
||||||
|
// FIXME: use *out = ARGB_JOIN(a, r, g, b);
|
||||||
|
*out = (mask - (*in & 0xffffff)) | (a << 24);
|
||||||
|
out++;
|
||||||
|
in++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < h; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < w; j++)
|
||||||
|
{
|
||||||
|
// FIXME: use *out = ARGB_JOIN(a, r, g, b);
|
||||||
|
*out = ~(*in & ~0xff000000) | ((*in) & 0xff000000);
|
||||||
|
out++;
|
||||||
|
in++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
info = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
|
Loading…
Reference in New Issue