#ifndef EVAS_ENGINE_H
-#define EVAS_ENGINE_H
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <X11/extensions/XShm.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-typedef struct _Outbuf Outbuf;
-typedef struct _Outbuf_Region Outbuf_Region;
-typedef struct _X_Output_Buffer X_Output_Buffer;
-
-typedef enum _Outbuf_Depth Outbuf_Depth;
+# define EVAS_ENGINE_H
+
+# include <sys/ipc.h>
+# include <sys/shm.h>
+
+# ifdef BUILD_ENGINE_SOFTWARE_XLIB
+# include <X11/Xlib.h>
+# include <X11/Xutil.h>
+# include <X11/Xatom.h>
+# include <X11/extensions/XShm.h>
+# include <X11/Xresource.h> // xres - dpi
+# endif
+
+# ifdef BUILD_ENGINE_SOFTWARE_XCB
+# include <xcb/xcb.h>
+# include <xcb/shm.h>
+# include <xcb/xcb_image.h>
+# endif
+
+extern int _evas_engine_soft_x11_log_dom;
+
+# ifdef ERR
+# undef ERR
+# endif
+# define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
+
+# ifdef DBG
+# undef DBG
+# endif
+# define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
+
+# ifdef INF
+# undef INF
+# endif
+# define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
+
+# ifdef WRN
+# undef WRN
+# endif
+# define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
+
+# ifdef CRIT
+# undef CRIT
+# endif
+# define CRIT(...) \
+ EINA_LOG_DOM_CRIT(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
+
+typedef enum _Outbuf_Depth Outbuf_Depth;
enum _Outbuf_Depth
{
OUTBUF_DEPTH_NONE,
- OUTBUF_DEPTH_INHERIT,
- OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
- OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
- OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
- OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
- OUTBUF_DEPTH_RGB_32BPP_888_8888,
- OUTBUF_DEPTH_LAST
-};
-
-struct _Outbuf
-{
- Outbuf_Depth depth;
- int w, h;
- int rot;
- int onebuf;
-
- struct {
- Convert_Pal *pal;
- struct {
- Display *disp;
- Window win;
- Pixmap mask;
- Visual *vis;
- Colormap cmap;
- int depth;
- int shm;
- GC gc;
- GC gcm;
- unsigned char swap : 1;
- unsigned char bit_swap : 1;
- } x;
- struct {
- DATA32 r, g, b;
- } mask;
-
- /* 1 big buffer for updates - flush on idle_flush */
- RGBA_Image *onebuf;
- Eina_List *onebuf_regions;
-
- /* a list of pending regions to write to the target */
- Eina_List *pending_writes;
- /* a list of previous frame pending regions to write to the target */
- Eina_List *prev_pending_writes;
-
- unsigned char mask_dither : 1;
- unsigned char destination_alpha : 1;
- unsigned char debug : 1;
- unsigned char synced : 1;
- } priv;
+ OUTBUF_DEPTH_INHERIT,
+ OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
+ OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
+ OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
+ OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
+ OUTBUF_DEPTH_RGB_32BPP_888_8888,
+ OUTBUF_DEPTH_LAST
};
-struct _Outbuf_Region
-{
- X_Output_Buffer *xob, *mxob;
- int x, y, w, h;
-};
+typedef struct _Outbuf Outbuf;
-struct _X_Output_Buffer
+struct _Outbuf
{
- Display *display;
- XImage *xim;
- XShmSegmentInfo *shm_info;
- Visual *visual;
- void *data;
- int w, h, bpl;
- int psize;
+ Outbuf_Depth depth;
+ int w, h;
+ int rot;
+ int onebuf;
+
+ struct
+ {
+ Convert_Pal *pal;
+ union
+ {
+# ifdef BUILD_ENGINE_SOFTWARE_XLIB
+ struct
+ {
+ Display *disp;
+ Window win;
+ Pixmap mask;
+ Visual *vis;
+ Colormap cmap;
+ int depth, shm;
+ GC gc, gcm;
+ unsigned char swap : 1;
+ unsigned char bit_swap : 1;
+ } xlib;
+# endif
+# ifdef BUILD_ENGINE_SOFTWARE_XCB
+ struct
+ {
+ xcb_connection_t *conn;
+ xcb_screen_t *screen;
+ xcb_window_t win;
+ xcb_pixmap_t mask;
+ xcb_visualtype_t *visual;
+ xcb_colormap_t cmap;
+ int depth, shm;
+ xcb_gcontext_t gc, gcm;
+ unsigned char swap : 1;
+ unsigned char bit_swap : 1;
+ } xcb;
+# endif
+ } x11;
+ struct
+ {
+ DATA32 r, g, b;
+ } mask;
+
+ /* 1 big buffer for updates - flush on idle_flush */
+ RGBA_Image *onebuf;
+ Eina_List *onebuf_regions;
+
+ /* a list of pending regions to write to the target */
+ Eina_List *pending_writes;
+
+ /* a list of previous frame pending regions to write to the target */
+ Eina_List *prev_pending_writes;
+
+# ifdef EVAS_FRAME_QUEUING
+ /* protecting prev_pending_writes */
+ LK(lock);
+# endif
+
+ unsigned char mask_dither : 1;
+ unsigned char destination_alpha : 1;
+ unsigned char debug : 1;
+ unsigned char synced : 1;
+ } priv;
};
-/****/
-void evas_software_x11_x_init (void);
-
-void evas_software_x11_x_write_mask_line (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y);
-int evas_software_x11_x_can_do_shm (Display *d);
-X_Output_Buffer *evas_software_x11_x_output_buffer_new (Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data);
-void evas_software_x11_x_output_buffer_free (X_Output_Buffer *xob, int sync);
-void evas_software_x11_x_output_buffer_paste (X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int sync);
-DATA8 *evas_software_x11_x_output_buffer_data (X_Output_Buffer *xob, int *bytes_per_line_ret);
-int evas_software_x11_x_output_buffer_depth (X_Output_Buffer *xob);
-int evas_software_x11_x_output_buffer_byte_order (X_Output_Buffer *xob);
-int evas_software_x11_x_output_buffer_bit_order (X_Output_Buffer *xob);
-
-void evas_software_x11_x_color_init (void);
-Convert_Pal *evas_software_x11_x_color_allocate (Display *disp, Colormap cmap, Visual *vis, Convert_Pal_Mode colors);
-void evas_software_x11_x_color_deallocate (Display *disp, Colormap cmap, Visual *vis, Convert_Pal *pal);
-
-void evas_software_x11_outbuf_init (void);
-void evas_software_x11_outbuf_free (Outbuf *buf);
-
-Outbuf *evas_software_x11_outbuf_setup_x (int w, int h, int rot, Outbuf_Depth depth, Display *disp, Drawable draw, Visual *vis, Colormap cmap, int x_depth, int grayscale, int max_colors, Pixmap mask, int shape_dither, int destination_alpha);
-
-RGBA_Image *evas_software_x11_outbuf_new_region_for_update (Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
-void evas_software_x11_outbuf_free_region_for_update (Outbuf *buf, RGBA_Image *update);
-void evas_software_x11_outbuf_flush (Outbuf *buf);
-void evas_software_x11_outbuf_idle_flush (Outbuf *buf);
-void evas_software_x11_outbuf_push_updated_region (Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
-void evas_software_x11_outbuf_reconfigure (Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth);
-int evas_software_x11_outbuf_get_width (Outbuf *buf);
-int evas_software_x11_outbuf_get_height (Outbuf *buf);
-Outbuf_Depth evas_software_x11_outbuf_get_depth (Outbuf *buf);
-int evas_software_x11_outbuf_get_rot (Outbuf *buf);
-void evas_software_x11_outbuf_drawable_set (Outbuf *buf, Drawable draw);
-void evas_software_x11_outbuf_mask_set (Outbuf *buf, Pixmap mask);
-void evas_software_x11_outbuf_rotation_set (Outbuf *buf, int rot);
-
-void evas_software_x11_outbuf_debug_set (Outbuf *buf, int debug);
-void evas_software_x11_outbuf_debug_show (Outbuf *buf, Drawable draw, int x, int y, int w, int h);
+void evas_software_xlib_x_init(void);
+void evas_software_xcb_init(void);
#endif