move around - flatter.
[profile/ivi/evas.git] / src / modules / engines / xrender_xcb / evas_engine.h
1 #ifndef EVAS_ENGINE_H
2 #define EVAS_ENGINE_H
3
4 #include <sys/ipc.h>
5 #include <sys/shm.h>
6
7 #include <xcb/xcb.h>
8 #include <xcb/render.h>
9 #include <xcb/xcb_image.h>
10
11 typedef struct _Xcb_Image_Info      Xcb_Image_Info;
12 typedef struct _Xcb_Image_Image     Xcb_Image_Image;
13 typedef struct _Xcb_Render_Surface  Xcb_Render_Surface;
14
15 struct _Xcb_Image_Info
16 {
17    xcb_connection_t          *conn;
18    xcb_drawable_t             root;
19    xcb_drawable_t             draw;
20    int                        depth;
21    xcb_visualid_t             vis;
22    int                        pool_mem;
23    Evas_List                 *pool;
24    unsigned char              can_do_shm;
25    xcb_render_pictforminfo_t *fmt32;
26    xcb_render_pictforminfo_t *fmt24;
27    xcb_render_pictforminfo_t *fmt8;
28    xcb_render_pictforminfo_t *fmt4;
29    xcb_render_pictforminfo_t *fmt1;
30    unsigned char              mul_r;
31    unsigned char              mul_g;
32    unsigned char              mul_b;
33    unsigned char              mul_a;
34    Xcb_Render_Surface        *mul;
35    int                        references;
36 };
37
38 struct _Xcb_Image_Image
39 {
40    Xcb_Image_Info         *xcbinf;
41    xcb_image_t            *xcbim;
42    xcb_shm_segment_info_t *shm_info;
43    int                     w;
44    int                     h;
45    int                     depth;
46    int                     line_bytes;
47    unsigned char          *data;
48    unsigned char           available : 1;
49 };
50
51 struct _Xcb_Render_Surface
52 {
53    Xcb_Image_Info            *xcbinf;
54    int                        w;
55    int                        h;
56    int                        depth;
57    xcb_render_pictforminfo_t *fmt;
58    xcb_drawable_t             draw;
59    xcb_render_picture_t       pic;
60    unsigned char              alpha : 1;
61    unsigned char              allocated : 1;
62    unsigned char              bordered : 1;
63 };
64
65 /* ximage support calls (ximage vs xshmimage, cache etc.) */
66 Xcb_Image_Info  *_xr_image_info_get(xcb_connection_t *conn, xcb_drawable_t draw, xcb_visualid_t vis);
67 void             _xr_image_info_free(Xcb_Image_Info *xcbinf);
68 void             _xr_image_info_pool_flush(Xcb_Image_Info *xcbinf, int max_num, int max_mem);
69 Xcb_Image_Image *_xr_image_new(Xcb_Image_Info *xcbinf, int w, int h, int depth);
70 void             _xr_image_free(Xcb_Image_Image *xim);
71 void             _xr_image_put(Xcb_Image_Image *xim, xcb_drawable_t draw, int x, int y, int w, int h);
72
73 /* xrender support calls */
74 Xcb_Render_Surface *_xr_render_surface_new(Xcb_Image_Info *xcbinf, int w, int h, xcb_render_pictforminfo_t *fmt, int alpha);
75 Xcb_Render_Surface *_xr_render_surface_adopt(Xcb_Image_Info *xcbinf, xcb_drawable_t draw, int w, int h, int alpha);
76 Xcb_Render_Surface *_xr_render_surface_format_adopt(Xcb_Image_Info *xcbinf, xcb_drawable_t draw, int w, int h, xcb_render_pictforminfo_t *fmt, int alpha);
77 void                _xr_render_surface_free(Xcb_Render_Surface *rs);
78 void                _xr_render_surface_repeat_set(Xcb_Render_Surface *rs, int repeat);
79 void                _xr_render_surface_solid_rectangle_set(Xcb_Render_Surface *rs, int r, int g, int b, int a, int x, int y, int w, int h);
80 void                _xr_render_surface_argb_pixels_fill(Xcb_Render_Surface *rs, int sw, int sh, void *pixels, int x, int y, int w, int h);
81 void                _xr_render_surface_rgb_pixels_fill(Xcb_Render_Surface *rs, int sw, int sh, void *pixels, int x, int y, int w, int h);
82 void                _xr_render_surface_clips_set(Xcb_Render_Surface *rs, RGBA_Draw_Context *dc, int rx, int ry, int rw, int rh);
83 void                _xr_render_surface_composite(Xcb_Render_Surface *srs, Xcb_Render_Surface *drs, RGBA_Draw_Context *dc, int sx, int sy, int sw, int sh, int x, int y, int w, int h, int smooth);
84 void                _xr_render_surface_copy(Xcb_Render_Surface *srs, Xcb_Render_Surface *drs, int sx, int sy, int x, int y, int w, int h);
85 void                _xr_render_surface_rectangle_draw(Xcb_Render_Surface *rs, RGBA_Draw_Context *dc, int x, int y, int w, int h);
86 void                _xr_render_surface_line_draw(Xcb_Render_Surface *rs, RGBA_Draw_Context *dc, int x1, int y1, int x2, int y2);
87 void                _xre_poly_draw(Xcb_Render_Surface *rs, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points);
88   
89     
90 typedef struct _XR_Image XR_Image;
91
92 struct _XR_Image
93 {
94    Xcb_Image_Info       *xcbinf;
95    const char           *file;
96    const char           *key;
97    char                 *fkey;
98    RGBA_Image           *im;
99    void                 *data;
100    int                   w, h;
101    Xcb_Render_Surface   *surface;
102    int                   references;
103    char                 *format;
104    const char           *comment;
105    Tilebuf              *updates;
106    RGBA_Image_Loadopts   load_opts;
107    unsigned char         alpha : 1;
108    unsigned char         dirty : 1;
109    unsigned char         free_data : 1;
110 };
111
112 XR_Image *_xre_image_load(Xcb_Image_Info *xcbinf, const char *file, const char *key, Evas_Image_Load_Opts *lo);
113 XR_Image *_xre_image_new_from_data(Xcb_Image_Info *xcbinf, int w, int h, void *data);
114 XR_Image *_xre_image_new_from_copied_data(Xcb_Image_Info *xcbinf, int w, int h, void *data);
115 XR_Image *_xre_image_new(Xcb_Image_Info *xcbinf, int w, int h);
116 void      _xre_image_resize(XR_Image *im, int w, int h);
117 void      _xre_image_free(XR_Image *im);
118 void      _xre_image_region_dirty(XR_Image *im, int x, int y, int w, int h);
119 void      _xre_image_dirty(XR_Image *im);
120 XR_Image *_xre_image_copy(XR_Image *im);
121 void     *_xre_image_data_get(XR_Image *im);
122 XR_Image *_xre_image_data_find(void *data);
123 void      _xre_image_data_put(XR_Image *im, void *data);
124 void      _xre_image_alpha_set(XR_Image *im, int alpha);
125 int       _xre_image_alpha_get(XR_Image *im);
126 void      _xre_image_border_set(XR_Image *im, int l, int r, int t, int b);
127 void      _xre_image_border_get(XR_Image *im, int *l, int *r, int *t, int *b);
128 void      _xre_image_surface_gen(XR_Image *im);
129 void      _xre_image_cache_set(int size);
130 int       _xre_image_cache_get(void);
131
132 typedef struct _XR_Font_Surface XR_Font_Surface;
133
134 struct _XR_Font_Surface
135 {
136    Xcb_Image_Info      *xcbinf;
137    RGBA_Font_Glyph     *fg;
138    int                  w;
139    int                  h;
140    xcb_drawable_t       draw;
141    xcb_render_picture_t pic;
142 };
143
144 XR_Font_Surface *_xre_font_surface_new (Xcb_Image_Info   *xcbinf,
145                                         RGBA_Font_Glyph  *fg);
146
147 void             _xre_font_surface_free (XR_Font_Surface   *fs);
148
149 void             _xre_font_surface_draw (Xcb_Image_Info    *xcbinf,
150                                          RGBA_Image        *surface,
151                                          RGBA_Draw_Context *dc,
152                                          RGBA_Font_Glyph   *fg,
153                                          int                x,
154                                          int                y);
155
156 typedef struct _XR_Gradient XR_Gradient;
157
158 struct _XR_Gradient
159 {
160    Xcb_Image_Info     *xcbinf;
161    Xcb_Render_Surface *surface;
162    RGBA_Gradient      *grad;
163    unsigned char       changed;
164    int                 sw, sh;
165 };
166
167 /* gradient */
168 XR_Gradient *_xre_gradient_new(Xcb_Image_Info *xcbinf);
169 void         _xre_gradient_free(XR_Gradient *gr);
170 void         _xre_gradient_color_stop_add(XR_Gradient *gr, int r, int g, int b, int a, int delta);
171 void         _xre_gradient_alpha_stop_add(XR_Gradient *gr, int a, int delta);
172 void         _xre_gradient_color_data_set(XR_Gradient *gr, void *map, int len, int has_alpha);
173 void         _xre_gradient_alpha_data_set(XR_Gradient *gr, void *alpha_map, int len);
174 void         _xre_gradient_clear(XR_Gradient *gr);
175 void         _xre_gradient_fill_set(XR_Gradient *gr, int x, int y, int w, int h);
176 void         _xre_gradient_fill_angle_set(XR_Gradient *gr, double angle);
177 void         _xre_gradient_fill_spread_set(XR_Gradient *gr, int spread);
178 void         _xre_gradient_angle_set(XR_Gradient *gr, double angle);
179 void         _xre_gradient_offset_set(XR_Gradient *gr, float offset);
180 void         _xre_gradient_direction_set(XR_Gradient *gr, int direction);
181 void         _xre_gradient_type_set(XR_Gradient *gr, char *name, char *params);
182 void         _xre_gradient_draw(Xcb_Render_Surface *rs, RGBA_Draw_Context *dc, XR_Gradient *gr, int x, int y, int w, int h);
183     
184 #endif