efl/legacy/evas/src/lib/include/evas_common.h

846 lines
39 KiB
C
Raw Normal View History

2002-11-08 00:02:15 -08:00
#ifndef EVAS_COMMON_H
#define EVAS_COMMON_H
#include "config.h"
/*****************************************************************************/
#include "evas_options.h"
#ifndef __i386__
# undef BUILD_MMX
# undef BUILD_SSE
# ifndef BUILD_C
# define BUILD_C
# endif
#endif
/*****************************************************************************/
#define MIN(_x, _y) \
(((_x) < (_y)) ? (_x) : (_y))
#define MAX(_x, _y) \
(((_x) > (_y)) ? (_x) : (_y))
#define POLY_EDGE_DEL(_i) \
{ \
int _j; \
\
for (_j = 0; (_j < num_active_edges) && (edges[_j].i != _i); _j++); \
if (_j < num_active_edges) \
{ \
num_active_edges--; \
memmove(&(edges[_j]), &(edges[_j + 1]), \
(num_active_edges - _j) * sizeof(RGBA_Edge)); \
} \
}
#define POLY_EDGE_ADD(_i, _y) \
{ \
int _j; \
double _dx; \
RGBA_Vertex *_p, *_q; \
if (_i < (n - 1)) _j = _i + 1; \
else _j = 0; \
if (point[_i].y < point[_j].y) \
{ \
_p = &(point[_i]); \
_q = &(point[_j]); \
} \
else \
{ \
_p = &(point[_j]); \
_q = &(point[_i]); \
} \
edges[num_active_edges].dx = _dx = (_q->x - _p->x) / (_q->y - _p->y); \
edges[num_active_edges].x = (_dx * ((double)_y + 0.5 - _p->y)) + _p->x; \
edges[num_active_edges].i = _i; \
num_active_edges++; \
}
#define INTERP_VAL(out, in1, in2, in3, in4, interp_x, interp_y) \
{ \
int _v, _vv; \
\
_v = (256 - (interp_x)) * (in1); \
if ((interp_x) > 0) _v += (interp_x) * (in2); \
_v *= (256 - (interp_y)); \
if ((interp_y) > 0) \
{ \
_vv = (256 - (interp_x)) * (in3); \
if ((interp_x) > 0) _vv += (interp_x) * (in4); \
_vv *= (interp_y); \
(out) = ((_v + _vv) >> 16); \
} \
else (out) = (_v >> 16); \
}
#define INTERP_2(in1, in2, interp, interp_inv) \
((in1 * interp_inv) + (in2 * interp)) >> 8
#define SWAP32(x) (x) = \
((((x) & 0x000000ff ) << 24) |\
(((x) & 0x0000ff00 ) << 8) |\
(((x) & 0x00ff0000 ) >> 8) |\
(((x) & 0xff000000 ) >> 24))
#define SWAP16(x) (x) = \
((((x) & 0x00ff ) << 8) |\
(((x) & 0xff00 ) >> 8))
#ifdef BUILD_SMALL_DITHER_MASK
# define DM_TABLE _evas_dither_44
2002-11-08 00:02:15 -08:00
# define DM_SIZE 4
# define DM_BITS 4
# define DM_DIV 16
# define USE_DITHER_44 1
# define DM_MSK (DM_SIZE - 1)
# define DM_SHF(_b) (DM_BITS - (8 - _b))
#else
# define DM_TABLE _evas_dither_128128
2002-11-08 00:02:15 -08:00
# define DM_SIZE 128
# define DM_BITS 6
# define DM_DIV 64
# define USE_DITHER_128128 1
# define DM_MSK (DM_SIZE - 1)
# define DM_SHF(_b) (DM_BITS - (8 - _b))
#endif
/*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32_WCE
#include <windows.h>
#endif
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
/*****************************************************************************/
#ifndef _WIN32_WCE
typedef unsigned long long DATA64;
#else
typedef unsigned __int64 DATA64;
#define strdup _strdup
#define snprintf _snprintf
#define rewind(f) fseek(f,0,SEEK_SET)
#endif
typedef unsigned int DATA32;
typedef unsigned short DATA16;
typedef unsigned char DATA8;
typedef struct _Evas_Object_List Evas_Object_List;
typedef struct _Evas_List Evas_List;
typedef struct _Evas_Hash Evas_Hash;
typedef struct _Evas_Hash_El Evas_Hash_El;
typedef struct _RGBA_Image RGBA_Image;
typedef struct _RGBA_Surface RGBA_Surface;
typedef struct _RGBA_Draw_Context RGBA_Draw_Context;
typedef struct _RGBA_Gradient RGBA_Gradient;
typedef struct _RGBA_Gradient_Color RGBA_Gradient_Color;
typedef struct _RGBA_Polygon_Point RGBA_Polygon_Point;
typedef struct _RGBA_Font RGBA_Font;
typedef struct _RGBA_Font_Glyph RGBA_Font_Glyph;
typedef struct _Cutout_Rect Cutout_Rect;
typedef struct _Convert_Pal Convert_Pal;
typedef struct _Tilebuf Tilebuf;
typedef struct _Tilebuf_Tile Tilebuf_Tile;
typedef struct _Tilebuf_Rect Tilebuf_Rect;
typedef void (*Gfx_Func_Blend_Src_Dst) (DATA32 *src, DATA32 *dst, int len);
typedef void (*Gfx_Func_Blend_Color_Dst) (DATA32 src, DATA32 *dst, int len);
typedef void (*Gfx_Func_Blend_Src_Cmod_Dst) (DATA32 *src, DATA32 *dst, int len, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
typedef void (*Gfx_Func_Blend_Src_Mul_Dst) (DATA32 *src, DATA32 *dst, int len, DATA32 mul_color);
typedef void (*Gfx_Func_Blend_Src_Alpha_Mul_Dst) (DATA8 *src, DATA32 *dst, int len, DATA32 col);
typedef void (*Gfx_Func_Convert) (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
/*****************************************************************************/
typedef enum _RGBA_Image_Flags
{
RGBA_IMAGE_NOTHING = (0),
RGBA_IMAGE_HAS_ALPHA = (1 << 0),
RGBA_IMAGE_IS_DIRTY = (1 << 1),
RGBA_IMAGE_INDEXED = (1 << 2)
} RGBA_Image_Flags;
typedef enum _Convert_Pal_Mode
{
PAL_MODE_NONE,
PAL_MODE_MONO,
PAL_MODE_GRAY4,
PAL_MODE_GRAY16,
PAL_MODE_GRAY64,
PAL_MODE_GRAY256,
PAL_MODE_RGB111,
PAL_MODE_RGB121,
PAL_MODE_RGB221,
PAL_MODE_RGB222,
PAL_MODE_RGB232,
PAL_MODE_RGB666,
PAL_MODE_RGB332,
PAL_MODE_LAST
} Convert_Pal_Mode;
/*****************************************************************************/
struct _Evas_Object_List
{
Evas_Object_List *next, *prev;
Evas_Object_List *last;
};
struct _Evas_List
{
void *data;
Evas_List *next, *prev;
Evas_List *last;
int count;
};
struct _Evas_Hash
{
int population;
Evas_Object_List *buckets[256];
};
struct _Evas_Hash_El
{
Evas_Object_List _list_data;
char *key;
void *data;
};
struct _RGBA_Draw_Context
{
struct {
int use : 1;
DATA8 r[256], g[256], b[256], a[256];
} mod;
struct {
int use : 1;
DATA32 col;
} mul;
struct {
DATA32 col;
} col;
struct {
int use : 1;
int x, y, w, h;
} clip;
struct {
Cutout_Rect *rects;
} cutout;
};
struct _RGBA_Surface
{
int w, h;
DATA32 *data;
int no_free : 1;
};
struct _RGBA_Image
{
Evas_Object_List _list_data;
RGBA_Surface *image;
RGBA_Image_Flags flags;
struct
{
int num;
RGBA_Surface **levels;
} mipmaps;
struct
{
int format;
char *file;
2003-01-09 18:05:37 -08:00
char *real_file;
2002-11-08 00:02:15 -08:00
char *key;
char *comment;
} info;
int references;
DATA64 timestamp;
void *extended_info;
};
struct _RGBA_Gradient_Color
{
Evas_Object_List _list_data;
int r, g, b, a;
int dist;
};
struct _RGBA_Gradient
{
Evas_Object_List *colors;
};
struct _RGBA_Polygon_Point
{
Evas_Object_List _list_data;
int x, y;
};
struct _RGBA_Font
{
Evas_Object_List _list_data;
char *name;
char *file;
int size;
struct {
FT_Face face;
} ft;
Evas_Hash *glyphs;
int usage;
int references;
};
struct _RGBA_Font_Glyph
{
FT_Glyph glyph;
FT_BitmapGlyph glyph_out;
};
struct _Tilebuf
{
int outbuf_w;
int outbuf_h;
struct {
int w, h;
} tile_size;
struct {
int w, h;
Tilebuf_Tile *tiles;
} tiles;
};
struct _Tilebuf_Tile
{
int redraw : 1;
/* FIXME: need these flags later - but not now */
/*
int done : 1;
int edge : 1;
int from : 1;
struct {
int dx, dy;
} vector;
*/
};
struct _Tilebuf_Rect
{
Evas_Object_List _list_data;
int x, y, w, h;
};
struct _Cutout_Rect
{
Evas_Object_List _list_data;
int x, y, w, h;
};
struct _Convert_Pal
{
int references;
int count;
Convert_Pal_Mode colors;
DATA8 *lookup;
void *data;
};
/*****************************************************************************/
#define CONVERT_LOOP_START_ROT_0() \
src_ptr = src; \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP_END_ROT_0() \
dst_ptr++; \
src_ptr++; \
} \
src_ptr += src_jump; \
dst_ptr += dst_jump; \
}
#define CONVERT_LOOP_START_ROT_270() \
src_ptr = src + ((w - 1) * (h + src_jump)); \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP_END_ROT_270() \
dst_ptr++; \
src_ptr -= (h + src_jump); \
} \
src_ptr = src + ((w - 1) * (h + src_jump)) + (y + 1); \
dst_ptr += dst_jump; \
}
#define CONVERT_LOOP_START_ROT_90() \
src_ptr = src + (h - 1); \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP_END_ROT_90() \
dst_ptr++; \
src_ptr += (h + src_jump); \
} \
src_ptr = src + (h - 1) - y - 1; \
dst_ptr += dst_jump; \
}
#define CONVERT_LOOP2_START_ROT_0() \
src_ptr = src; \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP2_INC_ROT_0() \
src_ptr++; \
x++;
#define CONVERT_LOOP2_END_ROT_0() \
dst_ptr+=2; \
src_ptr++; \
} \
src_ptr += src_jump; \
dst_ptr += dst_jump; \
}
#define CONVERT_LOOP2_START_ROT_270() \
src_ptr = src + ((w - 1) * (h + src_jump)); \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP2_INC_ROT_270() \
src_ptr -= (h + src_jump); \
x++;
#define CONVERT_LOOP2_END_ROT_270() \
dst_ptr+=2; \
src_ptr -= (h + src_jump); \
} \
src_ptr = src + ((w - 1) * (h + src_jump)) + (y + 1); \
dst_ptr += dst_jump; \
}
#define CONVERT_LOOP2_START_ROT_90() \
src_ptr = src + (h - 1); \
for (y = 0; y < h; y++) \
{ \
for (x = 0; x < w; x++) \
{
#define CONVERT_LOOP2_INC_ROT_90() \
src_ptr += (h + src_jump); \
x++;
#define CONVERT_LOOP2_END_ROT_90() \
dst_ptr+=2; \
src_ptr += (h + src_jump); \
} \
src_ptr = src + (h - 1) - y - 1; \
dst_ptr += dst_jump; \
}
#ifndef WORDS_BIGENDIAN
/* x86 */
#define A_VAL(p) ((DATA8 *)(p))[3]
#define R_VAL(p) ((DATA8 *)(p))[2]
#define G_VAL(p) ((DATA8 *)(p))[1]
#define B_VAL(p) ((DATA8 *)(p))[0]
#define AR_VAL(p) ((DATA16 *)(p)[1])
#define GB_VAL(p) ((DATA16 *)(p)[0])
#else
/* ppc */
#define A_VAL(p) ((DATA8 *)(p))[0]
#define R_VAL(p) ((DATA8 *)(p))[1]
#define G_VAL(p) ((DATA8 *)(p))[2]
#define B_VAL(p) ((DATA8 *)(p))[3]
#define AR_VAL(p) ((DATA16 *)(p)[0])
#define GB_VAL(p) ((DATA16 *)(p)[1])
#endif
#define BLEND_COLOR(a, nc, c, cc, tmp) \
{ \
(tmp) = ((c) - (cc)) * (a); \
(nc) = (cc) + (((tmp) + ((tmp) >> 8) + 0x80) >> 8); \
}
#define PIXEL_SOLID_ALPHA 0xff000000
#define SPANS_COMMON(x1, w1, x2, w2) \
(!((((x2) + (w2)) <= (x1)) || ((x2) >= ((x1) + (w1)))))
#define RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) \
((SPANS_COMMON((x), (w), (xx), (ww))) && (SPANS_COMMON((y), (h), (yy), (hh))))
#define RECTS_CLIP_TO_RECT(_x, _y, _w, _h, _cx, _cy, _cw, _ch) \
{ \
if (RECTS_INTERSECT(_x, _y, _w, _h, _cx, _cy, _cw, _ch)) \
{ \
if (_x < (_cx)) \
{ \
_w += _x - (_cx); \
_x = (_cx); \
if (_w < 0) _w = 0; \
} \
if ((_x + _w) > ((_cx) + (_cw))) \
_w = (_cx) + (_cw) - _x; \
if (_y < (_cy)) \
{ \
_h += _y - (_cy); \
_y = (_cy); \
if (_h < 0) _h = 0; \
} \
if ((_y + _h) > ((_cy) + (_ch))) \
_h = (_cy) + (_ch) - _y; \
} \
else \
{ \
_w = 0; _h = 0; \
} \
}
/*****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
Evas_List *evas_list_append (Evas_List *list, const void *data);
Evas_List *evas_list_prepend (Evas_List *list, const void *data);
Evas_List *evas_list_append_relative (Evas_List *list, const void *data, const void *relative);
Evas_List *evas_list_prepend_relative (Evas_List *list, const void *data, const void *relative);
Evas_List *evas_list_remove (Evas_List *list, const void *data);
2002-11-08 00:02:15 -08:00
Evas_List *evas_list_remove_list (Evas_List *list, Evas_List *remove_list);
void *evas_list_find (Evas_List *list, const void *data);
Evas_List *evas_list_find_list (Evas_List *list, const void *data);
2002-11-08 00:02:15 -08:00
Evas_List *evas_list_free (Evas_List *list);
Evas_List *evas_list_last (Evas_List *list);
2002-11-13 21:23:54 -08:00
Evas_List *evas_list_next (Evas_List *list);
Evas_List *evas_list_prev (Evas_List *list);
void *evas_list_data (Evas_List *list);
2002-11-08 00:02:15 -08:00
int evas_list_count (Evas_List *list);
void *evas_list_nth (Evas_List *list, int n);
2002-11-13 21:23:54 -08:00
Evas_List *evas_list_nth_list (Evas_List *list, int n);
2002-11-08 00:02:15 -08:00
Evas_List *evas_list_reverse (Evas_List *list);
2002-11-13 21:23:54 -08:00
int evas_list_alloc_error (void);
Evas_Hash *evas_hash_add (Evas_Hash *hash, const char *key, const void *data);
Evas_Hash *evas_hash_del (Evas_Hash *hash, const char *key, const void *data);
2002-11-08 00:02:15 -08:00
void *evas_hash_find (Evas_Hash *hash, const char *key);
int evas_hash_size (Evas_Hash *hash);
void evas_hash_free (Evas_Hash *hash);
void evas_hash_foreach (Evas_Hash *hash, int (*func) (Evas_Hash *hash, const char *key, void *data, void *fdata), const void *fdata);
2002-11-13 21:23:54 -08:00
int evas_hash_alloc_error (void);
2002-11-08 00:02:15 -08:00
void *evas_object_list_append (void *in_list, void *in_item);
void *evas_object_list_prepend (void *in_list, void *in_item);
void *evas_object_list_append_relative (void *in_list, void *in_item, void *in_relative);
void *evas_object_list_prepend_relative (void *in_list, void *in_item, void *in_relative);
void *evas_object_list_remove (void *in_list, void *in_item);
void *evas_object_list_find (void *in_list, void *in_item);
/****/
void evas_common_cpu_init (void);
2002-11-08 00:02:15 -08:00
int evas_common_cpu_have_cpuid (void);
void evas_common_cpu_can_do (int *mmx, int *sse, int *sse2);
void evas_common_cpu_end_opt (void);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_blend_init (void);
2002-11-08 00:02:15 -08:00
void evas_common_blend_pixels_rgba_to_rgb_c (DATA32 *src, DATA32 *dst, int len);
void evas_common_blend_pixels_rgba_to_rgb_mmx (DATA32 *src, DATA32 *dst, int len);
void evas_common_blend_pixels_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len);
2002-11-08 00:02:15 -08:00
void evas_common_copy_pixels_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rgba_to_rgba_mmx (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rgba_to_rgba_sse/*NB*/ (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rgb_to_rgba_c (DATA32 *src, DATA32 *dst, int len);
2002-11-08 00:02:15 -08:00
void evas_common_copy_pixels_rev_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rev_rgba_to_rgba_mmx (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rev_rgba_to_rgba_sse/*NB*/ (DATA32 *src, DATA32 *dst, int len);
void evas_common_copy_pixels_rev_rgb_to_rgba_c (DATA32 *src, DATA32 *dst, int len);
2002-11-08 00:02:15 -08:00
void evas_common_blend_color_rgba_to_rgb_c (DATA32 src, DATA32 *dst, int len);
void evas_common_blend_color_rgba_to_rgb_mmx (DATA32 src, DATA32 *dst, int len);
void evas_common_blend_color_rgba_to_rgba_c (DATA32 src, DATA32 *dst, int len);
2002-11-08 00:02:15 -08:00
void evas_common_copy_color_rgba_to_rgba_c (DATA32 src, DATA32 *dst, int len);
void evas_common_copy_color_rgba_to_rgba_mmx (DATA32 src, DATA32 *dst, int len);
void evas_common_copy_color_rgba_to_rgba_sse/*NB*/ (DATA32 src, DATA32 *dst, int len);
void evas_common_copy_color_rgb_to_rgba_c (DATA32 src, DATA32 *dst, int len);
2002-11-08 00:02:15 -08:00
void evas_common_blend_pixels_cmod_rgba_to_rgb_c (DATA32 *src, DATA32 *dst, int len, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
void evas_common_blend_pixels_cmod_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
2002-11-08 00:02:15 -08:00
void evas_common_copy_pixels_cmod_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
void evas_common_copy_pixels_cmod_rgb_to_rgba_c (DATA32 *src, DATA32 *dst, int len, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
2002-11-08 00:02:15 -08:00
void evas_common_blend_pixels_mul_color_rgba_to_rgb_c (DATA32 *src, DATA32 *dst, int len, DATA32 mul_color);
void evas_common_blend_pixels_mul_color_rgba_to_rgb_mmx (DATA32 *src, DATA32 *dst, int len, DATA32 mul_color);
void evas_common_blend_pixels_mul_color_rgba_to_rgba_c (DATA32 *src, DATA32 *dst, int len, DATA32 mul_color);
2002-11-08 00:02:15 -08:00
void evas_common_blend_alpha_color_rgba_to_rgb_c (DATA8 *src, DATA32 *dst, int len, DATA32 col);
void evas_common_blend_alpha_color_rgba_to_rgb_mmx (DATA8 *src, DATA32 *dst, int len, DATA32 col);
void evas_common_blend_alpha_color_rgba_to_rgba_c (DATA8 *src, DATA32 *dst, int len, DATA32 col);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_convert_init (void);
Gfx_Func_Convert evas_common_convert_func_get (DATA8 *dest, int w, int h, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation);
void evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_444_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_444_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_454645_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_454645_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_555_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_555_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_24bpp_rgb_888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_24bpp_bgr_888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgb_8888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgb_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgbx_8888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgbx_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_rgbx_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgr_8888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgr_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgr_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgrx_8888 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgrx_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_32bpp_bgrx_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_332_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_666_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_232_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_222_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_221_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_121_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_rgb_111_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_gry_256_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_gry_64_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_gry_16_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_gry_4_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_8bpp_gry_1_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_4bpp_gry_4_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_4bpp_gry_1_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
void evas_common_convert_rgba_to_1bpp_gry_1_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_scale_init (void);
void evas_common_scale_rgba_mipmap_down_2x2_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_mipmap_down_2x1_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_mipmap_down_1x2_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgb_mipmap_down_2x2_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgb_mipmap_down_2x1_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgb_mipmap_down_1x2_c (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_mipmap_down_2x2_mmx (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_mipmap_down_2x1_mmx (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_mipmap_down_1x2_mmx (DATA32 *src, DATA32 *dst, int src_w, int src_h);
void evas_common_scale_rgba_gen_mipmap_table (RGBA_Image *src);
void evas_common_scale_rgba_gen_mipmap_level (RGBA_Image *src, int l);
int evas_common_scale_rgba_get_mipmap_surfaces (RGBA_Image *src, int src_region_w, int src_region_h, int dst_region_w, int dst_region_h, RGBA_Surface **srf1, RGBA_Surface **srf2);
RGBA_Surface *evas_common_scale_rgba_get_mipmap_surface (RGBA_Image *src, int src_region_w, int src_region_h, int dst_region_w, int dst_region_h);
2002-11-08 00:02:15 -08:00
void evas_common_scale_rgba_in_to_out_clip_smooth_mmx (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
void evas_common_scale_rgba_in_to_out_clip_smooth_c (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
2002-11-08 00:02:15 -08:00
void evas_common_scale_rgba_in_to_out_clip_smooth (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
void evas_common_scale_rgba_in_to_out_clip_sample (RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_image_init (void);
2002-11-08 00:02:15 -08:00
RGBA_Surface *evas_common_image_surface_new (void);
void evas_common_image_surface_free (RGBA_Surface *is);
void evas_common_image_surface_alloc (RGBA_Surface *is);
void evas_common_image_surface_dealloc (RGBA_Surface *is);
2002-11-08 00:02:15 -08:00
RGBA_Image *evas_common_image_create (int w, int h);
RGBA_Image *evas_common_image_new (void);
void evas_common_image_free (RGBA_Image *im);
void evas_common_image_ref (RGBA_Image *im);
void evas_common_image_unref (RGBA_Image *im);
void evas_common_image_cache (RGBA_Image *im);
void evas_common_image_uncache (RGBA_Image *im);
void evas_common_image_flush_cache (void);
void evas_common_image_set_cache (int size);
int evas_common_image_get_cache (void);
void evas_common_image_store (RGBA_Image *im);
void evas_common_image_unstore (RGBA_Image *im);
RGBA_Image *evas_common_image_find (const char *filename, const char *key, DATA64 timestamp);
int evas_common_image_ram_usage (RGBA_Image *im);
void evas_common_image_dirty (RGBA_Image *im);
RGBA_Image *evas_common_load_image_from_file (const char *file, const char *key);
void evas_common_load_image_data_from_file(RGBA_Image *im);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_rectangle_init (void);
2002-11-08 00:02:15 -08:00
void evas_common_rectangle_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_gradient_init (void);
2002-11-08 00:02:15 -08:00
RGBA_Gradient *evas_common_gradient_new (void);
void evas_common_gradient_free (RGBA_Gradient *gr);
void evas_common_gradient_colors_clear (RGBA_Gradient *gr);
void evas_common_gradient_color_add (RGBA_Gradient *gr, int r, int g, int b, int a, int dist);
void evas_common_gradient_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h, RGBA_Gradient *gr, double angle);
DATA32 *evas_common_gradient_map (RGBA_Gradient *gr, RGBA_Draw_Context *dc, int len);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_line_init (void);
2002-11-08 00:02:15 -08:00
void evas_common_line_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_polygon_init (void);
2002-11-08 00:02:15 -08:00
RGBA_Polygon_Point *evas_common_polygon_point_add (RGBA_Polygon_Point *points, int x, int y);
RGBA_Polygon_Point *evas_common_polygon_points_clear (RGBA_Polygon_Point *points);
void evas_common_polygon_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_blit_init (void);
2002-11-08 00:02:15 -08:00
void evas_common_blit_rectangle (RGBA_Image *src, RGBA_Image *dst, int src_x, int src_y, int w, int h, int dst_x, int dst_y);
2002-11-08 00:02:15 -08:00
/****/
/****/
void evas_common_font_init (void);
RGBA_Font *evas_common_font_load (const char *name, int size);
void evas_common_font_free (RGBA_Font *fn);
void evas_common_font_modify_cache_by (RGBA_Font *fn, int dir);
int evas_common_font_cache_get (void);
void evas_common_font_cache_set (int size);
void evas_common_font_flush (void);
void evas_common_font_flush_last (void);
RGBA_Font *evas_common_font_find (const char *name, int size);
void evas_common_font_draw (RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int x, int y, const char *text);
RGBA_Font_Glyph *evas_common_font_cache_glyph_get (RGBA_Font *fn, FT_UInt index);
int evas_common_font_ascent_get (RGBA_Font *fn);
int evas_common_font_descent_get (RGBA_Font *fn);
int evas_common_font_max_ascent_get (RGBA_Font *fn);
int evas_common_font_max_descent_get (RGBA_Font *fn);
int evas_common_font_get_line_advance (RGBA_Font *fn);
void evas_common_font_query_size (RGBA_Font *fn, const char *text, int *w, int *h);
int evas_common_font_query_inset (RGBA_Font *fn, const char *text);
void evas_common_font_query_advance (RGBA_Font *fn, const char *text, int *h_adv, int *v_adv);
int evas_common_font_query_char_coords (RGBA_Font *fn, const char *text, int pos, int *cx, int *cy, int *cw, int *ch);
int evas_common_font_query_text_at_pos (RGBA_Font *fn, const char *text, int x, int y, int *cx, int *cy, int *cw, int *ch);
int evas_common_font_utf8_get_next (unsigned char *buf, int *iindex);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_tilebuf_init (void);
Tilebuf *evas_common_tilebuf_new (int w, int h);
void evas_common_tilebuf_free (Tilebuf *tb);
void evas_common_tilebuf_set_tile_size (Tilebuf *tb, int tw, int th);
void evas_common_tilebuf_get_tile_size (Tilebuf *tb, int *tw, int *th);
int evas_common_tilebuf_add_redraw (Tilebuf *tb, int x, int y, int w, int h);
int evas_common_tilebuf_del_redraw (Tilebuf *tb, int x, int y, int w, int h);
int evas_common_tilebuf_add_motion_vector (Tilebuf *tb, int x, int y, int w, int h, int dx, int dy, int alpha);
void evas_common_tilebuf_clear (Tilebuf *tb);
Tilebuf_Rect *evas_common_tilebuf_get_render_rects (Tilebuf *tb);
void evas_common_tilebuf_free_render_rects (Tilebuf_Rect *rects);
2002-11-08 00:02:15 -08:00
/****/
void evas_common_draw_init (void);
RGBA_Draw_Context *evas_common_draw_context_new (void);
void evas_common_draw_context_free (RGBA_Draw_Context *dc);
void evas_common_draw_context_clip_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
void evas_common_draw_context_set_clip (RGBA_Draw_Context *dc, int x, int y, int w, int h);
void evas_common_draw_context_unset_clip (RGBA_Draw_Context *dc);
void evas_common_draw_context_set_color (RGBA_Draw_Context *dc, int r, int g, int b, int a);
void evas_common_draw_context_set_multiplier (RGBA_Draw_Context *dc, int r, int g, int b, int a);
void evas_common_draw_context_unset_multiplier (RGBA_Draw_Context *dc);
void evas_common_draw_context_set_modifiers (RGBA_Draw_Context *dc, DATA8 *rmod, DATA8 *gmod, DATA8 *bmod, DATA8 *amod);
void evas_common_draw_context_ununset_modifiers (RGBA_Draw_Context *dc);
void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);
Cutout_Rect *evas_common_draw_context_apply_cutouts (RGBA_Draw_Context *dc);
void evas_common_draw_context_apply_free_cutouts(Cutout_Rect *rects);
Cutout_Rect *evas_common_draw_context_cutouts_split (Cutout_Rect *in, Cutout_Rect *split);
Cutout_Rect *evas_common_draw_context_cutout_split (Cutout_Rect *in, Cutout_Rect *split);
2002-11-08 00:02:15 -08:00
Gfx_Func_Blend_Src_Dst evas_common_draw_func_blend_get (RGBA_Image *src, RGBA_Image *dst, int pixels);
Gfx_Func_Blend_Color_Dst evas_common_draw_func_blend_color_get (DATA32 src, RGBA_Image *dst, int pixels);
Gfx_Func_Blend_Src_Cmod_Dst evas_common_draw_func_blend_cmod_get (RGBA_Image *src, RGBA_Image *dst, int pixels);
Gfx_Func_Blend_Src_Mul_Dst evas_common_draw_func_blend_mul_get (RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels);
Gfx_Func_Blend_Src_Alpha_Mul_Dst evas_common_draw_func_blend_alpha_get (RGBA_Image *dst);
Gfx_Func_Blend_Src_Dst evas_common_draw_func_copy_get (int pixels, int reverse);
2002-11-08 00:02:15 -08:00
/*****************************************************************************/
#ifdef __cplusplus
}
#endif
#endif
/* FIXME: need... */
/* modular image loader system (from ram, or fd) */
/* loaders: png, jpg, ppm, pgm, argb */
/* finish renderers for lower bit depths & color allocator */
/* and perhaps later on... */
/* multiply pixels by pixels */
/* oval / oval segment (arc) (filled/unfilled) */
/* radial gradient fill */
/* my own font renderer that can load bdf & pcf fonts? */