add software xcb engine support, minor reorganization of some inclusing / checks etc...
SVN revision: 35020
This commit is contained in:
parent
8124d72e75
commit
ea8c947317
55
configure.in
55
configure.in
|
@ -41,20 +41,31 @@ AC_ARG_ENABLE(simple-x11,
|
||||||
[ want_evas_simple_x11=$enableval ]
|
[ want_evas_simple_x11=$enableval ]
|
||||||
)
|
)
|
||||||
|
|
||||||
### OpenGL GLEW
|
|
||||||
EXPEDITE_CHECK_ENGINE([opengl-glew], [OpenGL Glew], "yes", [glew_libs="-lglew32 -lgdi32"])
|
|
||||||
|
|
||||||
### OpenGL X11
|
|
||||||
EXPEDITE_CHECK_ENGINE([opengl-x11], [OpenGL X11], "yes")
|
|
||||||
|
|
||||||
### Software X11
|
### Software X11
|
||||||
EXPEDITE_CHECK_ENGINE([software-x11], [Software X11], "yes")
|
EXPEDITE_CHECK_ENGINE([software-x11], [Software X11], "yes")
|
||||||
|
|
||||||
### XRender X11
|
### XRender X11
|
||||||
EXPEDITE_CHECK_ENGINE([xrender-x11], [XRender X11], "yes")
|
EXPEDITE_CHECK_ENGINE([xrender-x11], [XRender X11], "yes")
|
||||||
|
|
||||||
### Software 16bit X11
|
### OpenGL X11
|
||||||
EXPEDITE_CHECK_ENGINE([software-16-x11], [Software 16 bits X11], "yes")
|
EXPEDITE_CHECK_ENGINE([opengl-x11], [OpenGL X11], "yes")
|
||||||
|
|
||||||
|
### Software XCB
|
||||||
|
EXPEDITE_CHECK_ENGINE([software-xcb], [Software XCB], "yes")
|
||||||
|
|
||||||
|
# TODO: Check availability of libs
|
||||||
|
### DirectDraw
|
||||||
|
EXPEDITE_CHECK_ENGINE([software-ddraw], [Software DirectDraw], "yes", [ddraw_libs="-lddraw -ldxguid"])
|
||||||
|
|
||||||
|
# TODO: Check availability of libs
|
||||||
|
### Direct3D
|
||||||
|
EXPEDITE_CHECK_ENGINE([direct3d], [Direct3D], "yes", [d3d_libs="-ld3d9 -ld3dx9d"])
|
||||||
|
|
||||||
|
### OpenGL GLEW
|
||||||
|
EXPEDITE_CHECK_ENGINE([opengl-glew], [OpenGL Glew], "yes", [glew_libs="-lglew32 -lgdi32"])
|
||||||
|
|
||||||
|
### Software SDL
|
||||||
|
EXPEDITE_CHECK_ENGINE([software-sdl], [Software SDL], "yes")
|
||||||
|
|
||||||
### FB
|
### FB
|
||||||
EXPEDITE_CHECK_ENGINE([fb], [Framebuffer], "yes")
|
EXPEDITE_CHECK_ENGINE([fb], [Framebuffer], "yes")
|
||||||
|
@ -62,25 +73,17 @@ EXPEDITE_CHECK_ENGINE([fb], [Framebuffer], "yes")
|
||||||
### DIRECTFB
|
### DIRECTFB
|
||||||
EXPEDITE_CHECK_ENGINE([directfb], [DirectFB], "yes")
|
EXPEDITE_CHECK_ENGINE([directfb], [DirectFB], "yes")
|
||||||
|
|
||||||
# TODO: Check availability of libs
|
### Software 16bit X11
|
||||||
### DirectDraw
|
EXPEDITE_CHECK_ENGINE([software-16-x11], [Software 16 bits X11], "yes")
|
||||||
EXPEDITE_CHECK_ENGINE([software-ddraw], [Software DirectDraw], "yes", [ddraw_libs="-lddraw -ldxguid"])
|
|
||||||
|
|
||||||
# TODO: Check availability of libs
|
# TODO: Check availability of libs
|
||||||
### 16bit DirectDraw
|
### 16bit DirectDraw
|
||||||
EXPEDITE_CHECK_ENGINE([software-16-ddraw], [Software 16 bits DirectDraw], "yes", [ddraw_libs="-lddraw -ldxguid"])
|
EXPEDITE_CHECK_ENGINE([software-16-ddraw], [Software 16 bits DirectDraw], "yes", [ddraw_libs="-lddraw -ldxguid"])
|
||||||
|
|
||||||
# TODO: Check availability of libs
|
|
||||||
### Direct3D
|
|
||||||
EXPEDITE_CHECK_ENGINE([direct3d], [Direct3D], "yes", [d3d_libs="-ld3d9 -ld3dx9d"])
|
|
||||||
|
|
||||||
# TODO: Check availability of libs
|
# TODO: Check availability of libs
|
||||||
### 16bit WinCE
|
### 16bit WinCE
|
||||||
EXPEDITE_CHECK_ENGINE([software-16-wince], [Software 16 bits WinCE], "yes", [wince_16_libs="-laygshell"])
|
EXPEDITE_CHECK_ENGINE([software-16-wince], [Software 16 bits WinCE], "yes", [wince_16_libs="-laygshell"])
|
||||||
|
|
||||||
### Software SDL
|
|
||||||
EXPEDITE_CHECK_ENGINE([software-sdl], [Software SDL], "yes")
|
|
||||||
|
|
||||||
if test "x$have_software_x11" = "xyes" -o "x$have_software_16_x11" = "xyes" -o "x$have_xrender_x11" = "xyes" -o "x$have_opengl_x11" = "xyes"; then
|
if test "x$have_software_x11" = "xyes" -o "x$have_software_16_x11" = "xyes" -o "x$have_xrender_x11" = "xyes" -o "x$have_opengl_x11" = "xyes"; then
|
||||||
AC_PATH_XTRA
|
AC_PATH_XTRA
|
||||||
AC_CHECK_HEADERS(X11/Xlib.h X11/Xutil.h,
|
AC_CHECK_HEADERS(X11/Xlib.h X11/Xutil.h,
|
||||||
|
@ -96,6 +99,13 @@ if test "x$have_software_x11" = "xyes" -o "x$have_software_16_x11" = "xyes" -o "
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(BUILD_X11, test "x$have_x11" = "xyes")
|
AM_CONDITIONAL(BUILD_X11, test "x$have_x11" = "xyes")
|
||||||
|
|
||||||
|
if test "x$have_software_xcb" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES([XCB], xcb xcb-keysyms,
|
||||||
|
[ have_software_xcb="yes" ],
|
||||||
|
[ have_software_xcb="no" ])
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(BUILD_XCB, test "x$have_xcb" = "xyes")
|
||||||
|
|
||||||
if test "x$have_software_sdl" = "xyes"; then
|
if test "x$have_software_sdl" = "xyes"; then
|
||||||
PKG_CHECK_MODULES([SDL], sdl,
|
PKG_CHECK_MODULES([SDL], sdl,
|
||||||
[ have_sdl="yes" ],
|
[ have_sdl="yes" ],
|
||||||
|
@ -130,17 +140,18 @@ echo " $PACKAGE $VERSION"
|
||||||
echo
|
echo
|
||||||
echo " Engines:"
|
echo " Engines:"
|
||||||
echo " Software X11.................: ${have_software_x11}"
|
echo " Software X11.................: ${have_software_x11}"
|
||||||
echo " Software X11 16 bits.........: ${have_software_16_x11}"
|
|
||||||
echo " X Render X11.................: ${have_xrender_x11}"
|
echo " X Render X11.................: ${have_xrender_x11}"
|
||||||
echo " Open GL X11..................: ${have_opengl_x11}"
|
echo " Open GL X11..................: ${have_opengl_x11}"
|
||||||
echo " Open GL Glew.................: ${have_opengl_glew}"
|
echo " Software XCB.................: ${have_software_xcb}"
|
||||||
echo " Software DirectDraw..........: ${have_software_ddraw}"
|
echo " Software DirectDraw..........: ${have_software_ddraw}"
|
||||||
echo " Software DirectDraw 16 bits..: ${have_software_16_ddraw}"
|
|
||||||
echo " Direct3D.....................: ${have_direct3d}"
|
echo " Direct3D.....................: ${have_direct3d}"
|
||||||
echo " Software WinCE 16 bits.......: ${have_software_16_wince}"
|
echo " Open GL Glew.................: ${have_opengl_glew}"
|
||||||
echo " Software SDL.................: ${have_software_sdl}"
|
echo " Software SDL.................: ${have_software_sdl}"
|
||||||
echo " FB...........................: ${have_fb}"
|
echo " FB...........................: ${have_fb}"
|
||||||
echo " DirectFB.....................: ${have_directfb}"
|
echo " DirectFB.....................: ${have_directfb}"
|
||||||
|
echo " Software X11 16 bits.........: ${have_software_16_x11}"
|
||||||
|
echo " Software DirectDraw 16 bits..: ${have_software_16_ddraw}"
|
||||||
|
echo " Software WinCE 16 bits.......: ${have_software_16_wince}"
|
||||||
echo
|
echo
|
||||||
echo " Installation:"
|
echo " Installation:"
|
||||||
echo " prefix.......................: ${prefix}"
|
echo " prefix.......................: ${prefix}"
|
||||||
|
|
|
@ -9,7 +9,8 @@ AM_CPPFLAGS = \
|
||||||
@EVAS_CFLAGS@ \
|
@EVAS_CFLAGS@ \
|
||||||
@x_cflags@ \
|
@x_cflags@ \
|
||||||
@SDL_CFLAGS@ \
|
@SDL_CFLAGS@ \
|
||||||
@DIRECTFB_CFLAGS@
|
@DIRECTFB_CFLAGS@ \
|
||||||
|
@XCB_CFLAGS@
|
||||||
|
|
||||||
bin_PROGRAMS = expedite
|
bin_PROGRAMS = expedite
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ image_blend_occlude3_very_many.c \
|
||||||
poly_blend.c
|
poly_blend.c
|
||||||
|
|
||||||
expedite_CFLAGS = @WIN32_CFLAGS@
|
expedite_CFLAGS = @WIN32_CFLAGS@
|
||||||
expedite_LDADD = @EVAS_LIBS@ @SDL_LIBS@ @x_libs@ @ddraw_libs@ @ddraw_16_libs@ @d3d_libs@ @wince_16_libs@ @glew_libs@ @DIRECTFB_LIBS@ -lm
|
expedite_LDADD = @EVAS_LIBS@ @SDL_LIBS@ @x_libs@ @ddraw_libs@ @ddraw_16_libs@ @d3d_libs@ @wince_16_libs@ @glew_libs@ @DIRECTFB_LIBS@ @XCB_LIBS@ -lm
|
||||||
expedite_LDFLAGS = @lt_enable_auto_import@
|
expedite_LDFLAGS = @lt_enable_auto_import@
|
||||||
|
|
||||||
if BUILD_SOFTWARE_X11
|
if BUILD_SOFTWARE_X11
|
||||||
|
@ -66,24 +67,19 @@ expedite_SOURCES += \
|
||||||
engine_software_x11.c engine_software_x11.h
|
engine_software_x11.c engine_software_x11.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_OPENGL_X11
|
|
||||||
expedite_SOURCES += \
|
|
||||||
engine_gl_x11.c engine_gl_x11.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if BUILD_SOFTWARE_16_X11
|
|
||||||
expedite_SOURCES += \
|
|
||||||
engine_software_16_x11.c engine_software_16_x11.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if BUILD_XRENDER_X11
|
if BUILD_XRENDER_X11
|
||||||
expedite_SOURCES += \
|
expedite_SOURCES += \
|
||||||
engine_xrender_x11.c engine_xrender_x11.h
|
engine_xrender_x11.c engine_xrender_x11.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_OPENGL_GLEW
|
if BUILD_OPENGL_X11
|
||||||
expedite_SOURCES += \
|
expedite_SOURCES += \
|
||||||
engine_gl_glew.c engine_gl_glew.h
|
engine_gl_x11.c engine_gl_x11.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
if BUILD_SOFTWARE_XCB
|
||||||
|
expedite_SOURCES += \
|
||||||
|
engine_software_xcb.c engine_software_xcb.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_SOFTWARE_DDRAW
|
if BUILD_SOFTWARE_DDRAW
|
||||||
|
@ -91,19 +87,14 @@ expedite_SOURCES += \
|
||||||
engine_software_ddraw.cpp engine_software_ddraw.h
|
engine_software_ddraw.cpp engine_software_ddraw.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_SOFTWARE_16_DDRAW
|
|
||||||
expedite_SOURCES += \
|
|
||||||
engine_software_16_ddraw.cpp engine_software_16_ddraw.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if BUILD_DIRECT3D
|
if BUILD_DIRECT3D
|
||||||
expedite_SOURCES += \
|
expedite_SOURCES += \
|
||||||
engine_direct3d.cpp engine_direct3d.h
|
engine_direct3d.cpp engine_direct3d.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_SOFTWARE_16_WINCE
|
if BUILD_OPENGL_GLEW
|
||||||
expedite_SOURCES += \
|
expedite_SOURCES += \
|
||||||
engine_software_16_wince.c engine_software_16_wince.h
|
engine_gl_glew.c engine_gl_glew.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_SOFTWARE_SDL
|
if BUILD_SOFTWARE_SDL
|
||||||
|
@ -121,3 +112,18 @@ expedite_SOURCES += \
|
||||||
engine_directfb.c engine_directfb.h
|
engine_directfb.c engine_directfb.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_SOFTWARE_16_X11
|
||||||
|
expedite_SOURCES += \
|
||||||
|
engine_software_16_x11.c engine_software_16_x11.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
if BUILD_SOFTWARE_16_DDRAW
|
||||||
|
expedite_SOURCES += \
|
||||||
|
engine_software_16_ddraw.cpp engine_software_16_ddraw.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
if BUILD_SOFTWARE_16_WINCE
|
||||||
|
expedite_SOURCES += \
|
||||||
|
engine_software_16_wince.c engine_software_16_wince.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,369 @@
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
#include <xcb/xcb.h>
|
||||||
|
#include <xcb/xcb_keysyms.h>
|
||||||
|
#include <Evas_Engine_Software_Xcb.h>
|
||||||
|
|
||||||
|
#define XK_MISCELLANY
|
||||||
|
#include <X11/keysymdef.h>
|
||||||
|
|
||||||
|
enum {
|
||||||
|
XCB_SIZE_US_POSITION_HINT = 1 << 0,
|
||||||
|
XCB_SIZE_US_SIZE_HINT = 1 << 1,
|
||||||
|
XCB_SIZE_P_POSITION_HINT = 1 << 2,
|
||||||
|
XCB_SIZE_P_SIZE_HINT = 1 << 3,
|
||||||
|
XCB_SIZE_P_MIN_SIZE_HINT = 1 << 4,
|
||||||
|
XCB_SIZE_P_MAX_SIZE_HINT = 1 << 5,
|
||||||
|
XCB_SIZE_P_RESIZE_INC_HINT = 1 << 6,
|
||||||
|
XCB_SIZE_P_ASPECT_HINT = 1 << 7,
|
||||||
|
XCB_SIZE_BASE_SIZE_HINT = 1 << 8,
|
||||||
|
XCB_SIZE_P_WIN_GRAVITY_HINT = 1 << 9
|
||||||
|
};
|
||||||
|
|
||||||
|
struct xcb_size_hints_t {
|
||||||
|
uint32_t flags;
|
||||||
|
int32_t x, y, width, height;
|
||||||
|
int32_t min_width, min_height;
|
||||||
|
int32_t max_width, max_height;
|
||||||
|
int32_t width_inc, height_inc;
|
||||||
|
int32_t min_aspect_num, min_aspect_den;
|
||||||
|
int32_t max_aspect_num, max_aspect_den;
|
||||||
|
int32_t base_width, base_height;
|
||||||
|
uint32_t win_gravity;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static xcb_connection_t *conn = NULL;
|
||||||
|
static xcb_screen_t *screen = NULL;
|
||||||
|
static xcb_window_t win = 0;
|
||||||
|
|
||||||
|
int
|
||||||
|
engine_software_xcb_args(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct xcb_size_hints_t hints;
|
||||||
|
uint32_t value_list[6];
|
||||||
|
xcb_screen_iterator_t iter;
|
||||||
|
Evas_Engine_Info_Software_Xcb *einfo;
|
||||||
|
xcb_intern_atom_reply_t *reply;
|
||||||
|
char *str;
|
||||||
|
xcb_intern_atom_cookie_t cookie1;
|
||||||
|
xcb_intern_atom_cookie_t cookie2;
|
||||||
|
xcb_intern_atom_cookie_t cookie3;
|
||||||
|
xcb_intern_atom_cookie_t cookie4;
|
||||||
|
xcb_intern_atom_cookie_t cookie5;
|
||||||
|
xcb_atom_t string;
|
||||||
|
xcb_atom_t wm_name;
|
||||||
|
xcb_atom_t wm_class;
|
||||||
|
xcb_atom_t wm_normal_hint;
|
||||||
|
xcb_atom_t wm_size_hint;
|
||||||
|
uint32_t value_mask;
|
||||||
|
int s;
|
||||||
|
int l1;
|
||||||
|
int l2;
|
||||||
|
int i;
|
||||||
|
int ok = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
if ((!strcmp(argv[i], "-e")) && (i < (argc - 1)))
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
if (!strcmp(argv[i], "xcb")) ok = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok) return 0;
|
||||||
|
|
||||||
|
conn = xcb_connect(NULL, &s);
|
||||||
|
if (!conn) return 0;
|
||||||
|
|
||||||
|
iter = xcb_setup_roots_iterator(xcb_get_setup(conn));
|
||||||
|
for (; iter.rem; --s, xcb_screen_next (&iter))
|
||||||
|
if (s == 0)
|
||||||
|
{
|
||||||
|
screen = iter.data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
evas_output_method_set(evas, evas_render_method_lookup("software_xcb"));
|
||||||
|
einfo = (Evas_Engine_Info_Software_Xcb *)evas_engine_info_get(evas);
|
||||||
|
if (!einfo)
|
||||||
|
{
|
||||||
|
printf("Evas does not support the Software XCB Engine\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
einfo->info.conn = conn;
|
||||||
|
einfo->info.screen = screen;
|
||||||
|
einfo->info.visual = einfo->func.best_visual_get(screen);
|
||||||
|
einfo->info.colormap = einfo->func.best_colormap_get(screen);
|
||||||
|
einfo->info.depth = einfo->func.best_depth_get(screen);
|
||||||
|
einfo->info.rotation = 0;
|
||||||
|
einfo->info.debug = 0;
|
||||||
|
|
||||||
|
value_mask =
|
||||||
|
XCB_CW_BACK_PIXMAP | XCB_CW_BORDER_PIXEL | XCB_CW_BIT_GRAVITY |
|
||||||
|
XCB_CW_BACKING_STORE | XCB_CW_EVENT_MASK | XCB_CW_COLORMAP;
|
||||||
|
|
||||||
|
value_list[0] = XCB_NONE;
|
||||||
|
value_list[1] = 0;
|
||||||
|
value_list[2] = XCB_GRAVITY_BIT_FORGET;
|
||||||
|
value_list[3] = XCB_BACKING_STORE_NOT_USEFUL;
|
||||||
|
value_list[4] =
|
||||||
|
XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
|
||||||
|
XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
|
||||||
|
XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
|
||||||
|
XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_EXPOSURE |
|
||||||
|
XCB_EVENT_MASK_STRUCTURE_NOTIFY;
|
||||||
|
value_list[5] = einfo->info.colormap;
|
||||||
|
|
||||||
|
win = xcb_generate_id(conn);
|
||||||
|
xcb_create_window(conn,
|
||||||
|
einfo->info.depth,
|
||||||
|
win, screen->root, 0, 0, win_w, win_h, 0,
|
||||||
|
XCB_WINDOW_CLASS_INPUT_OUTPUT,
|
||||||
|
einfo->info.visual->visual_id,
|
||||||
|
value_mask,
|
||||||
|
value_list);
|
||||||
|
einfo->info.drawable = win;
|
||||||
|
|
||||||
|
xcb_map_window(conn, win);
|
||||||
|
|
||||||
|
evas_engine_info_set(evas, (Evas_Engine_Info *) einfo);
|
||||||
|
|
||||||
|
/* XStoreName(disp, win, "Expedite - Evas Test Suite"); */
|
||||||
|
|
||||||
|
cookie1 = xcb_intern_atom_unchecked(conn, 0, strlen("STRING"), "STRING");
|
||||||
|
cookie2 = xcb_intern_atom_unchecked(conn, 0, strlen("WM_NAME"), "WM_NAME");
|
||||||
|
cookie3 = xcb_intern_atom_unchecked(conn, 0, strlen("WM_CLASS"), "WM_CLASS");
|
||||||
|
cookie4 = xcb_intern_atom_unchecked(conn, 0, strlen("WM_NORMAL_HINTS)"), "WM_NORMAL_HINTS)");
|
||||||
|
cookie5 = xcb_intern_atom_unchecked(conn, 0, strlen("WM_SIZE_HINTS)"), "WM_SIZE_HINTS)");
|
||||||
|
|
||||||
|
reply = xcb_intern_atom_reply(conn, cookie1, NULL);
|
||||||
|
string = reply->atom;
|
||||||
|
free(reply);
|
||||||
|
reply = xcb_intern_atom_reply(conn, cookie2, NULL);
|
||||||
|
wm_name = reply->atom;
|
||||||
|
free(reply);
|
||||||
|
|
||||||
|
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win,
|
||||||
|
wm_name, string, 8,
|
||||||
|
strlen("Expedite - Evas Test Suite"), "Expedite - Evas Test Suite");
|
||||||
|
|
||||||
|
/* chint.res_name = "expedite"; */
|
||||||
|
/* chint.res_class = "Expedite"; */
|
||||||
|
/* XSetClassHint(disp, win, &chint); */
|
||||||
|
|
||||||
|
l1 = strlen("expedite");
|
||||||
|
l2 = strlen("Expedite");
|
||||||
|
str = (char *)malloc(l1 + l2 + 1);
|
||||||
|
memcpy(str, "expedite", l1);
|
||||||
|
str[l1] = '\0';
|
||||||
|
memcpy(str + l1 + 1, "Expedite", l2);
|
||||||
|
|
||||||
|
reply = xcb_intern_atom_reply(conn, cookie3, NULL);
|
||||||
|
wm_class = reply->atom;
|
||||||
|
free(reply);
|
||||||
|
|
||||||
|
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win,
|
||||||
|
wm_class, string, 8,
|
||||||
|
l1 + l2 + 1, str);
|
||||||
|
free(str);
|
||||||
|
|
||||||
|
/* szhints.flags = PMinSize | PMaxSize | PSize | USSize; */
|
||||||
|
/* szhints.min_width = szhints.max_width = win_w; */
|
||||||
|
/* szhints.min_height = szhints.max_height = win_h; */
|
||||||
|
/* XSetWMNormalHints(disp, win, &szhints); */
|
||||||
|
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.flags = XCB_SIZE_US_SIZE_HINT | XCB_SIZE_P_SIZE_HINT | XCB_SIZE_P_MIN_SIZE_HINT | XCB_SIZE_P_MAX_SIZE_HINT;
|
||||||
|
hints.min_width = win_w;
|
||||||
|
hints.max_width = win_w;
|
||||||
|
hints.min_height = win_h;
|
||||||
|
hints.max_height = win_h;
|
||||||
|
|
||||||
|
reply = xcb_intern_atom_reply(conn, cookie4, NULL);
|
||||||
|
wm_normal_hint = reply->atom;
|
||||||
|
free(reply);
|
||||||
|
|
||||||
|
reply = xcb_intern_atom_reply(conn, cookie5, NULL);
|
||||||
|
wm_size_hint = reply->atom;
|
||||||
|
free(reply);
|
||||||
|
|
||||||
|
xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win,
|
||||||
|
wm_normal_hint, wm_size_hint, 32,
|
||||||
|
sizeof(hints) / 4, &hints);
|
||||||
|
|
||||||
|
free(xcb_get_input_focus_reply(conn, xcb_get_input_focus_unchecked(conn), NULL));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
engine_software_xcb_loop(void)
|
||||||
|
{
|
||||||
|
xcb_generic_event_t *ev;
|
||||||
|
|
||||||
|
again:
|
||||||
|
ev = xcb_poll_for_event(conn);
|
||||||
|
if (!ev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (ev->response_type)
|
||||||
|
{
|
||||||
|
case XCB_BUTTON_PRESS:
|
||||||
|
{
|
||||||
|
xcb_button_press_event_t *e;
|
||||||
|
|
||||||
|
e = (xcb_button_press_event_t *)ev;
|
||||||
|
|
||||||
|
evas_event_feed_mouse_move(evas, e->event_x, e->event_y, 0, NULL);
|
||||||
|
evas_event_feed_mouse_down(evas, e->detail, EVAS_BUTTON_NONE, 0, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_BUTTON_RELEASE:
|
||||||
|
{
|
||||||
|
xcb_button_release_event_t *e;
|
||||||
|
|
||||||
|
e = (xcb_button_release_event_t *)ev;
|
||||||
|
|
||||||
|
evas_event_feed_mouse_move(evas, e->event_x, e->event_y, 0, NULL);
|
||||||
|
evas_event_feed_mouse_up(evas, e->detail, EVAS_BUTTON_NONE, 0, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_MOTION_NOTIFY:
|
||||||
|
{
|
||||||
|
xcb_motion_notify_event_t *e;
|
||||||
|
|
||||||
|
e = (xcb_motion_notify_event_t *)ev;
|
||||||
|
|
||||||
|
evas_event_feed_mouse_move(evas, e->event_x, e->event_y, 0, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_EXPOSE:
|
||||||
|
{
|
||||||
|
xcb_expose_event_t *e;
|
||||||
|
|
||||||
|
e = (xcb_expose_event_t *)ev;
|
||||||
|
|
||||||
|
evas_damage_rectangle_add(evas,
|
||||||
|
e->x,
|
||||||
|
e->y,
|
||||||
|
e->width,
|
||||||
|
e->height);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_CONFIGURE_NOTIFY:
|
||||||
|
{
|
||||||
|
xcb_configure_notify_event_t *e;
|
||||||
|
|
||||||
|
e = (xcb_configure_notify_event_t *)ev;
|
||||||
|
|
||||||
|
evas_output_size_set(evas,
|
||||||
|
e->width,
|
||||||
|
e->height);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_ENTER_NOTIFY:
|
||||||
|
evas_event_feed_mouse_in(evas, 0, NULL);
|
||||||
|
break;
|
||||||
|
case XCB_LEAVE_NOTIFY:
|
||||||
|
evas_event_feed_mouse_out(evas, 0, NULL);
|
||||||
|
break;
|
||||||
|
case XCB_KEY_PRESS:
|
||||||
|
{
|
||||||
|
xcb_key_press_event_t *e;
|
||||||
|
xcb_key_symbols_t *kss;
|
||||||
|
xcb_keysym_t ks;
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
e = (xcb_key_press_event_t *)ev;
|
||||||
|
|
||||||
|
kss = xcb_key_symbols_alloc(conn);
|
||||||
|
|
||||||
|
ks = xcb_key_symbols_get_keysym(kss, e->detail, 0);
|
||||||
|
|
||||||
|
if ((ks == XK_Shift_L) || (ks == XK_Shift_R))
|
||||||
|
evas_key_modifier_on(evas, "Shift");
|
||||||
|
else if ((ks == XK_Control_L) || (ks == XK_Control_R))
|
||||||
|
evas_key_modifier_on(evas, "Control");
|
||||||
|
else if ((ks == XK_Alt_L) || (ks == XK_Alt_R))
|
||||||
|
evas_key_modifier_on(evas, "Alt");
|
||||||
|
else if ((ks == XK_Super_L) || (ks == XK_Super_R))
|
||||||
|
evas_key_modifier_on(evas, "Super");
|
||||||
|
else if (ks == XK_Caps_Lock)
|
||||||
|
{
|
||||||
|
if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
|
||||||
|
evas_key_lock_off(evas, "Caps_Lock");
|
||||||
|
else
|
||||||
|
evas_key_lock_on(evas, "Caps_Lock");
|
||||||
|
}
|
||||||
|
else if (ks == XK_Scroll_Lock)
|
||||||
|
{
|
||||||
|
if (evas_key_lock_is_set(evas_key_lock_get(evas), "Scroll_Lock"))
|
||||||
|
evas_key_lock_off(evas, "Scroll_Lock");
|
||||||
|
else
|
||||||
|
evas_key_lock_on(evas, "Scroll_Lock");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ks == XK_Left)
|
||||||
|
str = "Left";
|
||||||
|
if (ks == XK_Right)
|
||||||
|
str = "Right";
|
||||||
|
if (ks == XK_Escape)
|
||||||
|
str = "Escape";
|
||||||
|
if (ks == XK_Return)
|
||||||
|
str = "Return";
|
||||||
|
if (ks == 71)
|
||||||
|
str = "q";
|
||||||
|
|
||||||
|
evas_event_feed_key_down(evas, str, str, NULL, NULL, 0, NULL);
|
||||||
|
|
||||||
|
xcb_key_symbols_free(kss);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case XCB_KEY_RELEASE:
|
||||||
|
{
|
||||||
|
xcb_key_release_event_t *e;
|
||||||
|
xcb_key_symbols_t *kss;
|
||||||
|
xcb_keysym_t ks;
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
e = (xcb_key_release_event_t *)ev;
|
||||||
|
|
||||||
|
kss = xcb_key_symbols_alloc(conn);
|
||||||
|
|
||||||
|
ks = xcb_key_symbols_get_keysym(kss, e->detail, 0);
|
||||||
|
|
||||||
|
if ((ks == XK_Shift_L) || (ks == XK_Shift_R))
|
||||||
|
evas_key_modifier_on(evas, "Shift");
|
||||||
|
else if ((ks == XK_Control_L) || (ks == XK_Control_R))
|
||||||
|
evas_key_modifier_on(evas, "Control");
|
||||||
|
else if ((ks == XK_Alt_L) || (ks == XK_Alt_R))
|
||||||
|
evas_key_modifier_on(evas, "Alt");
|
||||||
|
else if ((ks == XK_Super_L) || (ks == XK_Super_R))
|
||||||
|
evas_key_modifier_on(evas, "Super");
|
||||||
|
|
||||||
|
if (ks == XK_Left)
|
||||||
|
str = "Left";
|
||||||
|
if (ks == XK_Right)
|
||||||
|
str = "Right";
|
||||||
|
if (ks == XK_Escape)
|
||||||
|
str = "Escape";
|
||||||
|
if (ks == XK_Return)
|
||||||
|
str = "Return";
|
||||||
|
if (ks == 71)
|
||||||
|
str = "q";
|
||||||
|
|
||||||
|
evas_event_feed_key_up(evas, str, str, NULL, NULL, 0, NULL);
|
||||||
|
|
||||||
|
xcb_key_symbols_free(kss);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
free(ev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
free(ev);
|
||||||
|
|
||||||
|
goto again;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef ENGINE_SOFTWARE_XCB_H
|
||||||
|
#define ENGINE_SOFTWARE_XCB_H
|
||||||
|
|
||||||
|
int engine_software_xcb_args(int argc, char **argv);
|
||||||
|
void engine_software_xcb_loop(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -1186,41 +1186,33 @@ _engine_args(int argc, char **argv)
|
||||||
if (engine_software_x11_args(argc, argv))
|
if (engine_software_x11_args(argc, argv))
|
||||||
loop_func = engine_software_x11_loop;
|
loop_func = engine_software_x11_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_OPENGL_GLEW
|
#if HAVE_EVAS_XRENDER_X11
|
||||||
if (engine_gl_glew_args(argc, argv))
|
if (engine_xrender_x11_args(argc, argv))
|
||||||
loop_func = engine_gl_glew_loop;
|
loop_func = engine_xrender_x11_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_OPENGL_X11
|
#if HAVE_EVAS_OPENGL_X11
|
||||||
if (engine_gl_x11_args(argc, argv))
|
if (engine_gl_x11_args(argc, argv))
|
||||||
loop_func = engine_gl_x11_loop;
|
loop_func = engine_gl_x11_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_XRENDER_X11
|
#if HAVE_EVAS_SOFTWARE_XCB
|
||||||
if (engine_xrender_x11_args(argc, argv))
|
if (engine_software_xcb_args(argc, argv))
|
||||||
loop_func = engine_xrender_x11_loop;
|
loop_func = engine_software_xcb_loop;
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_SOFTWARE_16_X11
|
|
||||||
if (engine_software_16_x11_args(argc, argv))
|
|
||||||
loop_func = engine_software_16_x11_loop;
|
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_DDRAW
|
#if HAVE_EVAS_SOFTWARE_DDRAW
|
||||||
if (engine_software_ddraw_args(argc, argv))
|
if (engine_software_ddraw_args(argc, argv))
|
||||||
loop_func = engine_software_ddraw_loop;
|
loop_func = engine_software_ddraw_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
|
||||||
if (engine_software_16_ddraw_args(argc, argv))
|
|
||||||
loop_func = engine_software_16_ddraw_loop;
|
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_SOFTWARE_SDL
|
|
||||||
if (engine_software_sdl_args(argc, argv))
|
|
||||||
loop_func = engine_software_sdl_loop;
|
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_DIRECT3D
|
#if HAVE_EVAS_DIRECT3D
|
||||||
if (engine_direct3d_args(argc, argv))
|
if (engine_direct3d_args(argc, argv))
|
||||||
loop_func = engine_direct3d_loop;
|
loop_func = engine_direct3d_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
#if HAVE_EVAS_OPENGL_GLEW
|
||||||
if (engine_software_16_wince_args(argc, argv))
|
if (engine_gl_glew_args(argc, argv))
|
||||||
loop_func = engine_software_16_wince_loop;
|
loop_func = engine_gl_glew_loop;
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_SDL
|
||||||
|
if (engine_software_sdl_args(argc, argv))
|
||||||
|
loop_func = engine_software_sdl_loop;
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_FB
|
#if HAVE_EVAS_FB
|
||||||
if (engine_fb_args(argc, argv))
|
if (engine_fb_args(argc, argv))
|
||||||
|
@ -1229,6 +1221,18 @@ _engine_args(int argc, char **argv)
|
||||||
#if HAVE_EVAS_DIRECTFB
|
#if HAVE_EVAS_DIRECTFB
|
||||||
if (engine_directfb_args(argc, argv))
|
if (engine_directfb_args(argc, argv))
|
||||||
loop_func = engine_directfb_loop;
|
loop_func = engine_directfb_loop;
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_X11
|
||||||
|
if (engine_software_16_x11_args(argc, argv))
|
||||||
|
loop_func = engine_software_16_x11_loop;
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
||||||
|
if (engine_software_16_ddraw_args(argc, argv))
|
||||||
|
loop_func = engine_software_16_ddraw_loop;
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
||||||
|
if (engine_software_16_wince_args(argc, argv))
|
||||||
|
loop_func = engine_software_16_wince_loop;
|
||||||
#endif
|
#endif
|
||||||
if ((!loop_func) || (!profile_ok))
|
if ((!loop_func) || (!profile_ok))
|
||||||
{
|
{
|
||||||
|
@ -1249,29 +1253,20 @@ _engine_args(int argc, char **argv)
|
||||||
#if HAVE_EVAS_XRENDER_X11
|
#if HAVE_EVAS_XRENDER_X11
|
||||||
" xr"
|
" xr"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_OPENGL_GLEW
|
|
||||||
" gl-glew"
|
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_OPENGL_X11
|
#if HAVE_EVAS_OPENGL_X11
|
||||||
" gl"
|
" gl"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_X11
|
#if HAVE_EVAS_SOFTWARE_XCB
|
||||||
" x11-16"
|
" xcb"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_DDRAW
|
#if HAVE_EVAS_SOFTWARE_DDRAW
|
||||||
" ddraw"
|
" ddraw"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
|
||||||
" ddraw-16"
|
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_DIRECT3D
|
#if HAVE_EVAS_DIRECT3D
|
||||||
" direct3d"
|
" direct3d"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
#if HAVE_EVAS_OPENGL_GLEW
|
||||||
" wince"
|
" gl-glew"
|
||||||
" wince-fb"
|
|
||||||
" wince-gapi"
|
|
||||||
" wince-ddraw"
|
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_SDL
|
#if HAVE_EVAS_SOFTWARE_SDL
|
||||||
" sdl sdl-16"
|
" sdl sdl-16"
|
||||||
|
@ -1281,6 +1276,18 @@ _engine_args(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_DIRECTFB
|
#if HAVE_EVAS_DIRECTFB
|
||||||
" directfb"
|
" directfb"
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_X11
|
||||||
|
" x11-16"
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
||||||
|
" ddraw-16"
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
||||||
|
" wince"
|
||||||
|
" wince-fb"
|
||||||
|
" wince-gapi"
|
||||||
|
" wince-ddraw"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"Where PROFILE can be one of:\n"
|
"Where PROFILE can be one of:\n"
|
||||||
|
|
|
@ -20,29 +20,23 @@
|
||||||
#if HAVE_EVAS_SOFTWARE_X11
|
#if HAVE_EVAS_SOFTWARE_X11
|
||||||
#include "engine_software_x11.h"
|
#include "engine_software_x11.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_OPENGL_GLEW
|
#if HAVE_EVAS_XRENDER_X11
|
||||||
#include "engine_gl_glew.h"
|
#include "engine_xrender_x11.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_OPENGL_X11
|
#if HAVE_EVAS_OPENGL_X11
|
||||||
#include "engine_gl_x11.h"
|
#include "engine_gl_x11.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_XRENDER_X11
|
#if HAVE_EVAS_SOFTWARE_XCB
|
||||||
#include "engine_xrender_x11.h"
|
#include "engine_software_xcb.h"
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_SOFTWARE_16_X11
|
|
||||||
#include "engine_software_16_x11.h"
|
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_DDRAW
|
#if HAVE_EVAS_SOFTWARE_DDRAW
|
||||||
#include "engine_software_ddraw.h"
|
#include "engine_software_ddraw.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
|
||||||
#include "engine_software_16_ddraw.h"
|
|
||||||
#endif
|
|
||||||
#if HAVE_EVAS_DIRECT3D
|
#if HAVE_EVAS_DIRECT3D
|
||||||
#include "engine_direct3d.h"
|
#include "engine_direct3d.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
#if HAVE_EVAS_OPENGL_GLEW
|
||||||
#include "engine_software_16_wince.h"
|
#include "engine_gl_glew.h"
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_EVAS_SOFTWARE_SDL
|
#if HAVE_EVAS_SOFTWARE_SDL
|
||||||
#include "engine_software_sdl.h"
|
#include "engine_software_sdl.h"
|
||||||
|
@ -53,6 +47,15 @@
|
||||||
#if HAVE_EVAS_DIRECTFB
|
#if HAVE_EVAS_DIRECTFB
|
||||||
#include "engine_directfb.h"
|
#include "engine_directfb.h"
|
||||||
#endif
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_X11
|
||||||
|
#include "engine_software_16_x11.h"
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_DDRAW
|
||||||
|
#include "engine_software_16_ddraw.h"
|
||||||
|
#endif
|
||||||
|
#if HAVE_EVAS_SOFTWARE_16_WINCE
|
||||||
|
#include "engine_software_16_wince.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
#include "about.h"
|
#include "about.h"
|
||||||
|
|
Loading…
Reference in New Issue