Revert "Upstream merge"
[framework/uifw/evas.git] / src / modules / engines / software_x11 / evas_engine.h
index ec49e97..80b71b7 100644 (file)
 #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;
-      Evas_List   *onebuf_regions;
-
-      /* a list of pending regions to write to the target */
-      Evas_List   *pending_writes;
-      /* a list of previous frame pending regions to write to the target */
-      Evas_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