view include/mb_paint.h @ 221:ad4f8a956505

Implement a workaround for the button class. However, this won't solve all issues. We can use this as example to fix the mouse out event issue. When we move the curosr over the text inside the button. The upper layer group will receive MOUSE_OUT events. This is absolute incorrect.
author wycc
date Sun, 14 Dec 2008 12:35:13 +0800
parents 530bb7728546
children 29acbd8a0dd0
line wrap: on
line source

#ifndef __PAINT_H_
#define __PAINT_H_

#include <cairo.h>
#include "mb_types.h"
#include "mb_redraw_man.h"
#include "mb_tools.h"

typedef float co_comp_t;

extern paint_t *rdman_paint_color_new(redraw_man_t *rdman,
				      co_comp_t r, co_comp_t g,
				      co_comp_t b, co_comp_t a);
extern void paint_color_set(paint_t *paint,
			    co_comp_t r, co_comp_t g,
			    co_comp_t b, co_comp_t a);
extern void paint_color_get(paint_t *paint,
			    co_comp_t *r, co_comp_t *g,
			    co_comp_t *b, co_comp_t *a);
#define paint_init(_paint, _prepare, _free)	\
     do {					\
	 (_paint)->flags = 0;			\
	 (_paint)->prepare = _prepare;		\
	 (_paint)->free = _free;		\
	 STAILQ_INIT((_paint)->members);	\
	 (_paint)->pnt_next = NULL;		\
     } while(0)					\


typedef struct _grad_stop {
    co_aix offset;
    co_comp_t r, g, b, a;
} grad_stop_t;

extern paint_t *rdman_paint_linear_new(redraw_man_t *rdman,
				       co_aix x1, co_aix y1,
				       co_aix x2, co_aix y2);
extern grad_stop_t *paint_linear_stops(paint_t *paint,
				       int n_stops,
				       grad_stop_t *stops);
extern paint_t *rdman_paint_radial_new(redraw_man_t *rdman,
				       co_aix cx, co_aix cy, co_aix r);
extern grad_stop_t *paint_radial_stops(paint_t *paint,
				       int n_stops,
				       grad_stop_t *stops);

#define grad_stop_init(stop, _offset, _r, _g, _b, _a)	\
    do {						\
	(stop)->offset = _offset;			\
	(stop)->r = _r;					\
	(stop)->g = _g;					\
	(stop)->b = _b;					\
	(stop)->a = _a;					\
    } while(0)


#endif /* __PAINT_H_ */