#include "evas_common.h"
#include "evas_private.h"
-#include "assert.h"
+#include <assert.h>
#ifdef BUILD_NEON
# define BUILD_NEON0 1
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 negation_filter_neon(Evas_Filter_Info *, RGBA_Image *src, RGBA_Image *);
-
struct filterinfo filterinfo[] =
{
/* None */
{ "all", TYPE_FLOAT, offsetof(Evas_Filter_Info_GreyScale, b) },
{ NULL, 0, 0 },
};
+
static struct fieldinfo brightnessfields[] =
{
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Brightness, adjust) },
{ NULL, 0, 0 },
};
+
static struct fieldinfo contrastfields[] =
{
{ "adjust", TYPE_FLOAT, offsetof(Evas_Filter_Info_Contrast, adjust) },
{
Evas_Filter_Info *info;
- // FIXME: do real magic check
- if (!o) return EINA_FALSE; /* nash: do Magic check */
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EINA_FALSE;
+ MAGIC_CHECK_END();
if (mode != EVAS_FILTER_MODE_OBJECT && mode != EVAS_FILTER_MODE_BELOW)
return EINA_FALSE;
EAPI Evas_Filter_Mode
evas_object_filter_mode_get(Evas_Object *o)
{
- // FIXME: do real magic check
- if (!o) return EVAS_FILTER_MODE_OBJECT; /* nash magic */
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EVAS_FILTER_MODE_OBJECT;
+ MAGIC_CHECK_END();
+
if (!o->filter) filter_alloc(o);
if (!o->filter) return EVAS_FILTER_MODE_OBJECT;
return o->filter->mode;
Evas_Filter_Info *info;
struct filterinfo *finfo;
- // FIXME: do real magic check
- if (!o) return EINA_FALSE; /* nash: magic */
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EINA_FALSE;
+ MAGIC_CHECK_END();
/* force filter to be signed: else gcc complains, but enums may always be
* signed */
EAPI Evas_Filter
evas_object_filter_get(Evas_Object *o)
{
- // FIXME: do real magic check
- if (!o || !o->filter) return EVAS_FILTER_NONE;
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EVAS_FILTER_NONE;
+ MAGIC_CHECK_END();
+
+ if (!o->filter) return EVAS_FILTER_NONE;
return o->filter->filter;
}
Eina_Bool found;
int i;
- // FIXME: do real magic check
- if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EINA_FALSE;
+ MAGIC_CHECK_END();
+
+ if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
fields = filterfields[o->filter->filter];
data = o->filter->data;
-
- found = EINA_FALSE;
-
+ found = EINA_FALSE;
for (i = 0; fields[i].field; i++)
{
if (!strcmp(fields[i].field, param))
int val;
int i;
- // FIXME: do real magic check
- if (!o || !o->filter || !o->filter->data) return -1;
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EINA_FALSE;
+ MAGIC_CHECK_END();
+
+ if ((!o->filter) || (!o->filter->data)) return -1;
fields = blurfields;
data = o->filter->data;
return val;
}
}
-
return -1;
}
int i;
Eina_Bool rv;
- // FIXME: do real magic check
- if (!o || !o->filter || !o->filter->data) return EINA_FALSE;
+ MAGIC_CHECK(o, Evas_Object, MAGIC_OBJ);
+ return EINA_FALSE;
+ MAGIC_CHECK_END();
+
+ if ((!o->filter) || (!o->filter->data)) return EINA_FALSE;
rv = EINA_FALSE;
fields = blurfields;
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;
struct Evas_Filter_Info_Blur *blur;
uint8_t *key;
- if (!info || !info->data) return NULL;
+ if ((!info) || (!info->data)) return NULL;
blur = info->data;
if (lenp) *lenp = 4;
Evas_Filter_Info *info;
if (!o) return NULL;
+ // FIXME: handle alloc failure
info = calloc(1,sizeof(struct Evas_Filter_Info));
info->dirty = 1;
info->filter = EVAS_FILTER_NONE;
typedef int (*FilterH)(int, uint32_t *, 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?
-Eina_Bool
+
+static int gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out);
+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)
{
int i;
}
/* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
gaussian_filter_h(int rad, uint32_t *in, int w, uint32_t *out)
{
const uint32_t *points;
}
/* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
gaussian_filter_hd(int rad, uint32_t *in, int w, uint32_t *out)
{
const double *points;
/* Blur only horizontally */
-// FIXME: why not static?
-int
+static int
gaussian_filter_h64(int rad, uint32_t *in, int w, uint32_t *out)
{
const uint64_t *points;
return 0;
}
-// FIXME: why not static?
-int
+static int
gaussian_filter_v(int rad, uint32_t *in, int h, int skip, uint32_t *out)
{
const uint32_t *points;
return 0;
}
-// FIXME: why not static?
-int
+static int
gaussian_filter_v64(int rad, uint32_t *in, int h, int skip, uint32_t *out)
{
const uint64_t *points;
return 0;
}
-// FIXME: why not static?
-int
+static int
gaussian_filter_vd(int rad, uint32_t *in, int h, int skip, uint32_t *out)
{
const double *points;
return 0;
}
-// FIXME: why not static?
-const uint32_t *
+static const uint32_t *
gaussian_row_get(int row, int *npoints, uint32_t *weight)
{
static uint32_t *points = NULL;
return points;
}
-// FIXME: why not static?
-const uint64_t *
+static const uint64_t *
gaussian_row_get64(int row, int *npoints, uint64_t *weight)
{
static uint64_t *points = NULL;
return points;
}
-// FIXME: why not static?
-const double *
+static const double *
gaussian_row_getd(int row, int *npoints, double *weight)
{
static double *points = NULL;
return points;
}
-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;
-
- // 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;
-}
-
+#if BUILD_NEON0
static Eina_Bool
negation_filter_neon(Evas_Filter_Info *info, RGBA_Image *src, RGBA_Image *dst)
{
-#if BUILD_NEON0
uint32_t tmp;
if (src->cache_entry.flags.alpha)
);
#undef AP
}
+ return EINA_TRUE;
+}
+#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; src = NULL; dst = NULL;
+ info = NULL;
}
static Eina_Bool