forked from KolibriOS/kolibrios
278 lines
6.5 KiB
C
278 lines
6.5 KiB
C
|
|
||
|
typedef unsigned int color_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int x;
|
||
|
int y;
|
||
|
}pt_t;
|
||
|
|
||
|
/*********** Clipping **********/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int xmin;
|
||
|
int ymin;
|
||
|
int xmax;
|
||
|
int ymax;
|
||
|
}clip_t, *PTRclip;
|
||
|
|
||
|
#define CLIP_TOP 1
|
||
|
#define CLIP_BOTTOM 2
|
||
|
#define CLIP_RIGHT 4
|
||
|
#define CLIP_LEFT 8
|
||
|
|
||
|
int LineClip ( clip_t *clip, int *x1, int *y1, int *x2, int *y2 );
|
||
|
|
||
|
int BlockClip( clip_t *clip, int *x1, int *y1, int *x2, int* y2 );
|
||
|
|
||
|
/*********** Brushes ***********/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
color_t bkcolor;
|
||
|
color_t fcolor;
|
||
|
union {
|
||
|
u32_t bmp[2];
|
||
|
u8_t bits[8];
|
||
|
};
|
||
|
}brush_t;
|
||
|
|
||
|
#define HS_HORIZONTAL 0
|
||
|
#define HS_VERTICAL 1
|
||
|
#define HS_FDIAGONAL 2
|
||
|
#define HS_BDIAGONAL 3
|
||
|
#define HS_CROSS 4
|
||
|
#define HS_DIAGCROSS 5
|
||
|
|
||
|
|
||
|
#define HATCH_MAX 7
|
||
|
|
||
|
brush_t* CreateHatch(int hatch, color_t bkcolor, color_t fcolor);
|
||
|
|
||
|
void DestroyBrush(brush_t *brush);
|
||
|
|
||
|
/*********** Pixmap & drawing ***********/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned width;
|
||
|
unsigned height;
|
||
|
u32_t format;
|
||
|
u32_t flags;
|
||
|
unsigned pitch;
|
||
|
void *mapped;
|
||
|
u32_t handle;
|
||
|
}pixmap_t;
|
||
|
|
||
|
#define PX_MEM_SYSTEM 0
|
||
|
#define PX_MEM_LOCAL 1
|
||
|
#define PX_MEM_GART 2
|
||
|
|
||
|
#define PX_MEM_MASK 3
|
||
|
|
||
|
#define PX_LOCK 1
|
||
|
|
||
|
pixmap_t* CreatePixmap(unsigned width, unsigned height, u32_t format, u32_t flags);
|
||
|
|
||
|
void* LockPixmap(pixmap_t *pixmap);
|
||
|
|
||
|
int UnlockPixmap(pixmap_t *pixmap);
|
||
|
|
||
|
int DrawRect(pixmap_t *pixmap, int xorg, int yorg,
|
||
|
int width, int height,
|
||
|
color_t dst_color, color_t border);
|
||
|
|
||
|
int FillRect(pixmap_t *pixmap, int xorg, int yorg,
|
||
|
int width, int height,
|
||
|
brush_t *brush, color_t border);
|
||
|
|
||
|
//int PixBlit(pixblit_t* blit);
|
||
|
|
||
|
/******** Hardware accelerated *********/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
pixmap_t *dstpix;
|
||
|
|
||
|
struct {
|
||
|
int x0;
|
||
|
int y0;
|
||
|
};
|
||
|
union {
|
||
|
struct {
|
||
|
int x1;
|
||
|
int y1;
|
||
|
};
|
||
|
struct {
|
||
|
int w;
|
||
|
int h;
|
||
|
};
|
||
|
};
|
||
|
color_t color;
|
||
|
color_t border;
|
||
|
}draw_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
pixmap_t *dstpix;
|
||
|
|
||
|
int x;
|
||
|
int y;
|
||
|
int w;
|
||
|
int h;
|
||
|
|
||
|
color_t bkcolor;
|
||
|
color_t fcolor;
|
||
|
|
||
|
u32_t bmp0;
|
||
|
u32_t bmp1;
|
||
|
color_t border;
|
||
|
}fill_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int src_x;
|
||
|
int src_y;
|
||
|
int dst_x;
|
||
|
int dst_y;
|
||
|
int w;
|
||
|
int h;
|
||
|
}blit_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
pixmap_t *dst_pixmap;
|
||
|
int dst_x;
|
||
|
int dst_y;
|
||
|
|
||
|
pixmap_t *src_pixmap;
|
||
|
int src_x;
|
||
|
int src_y;
|
||
|
int w;
|
||
|
int h;
|
||
|
}pxblit_t;
|
||
|
|
||
|
#define PX_CREATE 1
|
||
|
#define PX_DESTROY 2
|
||
|
#define PX_CLEAR 3
|
||
|
#define PX_DRAW_RECT 4
|
||
|
#define PX_FILL_RECT 5
|
||
|
#define PX_LINE 6
|
||
|
#define PX_BLIT 7
|
||
|
#define PX_BLIT_TRANSPARENT 8
|
||
|
#define PX_BLIT_ALPHA 9
|
||
|
|
||
|
/*********************************************************/
|
||
|
|
||
|
#define DBG(x) x
|
||
|
// #define DBG(x)
|
||
|
|
||
|
#pragma pack (push,1)
|
||
|
typedef struct s_cursor
|
||
|
{
|
||
|
u32_t magic; // 'CURS'
|
||
|
void (*destroy)(struct s_cursor*); // destructor
|
||
|
u32_t fd; // next object in list
|
||
|
u32_t bk; // prev object in list
|
||
|
u32_t pid; // owner id
|
||
|
|
||
|
void *base; // allocated memory
|
||
|
u32_t hot_x; // hotspot coords
|
||
|
u32_t hot_y;
|
||
|
}cursor_t;
|
||
|
#pragma pack (pop)
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
u32_t x ;
|
||
|
u32_t y ;
|
||
|
} xPointFixed;
|
||
|
|
||
|
typedef u32_t xFixed_16_16;
|
||
|
|
||
|
typedef xFixed_16_16 xFixed;
|
||
|
|
||
|
#define XFIXED_BITS 16
|
||
|
|
||
|
#define xFixedToInt(f) (int) ((f) >> XFIXED_BITS)
|
||
|
#define IntToxFixed(i) ((xFixed) (i) << XFIXED_BITS)
|
||
|
|
||
|
#define xFixedToFloat(f) (((float) (f)) / 65536)
|
||
|
|
||
|
#define PICT_FORMAT(bpp,type,a,r,g,b) (((bpp) << 24) | \
|
||
|
((type) << 16) | \
|
||
|
((a) << 12) | \
|
||
|
((r) << 8) | \
|
||
|
((g) << 4) | \
|
||
|
((b)))
|
||
|
|
||
|
#define PICT_FORMAT_A(f) (((f) >> 12) & 0x0f)
|
||
|
#define PICT_FORMAT_RGB(f) (((f) ) & 0xfff)
|
||
|
|
||
|
#define PICT_TYPE_OTHER 0
|
||
|
#define PICT_TYPE_A 1
|
||
|
#define PICT_TYPE_ARGB 2
|
||
|
#define PICT_TYPE_ABGR 3
|
||
|
#define PICT_TYPE_COLOR 4
|
||
|
#define PICT_TYPE_GRAY 5
|
||
|
|
||
|
typedef enum _PictFormatShort {
|
||
|
PICT_a8r8g8b8 = PICT_FORMAT(32,PICT_TYPE_ARGB,8,8,8,8),
|
||
|
PICT_x8r8g8b8 = PICT_FORMAT(32,PICT_TYPE_ARGB,0,8,8,8),
|
||
|
PICT_a8b8g8r8 = PICT_FORMAT(32,PICT_TYPE_ABGR,8,8,8,8),
|
||
|
PICT_x8b8g8r8 = PICT_FORMAT(32,PICT_TYPE_ABGR,0,8,8,8),
|
||
|
|
||
|
/* 24bpp formats */
|
||
|
PICT_r8g8b8 = PICT_FORMAT(24,PICT_TYPE_ARGB,0,8,8,8),
|
||
|
PICT_b8g8r8 = PICT_FORMAT(24,PICT_TYPE_ABGR,0,8,8,8),
|
||
|
|
||
|
/* 16bpp formats */
|
||
|
PICT_r5g6b5 = PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,6,5),
|
||
|
PICT_b5g6r5 = PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,6,5),
|
||
|
|
||
|
PICT_a1r5g5b5 = PICT_FORMAT(16,PICT_TYPE_ARGB,1,5,5,5),
|
||
|
PICT_x1r5g5b5 = PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,5,5),
|
||
|
PICT_a1b5g5r5 = PICT_FORMAT(16,PICT_TYPE_ABGR,1,5,5,5),
|
||
|
PICT_x1b5g5r5 = PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,5,5),
|
||
|
PICT_a4r4g4b4 = PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4),
|
||
|
PICT_x4r4g4b4 = PICT_FORMAT(16,PICT_TYPE_ARGB,0,4,4,4),
|
||
|
PICT_a4b4g4r4 = PICT_FORMAT(16,PICT_TYPE_ABGR,4,4,4,4),
|
||
|
PICT_x4b4g4r4 = PICT_FORMAT(16,PICT_TYPE_ABGR,0,4,4,4),
|
||
|
|
||
|
/* 8bpp formats */
|
||
|
PICT_a8 = PICT_FORMAT(8,PICT_TYPE_A,8,0,0,0),
|
||
|
PICT_r3g3b2 = PICT_FORMAT(8,PICT_TYPE_ARGB,0,3,3,2),
|
||
|
PICT_b2g3r3 = PICT_FORMAT(8,PICT_TYPE_ABGR,0,3,3,2),
|
||
|
PICT_a2r2g2b2 = PICT_FORMAT(8,PICT_TYPE_ARGB,2,2,2,2),
|
||
|
PICT_a2b2g2r2 = PICT_FORMAT(8,PICT_TYPE_ABGR,2,2,2,2),
|
||
|
|
||
|
PICT_c8 = PICT_FORMAT(8,PICT_TYPE_COLOR,0,0,0,0),
|
||
|
PICT_g8 = PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
|
||
|
|
||
|
PICT_x4a4 = PICT_FORMAT(8,PICT_TYPE_A,4,0,0,0),
|
||
|
|
||
|
PICT_x4c4 = PICT_FORMAT(8,PICT_TYPE_COLOR,0,0,0,0),
|
||
|
PICT_x4g4 = PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
|
||
|
|
||
|
/* 4bpp formats */
|
||
|
PICT_a4 = PICT_FORMAT(4,PICT_TYPE_A,4,0,0,0),
|
||
|
PICT_r1g2b1 = PICT_FORMAT(4,PICT_TYPE_ARGB,0,1,2,1),
|
||
|
PICT_b1g2r1 = PICT_FORMAT(4,PICT_TYPE_ABGR,0,1,2,1),
|
||
|
PICT_a1r1g1b1 = PICT_FORMAT(4,PICT_TYPE_ARGB,1,1,1,1),
|
||
|
PICT_a1b1g1r1 = PICT_FORMAT(4,PICT_TYPE_ABGR,1,1,1,1),
|
||
|
|
||
|
PICT_c4 = PICT_FORMAT(4,PICT_TYPE_COLOR,0,0,0,0),
|
||
|
PICT_g4 = PICT_FORMAT(4,PICT_TYPE_GRAY,0,0,0,0),
|
||
|
|
||
|
/* 1bpp formats */
|
||
|
PICT_a1 = PICT_FORMAT(1,PICT_TYPE_A,1,0,0,0),
|
||
|
|
||
|
PICT_g1 = PICT_FORMAT(1,PICT_TYPE_GRAY,0,0,0,0),
|
||
|
} PictFormatShort;
|
||
|
|
||
|
void dump_mem();
|
||
|
|
||
|
|
||
|
|