185 lines
5.3 KiB
C
185 lines
5.3 KiB
C
#ifndef EVAS_COMMON_SOFT8_H
|
|
#define EVAS_COMMON_SOFT8_H
|
|
|
|
#include "evas_common.h"
|
|
#include "evas_private.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define GRY_8_BLEND(a, b, alpha) \
|
|
((b) + (a) - ((((b) * ((alpha) + 1)) >> 8) & 0xff))
|
|
|
|
#define GRY_8_BLEND_UNMUL(a, b, alpha) \
|
|
((b) + ((((a) - (b)) * ((alpha) + 1)) >> 8))
|
|
|
|
#if 0
|
|
#define GRY_8_FROM_COMPONENTS(r, g, b) \
|
|
(((307 * (r)) + \
|
|
(604 * (g)) + \
|
|
(113 * (b))) >> 10)
|
|
|
|
#define GRY_8_FROM_RGB(rgb) \
|
|
GRY_8_FROM_COMPONENTS(R_VAL(rgb), G_VAL(rgb), B_VAL(rgb))
|
|
#endif
|
|
|
|
//Y = R * 0.2126 + G * 0.7152 + B * 0.0722
|
|
|
|
#define GRY_8_FROM_COMPONENTS(r, g, b) \
|
|
(((218 * (r)) + \
|
|
(732 * (g)) + \
|
|
(74 * (b))) >> 10)
|
|
|
|
#define GRY_8_FROM_RGB(rgb) \
|
|
GRY_8_FROM_COMPONENTS(R_VAL(rgb), G_VAL(rgb), B_VAL(rgb))
|
|
|
|
#define UNROLL2(op...) op op
|
|
#define UNROLL4(op...) UNROLL2(op) UNROLL2(op)
|
|
#define UNROLL8(op...) UNROLL4(op) UNROLL4(op)
|
|
#define UNROLL16(op...) UNROLL8(op) UNROLL8(op)
|
|
|
|
#if defined(__ARM_ARCH_3M__)
|
|
# define __ARM_ARCH__ 40
|
|
#endif
|
|
#if defined(__ARM_ARCH_4__)
|
|
# define __ARM_ARCH__ 40
|
|
#endif
|
|
#if defined(__ARM_ARCH_4T__)
|
|
# define __ARM_ARCH__ 41
|
|
#endif
|
|
|
|
#if defined(__ARM_ARCH_5__)
|
|
# define __ARM_ARCH__ 50
|
|
#endif
|
|
#if defined(__ARM_ARCH_5T__)
|
|
# define __ARM_ARCH__ 51
|
|
#endif
|
|
#if defined(__ARM_ARCH_5E__)
|
|
# define __ARM_ARCH__ 52
|
|
#endif
|
|
#if defined(__ARM_ARCH_5TE__)
|
|
# define __ARM_ARCH__ 53
|
|
#endif
|
|
#if defined(__ARM_ARCH_5TEJ__)
|
|
# define __ARM_ARCH__ 54
|
|
#endif
|
|
|
|
#if defined(__ARM_ARCH_6__)
|
|
# define __ARM_ARCH__ 60
|
|
#endif
|
|
#if defined(__ARM_ARCH_6J__)
|
|
# define __ARM_ARCH__ 61
|
|
#endif
|
|
#if defined(__ARM_ARCH_6K__)
|
|
# define __ARM_ARCH__ 62
|
|
#endif
|
|
#if defined(__ARM_ARCH_6Z__)
|
|
# define __ARM_ARCH__ 63
|
|
#endif
|
|
#if defined(__ARM_ARCH_6ZK__)
|
|
# define __ARM_ARCH__ 64
|
|
#endif
|
|
#if defined(__ARM_ARCH_6T2__)
|
|
# define __ARM_ARCH__ 65
|
|
#endif
|
|
|
|
#if defined(__ARM_ARCH_7__)
|
|
# define __ARM_ARCH__ 70
|
|
#endif
|
|
#if defined(__ARM_ARCH_7A__)
|
|
# define __ARM_ARCH__ 71
|
|
#endif
|
|
#if defined(__ARM_ARCH_7R__)
|
|
# define __ARM_ARCH__ 72
|
|
#endif
|
|
#if defined(__ARM_ARCH_7M__)
|
|
# define __ARM_ARCH__ 73
|
|
#endif
|
|
|
|
#if defined(__ARM_ARCH__) && (__ARM_ARCH__ >= 52)
|
|
/* tested on ARMv6 (arm1136j-s), Nokia N800 CPU */
|
|
#define pld(addr, off) \
|
|
__asm__("pld [%[address], %[offset]]":: \
|
|
[address] "r" (addr), [offset] "i" (off))
|
|
#else
|
|
#define pld(addr, off)
|
|
#endif /* __ARMEL__ */
|
|
|
|
static inline unsigned int
|
|
_calc_stride(unsigned int w)
|
|
{
|
|
unsigned int pad = w % 4;
|
|
if (!pad) return w;
|
|
else return w + 4 - pad;
|
|
}
|
|
|
|
#define IMG_BYTE_SIZE(stride, height, has_alpha) \
|
|
((stride) * (height) * (!(has_alpha) ? 1 : 2))
|
|
|
|
typedef struct _Soft8_Image Soft8_Image;
|
|
struct _Soft8_Image
|
|
{
|
|
Image_Entry cache_entry;
|
|
|
|
RGBA_Image *source;
|
|
|
|
int stride; // pixel stride
|
|
DATA8 *pixels; // 8bpp pixels gry8
|
|
DATA8 *alpha; // 8bit alpha mask - optional. points into pixels
|
|
|
|
void *extended_info;
|
|
|
|
struct
|
|
{
|
|
/* unsigned char have_alpha : 1; // 1 if we have halpha */
|
|
unsigned char free_pixels : 1; // 1 if pixels should be freed
|
|
unsigned char free_alpha : 1; // 1 if alpha mask should be freed
|
|
} flags;
|
|
};
|
|
|
|
/**
|
|
* Image (evas_soft8_main.c)
|
|
*/
|
|
EAPI void evas_common_soft8_image_init(void);
|
|
EAPI void evas_common_soft8_image_shutdown(void);
|
|
EAPI Evas_Cache_Image *evas_common_soft8_image_cache_get(void);
|
|
|
|
EAPI void evas_common_soft8_image_draw(Soft8_Image *src, Soft8_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, int smooth);
|
|
EAPI Soft8_Image *evas_common_soft8_image_alpha_set(Soft8_Image *im, int have_alpha);
|
|
|
|
void evas_common_soft8_image_draw_unscaled(Soft8_Image *src, Soft8_Image *dst, RGBA_Draw_Context *dc, const Eina_Rectangle sr, const Eina_Rectangle dr, const Eina_Rectangle cr);
|
|
void evas_common_soft8_image_draw_scaled_sampled(Soft8_Image *src, Soft8_Image *dst, RGBA_Draw_Context *dc, const Eina_Rectangle sr, const Eina_Rectangle dr, const Eina_Rectangle cr);
|
|
|
|
/* convert/dither functions */
|
|
void evas_common_soft8_image_convert_from_rgb(Soft8_Image *im, const DATA32 *src);
|
|
void evas_common_soft8_image_convert_from_rgba(Soft8_Image *im, const DATA32 *src);
|
|
|
|
/**
|
|
* Rectangle (evas_soft8_rectangle.c)
|
|
*/
|
|
EAPI void evas_common_soft8_rectangle_draw(Soft8_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h);
|
|
|
|
/**
|
|
* Polygon (evas_soft8_polygon.c)
|
|
*/
|
|
EAPI void evas_common_soft8_polygon_draw(Soft8_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y);
|
|
|
|
/**
|
|
* Line (evas_soft8_line.c)
|
|
*/
|
|
EAPI void evas_common_soft8_line_draw(Soft8_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1);
|
|
|
|
/**
|
|
* Font (evas_soft8_font.c)
|
|
*/
|
|
EAPI void *evas_common_soft8_font_glyph_new(void *data, RGBA_Font_Glyph *fg);
|
|
EAPI void evas_common_soft8_font_glyph_free(void *ext_dat);
|
|
EAPI void evas_common_soft8_font_glyph_draw(void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|