aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/modules/engines/software_x11
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/modules/engines/software_x11')
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h52
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Makefile.am85
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Makefile.in952
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_engine.c929
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_engine.h137
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c498
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h30
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c424
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h10
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c8
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c1092
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h30
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c108
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h11
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c428
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h45
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c368
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h16
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c7
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c1137
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h92
21 files changed, 0 insertions, 6459 deletions
diff --git a/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h b/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h
deleted file mode 100644
index e42c10a..0000000
--- a/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h
+++ /dev/null
@@ -1,52 +0,0 @@
1#ifndef _EVAS_ENGINE_SOFTWARE_X11_H
2# define _EVAS_ENGINE_SOFTWARE_X11_H
3
4typedef enum
5{
6 EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB,
7 EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB
8} Evas_Engine_Info_Software_X11_Backend;
9
10typedef struct _Evas_Engine_Info_Software_X11 Evas_Engine_Info_Software_X11;
11
12struct _Evas_Engine_Info_Software_X11
13{
14 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
15 /* at you and make nasty noises */
16 Evas_Engine_Info magic;
17
18 /* engine specific data & parameters it needs to set up */
19 struct
20 {
21 Evas_Engine_Info_Software_X11_Backend backend;
22
23 void *connection, *screen;
24 unsigned int drawable, mask;
25 void *visual;
26 unsigned int colormap;
27 int depth, rotation;
28
29 Eina_Bool alloc_grayscale : 1;
30 Eina_Bool debug : 1;
31 Eina_Bool shape_dither : 1;
32 Eina_Bool destination_alpha : 1;
33 Eina_Bool track_mask_changes : 1;
34
35 int alloc_colors_max;
36 } info;
37
38 /* engine specific function calls to query stuff about the destination */
39 struct
40 {
41 void *(*best_visual_get) (int backend, void *connection, int screen);
42 unsigned int (*best_colormap_get) (int backend, void *connection, int screen);
43 int (*best_depth_get) (int backend, void *connection, int screen);
44 } func;
45
46 unsigned char mask_changed : 1;
47
48 /* non-blocking or blocking mode */
49 Evas_Engine_Render_Mode render_mode;
50};
51
52#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/Makefile.am b/libraries/evas/src/modules/engines/software_x11/Makefile.am
deleted file mode 100644
index 5a2e345..0000000
--- a/libraries/evas/src/modules/engines/software_x11/Makefile.am
+++ /dev/null
@@ -1,85 +0,0 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4if BUILD_ENGINE_SOFTWARE_X11
5
6SOFTWARE_X11_SOURCES = evas_engine.c
7
8if BUILD_ENGINE_SOFTWARE_XLIB
9
10AM_CPPFLAGS = \
11-I. \
12-I$(top_srcdir)/src/lib \
13-I$(top_srcdir)/src/lib/include \
14-I$(top_srcdir)/src/modules/engines \
15@FREETYPE_CFLAGS@ \
16@PIXMAN_CFLAGS@ \
17@EINA_CFLAGS@ \
18@evas_engine_software_xlib_cflags@
19
20SOFTWARE_X11_SOURCES += \
21evas_xlib_outbuf.c \
22evas_xlib_buffer.c \
23evas_xlib_color.c \
24evas_xlib_main.c
25
26SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @EINA_LIBS@ @evas_engine_software_xlib_libs@
27
28endif
29
30if BUILD_ENGINE_SOFTWARE_XCB
31
32AM_CPPFLAGS = \
33-I. \
34-I$(top_srcdir)/src/lib \
35-I$(top_srcdir)/src/lib/include \
36-I$(top_srcdir)/src/modules/engines \
37@FREETYPE_CFLAGS@ \
38@PIXMAN_CFLAGS@ \
39@EINA_CFLAGS@ \
40@evas_engine_software_xcb_cflags@
41
42SOFTWARE_X11_SOURCES += \
43evas_xcb_xdefaults.c \
44evas_xcb_outbuf.c \
45evas_xcb_buffer.c \
46evas_xcb_color.c \
47evas_xcb_main.c
48
49SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @PIXMAN_LIBS@ @EINA_LIBS@ @evas_engine_software_xcb_libs@
50
51endif
52
53includes_HEADERS = Evas_Engine_Software_X11.h
54includesdir = $(includedir)/evas-@VMAJ@
55
56if !EVAS_STATIC_BUILD_SOFTWARE_X11
57
58pkgdir = $(libdir)/evas/modules/engines/software_x11/$(MODULE_ARCH)
59pkg_LTLIBRARIES = module.la
60
61module_la_SOURCES = $(SOFTWARE_X11_SOURCES)
62module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(SOFTWARE_X11_LIBADD)
63module_la_LDFLAGS = -no-undefined -module -avoid-version
64module_la_LIBTOOLFLAGS = --tag=disable-static
65
66else
67
68noinst_LTLIBRARIES = libevas_engine_software_x11.la
69
70libevas_engine_software_x11_la_SOURCES = $(SOFTWARE_X11_SOURCES)
71libevas_engine_software_x11_la_LIBADD = $(SOFTWARE_X11_LIBADD)
72
73endif
74endif
75
76EXTRA_DIST = \
77evas_engine.h \
78evas_xlib_outbuf.h \
79evas_xlib_buffer.h \
80evas_xlib_color.h \
81evas_xcb_outbuf.h \
82evas_xcb_buffer.h \
83evas_xcb_color.h \
84evas_xcb_xdefaults.h
85
diff --git a/libraries/evas/src/modules/engines/software_x11/Makefile.in b/libraries/evas/src/modules/engines/software_x11/Makefile.in
deleted file mode 100644
index caab918..0000000
--- a/libraries/evas/src/modules/engines/software_x11/Makefile.in
+++ /dev/null
@@ -1,952 +0,0 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__append_1 = \
39@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_outbuf.c \
40@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_buffer.c \
41@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_color.c \
42@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_main.c
43
44@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__append_2 = \
45@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_xdefaults.c \
46@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_outbuf.c \
47@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_buffer.c \
48@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_color.c \
49@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_main.c
50
51subdir = src/modules/engines/software_x11
52DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
53 $(srcdir)/Makefile.in
54ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
55am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
56 $(top_srcdir)/m4/efl_coverage.m4 \
57 $(top_srcdir)/m4/efl_doxygen.m4 \
58 $(top_srcdir)/m4/efl_fnmatch.m4 \
59 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
60 $(top_srcdir)/m4/evas_check_engine.m4 \
61 $(top_srcdir)/m4/evas_check_loader.m4 \
62 $(top_srcdir)/m4/evas_converter.m4 \
63 $(top_srcdir)/m4/evas_dither.m4 \
64 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
65 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
66 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
67 $(top_srcdir)/configure.ac
68am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
69 $(ACLOCAL_M4)
70mkinstalldirs = $(install_sh) -d
71CONFIG_HEADER = $(top_builddir)/config.h
72CONFIG_CLEAN_FILES =
73CONFIG_CLEAN_VPATH_FILES =
74am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
75am__vpath_adj = case $$p in \
76 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
77 *) f=$$p;; \
78 esac;
79am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
80am__install_max = 40
81am__nobase_strip_setup = \
82 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
83am__nobase_strip = \
84 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
85am__nobase_list = $(am__nobase_strip_setup); \
86 for p in $$list; do echo "$$p $$p"; done | \
87 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
88 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
89 if (++n[$$2] == $(am__install_max)) \
90 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
91 END { for (dir in files) print dir, files[dir] }'
92am__base_list = \
93 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
94 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
95am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
96LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
97am__DEPENDENCIES_1 =
98@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
99am__libevas_engine_software_x11_la_SOURCES_DIST = evas_engine.c \
100 evas_xlib_outbuf.c evas_xlib_buffer.c evas_xlib_color.c \
101 evas_xlib_main.c evas_xcb_xdefaults.c evas_xcb_outbuf.c \
102 evas_xcb_buffer.c evas_xcb_color.c evas_xcb_main.c
103@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__objects_1 = evas_xlib_outbuf.lo \
104@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_buffer.lo \
105@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_color.lo \
106@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_main.lo
107@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__objects_2 = evas_xcb_xdefaults.lo \
108@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_outbuf.lo \
109@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_buffer.lo \
110@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_color.lo \
111@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_main.lo
112@BUILD_ENGINE_SOFTWARE_X11_TRUE@am__objects_3 = evas_engine.lo \
113@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_1) \
114@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_2)
115@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am_libevas_engine_software_x11_la_OBJECTS = $(am__objects_3)
116libevas_engine_software_x11_la_OBJECTS = \
117 $(am_libevas_engine_software_x11_la_OBJECTS)
118AM_V_lt = $(am__v_lt_$(V))
119am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
120am__v_lt_0 = --silent
121@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am_libevas_engine_software_x11_la_rpath =
122@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
123@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@ $(am__DEPENDENCIES_1)
124am__module_la_SOURCES_DIST = evas_engine.c evas_xlib_outbuf.c \
125 evas_xlib_buffer.c evas_xlib_color.c evas_xlib_main.c \
126 evas_xcb_xdefaults.c evas_xcb_outbuf.c evas_xcb_buffer.c \
127 evas_xcb_color.c evas_xcb_main.c
128@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__objects_4 = module_la-evas_xlib_outbuf.lo \
129@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_buffer.lo \
130@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_color.lo \
131@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_main.lo
132@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__objects_5 = module_la-evas_xcb_xdefaults.lo \
133@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_outbuf.lo \
134@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_buffer.lo \
135@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_color.lo \
136@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_main.lo
137@BUILD_ENGINE_SOFTWARE_X11_TRUE@am__objects_6 = \
138@BUILD_ENGINE_SOFTWARE_X11_TRUE@ module_la-evas_engine.lo \
139@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_4) \
140@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_5)
141@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@am_module_la_OBJECTS = $(am__objects_6)
142module_la_OBJECTS = $(am_module_la_OBJECTS)
143module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
144 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
145 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
146@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@am_module_la_rpath = -rpath \
147@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@ $(pkgdir)
148DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
149depcomp = $(SHELL) $(top_srcdir)/depcomp
150am__depfiles_maybe = depfiles
151am__mv = mv -f
152COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
153 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
154LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
155 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
156 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
157 $(AM_CFLAGS) $(CFLAGS)
158AM_V_CC = $(am__v_CC_$(V))
159am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
160am__v_CC_0 = @echo " CC " $@;
161AM_V_at = $(am__v_at_$(V))
162am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
163am__v_at_0 = @
164CCLD = $(CC)
165LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
166 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
167 $(AM_LDFLAGS) $(LDFLAGS) -o $@
168AM_V_CCLD = $(am__v_CCLD_$(V))
169am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
170am__v_CCLD_0 = @echo " CCLD " $@;
171AM_V_GEN = $(am__v_GEN_$(V))
172am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
173am__v_GEN_0 = @echo " GEN " $@;
174SOURCES = $(libevas_engine_software_x11_la_SOURCES) \
175 $(module_la_SOURCES)
176DIST_SOURCES = $(am__libevas_engine_software_x11_la_SOURCES_DIST) \
177 $(am__module_la_SOURCES_DIST)
178am__includes_HEADERS_DIST = Evas_Engine_Software_X11.h
179HEADERS = $(includes_HEADERS)
180ETAGS = etags
181CTAGS = ctags
182DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
183ACLOCAL = @ACLOCAL@
184ALLOCA = @ALLOCA@
185AMTAR = @AMTAR@
186AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
187AR = @AR@
188AS = @AS@
189AUTOCONF = @AUTOCONF@
190AUTOHEADER = @AUTOHEADER@
191AUTOMAKE = @AUTOMAKE@
192AWK = @AWK@
193CC = @CC@
194CCDEPMODE = @CCDEPMODE@
195CFLAGS = @CFLAGS@
196CHECK_CFLAGS = @CHECK_CFLAGS@
197CHECK_LIBS = @CHECK_LIBS@
198CPP = @CPP@
199CPPFLAGS = @CPPFLAGS@
200CXX = @CXX@
201CXXCPP = @CXXCPP@
202CXXDEPMODE = @CXXDEPMODE@
203CXXFLAGS = @CXXFLAGS@
204CYGPATH_W = @CYGPATH_W@
205DEFS = @DEFS@
206DEPDIR = @DEPDIR@
207DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
208DIRECTFB_LIBS = @DIRECTFB_LIBS@
209DLLTOOL = @DLLTOOL@
210DSYMUTIL = @DSYMUTIL@
211DUMPBIN = @DUMPBIN@
212ECHO_C = @ECHO_C@
213ECHO_N = @ECHO_N@
214ECHO_T = @ECHO_T@
215ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
216ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
217EDB_CFLAGS = @EDB_CFLAGS@
218EDB_LIBS = @EDB_LIBS@
219EDJE_CFLAGS = @EDJE_CFLAGS@
220EDJE_LIBS = @EDJE_LIBS@
221EET_CFLAGS = @EET_CFLAGS@
222EET_LIBS = @EET_LIBS@
223EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
224EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
225EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
226EGREP = @EGREP@
227EINA_CFLAGS = @EINA_CFLAGS@
228EINA_LIBS = @EINA_LIBS@
229EVAS_CFLAGS = @EVAS_CFLAGS@
230EVAS_LIBS = @EVAS_LIBS@
231EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
232EVIL_CFLAGS = @EVIL_CFLAGS@
233EVIL_LIBS = @EVIL_LIBS@
234EXEEXT = @EXEEXT@
235EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
236EXOTIC_LIBS = @EXOTIC_LIBS@
237FGREP = @FGREP@
238FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
239FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
240FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
241FREETYPE_LIBS = @FREETYPE_LIBS@
242FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
243FRIBIDI_LIBS = @FRIBIDI_LIBS@
244GL_EET_CFLAGS = @GL_EET_CFLAGS@
245GL_EET_LIBS = @GL_EET_LIBS@
246GREP = @GREP@
247HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
248HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
249INSTALL = @INSTALL@
250INSTALL_DATA = @INSTALL_DATA@
251INSTALL_PROGRAM = @INSTALL_PROGRAM@
252INSTALL_SCRIPT = @INSTALL_SCRIPT@
253INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
254LD = @LD@
255LDFLAGS = @LDFLAGS@
256LIBOBJS = @LIBOBJS@
257LIBS = @LIBS@
258LIBTOOL = @LIBTOOL@
259LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
260LINEBREAK_LIBS = @LINEBREAK_LIBS@
261LIPO = @LIPO@
262LN_S = @LN_S@
263LTLIBOBJS = @LTLIBOBJS@
264MAKEINFO = @MAKEINFO@
265MKDIR_P = @MKDIR_P@
266MODULE_ARCH = @MODULE_ARCH@
267NM = @NM@
268NMEDIT = @NMEDIT@
269OBJC = @OBJC@
270OBJCDEPMODE = @OBJCDEPMODE@
271OBJCFLAGS = @OBJCFLAGS@
272OBJDUMP = @OBJDUMP@
273OBJEXT = @OBJEXT@
274OTOOL = @OTOOL@
275OTOOL64 = @OTOOL64@
276PACKAGE = @PACKAGE@
277PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
278PACKAGE_NAME = @PACKAGE_NAME@
279PACKAGE_STRING = @PACKAGE_STRING@
280PACKAGE_TARNAME = @PACKAGE_TARNAME@
281PACKAGE_URL = @PACKAGE_URL@
282PACKAGE_VERSION = @PACKAGE_VERSION@
283PATH_SEPARATOR = @PATH_SEPARATOR@
284PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
285PIXMAN_LIBS = @PIXMAN_LIBS@
286PKG_CONFIG = @PKG_CONFIG@
287PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
288PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
289PNG_CFLAGS = @PNG_CFLAGS@
290PNG_LIBS = @PNG_LIBS@
291RANLIB = @RANLIB@
292SDL_CFLAGS = @SDL_CFLAGS@
293SDL_LIBS = @SDL_LIBS@
294SED = @SED@
295SET_MAKE = @SET_MAKE@
296SHELL = @SHELL@
297SHM_OPEN_LINK = @SHM_OPEN_LINK@
298STRIP = @STRIP@
299SVG_CFLAGS = @SVG_CFLAGS@
300SVG_LIBS = @SVG_LIBS@
301VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
302VALGRIND_LIBS = @VALGRIND_LIBS@
303VERSION = @VERSION@
304VMAJ = @VMAJ@
305WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
306WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
307XCB_CFLAGS = @XCB_CFLAGS@
308XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
309XCB_GL_LIBS = @XCB_GL_LIBS@
310XCB_LIBS = @XCB_LIBS@
311XEXT_CFLAGS = @XEXT_CFLAGS@
312XEXT_LIBS = @XEXT_LIBS@
313XMKMF = @XMKMF@
314X_CFLAGS = @X_CFLAGS@
315X_EXTRA_LIBS = @X_EXTRA_LIBS@
316X_LIBS = @X_LIBS@
317X_PRE_LIBS = @X_PRE_LIBS@
318abs_builddir = @abs_builddir@
319abs_srcdir = @abs_srcdir@
320abs_top_builddir = @abs_top_builddir@
321abs_top_srcdir = @abs_top_srcdir@
322ac_ct_CC = @ac_ct_CC@
323ac_ct_CXX = @ac_ct_CXX@
324ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
325ac_ct_OBJC = @ac_ct_OBJC@
326altivec_cflags = @altivec_cflags@
327am__include = @am__include@
328am__leading_dot = @am__leading_dot@
329am__quote = @am__quote@
330am__tar = @am__tar@
331am__untar = @am__untar@
332bindir = @bindir@
333build = @build@
334build_alias = @build_alias@
335build_cpu = @build_cpu@
336build_os = @build_os@
337build_vendor = @build_vendor@
338builddir = @builddir@
339datadir = @datadir@
340datarootdir = @datarootdir@
341dlopen_libs = @dlopen_libs@
342docdir = @docdir@
343dvidir = @dvidir@
344edje_cc = @edje_cc@
345efl_doxygen = @efl_doxygen@
346efl_have_doxygen = @efl_have_doxygen@
347evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
348evas_engine_buffer_libs = @evas_engine_buffer_libs@
349evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
350evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
351evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
352evas_engine_directfb_libs = @evas_engine_directfb_libs@
353evas_engine_fb_cflags = @evas_engine_fb_cflags@
354evas_engine_fb_libs = @evas_engine_fb_libs@
355evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
356evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
357evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
358evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
359evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
360evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
361evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
362evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
363evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
364evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
365evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
366evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
367evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
368evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
369evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
370evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
371evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
372evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
373evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
374evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
375evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
376evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
377evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
378evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
379evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
380evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
381evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
382evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
383evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
384evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
385evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
386evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
387evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
388evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
389evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
390evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
391evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
392evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
393evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
394evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
395evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
396evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
397evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
398evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
399evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
400evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
401evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
402evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
403evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
404evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
405evas_image_loader_png_libs = @evas_image_loader_png_libs@
406evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
407evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
408evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
409evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
410evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
411evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
412evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
413evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
414evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
415evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
416evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
417evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
418exec_prefix = @exec_prefix@
419have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
420have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
421have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
422have_evas_engine_software_x11 = @have_evas_engine_software_x11@
423have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
424have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
425have_lcov = @have_lcov@
426host = @host@
427host_alias = @host_alias@
428host_cpu = @host_cpu@
429host_os = @host_os@
430host_vendor = @host_vendor@
431htmldir = @htmldir@
432includedir = @includedir@
433infodir = @infodir@
434install_sh = @install_sh@
435libdir = @libdir@
436libexecdir = @libexecdir@
437localedir = @localedir@
438localstatedir = @localstatedir@
439lt_ECHO = @lt_ECHO@
440lt_enable_auto_import = @lt_enable_auto_import@
441mandir = @mandir@
442mkdir_p = @mkdir_p@
443oldincludedir = @oldincludedir@
444pdfdir = @pdfdir@
445pkgconfig_requires_private = @pkgconfig_requires_private@
446prefix = @prefix@
447program_transform_name = @program_transform_name@
448psdir = @psdir@
449pthread_cflags = @pthread_cflags@
450pthread_libs = @pthread_libs@
451release_info = @release_info@
452requirement_evas = @requirement_evas@
453sbindir = @sbindir@
454sharedstatedir = @sharedstatedir@
455srcdir = @srcdir@
456sysconfdir = @sysconfdir@
457target_alias = @target_alias@
458top_build_prefix = @top_build_prefix@
459top_builddir = @top_builddir@
460top_srcdir = @top_srcdir@
461version_info = @version_info@
462MAINTAINERCLEANFILES = Makefile.in
463@BUILD_ENGINE_SOFTWARE_X11_TRUE@SOFTWARE_X11_SOURCES = evas_engine.c \
464@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__append_1) \
465@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__append_2)
466@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@AM_CPPFLAGS = \
467@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I. \
468@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/lib \
469@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/lib/include \
470@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/modules/engines \
471@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@FREETYPE_CFLAGS@ \
472@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@PIXMAN_CFLAGS@ \
473@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@EINA_CFLAGS@ \
474@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@evas_engine_software_xcb_cflags@
475
476@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@AM_CPPFLAGS = \
477@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I. \
478@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/lib \
479@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/lib/include \
480@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/modules/engines \
481@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@FREETYPE_CFLAGS@ \
482@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@PIXMAN_CFLAGS@ \
483@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@EINA_CFLAGS@ \
484@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@evas_engine_software_xlib_cflags@
485
486@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @PIXMAN_LIBS@ @EINA_LIBS@ @evas_engine_software_xcb_libs@
487@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @EINA_LIBS@ @evas_engine_software_xlib_libs@
488@BUILD_ENGINE_SOFTWARE_X11_TRUE@includes_HEADERS = Evas_Engine_Software_X11.h
489@BUILD_ENGINE_SOFTWARE_X11_TRUE@includesdir = $(includedir)/evas-@VMAJ@
490@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_x11/$(MODULE_ARCH)
491@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@pkg_LTLIBRARIES = module.la
492@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_SOURCES = $(SOFTWARE_X11_SOURCES)
493@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(SOFTWARE_X11_LIBADD)
494@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version
495@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
496@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_software_x11.la
497@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_SOURCES = $(SOFTWARE_X11_SOURCES)
498@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_LIBADD = $(SOFTWARE_X11_LIBADD)
499EXTRA_DIST = \
500evas_engine.h \
501evas_xlib_outbuf.h \
502evas_xlib_buffer.h \
503evas_xlib_color.h \
504evas_xcb_outbuf.h \
505evas_xcb_buffer.h \
506evas_xcb_color.h \
507evas_xcb_xdefaults.h
508
509all: all-am
510
511.SUFFIXES:
512.SUFFIXES: .c .lo .o .obj
513$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
514 @for dep in $?; do \
515 case '$(am__configure_deps)' in \
516 *$$dep*) \
517 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
518 && { if test -f $@; then exit 0; else break; fi; }; \
519 exit 1;; \
520 esac; \
521 done; \
522 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_x11/Makefile'; \
523 $(am__cd) $(top_srcdir) && \
524 $(AUTOMAKE) --gnu src/modules/engines/software_x11/Makefile
525.PRECIOUS: Makefile
526Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
527 @case '$?' in \
528 *config.status*) \
529 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
530 *) \
531 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
532 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
533 esac;
534
535$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
536 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
537
538$(top_srcdir)/configure: $(am__configure_deps)
539 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
540$(ACLOCAL_M4): $(am__aclocal_m4_deps)
541 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
542$(am__aclocal_m4_deps):
543
544clean-noinstLTLIBRARIES:
545 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
546 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
547 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
548 test "$$dir" != "$$p" || dir=.; \
549 echo "rm -f \"$${dir}/so_locations\""; \
550 rm -f "$${dir}/so_locations"; \
551 done
552install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
553 @$(NORMAL_INSTALL)
554 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
555 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
556 list2=; for p in $$list; do \
557 if test -f $$p; then \
558 list2="$$list2 $$p"; \
559 else :; fi; \
560 done; \
561 test -z "$$list2" || { \
562 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
563 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
564 }
565
566uninstall-pkgLTLIBRARIES:
567 @$(NORMAL_UNINSTALL)
568 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
569 for p in $$list; do \
570 $(am__strip_dir) \
571 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
572 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
573 done
574
575clean-pkgLTLIBRARIES:
576 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
577 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
578 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
579 test "$$dir" != "$$p" || dir=.; \
580 echo "rm -f \"$${dir}/so_locations\""; \
581 rm -f "$${dir}/so_locations"; \
582 done
583libevas_engine_software_x11.la: $(libevas_engine_software_x11_la_OBJECTS) $(libevas_engine_software_x11_la_DEPENDENCIES)
584 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_x11_la_rpath) $(libevas_engine_software_x11_la_OBJECTS) $(libevas_engine_software_x11_la_LIBADD) $(LIBS)
585module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
586 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
587
588mostlyclean-compile:
589 -rm -f *.$(OBJEXT)
590
591distclean-compile:
592 -rm -f *.tab.c
593
594@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
595@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_buffer.Plo@am__quote@
596@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_color.Plo@am__quote@
597@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_main.Plo@am__quote@
598@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_outbuf.Plo@am__quote@
599@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_xdefaults.Plo@am__quote@
600@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_buffer.Plo@am__quote@
601@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_color.Plo@am__quote@
602@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_main.Plo@am__quote@
603@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_outbuf.Plo@am__quote@
604@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
605@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_buffer.Plo@am__quote@
606@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_color.Plo@am__quote@
607@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_main.Plo@am__quote@
608@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_outbuf.Plo@am__quote@
609@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_xdefaults.Plo@am__quote@
610@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_buffer.Plo@am__quote@
611@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_color.Plo@am__quote@
612@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_main.Plo@am__quote@
613@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_outbuf.Plo@am__quote@
614
615.c.o:
616@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
617@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
618@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
619@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
620@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
621@am__fastdepCC_FALSE@ $(COMPILE) -c $<
622
623.c.obj:
624@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
625@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
626@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
627@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
628@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
629@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
630
631.c.lo:
632@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
633@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
634@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
635@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
636@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
637@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
638
639module_la-evas_engine.lo: evas_engine.c
640@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
641@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
642@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
643@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
644@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
645@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
646
647module_la-evas_xlib_outbuf.lo: evas_xlib_outbuf.c
648@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_outbuf.Tpo -c -o module_la-evas_xlib_outbuf.lo `test -f 'evas_xlib_outbuf.c' || echo '$(srcdir)/'`evas_xlib_outbuf.c
649@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_outbuf.Tpo $(DEPDIR)/module_la-evas_xlib_outbuf.Plo
650@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
651@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_outbuf.c' object='module_la-evas_xlib_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
652@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
653@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_outbuf.lo `test -f 'evas_xlib_outbuf.c' || echo '$(srcdir)/'`evas_xlib_outbuf.c
654
655module_la-evas_xlib_buffer.lo: evas_xlib_buffer.c
656@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_buffer.Tpo -c -o module_la-evas_xlib_buffer.lo `test -f 'evas_xlib_buffer.c' || echo '$(srcdir)/'`evas_xlib_buffer.c
657@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_buffer.Tpo $(DEPDIR)/module_la-evas_xlib_buffer.Plo
658@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
659@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_buffer.c' object='module_la-evas_xlib_buffer.lo' libtool=yes @AMDEPBACKSLASH@
660@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
661@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_buffer.lo `test -f 'evas_xlib_buffer.c' || echo '$(srcdir)/'`evas_xlib_buffer.c
662
663module_la-evas_xlib_color.lo: evas_xlib_color.c
664@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_color.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_color.Tpo -c -o module_la-evas_xlib_color.lo `test -f 'evas_xlib_color.c' || echo '$(srcdir)/'`evas_xlib_color.c
665@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_color.Tpo $(DEPDIR)/module_la-evas_xlib_color.Plo
666@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
667@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_color.c' object='module_la-evas_xlib_color.lo' libtool=yes @AMDEPBACKSLASH@
668@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
669@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_color.lo `test -f 'evas_xlib_color.c' || echo '$(srcdir)/'`evas_xlib_color.c
670
671module_la-evas_xlib_main.lo: evas_xlib_main.c
672@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_main.Tpo -c -o module_la-evas_xlib_main.lo `test -f 'evas_xlib_main.c' || echo '$(srcdir)/'`evas_xlib_main.c
673@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_main.Tpo $(DEPDIR)/module_la-evas_xlib_main.Plo
674@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
675@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_main.c' object='module_la-evas_xlib_main.lo' libtool=yes @AMDEPBACKSLASH@
676@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
677@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_main.lo `test -f 'evas_xlib_main.c' || echo '$(srcdir)/'`evas_xlib_main.c
678
679module_la-evas_xcb_xdefaults.lo: evas_xcb_xdefaults.c
680@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_xdefaults.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_xdefaults.Tpo -c -o module_la-evas_xcb_xdefaults.lo `test -f 'evas_xcb_xdefaults.c' || echo '$(srcdir)/'`evas_xcb_xdefaults.c
681@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_xdefaults.Tpo $(DEPDIR)/module_la-evas_xcb_xdefaults.Plo
682@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
683@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_xdefaults.c' object='module_la-evas_xcb_xdefaults.lo' libtool=yes @AMDEPBACKSLASH@
684@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
685@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_xdefaults.lo `test -f 'evas_xcb_xdefaults.c' || echo '$(srcdir)/'`evas_xcb_xdefaults.c
686
687module_la-evas_xcb_outbuf.lo: evas_xcb_outbuf.c
688@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_outbuf.Tpo -c -o module_la-evas_xcb_outbuf.lo `test -f 'evas_xcb_outbuf.c' || echo '$(srcdir)/'`evas_xcb_outbuf.c
689@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_outbuf.Tpo $(DEPDIR)/module_la-evas_xcb_outbuf.Plo
690@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
691@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_outbuf.c' object='module_la-evas_xcb_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
692@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
693@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_outbuf.lo `test -f 'evas_xcb_outbuf.c' || echo '$(srcdir)/'`evas_xcb_outbuf.c
694
695module_la-evas_xcb_buffer.lo: evas_xcb_buffer.c
696@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_buffer.Tpo -c -o module_la-evas_xcb_buffer.lo `test -f 'evas_xcb_buffer.c' || echo '$(srcdir)/'`evas_xcb_buffer.c
697@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_buffer.Tpo $(DEPDIR)/module_la-evas_xcb_buffer.Plo
698@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
699@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_buffer.c' object='module_la-evas_xcb_buffer.lo' libtool=yes @AMDEPBACKSLASH@
700@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
701@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_buffer.lo `test -f 'evas_xcb_buffer.c' || echo '$(srcdir)/'`evas_xcb_buffer.c
702
703module_la-evas_xcb_color.lo: evas_xcb_color.c
704@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_color.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_color.Tpo -c -o module_la-evas_xcb_color.lo `test -f 'evas_xcb_color.c' || echo '$(srcdir)/'`evas_xcb_color.c
705@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_color.Tpo $(DEPDIR)/module_la-evas_xcb_color.Plo
706@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
707@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_color.c' object='module_la-evas_xcb_color.lo' libtool=yes @AMDEPBACKSLASH@
708@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
709@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_color.lo `test -f 'evas_xcb_color.c' || echo '$(srcdir)/'`evas_xcb_color.c
710
711module_la-evas_xcb_main.lo: evas_xcb_main.c
712@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_main.Tpo -c -o module_la-evas_xcb_main.lo `test -f 'evas_xcb_main.c' || echo '$(srcdir)/'`evas_xcb_main.c
713@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_main.Tpo $(DEPDIR)/module_la-evas_xcb_main.Plo
714@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
715@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_main.c' object='module_la-evas_xcb_main.lo' libtool=yes @AMDEPBACKSLASH@
716@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
717@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_main.lo `test -f 'evas_xcb_main.c' || echo '$(srcdir)/'`evas_xcb_main.c
718
719mostlyclean-libtool:
720 -rm -f *.lo
721
722clean-libtool:
723 -rm -rf .libs _libs
724install-includesHEADERS: $(includes_HEADERS)
725 @$(NORMAL_INSTALL)
726 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
727 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
728 for p in $$list; do \
729 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
730 echo "$$d$$p"; \
731 done | $(am__base_list) | \
732 while read files; do \
733 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
734 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
735 done
736
737uninstall-includesHEADERS:
738 @$(NORMAL_UNINSTALL)
739 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
740 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
741 test -n "$$files" || exit 0; \
742 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
743 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
744
745ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
746 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
747 unique=`for i in $$list; do \
748 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
749 done | \
750 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
751 END { if (nonempty) { for (i in files) print i; }; }'`; \
752 mkid -fID $$unique
753tags: TAGS
754
755TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
756 $(TAGS_FILES) $(LISP)
757 set x; \
758 here=`pwd`; \
759 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
760 unique=`for i in $$list; do \
761 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
762 done | \
763 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
764 END { if (nonempty) { for (i in files) print i; }; }'`; \
765 shift; \
766 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
767 test -n "$$unique" || unique=$$empty_fix; \
768 if test $$# -gt 0; then \
769 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
770 "$$@" $$unique; \
771 else \
772 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
773 $$unique; \
774 fi; \
775 fi
776ctags: CTAGS
777CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
778 $(TAGS_FILES) $(LISP)
779 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
780 unique=`for i in $$list; do \
781 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
782 done | \
783 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
784 END { if (nonempty) { for (i in files) print i; }; }'`; \
785 test -z "$(CTAGS_ARGS)$$unique" \
786 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
787 $$unique
788
789GTAGS:
790 here=`$(am__cd) $(top_builddir) && pwd` \
791 && $(am__cd) $(top_srcdir) \
792 && gtags -i $(GTAGS_ARGS) "$$here"
793
794distclean-tags:
795 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
796
797distdir: $(DISTFILES)
798 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
799 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
800 list='$(DISTFILES)'; \
801 dist_files=`for file in $$list; do echo $$file; done | \
802 sed -e "s|^$$srcdirstrip/||;t" \
803 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
804 case $$dist_files in \
805 */*) $(MKDIR_P) `echo "$$dist_files" | \
806 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
807 sort -u` ;; \
808 esac; \
809 for file in $$dist_files; do \
810 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
811 if test -d $$d/$$file; then \
812 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
813 if test -d "$(distdir)/$$file"; then \
814 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
815 fi; \
816 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
817 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
818 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
819 fi; \
820 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
821 else \
822 test -f "$(distdir)/$$file" \
823 || cp -p $$d/$$file "$(distdir)/$$file" \
824 || exit 1; \
825 fi; \
826 done
827check-am: all-am
828check: check-am
829all-am: Makefile $(LTLIBRARIES) $(HEADERS)
830installdirs:
831 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
832 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
833 done
834install: install-am
835install-exec: install-exec-am
836install-data: install-data-am
837uninstall: uninstall-am
838
839install-am: all-am
840 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
841
842installcheck: installcheck-am
843install-strip:
844 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
845 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
846 `test -z '$(STRIP)' || \
847 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
848mostlyclean-generic:
849
850clean-generic:
851
852distclean-generic:
853 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
854 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
855
856maintainer-clean-generic:
857 @echo "This command is intended for maintainers to use"
858 @echo "it deletes files that may require special tools to rebuild."
859 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
860clean: clean-am
861
862clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
863 clean-pkgLTLIBRARIES mostlyclean-am
864
865distclean: distclean-am
866 -rm -rf ./$(DEPDIR)
867 -rm -f Makefile
868distclean-am: clean-am distclean-compile distclean-generic \
869 distclean-tags
870
871dvi: dvi-am
872
873dvi-am:
874
875html: html-am
876
877html-am:
878
879info: info-am
880
881info-am:
882
883install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
884
885install-dvi: install-dvi-am
886
887install-dvi-am:
888
889install-exec-am:
890
891install-html: install-html-am
892
893install-html-am:
894
895install-info: install-info-am
896
897install-info-am:
898
899install-man:
900
901install-pdf: install-pdf-am
902
903install-pdf-am:
904
905install-ps: install-ps-am
906
907install-ps-am:
908
909installcheck-am:
910
911maintainer-clean: maintainer-clean-am
912 -rm -rf ./$(DEPDIR)
913 -rm -f Makefile
914maintainer-clean-am: distclean-am maintainer-clean-generic
915
916mostlyclean: mostlyclean-am
917
918mostlyclean-am: mostlyclean-compile mostlyclean-generic \
919 mostlyclean-libtool
920
921pdf: pdf-am
922
923pdf-am:
924
925ps: ps-am
926
927ps-am:
928
929uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
930
931.MAKE: install-am install-strip
932
933.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
934 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
935 ctags distclean distclean-compile distclean-generic \
936 distclean-libtool distclean-tags distdir dvi dvi-am html \
937 html-am info info-am install install-am install-data \
938 install-data-am install-dvi install-dvi-am install-exec \
939 install-exec-am install-html install-html-am \
940 install-includesHEADERS install-info install-info-am \
941 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
942 install-ps install-ps-am install-strip installcheck \
943 installcheck-am installdirs maintainer-clean \
944 maintainer-clean-generic mostlyclean mostlyclean-compile \
945 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
946 tags uninstall uninstall-am uninstall-includesHEADERS \
947 uninstall-pkgLTLIBRARIES
948
949
950# Tell versions [3.59,3.63) of GNU make to not export all variables.
951# Otherwise a system limit (for SysV at least) may be exceeded.
952.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_engine.c b/libraries/evas/src/modules/engines/software_x11/evas_engine.c
deleted file mode 100644
index 0a2d2a3..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_engine.c
+++ /dev/null
@@ -1,929 +0,0 @@
1#include "evas_common.h"
2#include "evas_private.h"
3
4#include "Evas_Engine_Software_X11.h"
5#include "evas_engine.h"
6
7#ifdef BUILD_ENGINE_SOFTWARE_XLIB
8# include "evas_xlib_outbuf.h"
9# include "evas_xlib_color.h"
10#endif
11
12#ifdef BUILD_ENGINE_SOFTWARE_XCB
13# include "evas_xcb_outbuf.h"
14# include "evas_xcb_color.h"
15# include "evas_xcb_xdefaults.h"
16#endif
17
18int _evas_engine_soft_x11_log_dom = -1;
19
20/* function tables - filled in later (func and parent func) */
21static Evas_Func func, pfunc;
22
23#ifdef BUILD_ENGINE_SOFTWARE_XLIB
24/*
25struct xrdb_user
26{
27 time_t last_stat;
28 time_t last_mtime;
29 XrmDatabase db;
30};
31static struct xrdb_user xrdb_user = {0, 0, NULL};
32
33static Eina_Bool
34xrdb_user_query(const char *name, const char *cls, char **type, XrmValue *val)
35{
36 time_t last, now;
37
38 last = xrdb_user.last_stat;
39 now = time(NULL);
40
41 xrdb_user.last_stat = now;
42 if (last != now) // don't stat() more than once every second
43 {
44 struct stat st;
45 const char *home;
46 char tmp[PATH_MAX];
47
48 if (!(home = getenv("HOME")))
49 goto failed;
50
51 snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
52 if (stat(tmp, &st) != 0) goto failed;
53 if (xrdb_user.last_mtime != st.st_mtime)
54 {
55 if (xrdb_user.db) XrmDestroyDatabase(xrdb_user.db);
56 xrdb_user.db = XrmGetFileDatabase(tmp);
57 if (!xrdb_user.db) goto failed;
58 xrdb_user.last_mtime = st.st_mtime;
59 }
60 }
61
62 if (!xrdb_user.db) return EINA_FALSE;
63 return XrmGetResource(xrdb_user.db, name, cls, type, val);
64
65 failed:
66 if (xrdb_user.db)
67 {
68 XrmDestroyDatabase(xrdb_user.db);
69 xrdb_user.db = NULL;
70 }
71 xrdb_user.last_mtime = 0;
72 return EINA_FALSE;
73}
74*/
75#endif
76
77/* engine struct data */
78typedef struct _Render_Engine Render_Engine;
79
80struct _Render_Engine
81{
82 Tilebuf *tb;
83 Outbuf *ob;
84 Tilebuf_Rect *rects;
85 Eina_Inlist *cur_rect;
86 unsigned char end : 1;
87/*
88#ifdef BUILD_ENGINE_SOFTWARE_XLIB
89 XrmDatabase xrdb;
90#endif
91 struct
92 {
93 int dpi;
94 } xr;
95 */
96#ifdef EVAS_FRAME_QUEUING
97 Evas_Engine_Render_Mode render_mode;
98#endif
99
100 void (*outbuf_free)(Outbuf *ob);
101 void (*outbuf_reconfigure)(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth);
102 int (*outbuf_get_rot)(Outbuf *ob);
103 RGBA_Image *(*outbuf_new_region_for_update)(Outbuf *ob, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
104 void (*outbuf_push_updated_region)(Outbuf *ob, RGBA_Image *update, int x, int y, int w, int h);
105 void (*outbuf_free_region_for_update)(Outbuf *ob, RGBA_Image *update);
106 void (*outbuf_flush)(Outbuf *ob);
107 void (*outbuf_idle_flush)(Outbuf *ob);
108 Eina_Bool (*outbuf_alpha_get)(Outbuf *ob);
109#ifdef EVAS_FRAME_QUEUING
110 void (*outbuf_set_priv)(Outbuf *ob, void *cur, void *prev);
111#endif
112};
113
114/* prototypes we will use here */
115static void *_best_visual_get(int backend, void *connection, int screen);
116static unsigned int _best_colormap_get(int backend, void *connection, int screen);
117static int _best_depth_get(int backend, void *connection, int screen);
118
119static void *eng_info(Evas *e);
120static void eng_info_free(Evas *e, void *info);
121static int eng_setup(Evas *e, void *info);
122static void eng_output_free(void *data);
123static void eng_output_resize(void *data, int w, int h);
124static void eng_output_tile_size_set(void *data, int w, int h);
125static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
126static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
127static void eng_output_redraws_clear(void *data);
128static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
129static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
130static void eng_output_flush(void *data);
131static void eng_output_idle_flush(void *data);
132
133/* internal engine routines */
134
135#ifdef BUILD_ENGINE_SOFTWARE_XLIB
136static void *
137_output_xlib_setup(int w, int h, int rot, Display *disp, Drawable draw,
138 Visual *vis, Colormap cmap, int depth, int debug,
139 int grayscale, int max_colors, Pixmap mask,
140 int shape_dither, int destination_alpha)
141{
142 Render_Engine *re;
143// int status;
144// char *type = NULL;
145// XrmValue val;
146
147 if (!(re = calloc(1, sizeof(Render_Engine)))) return NULL;
148
149 evas_software_xlib_x_init();
150 evas_software_xlib_x_color_init();
151 evas_software_xlib_outbuf_init();
152/*
153 re->xr.dpi = 75000; // dpy * 1000
154
155 status = xrdb_user_query("Xft.dpi", "Xft.Dpi", &type, &val);
156 if ((!status) || (!type))
157 {
158 if (!re->xrdb) re->xrdb = XrmGetDatabase(disp);
159 if (re->xrdb)
160 status = XrmGetResource(re->xrdb,
161 "Xft.dpi", "Xft.Dpi", &type, &val);
162 }
163
164 if ((status) && (type))
165 {
166 if (!strcmp(type, "String"))
167 {
168 const char *str, *dp;
169
170 str = val.addr;
171 dp = strchr(str, '.');
172 if (!dp) dp = strchr(str, ',');
173
174 if (dp)
175 {
176 int subdpi, len, i;
177 char *buf;
178
179 buf = alloca(dp - str + 1);
180 strncpy(buf, str, dp - str);
181 buf[dp - str] = 0;
182 len = strlen(dp + 1);
183 subdpi = atoi(dp + 1);
184
185 if (len < 3)
186 {
187 for (i = len; i < 3; i++)
188 subdpi *= 10;
189 }
190 else if (len > 3)
191 {
192 for (i = len; i > 3; i--)
193 subdpi /= 10;
194 }
195 re->xr.dpi = atoi(buf) * 1000;
196 }
197 else
198 re->xr.dpi = atoi(str) * 1000;
199 evas_common_font_dpi_set(re->xr.dpi / 1000);
200 }
201 }
202 */
203 re->ob =
204 evas_software_xlib_outbuf_setup_x(w, h, rot, OUTBUF_DEPTH_INHERIT, disp,
205 draw, vis, cmap, depth, grayscale,
206 max_colors, mask, shape_dither,
207 destination_alpha);
208 if (!re->ob)
209 {
210 free(re);
211 return NULL;
212 }
213
214 /* for updates return 1 big buffer, but only use portions of it, also cache
215 * it and keepit around until an idle_flush */
216
217 /* disable for now - i am hunting down why some expedite tests are slower,
218 * as well as shaped stuff is broken and probable non-32bpp is broken as
219 * convert funcs dont do the right thing
220 *
221 */
222// re->ob->onebuf = 1;
223
224 evas_software_xlib_outbuf_debug_set(re->ob, debug);
225 re->tb = evas_common_tilebuf_new(w, h);
226 if (!re->tb)
227 {
228 evas_software_xlib_outbuf_free(re->ob);
229 free(re);
230 return NULL;
231 }
232
233 /* in preliminary tests 16x16 gave highest framerates */
234 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
235 return re;
236}
237#endif
238
239#ifdef BUILD_ENGINE_SOFTWARE_XCB
240static void *
241_output_xcb_setup(int w, int h, int rot, xcb_connection_t *conn,
242 xcb_screen_t *screen, xcb_drawable_t draw,
243 xcb_visualtype_t *vis, xcb_colormap_t cmap, int depth,
244 int debug, int grayscale, int max_colors, xcb_drawable_t mask,
245 int shape_dither, int destination_alpha)
246{
247 Render_Engine *re;
248// int v = 0;
249
250 if (!(re = calloc(1, sizeof(Render_Engine)))) return NULL;
251
252 evas_software_xcb_init();
253 evas_software_xcb_color_init();
254 evas_software_xcb_outbuf_init();
255/*
256 // FIXME: re->xrdb
257 _evas_xcb_xdefaults_init();
258 v = _evas_xcb_xdefaults_int_get("Xft", "dpi");
259 _evas_xcb_xdefaults_shutdown();
260 if (v) re->xr.dpi = (v * 1000);
261 else re->xr.dpi = 75000; // dpy * 1000
262
263 evas_common_font_dpi_set(re->xr.dpi / 1000);
264 */
265 re->ob =
266 evas_software_xcb_outbuf_setup(w, h, rot, OUTBUF_DEPTH_INHERIT, conn,
267 screen, draw, vis, cmap, depth,
268 grayscale, max_colors, mask,
269 shape_dither, destination_alpha);
270 if (!re->ob)
271 {
272 free(re);
273 return NULL;
274 }
275
276 /* for updates return 1 big buffer, but only use portions of it, also cache
277 * it and keepit around until an idle_flush */
278
279 /* disable for now - i am hunting down why some expedite tests are slower,
280 * as well as shaped stuff is broken and probable non-32bpp is broken as
281 * convert funcs dont do the right thing
282 *
283 */
284// re->ob->onebuf = 1;
285
286 evas_software_xcb_outbuf_debug_set(re->ob, debug);
287
288 re->tb = evas_common_tilebuf_new(w, h);
289 if (!re->tb)
290 {
291 evas_software_xcb_outbuf_free(re->ob);
292 free(re);
293 return NULL;
294 }
295
296 /* in preliminary tests 16x16 gave highest framerates */
297 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
298 return re;
299}
300#endif
301
302static void *
303_best_visual_get(int backend, void *connection, int screen)
304{
305 if (!connection) return NULL;
306
307#ifdef BUILD_ENGINE_SOFTWARE_XLIB
308 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
309 return DefaultVisual((Display *)connection, screen);
310#endif
311
312#ifdef BUILD_ENGINE_SOFTWARE_XCB
313 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
314 {
315 xcb_screen_iterator_t iter_screen;
316 xcb_depth_iterator_t iter_depth;
317 xcb_screen_t *s = NULL;
318
319 iter_screen =
320 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
321 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
322 if (screen == 0)
323 {
324 s = iter_screen.data;
325 break;
326 }
327
328 iter_depth = xcb_screen_allowed_depths_iterator(s);
329 for (; iter_depth.rem; xcb_depth_next(&iter_depth))
330 {
331 xcb_visualtype_iterator_t iter_vis;
332
333 iter_vis = xcb_depth_visuals_iterator(iter_depth.data);
334 for (; iter_vis.rem; xcb_visualtype_next(&iter_vis))
335 {
336 if (s->root_visual == iter_vis.data->visual_id)
337 return iter_vis.data;
338 }
339 }
340 }
341#endif
342
343 return NULL;
344}
345
346static unsigned int
347_best_colormap_get(int backend, void *connection, int screen)
348{
349 if (!connection) return 0;
350
351#ifdef BUILD_ENGINE_SOFTWARE_XLIB
352 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
353 return DefaultColormap((Display *)connection, screen);
354#endif
355
356#ifdef BUILD_ENGINE_SOFTWARE_XCB
357 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
358 {
359 xcb_screen_iterator_t iter_screen;
360 xcb_screen_t *s = NULL;
361
362 iter_screen =
363 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
364 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
365 if (screen == 0)
366 {
367 s = iter_screen.data;
368 break;
369 }
370
371 return s->default_colormap;
372 }
373#endif
374
375 return 0;
376}
377
378static int
379_best_depth_get(int backend, void *connection, int screen)
380{
381 if (!connection) return 0;
382
383#ifdef BUILD_ENGINE_SOFTWARE_XLIB
384 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
385 return DefaultDepth((Display *)connection, screen);
386#endif
387
388#ifdef BUILD_ENGINE_SOFTWARE_XCB
389 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
390 {
391 xcb_screen_iterator_t iter_screen;
392 xcb_screen_t *s = NULL;
393
394 iter_screen =
395 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
396 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
397 if (screen == 0)
398 {
399 s = iter_screen.data;
400 break;
401 }
402
403 return s->root_depth;
404 }
405#endif
406
407 return 0;
408}
409
410/* engine api this module provides */
411static void *
412eng_info(Evas *e __UNUSED__)
413{
414 Evas_Engine_Info_Software_X11 *info;
415
416 if (!(info = calloc(1, sizeof(Evas_Engine_Info_Software_X11))))
417 return NULL;
418
419 info->magic.magic = rand();
420 info->info.debug = 0;
421 info->info.alloc_grayscale = 0;
422 info->info.alloc_colors_max = 216;
423 info->func.best_visual_get = _best_visual_get;
424 info->func.best_colormap_get = _best_colormap_get;
425 info->func.best_depth_get = _best_depth_get;
426 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
427 return info;
428}
429
430static void
431eng_info_free(Evas *e __UNUSED__, void *info)
432{
433 Evas_Engine_Info_Software_X11 *in;
434
435 in = (Evas_Engine_Info_Software_X11 *)info;
436 free(in);
437}
438
439static int
440eng_setup(Evas *e, void *in)
441{
442 Evas_Engine_Info_Software_X11 *info;
443 Render_Engine *re = NULL;
444
445 info = (Evas_Engine_Info_Software_X11 *)in;
446 if (!e->engine.data.output)
447 {
448 /* if we haven't initialized - init (automatic abort if already done) */
449 evas_common_cpu_init();
450 evas_common_blend_init();
451 evas_common_image_init();
452 evas_common_convert_init();
453 evas_common_scale_init();
454 evas_common_rectangle_init();
455 evas_common_polygon_init();
456 evas_common_line_init();
457 evas_common_font_init();
458 evas_common_draw_init();
459 evas_common_tilebuf_init();
460
461#ifdef BUILD_ENGINE_SOFTWARE_XLIB
462 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
463 {
464 re = _output_xlib_setup(e->output.w, e->output.h,
465 info->info.rotation, info->info.connection,
466 info->info.drawable, info->info.visual,
467 info->info.colormap,
468 info->info.depth, info->info.debug,
469 info->info.alloc_grayscale,
470 info->info.alloc_colors_max,
471 info->info.mask, info->info.shape_dither,
472 info->info.destination_alpha);
473
474 re->outbuf_free = evas_software_xlib_outbuf_free;
475 re->outbuf_reconfigure = evas_software_xlib_outbuf_reconfigure;
476 re->outbuf_get_rot = evas_software_xlib_outbuf_get_rot;
477 re->outbuf_new_region_for_update =
478 evas_software_xlib_outbuf_new_region_for_update;
479 re->outbuf_push_updated_region =
480 evas_software_xlib_outbuf_push_updated_region;
481 re->outbuf_free_region_for_update =
482 evas_software_xlib_outbuf_free_region_for_update;
483 re->outbuf_flush = evas_software_xlib_outbuf_flush;
484 re->outbuf_idle_flush = evas_software_xlib_outbuf_idle_flush;
485 re->outbuf_alpha_get = evas_software_xlib_outbuf_alpha_get;
486# ifdef EVAS_FRAME_QUEUING
487 re->outbuf_set_priv = evas_software_xlib_outbuf_set_priv;
488 re->render_mode = info->render_mode;
489# endif
490 }
491#endif
492
493#ifdef BUILD_ENGINE_SOFTWARE_XCB
494 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
495 {
496 re = _output_xcb_setup(e->output.w, e->output.h,
497 info->info.rotation, info->info.connection,
498 info->info.screen, info->info.drawable,
499 info->info.visual, info->info.colormap,
500 info->info.depth, info->info.debug,
501 info->info.alloc_grayscale,
502 info->info.alloc_colors_max,
503 info->info.mask, info->info.shape_dither,
504 info->info.destination_alpha);
505
506 re->outbuf_free = evas_software_xcb_outbuf_free;
507 re->outbuf_reconfigure = evas_software_xcb_outbuf_reconfigure;
508 re->outbuf_get_rot = evas_software_xcb_outbuf_rotation_get;
509 re->outbuf_new_region_for_update =
510 evas_software_xcb_outbuf_new_region_for_update;
511 re->outbuf_push_updated_region =
512 evas_software_xcb_outbuf_push_updated_region;
513 re->outbuf_free_region_for_update =
514 evas_software_xcb_outbuf_free_region_for_update;
515 re->outbuf_flush = evas_software_xcb_outbuf_flush;
516 re->outbuf_idle_flush = evas_software_xcb_outbuf_idle_flush;
517 re->outbuf_alpha_get = evas_software_xcb_outbuf_alpha_get;
518# ifdef EVAS_FRAME_QUEUING
519 re->outbuf_set_priv = evas_software_xcb_outbuf_priv_set;
520 re->render_mode = info->render_mode;
521# endif
522 }
523#endif
524
525 e->engine.data.output = re;
526 }
527 else
528 {
529 int ponebuf = 0;
530
531#ifdef EVAS_FRAME_QUEUING
532 evas_common_frameq_flush();
533#endif
534 re = e->engine.data.output;
535 ponebuf = re->ob->onebuf;
536
537#ifdef BUILD_ENGINE_SOFTWARE_XLIB
538 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
539 {
540 evas_software_xlib_outbuf_free(re->ob);
541 re->ob =
542 evas_software_xlib_outbuf_setup_x(e->output.w, e->output.h,
543 info->info.rotation,
544 OUTBUF_DEPTH_INHERIT,
545 info->info.connection,
546 info->info.drawable,
547 info->info.visual,
548 info->info.colormap,
549 info->info.depth,
550 info->info.alloc_grayscale,
551 info->info.alloc_colors_max,
552 info->info.mask,
553 info->info.shape_dither,
554 info->info.destination_alpha);
555
556 evas_software_xlib_outbuf_debug_set(re->ob, info->info.debug);
557# ifdef EVAS_FRAME_QUEUING
558 re->render_mode = info->render_mode;
559# endif
560 }
561#endif
562
563#ifdef BUILD_ENGINE_SOFTWARE_XCB
564 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
565 {
566 evas_software_xcb_outbuf_free(re->ob);
567 re->ob =
568 evas_software_xcb_outbuf_setup(e->output.w, e->output.h,
569 info->info.rotation,
570 OUTBUF_DEPTH_INHERIT,
571 info->info.connection,
572 info->info.screen,
573 info->info.drawable,
574 info->info.visual,
575 info->info.colormap,
576 info->info.depth,
577 info->info.alloc_grayscale,
578 info->info.alloc_colors_max,
579 info->info.mask,
580 info->info.shape_dither,
581 info->info.destination_alpha);
582
583 evas_software_xcb_outbuf_debug_set(re->ob, info->info.debug);
584#ifdef EVAS_FRAME_QUEUING
585 re->render_mode = info->render_mode;
586#endif
587 }
588#endif
589 re->ob->onebuf = ponebuf;
590 }
591 if (!e->engine.data.output) return 0;
592 if (!e->engine.data.context)
593 {
594 e->engine.data.context =
595 e->engine.func->context_new(e->engine.data.output);
596 }
597
598 re = e->engine.data.output;
599
600 return 1;
601}
602
603static void
604eng_output_free(void *data)
605{
606 Render_Engine *re;
607
608#ifdef BUILD_ENGINE_SOFTWARE_XLIB
609// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
610// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
611#endif
612
613 if ((re = (Render_Engine *)data))
614 {
615 re->outbuf_free(re->ob);
616 evas_common_tilebuf_free(re->tb);
617 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
618 free(re);
619 }
620
621 evas_common_font_shutdown();
622 evas_common_image_shutdown();
623}
624
625static void
626eng_output_resize(void *data, int w, int h)
627{
628 Render_Engine *re;
629
630 re = (Render_Engine *)data;
631 re->outbuf_reconfigure(re->ob, w, h, re->outbuf_get_rot(re->ob),
632 OUTBUF_DEPTH_INHERIT);
633 evas_common_tilebuf_free(re->tb);
634 re->tb = evas_common_tilebuf_new(w, h);
635 if (re->tb)
636 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
637}
638
639static void
640eng_output_tile_size_set(void *data, int w, int h)
641{
642 Render_Engine *re;
643
644 re = (Render_Engine *)data;
645 evas_common_tilebuf_set_tile_size(re->tb, w, h);
646}
647
648static void
649eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
650{
651 Render_Engine *re;
652
653 re = (Render_Engine *)data;
654 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
655}
656
657static void
658eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
659{
660 Render_Engine *re;
661
662 re = (Render_Engine *)data;
663 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
664}
665
666static void
667eng_output_redraws_clear(void *data)
668{
669 Render_Engine *re;
670
671 re = (Render_Engine *)data;
672 evas_common_tilebuf_clear(re->tb);
673}
674
675static void *
676eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
677{
678 Render_Engine *re;
679 RGBA_Image *surface;
680 Tilebuf_Rect *rect;
681 int ux, uy, uw, uh;
682
683 re = (Render_Engine *)data;
684 if (re->end)
685 {
686 re->end = 0;
687 return NULL;
688 }
689 if (!re->rects)
690 {
691 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
692 re->cur_rect = EINA_INLIST_GET(re->rects);
693 }
694 if (!re->cur_rect) return NULL;
695 rect = (Tilebuf_Rect *)re->cur_rect;
696 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
697 re->cur_rect = re->cur_rect->next;
698 if (!re->cur_rect)
699 {
700 evas_common_tilebuf_free_render_rects(re->rects);
701 re->rects = NULL;
702 re->end = 1;
703 }
704
705 surface =
706 re->outbuf_new_region_for_update(re->ob, ux, uy, uw, uh, cx, cy, cw, ch);
707
708 *x = ux; *y = uy; *w = uw; *h = uh;
709 return surface;
710}
711
712static void
713eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
714{
715 Render_Engine *re;
716#ifdef EVAS_FRAME_QUEUING
717 Evas_Surface *e_surface;
718#endif
719
720 re = (Render_Engine *)data;
721#if defined(BUILD_PIPE_RENDER) && !defined(EVAS_FRAME_QUEUING)
722 evas_common_pipe_map_begin(surface);
723#endif /* BUILD_PIPE_RENDER && !EVAS_FRAME_QUEUING*/
724
725#ifdef EVAS_FRAME_QUEUING
726 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
727 {
728 /* create a new frame if this is the first surface of this frame */
729 evas_common_frameq_prepare_frame();
730 /* add surface into the frame */
731 e_surface = evas_common_frameq_new_surface(surface, x, y, w, h);
732 evas_common_frameq_add_surface(e_surface);
733 return;
734 }
735#endif
736
737 re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
738 re->outbuf_free_region_for_update(re->ob, surface);
739 evas_common_cpu_end_opt();
740}
741
742#ifdef EVAS_FRAME_QUEUING
743static void *
744eng_image_map_surface_new(void *data , int w, int h, int alpha)
745{
746 void *surface;
747 DATA32 *pixels;
748 Render_Engine *re;
749 Evas_Surface *e_surface;
750
751 re = (Render_Engine *)data;
752
753 surface =
754 evas_cache_image_copied_data(evas_common_image_cache_get(), w, h, NULL,
755 alpha, EVAS_COLORSPACE_ARGB8888);
756 pixels = evas_cache_image_pixels(surface);
757
758 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
759 {
760 /* create a new frame if this is the first surface of this frame */
761 evas_common_frameq_prepare_frame();
762
763 /* add surface into the frame */
764 e_surface = evas_common_frameq_new_surface(surface, 0, 0, w, h);
765
766 /* this surface is not going to be pushed to screen */
767 e_surface->dontpush = 1;
768 evas_common_frameq_add_surface(e_surface);
769 }
770 return surface;
771}
772
773static void
774eng_output_frameq_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
775{
776 Render_Engine *re;
777
778 re = (Render_Engine *)data;
779 re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
780 re->outbuf_free_region_for_update(re->ob, surface);
781 evas_common_cpu_end_opt();
782}
783
784static void
785eng_output_frameq_flush(void *data)
786{
787 Render_Engine *re;
788
789 re = (Render_Engine *)data;
790 re->outbuf_flush(re->ob);
791}
792
793static void
794eng_output_frameq_set_priv(void *data, void *cur, void *prev)
795{
796 Render_Engine *re;
797
798 re = (Render_Engine *)data;
799 re->outbuf_set_priv(re->ob, cur, prev);
800}
801#endif
802
803static void
804eng_output_flush(void *data)
805{
806 Render_Engine *re;
807
808 re = (Render_Engine *)data;
809#ifdef EVAS_FRAME_QUEUING
810 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
811 {
812 evas_common_frameq_set_frame_data(data,
813 eng_output_frameq_redraws_next_update_push,
814 eng_output_frameq_flush,
815 eng_output_frameq_set_priv);
816 evas_common_frameq_ready_frame();
817 evas_common_frameq_begin();
818 }
819 else
820#endif
821 re->outbuf_flush(re->ob);
822}
823
824static void
825eng_output_idle_flush(void *data)
826{
827 Render_Engine *re;
828
829 re = (Render_Engine *)data;
830 re->outbuf_idle_flush(re->ob);
831}
832
833static Eina_Bool
834eng_canvas_alpha_get(void *data, void *context __UNUSED__)
835{
836 Render_Engine *re;
837
838 re = (Render_Engine *)data;
839 return (re->ob->priv.destination_alpha) || (re->outbuf_alpha_get(re->ob));
840}
841
842
843/* module advertising code */
844static int
845module_open(Evas_Module *em)
846{
847#ifdef BUILD_ENGINE_SOFTWARE_XLIB
848 static Eina_Bool xrm_inited = EINA_FALSE;
849
850 if (!xrm_inited)
851 {
852 xrm_inited = EINA_TRUE;
853 XrmInitialize();
854 }
855#endif
856
857 if (!em) return 0;
858
859 /* get whatever engine module we inherit from */
860 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
861
862 _evas_engine_soft_x11_log_dom =
863 eina_log_domain_register("evas-software_x11", EVAS_DEFAULT_LOG_COLOR);
864
865 if (_evas_engine_soft_x11_log_dom < 0)
866 {
867 EINA_LOG_ERR("Can not create a module log domain.");
868 return 0;
869 }
870
871 /* store it for later use */
872 func = pfunc;
873
874 /* now to override methods */
875#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
876 ORD(info);
877 ORD(info_free);
878 ORD(setup);
879 ORD(canvas_alpha_get);
880 ORD(output_free);
881 ORD(output_resize);
882 ORD(output_tile_size_set);
883 ORD(output_redraws_rect_add);
884 ORD(output_redraws_rect_del);
885 ORD(output_redraws_clear);
886 ORD(output_redraws_next_update_get);
887 ORD(output_redraws_next_update_push);
888 ORD(output_flush);
889 ORD(output_idle_flush);
890#ifdef EVAS_FRAME_QUEUING
891 ORD(image_map_surface_new);
892#endif
893
894 /* now advertise out own api */
895 em->functions = (void *)(&func);
896 return 1;
897}
898
899static void
900module_close(Evas_Module *em __UNUSED__)
901{
902 eina_log_domain_unregister(_evas_engine_soft_x11_log_dom);
903#ifdef BUILD_ENGINE_SOFTWARE_XLIB
904/*
905 if (xrdb_user.db)
906 {
907 XrmDestroyDatabase(xrdb_user.db);
908 xrdb_user.last_stat = 0;
909 xrdb_user.last_mtime = 0;
910 xrdb_user.db = NULL;
911 }
912 */
913#endif
914}
915
916static Evas_Module_Api evas_modapi =
917{
918 EVAS_MODULE_API_VERSION, "software_x11", "none",
919 {
920 module_open,
921 module_close
922 }
923};
924
925EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_x11);
926
927#ifndef EVAS_STATIC_BUILD_SOFTWARE_X11
928EVAS_EINA_MODULE_DEFINE(engine, software_x11);
929#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_engine.h b/libraries/evas/src/modules/engines/software_x11/evas_engine.h
deleted file mode 100644
index 80b71b7..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_engine.h
+++ /dev/null
@@ -1,137 +0,0 @@
1#ifndef EVAS_ENGINE_H
2# define EVAS_ENGINE_H
3
4# include <sys/ipc.h>
5# include <sys/shm.h>
6
7# ifdef BUILD_ENGINE_SOFTWARE_XLIB
8# include <X11/Xlib.h>
9# include <X11/Xutil.h>
10# include <X11/Xatom.h>
11# include <X11/extensions/XShm.h>
12# include <X11/Xresource.h> // xres - dpi
13# endif
14
15# ifdef BUILD_ENGINE_SOFTWARE_XCB
16# include <xcb/xcb.h>
17# include <xcb/shm.h>
18# include <xcb/xcb_image.h>
19# endif
20
21extern int _evas_engine_soft_x11_log_dom;
22
23# ifdef ERR
24# undef ERR
25# endif
26# define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
27
28# ifdef DBG
29# undef DBG
30# endif
31# define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
32
33# ifdef INF
34# undef INF
35# endif
36# define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
37
38# ifdef WRN
39# undef WRN
40# endif
41# define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
42
43# ifdef CRIT
44# undef CRIT
45# endif
46# define CRIT(...) \
47 EINA_LOG_DOM_CRIT(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
48
49typedef enum _Outbuf_Depth Outbuf_Depth;
50
51enum _Outbuf_Depth
52{
53 OUTBUF_DEPTH_NONE,
54 OUTBUF_DEPTH_INHERIT,
55 OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
56 OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
57 OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
58 OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
59 OUTBUF_DEPTH_RGB_32BPP_888_8888,
60 OUTBUF_DEPTH_LAST
61};
62
63typedef struct _Outbuf Outbuf;
64
65struct _Outbuf
66{
67 Outbuf_Depth depth;
68 int w, h;
69 int rot;
70 int onebuf;
71
72 struct
73 {
74 Convert_Pal *pal;
75 union
76 {
77# ifdef BUILD_ENGINE_SOFTWARE_XLIB
78 struct
79 {
80 Display *disp;
81 Window win;
82 Pixmap mask;
83 Visual *vis;
84 Colormap cmap;
85 int depth, shm;
86 GC gc, gcm;
87 unsigned char swap : 1;
88 unsigned char bit_swap : 1;
89 } xlib;
90# endif
91# ifdef BUILD_ENGINE_SOFTWARE_XCB
92 struct
93 {
94 xcb_connection_t *conn;
95 xcb_screen_t *screen;
96 xcb_window_t win;
97 xcb_pixmap_t mask;
98 xcb_visualtype_t *visual;
99 xcb_colormap_t cmap;
100 int depth, shm;
101 xcb_gcontext_t gc, gcm;
102 unsigned char swap : 1;
103 unsigned char bit_swap : 1;
104 } xcb;
105# endif
106 } x11;
107 struct
108 {
109 DATA32 r, g, b;
110 } mask;
111
112 /* 1 big buffer for updates - flush on idle_flush */
113 RGBA_Image *onebuf;
114 Eina_List *onebuf_regions;
115
116 /* a list of pending regions to write to the target */
117 Eina_List *pending_writes;
118
119 /* a list of previous frame pending regions to write to the target */
120 Eina_List *prev_pending_writes;
121
122# ifdef EVAS_FRAME_QUEUING
123 /* protecting prev_pending_writes */
124 LK(lock);
125# endif
126
127 unsigned char mask_dither : 1;
128 unsigned char destination_alpha : 1;
129 unsigned char debug : 1;
130 unsigned char synced : 1;
131 } priv;
132};
133
134void evas_software_xlib_x_init(void);
135void evas_software_xcb_init(void);
136
137#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c
deleted file mode 100644
index 49ce721..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c
+++ /dev/null
@@ -1,498 +0,0 @@
1#include "evas_common.h"
2#include "evas_xcb_buffer.h"
3
4/* local function prototypes */
5static void _xcbob_sync(xcb_connection_t *conn);
6static xcb_image_t *_xcbob_create_native(xcb_connection_t *conn, int w, int h, xcb_image_format_t format, uint8_t depth, void *base, uint32_t bytes, uint8_t *data);
7static xcb_format_t *_xcbob_find_format(const xcb_setup_t *setup, uint8_t depth);
8static xcb_visualtype_t *_xcbob_find_visual_by_id(xcb_screen_t *screen, xcb_visualid_t id);
9
10void
11evas_software_xcb_write_mask_line(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y)
12{
13 int x, bpl = 0;
14 DATA32 *src_ptr;
15 DATA8 *dst_ptr;
16
17 src_ptr = src;
18 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
19 dst_ptr = dst_ptr + (bpl * y);
20 w -= 7;
21 if (buf->priv.x11.xcb.bit_swap)
22 {
23 for (x = 0; x < w; x += 8)
24 {
25 *dst_ptr =
26 ((A_VAL(&(src_ptr[0])) >> 7) << 7) |
27 ((A_VAL(&(src_ptr[1])) >> 7) << 6) |
28 ((A_VAL(&(src_ptr[2])) >> 7) << 5) |
29 ((A_VAL(&(src_ptr[3])) >> 7) << 4) |
30 ((A_VAL(&(src_ptr[4])) >> 7) << 3) |
31 ((A_VAL(&(src_ptr[5])) >> 7) << 2) |
32 ((A_VAL(&(src_ptr[6])) >> 7) << 1) |
33 ((A_VAL(&(src_ptr[7])) >> 7) << 0);
34 src_ptr += 8;
35 dst_ptr++;
36 }
37 }
38 else
39 {
40 for (x = 0; x < w; x += 8)
41 {
42 *dst_ptr =
43 ((A_VAL(&(src_ptr[0])) >> 7) << 0) |
44 ((A_VAL(&(src_ptr[1])) >> 7) << 1) |
45 ((A_VAL(&(src_ptr[2])) >> 7) << 2) |
46 ((A_VAL(&(src_ptr[3])) >> 7) << 3) |
47 ((A_VAL(&(src_ptr[4])) >> 7) << 4) |
48 ((A_VAL(&(src_ptr[5])) >> 7) << 5) |
49 ((A_VAL(&(src_ptr[6])) >> 7) << 6) |
50 ((A_VAL(&(src_ptr[7])) >> 7) << 7);
51 src_ptr += 8;
52 dst_ptr++;
53 }
54 }
55 w += 7;
56 for (; x < w; x ++)
57 {
58 xcb_image_put_pixel(xcbob->xim, x, y, A_VAL(src_ptr) >> 7);
59 src_ptr++;
60 }
61}
62
63void
64evas_software_xcb_write_mask_line_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y)
65{
66 int x, bpl = 0;
67 DATA32 *src_ptr;
68 DATA8 *dst_ptr;
69
70 src_ptr = src + w - 1;
71 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
72 dst_ptr = dst_ptr + (bpl * y);
73 w -= 7;
74 if (buf->priv.x11.xcb.bit_swap)
75 {
76 for (x = 0; x < w; x += 8)
77 {
78 *dst_ptr =
79 ((A_VAL(&(src_ptr[ 0])) >> 7) << 7) |
80 ((A_VAL(&(src_ptr[-1])) >> 7) << 6) |
81 ((A_VAL(&(src_ptr[-2])) >> 7) << 5) |
82 ((A_VAL(&(src_ptr[-3])) >> 7) << 4) |
83 ((A_VAL(&(src_ptr[-4])) >> 7) << 3) |
84 ((A_VAL(&(src_ptr[-5])) >> 7) << 2) |
85 ((A_VAL(&(src_ptr[-6])) >> 7) << 1) |
86 ((A_VAL(&(src_ptr[-7])) >> 7) << 0);
87 src_ptr -= 8;
88 dst_ptr++;
89 }
90 }
91 else
92 {
93 for (x = 0; x < w; x += 8)
94 {
95 *dst_ptr =
96 ((A_VAL(&(src_ptr[ 0])) >> 7) << 0) |
97 ((A_VAL(&(src_ptr[-1])) >> 7) << 1) |
98 ((A_VAL(&(src_ptr[-2])) >> 7) << 2) |
99 ((A_VAL(&(src_ptr[-3])) >> 7) << 3) |
100 ((A_VAL(&(src_ptr[-4])) >> 7) << 4) |
101 ((A_VAL(&(src_ptr[-5])) >> 7) << 5) |
102 ((A_VAL(&(src_ptr[-6])) >> 7) << 6) |
103 ((A_VAL(&(src_ptr[-7])) >> 7) << 7);
104 src_ptr -= 8;
105 dst_ptr++;
106 }
107 }
108 w += 7;
109 for (; x < w; x ++)
110 {
111 xcb_image_put_pixel(xcbob->xim, x, y, A_VAL(src_ptr) >> 7);
112 src_ptr--;
113 }
114}
115
116void
117evas_software_xcb_write_mask_line_vert(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w)
118{
119 int yy, bpl = 0;
120 DATA32 *src_ptr;
121 DATA8 *dst_ptr;
122
123 src_ptr = src;
124 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
125 dst_ptr = dst_ptr + (bpl * y);
126 h -= 7;
127 if (buf->priv.x11.xcb.bit_swap)
128 {
129 for (yy = 0; yy < h; yy += 8)
130 {
131 *dst_ptr =
132 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 7) |
133 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 6) |
134 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 5) |
135 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 4) |
136 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 3) |
137 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 2) |
138 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 1) |
139 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 0);
140 src_ptr += 8 * w;
141 dst_ptr++;
142 }
143 }
144 else
145 {
146 for (yy = 0; yy < h; yy += 8)
147 {
148 *dst_ptr =
149 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 0) |
150 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 1) |
151 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 2) |
152 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 3) |
153 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 4) |
154 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 5) |
155 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 6) |
156 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 7);
157 src_ptr += 8 * w;
158 dst_ptr++;
159 }
160 }
161 h += 7;
162 for (; yy < h; yy ++)
163 {
164 xcb_image_put_pixel(xcbob->xim, yy, y, A_VAL(src_ptr) >> 7);
165 src_ptr += w;
166 }
167}
168
169void
170evas_software_xcb_write_mask_line_vert_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w)
171{
172 int yy, bpl = 0;
173 DATA32 *src_ptr;
174 DATA8 *dst_ptr;
175
176 src_ptr = src + ((h - 1) * w);
177 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
178 dst_ptr = dst_ptr + (bpl * y);
179 h -= 7;
180 if (buf->priv.x11.xcb.bit_swap)
181 {
182 for (yy = 0; yy < h; yy += 8)
183 {
184 *dst_ptr =
185 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 7) |
186 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 6) |
187 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 5) |
188 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 4) |
189 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 3) |
190 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 2) |
191 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 1) |
192 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 0);
193 src_ptr -= 8 * w;
194 dst_ptr++;
195 }
196 }
197 else
198 {
199 for (yy = 0; yy < h; yy += 8)
200 {
201 *dst_ptr =
202 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 0) |
203 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 1) |
204 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 2) |
205 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 3) |
206 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 4) |
207 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 5) |
208 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 6) |
209 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 7);
210 src_ptr -= 8 * w;
211 dst_ptr++;
212 }
213 }
214 h += 7;
215 for (; yy < h; yy ++)
216 {
217 xcb_image_put_pixel(xcbob->xim, yy, y, A_VAL(src_ptr) >> 7);
218 src_ptr -= w;
219 }
220}
221
222Eina_Bool
223evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen)
224{
225 const xcb_query_extension_reply_t *reply;
226 static xcb_connection_t *cached_conn = NULL;
227 static int cached_result = 0;
228
229 if (conn == cached_conn) return cached_result;
230 cached_conn = conn;
231
232 reply = xcb_get_extension_data(conn, &xcb_shm_id);
233 if ((reply) && (reply->present))
234 {
235 xcb_visualtype_t *visual;
236 Xcb_Output_Buffer *xcbob = NULL;
237
238 visual = _xcbob_find_visual_by_id(screen, screen->root_visual);
239 xcbob =
240 evas_software_xcb_output_buffer_new(conn, visual, screen->root_depth,
241 16, 16, 2, NULL);
242 if (!xcbob)
243 cached_result = 0;
244 else
245 {
246 evas_software_xcb_output_buffer_free(xcbob, EINA_TRUE);
247 cached_result = 1;
248 }
249 }
250 else
251 cached_result = 0;
252
253 return cached_result;
254}
255
256Xcb_Output_Buffer *
257evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, int try_shm, unsigned char *data)
258{
259 Xcb_Output_Buffer *xcbob = NULL;
260
261 if (!(xcbob = calloc(1, sizeof(Xcb_Output_Buffer))))
262 return NULL;
263
264 xcbob->connection = conn;
265 xcbob->visual = vis;
266 xcbob->xim = NULL;
267 xcbob->shm_info = NULL;
268 xcbob->w = w;
269 xcbob->h = h;
270
271 if (try_shm > 0)
272 {
273 xcbob->shm_info = malloc(sizeof(xcb_shm_segment_info_t));
274 if (xcbob->shm_info)
275 {
276 xcbob->shm_info->shmseg = xcb_generate_id(conn);
277 xcbob->xim =
278 _xcbob_create_native(conn, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
279 depth, NULL, ~0, NULL);
280 if (xcbob->xim)
281 {
282 xcbob->shm_info->shmid =
283 shmget(IPC_PRIVATE,
284 xcbob->xim->stride * xcbob->xim->height,
285 (IPC_CREAT | 0777));
286 if (xcbob->shm_info->shmid == (uint32_t)-1)
287 {
288 xcb_image_destroy(xcbob->xim);
289 free(xcbob->shm_info);
290 free(xcbob);
291 return NULL;
292 }
293 xcbob->shm_info->shmaddr = xcbob->xim->data =
294 shmat(xcbob->shm_info->shmid, 0, 0);
295 if (xcbob->shm_info->shmaddr != ((void *)-1))
296 {
297 /* Sync only needed for testing */
298 if (try_shm == 2) _xcbob_sync(conn);
299
300#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
301 if (evas_common_frameq_enabled())
302 xcb_grab_server(conn);
303#endif
304 xcb_shm_attach(conn, xcbob->shm_info->shmseg,
305 xcbob->shm_info->shmid, 0);
306#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
307 if (evas_common_frameq_enabled())
308 xcb_ungrab_server(conn);
309#endif
310 if (try_shm == 2) _xcbob_sync(conn);
311
312 xcbob->bpl = xcbob->xim->stride;
313 xcbob->psize = (xcbob->bpl * xcbob->h);
314 return xcbob;
315 }
316 shmdt(xcbob->shm_info->shmaddr);
317 shmctl(xcbob->shm_info->shmid, IPC_RMID, 0);
318 }
319 if (xcbob->xim) xcb_image_destroy(xcbob->xim);
320 xcbob->xim = NULL;
321 }
322 if (xcbob->shm_info) free(xcbob->shm_info);
323 xcbob->shm_info = NULL;
324 }
325
326 if (try_shm > 1) return NULL;
327
328 /* no shm */
329 xcbob->xim =
330 _xcbob_create_native(conn, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
331 depth, NULL, ~0, NULL);
332 if (!xcbob->xim)
333 {
334 free(xcbob);
335 return NULL;
336 }
337
338 xcbob->data = data;
339
340 if (!xcbob->xim->data)
341 {
342 xcbob->xim->data = malloc(xcbob->xim->stride * xcbob->xim->height);
343 if (!xcbob->xim->data)
344 {
345 xcb_image_destroy(xcbob->xim);
346 free(xcbob);
347 return NULL;
348 }
349 }
350 xcbob->bpl = xcbob->xim->stride;
351 xcbob->psize = (xcbob->bpl * xcbob->h);
352 return xcbob;
353}
354
355void
356evas_software_xcb_output_buffer_free(Xcb_Output_Buffer *xcbob, Eina_Bool sync)
357{
358 if (xcbob->shm_info)
359 {
360 if (sync) _xcbob_sync(xcbob->connection);
361 xcb_shm_detach(xcbob->connection, xcbob->shm_info->shmseg);
362 xcb_image_destroy(xcbob->xim);
363 shmdt(xcbob->shm_info->shmaddr);
364 shmctl(xcbob->shm_info->shmid, IPC_RMID, 0);
365 free(xcbob->shm_info);
366 }
367 else
368 {
369 if (xcbob->data) xcbob->xim->data = NULL;
370// free(xcbob->xim->data);
371 xcb_image_destroy(xcbob->xim);
372 }
373 free(xcbob);
374}
375
376void
377evas_software_xcb_output_buffer_paste(Xcb_Output_Buffer *xcbob, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, Eina_Bool sync)
378{
379 if (xcbob->shm_info)
380 {
381 xcb_image_shm_put(xcbob->connection, drawable, gc, xcbob->xim,
382 *xcbob->shm_info, 0, 0, x, y, xcbob->w, xcbob->h, 0);
383 if (sync) _xcbob_sync(xcbob->connection);
384 }
385 else
386 xcb_image_put(xcbob->connection, drawable, gc, xcbob->xim, x, y, 0);
387}
388
389DATA8 *
390evas_software_xcb_output_buffer_data(Xcb_Output_Buffer *xcbob, int *bpl_ret)
391{
392 if (bpl_ret) *bpl_ret = xcbob->xim->stride;
393 return (DATA8 *)xcbob->xim->data;
394}
395
396int
397evas_software_xcb_output_buffer_depth(Xcb_Output_Buffer *xcbob)
398{
399 return xcbob->xim->bpp;
400}
401
402int
403evas_software_xcb_output_buffer_byte_order(Xcb_Output_Buffer *xcbob)
404{
405 return xcbob->xim->byte_order;
406}
407
408int
409evas_software_xcb_output_buffer_bit_order(Xcb_Output_Buffer *xcbob)
410{
411 return xcbob->xim->bit_order;
412}
413
414/* local functions */
415static void
416_xcbob_sync(xcb_connection_t *conn)
417{
418 free(xcb_get_input_focus_reply(conn,
419 xcb_get_input_focus_unchecked(conn), NULL));
420}
421
422static xcb_image_t *
423_xcbob_create_native(xcb_connection_t *conn, int w, int h, xcb_image_format_t format, uint8_t depth, void *base, uint32_t bytes, uint8_t *data)
424{
425 static uint8_t dpth = 0;
426 static xcb_format_t *fmt = NULL;
427 const xcb_setup_t *setup;
428 xcb_image_format_t xif;
429
430 /* NB: We cannot use xcb_image_create_native as it only creates images
431 * using MSB_FIRST, so this routine recreates that function and uses
432 * the endian-ness of the server setup */
433 setup = xcb_get_setup(conn);
434 xif = format;
435
436 if ((xif == XCB_IMAGE_FORMAT_Z_PIXMAP) && (depth == 1))
437 xif = XCB_IMAGE_FORMAT_XY_PIXMAP;
438
439 if (dpth != depth)
440 {
441 dpth = depth;
442 fmt = _xcbob_find_format(setup, depth);
443 if (!fmt) return 0;
444 }
445
446 switch (xif)
447 {
448 case XCB_IMAGE_FORMAT_XY_BITMAP:
449 if (depth != 1) return 0;
450 case XCB_IMAGE_FORMAT_XY_PIXMAP:
451 case XCB_IMAGE_FORMAT_Z_PIXMAP:
452 return xcb_image_create(w, h, xif,
453 fmt->scanline_pad,
454 fmt->depth, fmt->bits_per_pixel,
455 setup->bitmap_format_scanline_unit,
456 setup->image_byte_order,
457 setup->bitmap_format_bit_order,
458 base, bytes, data);
459 default:
460 break;
461 }
462
463 return 0;
464}
465
466static xcb_format_t *
467_xcbob_find_format(const xcb_setup_t *setup, uint8_t depth)
468{
469 xcb_format_t *fmt, *fmtend;
470
471 fmt = xcb_setup_pixmap_formats(setup);
472 fmtend = fmt + xcb_setup_pixmap_formats_length(setup);
473 for (; fmt != fmtend; ++fmt)
474 if (fmt->depth == depth)
475 return fmt;
476
477 return 0;
478}
479
480static xcb_visualtype_t *
481_xcbob_find_visual_by_id(xcb_screen_t *screen, xcb_visualid_t id)
482{
483 xcb_depth_iterator_t diter;
484 xcb_visualtype_iterator_t viter;
485
486 diter = xcb_screen_allowed_depths_iterator(screen);
487 for (; diter.rem; xcb_depth_next(&diter))
488 {
489 viter = xcb_depth_visuals_iterator(diter.data);
490 for (; viter.rem; xcb_visualtype_next(&viter))
491 {
492 if (viter.data->visual_id == id)
493 return viter.data;
494 }
495 }
496
497 return 0;
498}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h
deleted file mode 100644
index dc1f0b4..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h
+++ /dev/null
@@ -1,30 +0,0 @@
1#ifndef EVAS_XCB_BUFFER_H
2# define EVAS_XCB_BUFFER_H
3
4# include "evas_engine.h"
5
6typedef struct _Xcb_Output_Buffer Xcb_Output_Buffer;
7struct _Xcb_Output_Buffer
8{
9 xcb_connection_t *connection;
10 xcb_visualtype_t *visual;
11 xcb_image_t *xim;
12 xcb_shm_segment_info_t *shm_info;
13 unsigned char *data;
14 int w, h, bpl, psize;
15};
16
17void evas_software_xcb_write_mask_line(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y);
18void evas_software_xcb_write_mask_line_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y);
19void evas_software_xcb_write_mask_line_vert(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w);
20void evas_software_xcb_write_mask_line_vert_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w);
21Eina_Bool evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen);
22Xcb_Output_Buffer *evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, int try_shm, unsigned char *data);
23void evas_software_xcb_output_buffer_free(Xcb_Output_Buffer *xcbob, Eina_Bool sync);
24void evas_software_xcb_output_buffer_paste(Xcb_Output_Buffer *xcbob, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, Eina_Bool sync);
25DATA8 *evas_software_xcb_output_buffer_data(Xcb_Output_Buffer *xcbob, int *bpl_ret);
26int evas_software_xcb_output_buffer_depth(Xcb_Output_Buffer *xcbob);
27int evas_software_xcb_output_buffer_byte_order(Xcb_Output_Buffer *xcbob);
28int evas_software_xcb_output_buffer_bit_order(Xcb_Output_Buffer *xcbob);
29
30#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c
deleted file mode 100644
index 3ed6037..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c
+++ /dev/null
@@ -1,424 +0,0 @@
1#include "evas_common.h"
2
3#include "evas_engine.h"
4
5typedef struct _Convert_Pal_Priv Convert_Pal_Priv;
6
7struct _Convert_Pal_Priv
8{
9 xcb_connection_t *conn;
10 xcb_colormap_t cmap;
11 xcb_visualtype_t *vis;
12};
13
14typedef DATA8 * (*Xcb_Func_Alloc_Colors) (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
15
16static Xcb_Func_Alloc_Colors x_color_alloc[PAL_MODE_LAST + 1];
17static int x_color_count[PAL_MODE_LAST + 1];
18static Eina_List *palettes = NULL;
19
20static DATA8 * x_color_alloc_rgb(int nr, int ng, int nb, xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
21static DATA8 * x_color_alloc_gray(int ng, xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
22
23static DATA8 * x_color_alloc_rgb_332 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
24static DATA8 * x_color_alloc_rgb_666 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
25static DATA8 * x_color_alloc_rgb_232 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
26static DATA8 * x_color_alloc_rgb_222 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
27static DATA8 * x_color_alloc_rgb_221 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
28static DATA8 * x_color_alloc_rgb_121 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
29static DATA8 * x_color_alloc_rgb_111 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
30static DATA8 * x_color_alloc_gray_256 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
31static DATA8 * x_color_alloc_gray_64 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
32static DATA8 * x_color_alloc_gray_16 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
33static DATA8 * x_color_alloc_gray_4 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
34static DATA8 * x_color_alloc_mono (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
35
36static DATA8 *
37x_color_alloc_rgb(int nr,
38 int ng,
39 int nb,
40 xcb_connection_t *conn,
41 xcb_colormap_t cmap,
42 xcb_visualtype_t *v)
43{
44 int r, g, b, i;
45 DATA8 *color_lut;
46 int sig_mask = 0;
47 int delt = 0;
48
49 for (i = 0; i < v->bits_per_rgb_value; i++) sig_mask |= (0x1 << i);
50 sig_mask <<= (16 - v->bits_per_rgb_value);
51 i = 0;
52 color_lut = malloc((nr) * (ng) * (nb));
53 if (!color_lut) return NULL;
54 delt = 0x0101 * 3;
55 /* FIXME: remove the round-trip ? */
56 for (r = 0; r < (nr); r++)
57 {
58 for (g = 0; g < (ng); g++)
59 {
60 for (b = 0; b < (nb); b++)
61 {
62 xcb_coloritem_t xcl;
63 xcb_coloritem_t xcl_in;
64 xcb_alloc_color_reply_t *rep;
65 int val;
66 int dr, dg, db;
67
68 val = (int)((((double)r) / ((nr) - 1)) * 255);
69 val = (val << 8) | val;
70 xcl.red = (uint16_t)(val);
71 val = (int)((((double)g) / ((ng) - 1)) * 255);
72 val = (val << 8) | val;
73 xcl.green = (uint16_t)(val);
74 val = (int)((((double)b) / ((nb) - 1)) * 255);
75 val = (val << 8) | val;
76 xcl.blue = (uint16_t)(val);
77 xcl_in = xcl;
78 rep = xcb_alloc_color_reply(conn,
79 xcb_alloc_color_unchecked(conn,
80 cmap,
81 xcl.red,
82 xcl.green,
83 xcl.blue),
84 0);
85 dr = (int)xcl_in.red - (int)xcl.red;
86 if (dr < 0) dr = -dr;
87 dg = (int)xcl_in.green - (int)xcl.green;
88 if (dg < 0) dg = -dg;
89 db = (int)xcl_in.blue - (int)xcl.blue;
90 if (db < 0) db = -db;
91/*
92 printf("ASK [%i]: %04x %04x %04x = %04x %04x %04x | dif = %04x / %04x\n",
93 ret,
94 xcl_in.red, xcl_in.green, xcl_in.blue,
95 xcl.red, xcl.green, xcl.blue,
96 (dr + dg +db), delt);
97 */
98
99 /* TODO: XAllocColor tries to approach the color */
100 /* in case the allocation fails */
101 /* XCB does not that (i think). It should be done */
102 /* So if rep == NULL, the other following tests */
103 /* should be always satisfied */
104 if ((!rep) ||
105 ((dr + dg + db) > delt)
106 /*
107 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
108 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
109 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask))
110 */
111 )
112 {
113 uint32_t pixels[256];
114 int j;
115
116 if (i > 0)
117 {
118 for (j = 0; j < i; j++)
119 pixels[j] = (uint32_t)color_lut[j];
120 xcb_free_colors(conn, cmap, 0, i, pixels);
121 }
122 free(color_lut);
123 return NULL;
124 }
125 color_lut[i] = rep->pixel;
126 i++;
127 free(rep);
128 }
129 }
130 }
131 return color_lut;
132}
133
134static DATA8 *
135x_color_alloc_gray(int ng,
136 xcb_connection_t *conn,
137 xcb_colormap_t cmap,
138 xcb_visualtype_t *v)
139{
140 int g, i;
141 DATA8 *color_lut;
142 int sig_mask = 0;
143
144 for (i = 0; i < v->bits_per_rgb_value; i++) sig_mask |= (0x1 << i);
145 sig_mask <<= (16 - v->bits_per_rgb_value);
146 i = 0;
147 color_lut = malloc(ng);
148 if (!color_lut) return NULL;
149 /* FIXME: remove the round-trip ? */
150 for (g = 0; g < (ng); g++)
151 {
152 xcb_coloritem_t xcl;
153 xcb_coloritem_t xcl_in;
154 int val;
155 xcb_alloc_color_reply_t *rep;
156
157 val = (int)((((double)g) / ((ng) - 1)) * 255);
158 val = (val << 8) | val;
159 xcl.red = (uint16_t)(val);
160 xcl.green = (uint16_t)(val);
161 xcl.blue = (uint16_t)(val);
162 xcl_in = xcl;
163 rep = xcb_alloc_color_reply(conn,
164 xcb_alloc_color_unchecked(conn,
165 cmap,
166 xcl.red,
167 xcl.green,
168 xcl.blue),
169 0);
170 /* FIXME: XAllocColor tries to approach the color */
171 /* in case the allocation fails */
172 /* XCB does not that (i think). It should be done */
173 /* So if rep == NULL, the other following tests */
174 /* should be always satisfied */
175 if ((!rep) ||
176 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
177 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
178 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
179 {
180 uint32_t pixels[256];
181 int j;
182
183 if (i > 0)
184 {
185 for (j = 0; j < i; j++)
186 pixels[j] = (uint32_t) color_lut[j];
187 xcb_free_colors(conn, cmap, 0, i, pixels);
188 }
189 free(color_lut);
190 return NULL;
191 }
192 color_lut[i] = rep->pixel;
193 i++;
194 free(rep);
195 }
196 return color_lut;
197}
198
199static DATA8 *
200x_color_alloc_rgb_332(xcb_connection_t *conn,
201 xcb_colormap_t cmap,
202 xcb_visualtype_t *v)
203{
204 return x_color_alloc_rgb(8, 8, 4, conn, cmap, v);
205}
206
207static DATA8 *
208x_color_alloc_rgb_666(xcb_connection_t *conn,
209 xcb_colormap_t cmap,
210 xcb_visualtype_t *v)
211{
212 return x_color_alloc_rgb(6, 6, 6, conn, cmap, v);
213}
214
215static DATA8 *
216x_color_alloc_rgb_232(xcb_connection_t *conn,
217 xcb_colormap_t cmap,
218 xcb_visualtype_t *v)
219{
220 return x_color_alloc_rgb(4, 8, 4, conn, cmap, v);
221}
222
223static DATA8 *
224x_color_alloc_rgb_222(xcb_connection_t *conn,
225 xcb_colormap_t cmap,
226 xcb_visualtype_t *v)
227{
228 return x_color_alloc_rgb(4, 4, 4, conn, cmap, v);
229}
230
231static DATA8 *
232x_color_alloc_rgb_221(xcb_connection_t *conn,
233 xcb_colormap_t cmap,
234 xcb_visualtype_t *v)
235{
236 return x_color_alloc_rgb(4, 4, 2, conn, cmap, v);
237}
238
239static DATA8 *
240x_color_alloc_rgb_121(xcb_connection_t *conn,
241 xcb_colormap_t cmap,
242 xcb_visualtype_t *v)
243{
244 return x_color_alloc_rgb(2, 4, 2, conn, cmap, v);
245}
246
247static DATA8 *
248x_color_alloc_rgb_111(xcb_connection_t *conn,
249 xcb_colormap_t cmap,
250 xcb_visualtype_t *v)
251{
252 return x_color_alloc_rgb(2, 2, 2, conn, cmap, v);
253}
254
255static DATA8 *
256x_color_alloc_gray_256(xcb_connection_t *conn,
257 xcb_colormap_t cmap,
258 xcb_visualtype_t *v)
259{
260 return x_color_alloc_gray(256, conn, cmap, v);
261}
262
263static DATA8 *
264x_color_alloc_gray_64(xcb_connection_t *conn,
265 xcb_colormap_t cmap,
266 xcb_visualtype_t *v)
267{
268 return x_color_alloc_gray(64, conn, cmap, v);
269}
270
271static DATA8 *
272x_color_alloc_gray_16(xcb_connection_t *conn,
273 xcb_colormap_t cmap,
274 xcb_visualtype_t *v)
275{
276 return x_color_alloc_gray(32, conn, cmap, v);
277}
278
279static DATA8 *
280x_color_alloc_gray_4(xcb_connection_t *conn,
281 xcb_colormap_t cmap,
282 xcb_visualtype_t *v)
283{
284 return x_color_alloc_gray(16, conn, cmap, v);
285}
286
287static DATA8 *
288x_color_alloc_mono(xcb_connection_t *conn,
289 xcb_colormap_t cmap,
290 xcb_visualtype_t *v)
291{
292 return x_color_alloc_gray(2, conn, cmap, v);
293}
294
295void
296evas_software_xcb_color_init(void)
297{
298 static int initialised = 0;
299
300 if (initialised) return;
301 x_color_alloc[PAL_MODE_NONE] = NULL;
302 x_color_count[PAL_MODE_NONE] = 0;
303
304 x_color_alloc[PAL_MODE_MONO] = x_color_alloc_mono;
305 x_color_count[PAL_MODE_MONO] = 2;
306
307 x_color_alloc[PAL_MODE_GRAY4] = x_color_alloc_gray_4;
308 x_color_count[PAL_MODE_GRAY4] = 4;
309
310 x_color_alloc[PAL_MODE_GRAY16] = x_color_alloc_gray_16;
311 x_color_count[PAL_MODE_GRAY16] = 16;
312
313 x_color_alloc[PAL_MODE_GRAY64] = x_color_alloc_gray_64;
314 x_color_count[PAL_MODE_GRAY64] = 64;
315
316 x_color_alloc[PAL_MODE_GRAY256] = x_color_alloc_gray_256;
317 x_color_count[PAL_MODE_GRAY256] = 256;
318
319 x_color_alloc[PAL_MODE_RGB111] = x_color_alloc_rgb_111;
320 x_color_count[PAL_MODE_RGB111] = 2 * 2 * 2;
321
322 x_color_alloc[PAL_MODE_RGB121] = x_color_alloc_rgb_121;
323 x_color_count[PAL_MODE_RGB121] = 2 * 4 * 2;
324
325 x_color_alloc[PAL_MODE_RGB221] = x_color_alloc_rgb_221;
326 x_color_count[PAL_MODE_RGB221] = 4 * 4 * 2;
327
328 x_color_alloc[PAL_MODE_RGB222] = x_color_alloc_rgb_222;
329 x_color_count[PAL_MODE_RGB222] = 4 * 4 * 4;
330
331 x_color_alloc[PAL_MODE_RGB232] = x_color_alloc_rgb_232;
332 x_color_count[PAL_MODE_RGB232] = 4 * 8 * 4;
333
334 x_color_alloc[PAL_MODE_RGB666] = x_color_alloc_rgb_666;
335 x_color_count[PAL_MODE_RGB666] = 6 * 6 * 6;
336
337 x_color_alloc[PAL_MODE_RGB332] = x_color_alloc_rgb_332;
338 x_color_count[PAL_MODE_RGB332] = 8 * 8 * 4;
339
340 x_color_alloc[PAL_MODE_LAST] = NULL;
341 x_color_count[PAL_MODE_LAST] = 0;
342 initialised = 1;
343}
344
345Convert_Pal *
346evas_software_xcb_color_allocate(xcb_connection_t *conn,
347 xcb_colormap_t cmap,
348 xcb_visualtype_t *vis,
349 Convert_Pal_Mode colors)
350{
351 Convert_Pal_Priv *palpriv;
352 Convert_Pal *pal;
353 Convert_Pal_Mode c;
354 Eina_List *l;
355
356/* printf("ALLOC cmap=%i vis=%p\n", cmap, vis);*/
357 EINA_LIST_FOREACH(palettes, l, pal)
358 {
359 palpriv = pal->data;
360 if ((conn == palpriv->conn) &&
361 (vis == palpriv->vis) &&
362 (cmap == palpriv->cmap))
363 {
364 pal->references++;
365 return pal;
366 }
367 }
368 pal = calloc(1, sizeof(struct _Convert_Pal));
369 if (!pal) return NULL;
370 for (c = colors; c > PAL_MODE_NONE; c--)
371 {
372 if (x_color_alloc[c])
373 {
374/* printf("TRY PAL %i\n", c);*/
375 pal->lookup = (x_color_alloc[c])(conn, cmap, vis);
376 if (pal->lookup) break;
377 }
378 }
379 pal->references = 1;
380 pal->colors = c;
381 pal->count = x_color_count[c];
382 palpriv = calloc(1, sizeof(Convert_Pal_Priv));
383 pal->data = palpriv;
384 if (!palpriv)
385 {
386 if (pal->lookup) free(pal->lookup);
387 free(pal);
388 return NULL;
389 }
390 palpriv->conn = conn;
391 palpriv->vis = vis;
392 palpriv->cmap = cmap;
393 if (pal->colors == PAL_MODE_NONE)
394 {
395 if (pal->lookup) free(pal->lookup);
396 free(pal);
397 return NULL;
398 }
399 palettes = eina_list_append(palettes, pal);
400 return pal;
401}
402
403void
404evas_software_xcb_color_deallocate(xcb_connection_t *conn,
405 xcb_colormap_t cmap,
406 xcb_visualtype_t *vis __UNUSED__,
407 Convert_Pal *pal)
408{
409 uint32_t pixels[256];
410 int j;
411
412 pal->references--;
413 if (pal->references > 0) return;
414 if (pal->lookup)
415 {
416 for(j = 0; j < pal->count; j++)
417 pixels[j] = (uint32_t) pal->lookup[j];
418 xcb_free_colors(conn, cmap, 0, pal->count, pixels);
419 free(pal->lookup);
420 }
421 free(pal->data);
422 palettes = eina_list_remove(palettes, pal);
423 free(pal);
424}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h
deleted file mode 100644
index 7dcaeaf..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h
+++ /dev/null
@@ -1,10 +0,0 @@
1#ifndef EVAS_XCB_COLOR_H
2# define EVAS_XCB_COLOR_H
3
4# include "evas_engine.h"
5
6void evas_software_xcb_color_init(void);
7Convert_Pal *evas_software_xcb_color_allocate(xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *vis, Convert_Pal_Mode colors);
8void evas_software_xcb_color_deallocate(xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *vis, Convert_Pal *pal);
9
10#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c
deleted file mode 100644
index d187016..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c
+++ /dev/null
@@ -1,8 +0,0 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4void
5evas_software_xcb_init(void)
6{
7
8}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c
deleted file mode 100644
index 71759be..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c
+++ /dev/null
@@ -1,1092 +0,0 @@
1#include "evas_common.h"
2#include "evas_macros.h"
3#include "evas_xcb_outbuf.h"
4#include "evas_xcb_buffer.h"
5#include "evas_xcb_color.h"
6#include <pixman.h>
7
8/* local structures */
9typedef struct _Outbuf_Region Outbuf_Region;
10struct _Outbuf_Region
11{
12 Xcb_Output_Buffer *xcbob, *mask;
13 int x, y, w, h;
14};
15
16/* local function prototypes */
17static Xcb_Output_Buffer *_find_xcbob(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, Eina_Bool shm, void *data);
18static void _unfind_xcbob(Xcb_Output_Buffer *xcbob, Eina_Bool sync);
19static void _clear_xcbob(Eina_Bool sync);
20static void _xcbob_sync(xcb_connection_t *conn);
21
22/* local variables */
23static Eina_List *_shmpool = NULL;
24static int _shmsize = 0;
25static int _shmlimit = (10 * 1024 * 1024);
26static const unsigned int _shmcountlimit = 32;
27
28#ifdef EVAS_FRAME_QUEUING
29static LK(lock_shmpool);
30# define SHMPOOL_LOCK() LKL(lock_shmpool);
31# define SHMPOOL_UNLOCK() LKU(lock_shmpool);
32#else
33# define SHMPOOL_LOCK()
34# define SHMPOOL_UNLOCK()
35#endif
36
37void
38evas_software_xcb_outbuf_init(void)
39{
40#ifdef EVAS_FRAME_QUEUING
41 LKI(lock_shmpool);
42#endif
43}
44
45void
46evas_software_xcb_outbuf_free(Outbuf *buf)
47{
48#ifdef EVAS_FRAME_QUEUING
49 LKL(buf->priv.lock);
50#endif
51 while (buf->priv.pending_writes)
52 {
53 RGBA_Image *im = NULL;
54 Outbuf_Region *obr = NULL;
55
56 im = buf->priv.pending_writes->data;
57 buf->priv.pending_writes =
58 eina_list_remove_list(buf->priv.pending_writes,
59 buf->priv.pending_writes);
60 obr = im->extended_info;
61 evas_cache_image_drop(&im->cache_entry);
62 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
63 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
64 free(obr);
65 }
66#ifdef EVAS_FRAME_QUEUING
67 LKU(buf->priv.lock);
68#endif
69 evas_software_xcb_outbuf_idle_flush(buf);
70 evas_software_xcb_outbuf_flush(buf);
71 if (buf->priv.x11.xcb.gc)
72 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc);
73 if (buf->priv.x11.xcb.gcm)
74 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gcm);
75 if (buf->priv.pal)
76 evas_software_xcb_color_deallocate(buf->priv.x11.xcb.conn,
77 buf->priv.x11.xcb.cmap,
78 buf->priv.x11.xcb.visual,
79 buf->priv.pal);
80#ifdef EVAS_FRAME_QUEUING
81 LKD(buf->priv.lock);
82#endif
83 free(buf);
84 _clear_xcbob(EINA_FALSE);
85}
86
87Outbuf *
88evas_software_xcb_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, xcb_connection_t *conn, xcb_screen_t *screen, xcb_drawable_t draw, xcb_visualtype_t *vis, xcb_colormap_t cmap, int xdepth, Eina_Bool grayscale, int max_colors, xcb_drawable_t mask, Eina_Bool shape_dither, Eina_Bool alpha)
89{
90 Outbuf *buf = NULL;
91 Gfx_Func_Convert func_conv= NULL;
92 const xcb_setup_t *setup;
93
94 if (!(buf = calloc(1, sizeof(Outbuf))))
95 return NULL;
96
97 setup = xcb_get_setup(conn);
98
99 buf->w = w;
100 buf->h = h;
101 buf->depth = depth;
102 buf->rot = rot;
103 buf->priv.x11.xcb.conn = conn;
104 buf->priv.x11.xcb.screen = screen;
105 buf->priv.x11.xcb.visual = vis;
106 buf->priv.x11.xcb.cmap = cmap;
107 buf->priv.x11.xcb.depth = xdepth;
108 buf->priv.mask_dither = shape_dither;
109 buf->priv.destination_alpha = alpha;
110 buf->priv.x11.xcb.shm = evas_software_xcb_can_do_shm(conn, screen);
111
112#ifdef WORDS_BIGENDIAN
113 if (setup->image_byte_order == XCB_IMAGE_ORDER_LSB_FIRST)
114 buf->priv.x11.xcb.swap = EINA_TRUE;
115#else
116 if (setup->image_byte_order == XCB_IMAGE_ORDER_MSB_FIRST)
117 buf->priv.x11.xcb.swap = EINA_TRUE;
118#endif
119 if (setup->bitmap_format_bit_order == XCB_IMAGE_ORDER_MSB_FIRST)
120 buf->priv.x11.xcb.bit_swap = EINA_TRUE;
121
122 if (((vis->_class == XCB_VISUAL_CLASS_TRUE_COLOR) ||
123 (vis->_class == XCB_VISUAL_CLASS_DIRECT_COLOR)) && (xdepth > 8))
124 {
125 buf->priv.mask.r = (DATA32)vis->red_mask;
126 buf->priv.mask.g = (DATA32)vis->green_mask;
127 buf->priv.mask.b = (DATA32)vis->blue_mask;
128 if (buf->priv.x11.xcb.swap)
129 {
130 SWAP32(buf->priv.mask.r);
131 SWAP32(buf->priv.mask.g);
132 SWAP32(buf->priv.mask.b);
133 }
134 }
135 else if ((vis->_class == XCB_VISUAL_CLASS_PSEUDO_COLOR) ||
136 (vis->_class == XCB_VISUAL_CLASS_STATIC_COLOR) ||
137 (vis->_class == XCB_VISUAL_CLASS_GRAY_SCALE) ||
138 (vis->_class == XCB_VISUAL_CLASS_STATIC_GRAY) ||
139 (xdepth <= 8))
140 {
141 Convert_Pal_Mode pm = PAL_MODE_RGB332;
142
143 if ((vis->_class == XCB_VISUAL_CLASS_GRAY_SCALE) ||
144 (vis->_class == XCB_VISUAL_CLASS_STATIC_GRAY))
145 grayscale = EINA_TRUE;
146 if (grayscale)
147 {
148 if (max_colors >= 256)
149 pm = PAL_MODE_GRAY256;
150 else if (max_colors >= 64)
151 pm = PAL_MODE_GRAY64;
152 else if (max_colors >= 16)
153 pm = PAL_MODE_GRAY16;
154 else if (max_colors >= 4)
155 pm = PAL_MODE_GRAY4;
156 else
157 pm = PAL_MODE_MONO;
158 }
159 else
160 {
161 if (max_colors >= 256)
162 pm = PAL_MODE_RGB332;
163 else if (max_colors >= 216)
164 pm = PAL_MODE_RGB666;
165 else if (max_colors >= 128)
166 pm = PAL_MODE_RGB232;
167 else if (max_colors >= 64)
168 pm = PAL_MODE_RGB222;
169 else if (max_colors >= 32)
170 pm = PAL_MODE_RGB221;
171 else if (max_colors >= 16)
172 pm = PAL_MODE_RGB121;
173 else if (max_colors >= 8)
174 pm = PAL_MODE_RGB111;
175 else if (max_colors >= 4)
176 pm = PAL_MODE_GRAY4;
177 else
178 pm = PAL_MODE_MONO;
179 }
180 /* FIXME: Only allocate once per display & colormap */
181 buf->priv.pal =
182 evas_software_xcb_color_allocate(conn, cmap, vis, pm);
183 if (!buf->priv.pal)
184 {
185 free(buf);
186 return NULL;
187 }
188 }
189 if ((buf->rot == 0) || (buf->rot == 180))
190 {
191 w = buf->w;
192 h = buf->h;
193 }
194 else if ((buf->rot == 90) || (buf->rot == 270))
195 {
196 w = buf->h;
197 h = buf->w;
198 }
199
200 if (buf->priv.pal)
201 {
202 func_conv =
203 evas_common_convert_func_get(0, w, h, xdepth,
204 buf->priv.mask.r,
205 buf->priv.mask.g,
206 buf->priv.mask.b,
207 buf->priv.pal->colors, buf->rot);
208 }
209 else
210 {
211 func_conv =
212 evas_common_convert_func_get(0, w, h, xdepth,
213 buf->priv.mask.r,
214 buf->priv.mask.g,
215 buf->priv.mask.b,
216 PAL_MODE_NONE, buf->rot);
217 }
218 if (!func_conv)
219 {
220 ERR("XCB Engine"
221 " {"
222 " At depth %i:"
223 " RGB format mask: %08x, %08x, %08x"
224 " Palette mode: %i"
225 " Not supported by any compiled in converters!"
226 " }", buf->priv.x11.xcb.depth, buf->priv.mask.r,
227 buf->priv.mask.g, buf->priv.mask.b,
228 buf->priv.pal ? (int)buf->priv.pal->colors : -1);
229 }
230
231 evas_software_xcb_outbuf_drawable_set(buf, draw);
232 evas_software_xcb_outbuf_mask_set(buf, mask);
233
234#ifdef EVAS_FRAME_QUEUING
235 LKI(buf->priv.lock);
236#endif
237
238 return buf;
239}
240
241RGBA_Image *
242evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
243{
244 RGBA_Image *im = NULL;
245 Outbuf_Region *obr = NULL;
246 Eina_Bool use_shm = EINA_TRUE;
247 Eina_Bool alpha = EINA_FALSE;
248 int bpl = 0;
249
250 if ((buf->onebuf) && (buf->priv.x11.xcb.shm))
251 {
252 Eina_Rectangle *rect;
253
254 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, buf->w, buf->h);
255
256 if (!(obr = calloc(1, sizeof(Outbuf_Region))))
257 return NULL;
258
259 if (!(rect = eina_rectangle_new(x, y, w, h)))
260 {
261 free(obr);
262 return NULL;
263 }
264
265 buf->priv.onebuf_regions =
266 eina_list_append(buf->priv.onebuf_regions, rect);
267 if (buf->priv.onebuf)
268 {
269 if (cx) *cx = x;
270 if (cy) *cy = y;
271 if (cw) *cw = w;
272 if (ch) *ch = h;
273 if (!buf->priv.synced)
274 {
275 _xcbob_sync(buf->priv.x11.xcb.conn);
276 buf->priv.synced = EINA_TRUE;
277 }
278 return buf->priv.onebuf;
279 }
280 obr->x = 0;
281 obr->y = 0;
282 obr->w = buf->w;
283 obr->h = buf->h;
284 if (cx) *cx = x;
285 if (cy) *cy = y;
286 if (cw) *cw = w;
287 if (ch) *ch = h;
288
289 alpha = ((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha));
290 use_shm = buf->priv.x11.xcb.shm;
291
292 if ((buf->rot == 0) && (buf->priv.mask.r == 0xff0000) &&
293 (buf->priv.mask.g == 0x00ff00) && (buf->priv.mask.b == 0x0000ff))
294 {
295 obr->xcbob =
296 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
297 buf->priv.x11.xcb.visual,
298 buf->priv.x11.xcb.depth,
299 buf->w, buf->h, use_shm,
300 NULL);
301 if (!obr->xcbob)
302 {
303 free(obr);
304 return NULL;
305 }
306 im =
307 (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
308 buf->w, buf->h,
309 (DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
310 alpha, EVAS_COLORSPACE_ARGB8888);
311 if (!im)
312 {
313 evas_software_xcb_output_buffer_free(obr->xcbob, EINA_FALSE);
314 free(obr);
315 return NULL;
316 }
317 im->extended_info = obr;
318 if (buf->priv.x11.xcb.mask)
319 {
320 obr->mask =
321 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
322 buf->priv.x11.xcb.visual,
323 1, buf->w, buf->h,
324 use_shm, NULL);
325 }
326 }
327 else
328 {
329 int bw = 0, bh = 0;
330
331 im =
332 (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
333 if (!im)
334 {
335 free(obr);
336 return NULL;
337 }
338 im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
339 evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
340 im->extended_info = obr;
341 if ((buf->rot == 0) || (buf->rot == 180))
342 {
343 bw = buf->w;
344 bh = buf->h;
345 }
346 else if ((buf->rot == 90) || (buf->rot == 270))
347 {
348 bw = buf->h;
349 bh = buf->w;
350 }
351 obr->xcbob =
352 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
353 buf->priv.x11.xcb.visual,
354 buf->priv.x11.xcb.depth,
355 bw, bh, use_shm, NULL);
356 if (!obr->xcbob)
357 {
358 evas_cache_image_drop(&im->cache_entry);
359 free(obr);
360 return NULL;
361 }
362 if (buf->priv.x11.xcb.mask)
363 {
364 obr->mask =
365 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
366 buf->priv.x11.xcb.visual,
367 1, bw, bh, use_shm,
368 NULL);
369 }
370 }
371 /* FIXME: We should be able to remove this memset. */
372 if ((alpha) && (im->image.data))
373 {
374 /* FIXME: Faster memset */
375// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
376 }
377 buf->priv.onebuf = im;
378 return im;
379 }
380
381 if (!(obr = calloc(1, sizeof(Outbuf_Region))))
382 return NULL;
383
384 obr->x = x;
385 obr->y = y;
386 obr->w = w;
387 obr->h = h;
388 if (cx) *cx = 0;
389 if (cy) *cy = 0;
390 if (cw) *cw = w;
391 if (ch) *ch = h;
392
393 use_shm = buf->priv.x11.xcb.shm;
394 alpha = ((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha));
395 if ((buf->rot == 0) && (buf->priv.mask.r == 0xff0000) &&
396 (buf->priv.mask.g == 0x00ff00) && (buf->priv.mask.b == 0x0000ff))
397 {
398 obr->xcbob =
399 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
400 buf->priv.x11.xcb.depth, w, h, use_shm, NULL);
401 if (!obr->xcbob)
402 {
403 free(obr);
404 return NULL;
405 }
406 im =
407 (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
408 w, h,
409 (DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
410 alpha, EVAS_COLORSPACE_ARGB8888);
411 if (!im)
412 {
413 _unfind_xcbob(obr->xcbob, EINA_FALSE);
414 free(obr);
415 return NULL;
416 }
417 im->extended_info = obr;
418 if (buf->priv.x11.xcb.mask)
419 {
420 obr->mask =
421 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
422 1, w, h, use_shm, NULL);
423 }
424 }
425 else
426 {
427 int bw = 0, bh = 0;
428
429 im =
430 (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
431 if (!im)
432 {
433 free(obr);
434 return NULL;
435 }
436 im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
437 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
438 im->extended_info = obr;
439 if ((buf->rot == 0) || (buf->rot == 180))
440 {
441 bw = w;
442 bh = h;
443 }
444 else if ((buf->rot == 90) || (buf->rot == 270))
445 {
446 bw = h;
447 bh = w;
448 }
449 obr->xcbob =
450 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
451 buf->priv.x11.xcb.depth, bw, bh, use_shm, NULL);
452 if (!obr->xcbob)
453 {
454 evas_cache_image_drop(&im->cache_entry);
455 free(obr);
456 return NULL;
457 }
458 if (buf->priv.x11.xcb.mask)
459 {
460 obr->mask =
461 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual, 1,
462 bw, bh, use_shm, NULL);
463 }
464 }
465 /* FIXME: We should be able to remove this memset. */
466 if (((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha)) &&
467 (im->image.data))
468 {
469 /* FIXME: Faster memset */
470// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
471 }
472
473#ifdef EVAS_FRAME_QUEUING
474 if (!evas_common_frameq_enabled())
475#endif
476 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
477
478 return im;
479}
480
481void
482evas_software_xcb_outbuf_free_region_for_update(Outbuf *buf __UNUSED__, RGBA_Image *update __UNUSED__)
483{
484 /* NOOP: Cleaned up on flush */
485}
486
487void
488evas_software_xcb_outbuf_flush(Outbuf *buf)
489{
490 Eina_List *l = NULL;
491 RGBA_Image *im = NULL;
492 Outbuf_Region *obr = NULL;
493
494 if ((buf->priv.onebuf) && (buf->priv.onebuf_regions))
495 {
496 pixman_region16_t tmpr;
497
498 im = buf->priv.onebuf;
499 obr = im->extended_info;
500 pixman_region_init(&tmpr);
501 while (buf->priv.onebuf_regions)
502 {
503 Eina_Rectangle *rect, xr = { 0, 0, 0, 0 };
504
505 rect = buf->priv.onebuf_regions->data;
506 buf->priv.onebuf_regions =
507 eina_list_remove_list(buf->priv.onebuf_regions,
508 buf->priv.onebuf_regions);
509 if (buf->rot == 0)
510 {
511 xr.x = rect->x;
512 xr.y = rect->y;
513 xr.w = rect->w;
514 xr.h = rect->h;
515 }
516 else if (buf->rot == 90)
517 {
518 xr.x = rect->y;
519 xr.y = buf->w - rect->x - rect->w;
520 xr.w = rect->h;
521 xr.h = rect->w;
522 }
523 else if (buf->rot == 180)
524 {
525 xr.x = buf->w - rect->x - rect->w;
526 xr.y = buf->h - rect->y - rect->h;
527 xr.w = rect->w;
528 xr.h = rect->h;
529 }
530 else if (buf->rot == 270)
531 {
532 xr.x = buf->h - rect->y - rect->h;
533 xr.y = rect->x;
534 xr.w = rect->h;
535 xr.h = rect->w;
536 }
537 pixman_region_union_rect(&tmpr, &tmpr, xr.x, xr.y, xr.w, xr.h);
538 if (buf->priv.debug)
539 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
540 xr.x, xr.y, xr.w, xr.h);
541 eina_rectangle_free(rect);
542 }
543 xcb_set_clip_rectangles(buf->priv.x11.xcb.conn,
544 XCB_CLIP_ORDERING_YX_BANDED,
545 buf->priv.x11.xcb.gc, 0, 0,
546 pixman_region_n_rects(&tmpr),
547 (const xcb_rectangle_t *)pixman_region_rectangles(&tmpr, NULL));
548 if (obr->xcbob)
549 evas_software_xcb_output_buffer_paste(obr->xcbob,
550 buf->priv.x11.xcb.win,
551 buf->priv.x11.xcb.gc, 0, 0, 0);
552 if (obr->mask)
553 {
554 xcb_set_clip_rectangles(buf->priv.x11.xcb.conn,
555 XCB_CLIP_ORDERING_YX_BANDED,
556 buf->priv.x11.xcb.gcm, 0, 0,
557 pixman_region_n_rects(&tmpr),
558 (const xcb_rectangle_t *)pixman_region_rectangles(&tmpr, NULL));
559 evas_software_xcb_output_buffer_paste(obr->mask,
560 buf->priv.x11.xcb.mask,
561 buf->priv.x11.xcb.gcm,
562 0, 0, 0);
563 }
564 pixman_region_fini(&tmpr);
565 buf->priv.synced = EINA_FALSE;
566 }
567 else
568 {
569#if 1
570 _xcbob_sync(buf->priv.x11.xcb.conn);
571 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
572 {
573 obr = im->extended_info;
574 if (buf->priv.debug)
575 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
576 obr->x, obr->y, obr->w, obr->h);
577 if (obr->xcbob)
578 evas_software_xcb_output_buffer_paste(obr->xcbob,
579 buf->priv.x11.xcb.win,
580 buf->priv.x11.xcb.gc,
581 obr->x, obr->y, 0);
582 if (obr->mask)
583 evas_software_xcb_output_buffer_paste(obr->mask,
584 buf->priv.x11.xcb.mask,
585 buf->priv.x11.xcb.gcm,
586 obr->x, obr->y, 0);
587 }
588# ifdef EVAS_FRAME_QUEUING
589 LKL(buf->priv.lock);
590# endif
591 while (buf->priv.prev_pending_writes)
592 {
593 im = buf->priv.prev_pending_writes->data;
594 buf->priv.prev_pending_writes =
595 eina_list_remove_list(buf->priv.prev_pending_writes,
596 buf->priv.prev_pending_writes);
597 obr = im->extended_info;
598 evas_cache_image_drop(&im->cache_entry);
599 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
600 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
601 free(obr);
602 }
603 buf->priv.prev_pending_writes = buf->priv.pending_writes;
604# ifdef EVAS_FRAME_QUEUING
605 LKU(buf->priv.lock);
606# endif
607 buf->priv.pending_writes = NULL;
608 xcb_flush(buf->priv.x11.xcb.conn);
609#else
610 /* FIXME: Async Push Disabled */
611
612 _xcbob_sync(buf->priv.x11.xcb.conn);
613 while (buf->priv.pending_writes)
614 {
615 im = eina_list_data_get(buf->priv.pending_writes);
616 buf->priv.pending_writes =
617 eina_list_remove_list(buf->priv.pending_writes,
618 buf->priv.pending_writes);
619 obr = im->extended_info;
620 evas_cache_image_drop(&im->cache_entry);
621 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
622 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
623 free(obr);
624 evas_cache_image_drop(&im->cache_entry);
625 }
626#endif
627 }
628 evas_common_cpu_end_opt();
629}
630
631void
632evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
633{
634 if (buf->priv.onebuf)
635 {
636 RGBA_Image *im;
637 Outbuf_Region *obr;
638
639 im = buf->priv.onebuf;
640 buf->priv.onebuf = NULL;
641 obr = im->extended_info;
642 if (obr->xcbob)
643 evas_software_xcb_output_buffer_free(obr->xcbob, EINA_FALSE);
644 if (obr->mask)
645 evas_software_xcb_output_buffer_free(obr->mask, EINA_FALSE);
646 free(obr);
647 evas_cache_image_drop(&im->cache_entry);
648 }
649 else
650 {
651#ifdef EVAS_FRAME_QUEUING
652 LKL(buf->priv.lock);
653#endif
654 if (buf->priv.prev_pending_writes)
655 _xcbob_sync(buf->priv.x11.xcb.conn);
656 while (buf->priv.prev_pending_writes)
657 {
658 RGBA_Image *im;
659 Outbuf_Region *obr;
660
661 im = buf->priv.prev_pending_writes->data;
662 buf->priv.prev_pending_writes =
663 eina_list_remove_list(buf->priv.prev_pending_writes,
664 buf->priv.prev_pending_writes);
665 obr = im->extended_info;
666 evas_cache_image_drop(&im->cache_entry);
667 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
668 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
669 free(obr);
670 }
671#ifdef EVAS_FRAME_QUEUING
672 LKU(buf->priv.lock);
673#endif
674 _clear_xcbob(EINA_FALSE);
675 }
676}
677
678void
679evas_software_xcb_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
680{
681 Gfx_Func_Convert func_conv = NULL;
682 Outbuf_Region *obr = NULL;
683 DATA32 *src_data = NULL;
684 unsigned char *data = NULL;
685 int bpl = 0, yy = 0;
686 int bw = 0, bh = 0;
687
688 obr = update->extended_info;
689 if (!obr->xcbob) return;
690
691 if ((buf->rot == 0) || (buf->rot == 180))
692 {
693 bw = w;
694 bh = h;
695 }
696 else if ((buf->rot == 90) || (buf->rot == 270))
697 {
698 bw = h;
699 bh = w;
700 }
701 if (buf->priv.pal)
702 {
703 func_conv =
704 evas_common_convert_func_get(0, bw, bh, buf->depth, buf->priv.mask.r,
705 buf->priv.mask.g, buf->priv.mask.b,
706 buf->priv.pal->colors, buf->rot);
707 }
708 else
709 {
710 func_conv =
711 evas_common_convert_func_get(0, bw, bh, buf->depth, buf->priv.mask.r,
712 buf->priv.mask.g, buf->priv.mask.b,
713 PAL_MODE_NONE, buf->rot);
714 }
715 if (!func_conv) return;
716
717 if (!(data = evas_software_xcb_output_buffer_data(obr->xcbob, &bpl)))
718 return;
719 if (!(src_data = update->image.data)) return;
720 if (buf->rot == 0)
721 {
722 obr->x = x;
723 obr->y = y;
724 obr->w = w;
725 obr->h = h;
726 }
727 else if (buf->rot == 90)
728 {
729 obr->x = y;
730 obr->y = (buf->w - x - w);
731 obr->w = h;
732 obr->h = w;
733 }
734 else if (buf->rot == 180)
735 {
736 obr->x = (buf->w - x - w);
737 obr->y = (buf->h - y - h);
738 obr->w = w;
739 obr->h = h;
740 }
741 else if (buf->rot == 270)
742 {
743 obr->x = (buf->h - y - h);
744 obr->y = x;
745 obr->w = h;
746 obr->h = w;
747 }
748 if (buf->onebuf)
749 {
750 src_data += x + (y * update->cache_entry.w);
751 data += (bpl * obr->y) + (obr->x * (buf->depth / 8));
752 }
753 if (data != (unsigned char *)src_data)
754 {
755 if (buf->priv.pal)
756 func_conv(src_data, data, update->cache_entry.w - w,
757 (bpl / (buf->depth / 8)) - obr->w,
758 obr->w, obr->h, x, y, buf->priv.pal->lookup);
759 else
760 func_conv(src_data, data, update->cache_entry.w - w,
761 (bpl / (buf->depth / 8)) - obr->w,
762 obr->w, obr->h, x, y, NULL);
763 }
764#if 1
765#else
766 /* Async Push */
767 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
768 {
769 if (buf->priv.debug)
770 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
771 obr->x, obr->y, obr->w, obr->h);
772 if (obr->xcbob)
773 evas_software_xcb_output_buffer_paste(obr->xcbob,
774 buf->priv.x11.xcb.win,
775 buf->priv.x11.xcb.gc,
776 obr->x, obr->y, 0);
777 }
778#endif
779 if (obr->mask)
780 {
781 if (buf->rot == 0)
782 {
783 for (yy = 0; yy < obr->h; yy++)
784 evas_software_xcb_write_mask_line(buf, obr->mask,
785 src_data + (yy * obr->w),
786 obr->w, yy);
787 }
788 else if (buf->rot == 90)
789 {
790 for (yy = 0; yy < obr->h; yy++)
791 evas_software_xcb_write_mask_line_vert(buf, obr->mask,
792 src_data + yy,
793 h, (obr->h - yy - 1), w);
794 }
795 else if (buf->rot == 180)
796 {
797 for (yy = 0; yy < obr->h; yy++)
798 evas_software_xcb_write_mask_line_rev(buf, obr->mask,
799 src_data + (yy * obr->w),
800 obr->w, (obr->h - yy - 1));
801 }
802 else if (buf->rot == 270)
803 {
804 for (yy = 0; yy < obr->h; yy++)
805 evas_software_xcb_write_mask_line_vert_rev(buf, obr->mask,
806 src_data + yy,
807 h, yy, w);
808 }
809#if 1
810#else
811 /* Async Push */
812 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
813 evas_software_xcb_output_buffer_paste(obr->mask,
814 buf->priv.x11.xcb.mask,
815 buf->priv.x11.xcb.gcm,
816 obr->x, obr->y, 0);
817#endif
818 }
819#if 1
820#else
821 xcb_flush(buf->priv.x11.xcb.conn);
822#endif
823}
824
825void
826evas_software_xcb_outbuf_reconfigure(Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth)
827{
828 if ((w == buf->w) && (h == buf->h) && (rot == buf->rot) &&
829 (depth == buf->depth)) return;
830 buf->w = w;
831 buf->h = h;
832 buf->rot = rot;
833 evas_software_xcb_outbuf_idle_flush(buf);
834}
835
836int
837evas_software_xcb_outbuf_width_get(Outbuf *buf)
838{
839 return buf->w;
840}
841
842int
843evas_software_xcb_outbuf_height_get(Outbuf *buf)
844{
845 return buf->h;
846}
847
848Outbuf_Depth
849evas_software_xcb_outbuf_depth_get(Outbuf *buf)
850{
851 return buf->depth;
852}
853
854void
855evas_software_xcb_outbuf_drawable_set(Outbuf *buf, xcb_drawable_t drawable)
856{
857 if (buf->priv.x11.xcb.win == drawable) return;
858 if (buf->priv.x11.xcb.gc)
859 {
860 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc);
861 buf->priv.x11.xcb.gc = 0;
862 }
863 buf->priv.x11.xcb.win = drawable;
864 buf->priv.x11.xcb.gc = xcb_generate_id(buf->priv.x11.xcb.conn);
865 xcb_create_gc(buf->priv.x11.xcb.conn,
866 buf->priv.x11.xcb.gc, buf->priv.x11.xcb.win, 0, NULL);
867}
868
869void
870evas_software_xcb_outbuf_mask_set(Outbuf *buf, xcb_drawable_t mask)
871{
872 if (buf->priv.x11.xcb.mask == mask) return;
873 if (buf->priv.x11.xcb.gcm)
874 {
875 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gcm);
876 buf->priv.x11.xcb.gcm = 0;
877 }
878 buf->priv.x11.xcb.mask = mask;
879 if (buf->priv.x11.xcb.mask)
880 {
881 buf->priv.x11.xcb.gcm = xcb_generate_id(buf->priv.x11.xcb.conn);
882 xcb_create_gc(buf->priv.x11.xcb.conn,
883 buf->priv.x11.xcb.gcm, buf->priv.x11.xcb.mask, 0, NULL);
884 }
885}
886
887int
888evas_software_xcb_outbuf_rotation_get(Outbuf *buf)
889{
890 return buf->rot;
891}
892
893void
894evas_software_xcb_outbuf_rotation_set(Outbuf *buf, int rotation)
895{
896 buf->rot = rotation;
897}
898
899Eina_Bool
900evas_software_xcb_outbuf_alpha_get(Outbuf *buf)
901{
902 return buf->priv.x11.xcb.mask;
903}
904
905void
906evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug)
907{
908 buf->priv.debug = debug;
909}
910
911void
912evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h)
913{
914 int i;
915 xcb_screen_t *screen = NULL;
916 xcb_get_geometry_reply_t *geom;
917 xcb_drawable_t root;
918 xcb_screen_iterator_t si;
919
920 geom =
921 xcb_get_geometry_reply(buf->priv.x11.xcb.conn,
922 xcb_get_geometry_unchecked(buf->priv.x11.xcb.conn,
923 drawable), 0);
924 root = geom->root;
925 free(geom);
926 geom =
927 xcb_get_geometry_reply(buf->priv.x11.xcb.conn,
928 xcb_get_geometry_unchecked(buf->priv.x11.xcb.conn,
929 root), 0);
930
931 si = xcb_setup_roots_iterator((xcb_setup_t *)xcb_get_setup(buf->priv.x11.xcb.conn));
932 for (; si.rem; xcb_screen_next(&si))
933 {
934 if (si.data->root == geom->root)
935 {
936 screen = si.data;
937 break;
938 }
939 }
940 free(geom);
941
942 for (i = 0; i < 20; i++)
943 {
944 xcb_rectangle_t rect = { x, y, w, h};
945 uint32_t mask;
946 uint32_t value[2];
947
948 mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
949 value[0] = screen->black_pixel;
950 value[1] = XCB_EXPOSURES_NOT_ALLOWED;
951 xcb_change_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc,
952 mask, value);
953 xcb_poly_fill_rectangle(buf->priv.x11.xcb.conn, drawable,
954 buf->priv.x11.xcb.gc, 1, &rect);
955 _xcbob_sync(buf->priv.x11.xcb.conn);
956 _xcbob_sync(buf->priv.x11.xcb.conn);
957
958 mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
959 value[0] = screen->white_pixel;
960 value[1] = XCB_EXPOSURES_NOT_ALLOWED;
961 xcb_change_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc,
962 mask, value);
963 xcb_poly_fill_rectangle(buf->priv.x11.xcb.conn, drawable,
964 buf->priv.x11.xcb.gc, 1, &rect);
965 _xcbob_sync(buf->priv.x11.xcb.conn);
966 _xcbob_sync(buf->priv.x11.xcb.conn);
967 }
968}
969
970#ifdef EVAS_FRAME_QUEUING
971void
972evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev __UNUSED__)
973{
974 buf->priv.pending_writes = (Eina_List *)cur;
975}
976#endif
977
978/* local functions */
979static Xcb_Output_Buffer *
980_find_xcbob(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, Eina_Bool shm, void *data)
981{
982 Eina_List *l = NULL, *xl = NULL;
983 Xcb_Output_Buffer *xcbob = NULL, *xcbob2 = NULL;
984 int lbytes = 0, bpp = 0, sz = 0;
985 int fitness = 0x7fffffff;
986
987 if (!shm)
988 return evas_software_xcb_output_buffer_new(conn, vis, depth, w, h,
989 shm, data);
990
991 lbytes = (((w + 31) / 32) * 4);
992 if (depth > 1)
993 {
994 bpp = (depth / 8);
995 if (bpp == 3) bpp = 4;
996 lbytes = ((((w * bpp) + 3) / 4) * 4);
997 }
998
999 sz = (lbytes * h);
1000 SHMPOOL_LOCK();
1001 EINA_LIST_FOREACH(_shmpool, l, xcbob2)
1002 {
1003 int szdif = 0;
1004
1005 if ((xcbob2->xim->depth != depth) || (xcbob2->visual != vis) ||
1006 (xcbob2->connection != conn)) continue;
1007 szdif = (xcbob2->psize - sz);
1008 if (szdif < 0) continue;
1009 if (szdif == 0)
1010 {
1011 xcbob = xcbob2;
1012 xl = l;
1013 goto have_xcbob;
1014 }
1015 if (szdif < fitness)
1016 {
1017 xcbob = xcbob2;
1018 xl = l;
1019 fitness = szdif;
1020 }
1021 }
1022 if ((fitness > (100 * 100)) || (!xcbob))
1023 {
1024 SHMPOOL_UNLOCK();
1025 return evas_software_xcb_output_buffer_new(conn, vis, depth,
1026 w, h, shm, data);
1027 }
1028
1029have_xcbob:
1030 _shmpool = eina_list_remove_list(_shmpool, xl);
1031 xcbob->w = w;
1032 xcbob->h = h;
1033 xcbob->bpl = lbytes;
1034 xcbob->xim->width = xcbob->w;
1035 xcbob->xim->height = xcbob->h;
1036 xcbob->xim->stride = xcbob->bpl;
1037 _shmsize -= (xcbob->psize * (xcbob->xim->depth / 8));
1038 SHMPOOL_UNLOCK();
1039 return xcbob;
1040}
1041
1042static void
1043_unfind_xcbob(Xcb_Output_Buffer *xcbob, Eina_Bool sync)
1044{
1045 if (xcbob->shm_info)
1046 {
1047 SHMPOOL_LOCK();
1048 _shmpool = eina_list_prepend(_shmpool, xcbob);
1049 _shmsize += xcbob->psize * xcbob->xim->depth / 8;
1050 while ((_shmsize > _shmlimit) ||
1051 (eina_list_count(_shmpool) > _shmcountlimit))
1052 {
1053 Eina_List *xl = NULL;
1054
1055 if (!(xl = eina_list_last(_shmpool)))
1056 {
1057 _shmsize = 0;
1058 break;
1059 }
1060 xcbob = xl->data;
1061 _shmpool = eina_list_remove_list(_shmpool, xl);
1062 _shmsize -= xcbob->psize * xcbob->xim->depth / 8;
1063 evas_software_xcb_output_buffer_free(xcbob, sync);
1064 }
1065 SHMPOOL_UNLOCK();
1066 }
1067 else
1068 evas_software_xcb_output_buffer_free(xcbob, sync);
1069}
1070
1071static void
1072_clear_xcbob(Eina_Bool sync)
1073{
1074 SHMPOOL_LOCK();
1075 while (_shmpool)
1076 {
1077 Xcb_Output_Buffer *xcbob;
1078
1079 xcbob = _shmpool->data;
1080 _shmpool = eina_list_remove_list(_shmpool, _shmpool);
1081 evas_software_xcb_output_buffer_free(xcbob, sync);
1082 }
1083 _shmsize = 0;
1084 SHMPOOL_UNLOCK();
1085}
1086
1087static void
1088_xcbob_sync(xcb_connection_t *conn)
1089{
1090 free(xcb_get_input_focus_reply(conn,
1091 xcb_get_input_focus_unchecked(conn), NULL));
1092}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h
deleted file mode 100644
index b711848..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h
+++ /dev/null
@@ -1,30 +0,0 @@
1#ifndef EVAS_XCB_OUTBUF_H
2# define EVAS_XCB_OUTBUF_H
3
4# include "evas_engine.h"
5
6void evas_software_xcb_outbuf_init(void);
7void evas_software_xcb_outbuf_free(Outbuf *buf);
8Outbuf *evas_software_xcb_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, xcb_connection_t *conn, xcb_screen_t *screen, xcb_drawable_t draw, xcb_visualtype_t *vis, xcb_colormap_t cmap, int xdepth, Eina_Bool grayscale, int max_colors, xcb_drawable_t mask, Eina_Bool shape_dither, Eina_Bool alpha);
9RGBA_Image *evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
10void evas_software_xcb_outbuf_free_region_for_update(Outbuf *buf, RGBA_Image *update);
11void evas_software_xcb_outbuf_flush(Outbuf *buf);
12void evas_software_xcb_outbuf_idle_flush(Outbuf *buf);
13void evas_software_xcb_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
14void evas_software_xcb_outbuf_reconfigure(Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth);
15int evas_software_xcb_outbuf_width_get(Outbuf *buf);
16int evas_software_xcb_outbuf_height_get(Outbuf *buf);
17Outbuf_Depth evas_software_xcb_outbuf_depth_get(Outbuf *buf);
18void evas_software_xcb_outbuf_drawable_set(Outbuf *buf, xcb_drawable_t drawable);
19void evas_software_xcb_outbuf_mask_set(Outbuf *buf, xcb_drawable_t mask);
20int evas_software_xcb_outbuf_rotation_get(Outbuf *buf);
21void evas_software_xcb_outbuf_rotation_set(Outbuf *buf, int rotation);
22Eina_Bool evas_software_xcb_outbuf_alpha_get(Outbuf *buf);
23void evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug);
24void evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h);
25
26# ifdef EVAS_FRAME_QUEUING
27void evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev);
28# endif
29
30#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c
deleted file mode 100644
index 3a0bda5..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c
+++ /dev/null
@@ -1,108 +0,0 @@
1#include "evas_common.h"
2#include "evas_xcb_xdefaults.h"
3#include <fnmatch.h>
4
5/* local function prototypes */
6static Eina_Bool _evas_xcb_xdefaults_glob_match(const char *str, const char *glob);
7
8/* local variables */
9static Eina_File *_evas_xcb_xdefaults_file = NULL;
10static char *_evas_xcb_xdefaults_data = NULL;
11
12void
13_evas_xcb_xdefaults_init(void)
14{
15 char buff[PATH_MAX];
16
17 snprintf(buff, sizeof(buff), "%s/.Xdefaults", getenv("HOME"));
18 if ((_evas_xcb_xdefaults_file = eina_file_open(buff, EINA_FALSE)))
19 {
20 eina_mmap_safety_enabled_set(EINA_TRUE);
21
22 _evas_xcb_xdefaults_data =
23 eina_file_map_all(_evas_xcb_xdefaults_file, EINA_FILE_SEQUENTIAL);
24 }
25}
26
27void
28_evas_xcb_xdefaults_shutdown(void)
29{
30 if (!_evas_xcb_xdefaults_file) return;
31 if (_evas_xcb_xdefaults_data)
32 eina_file_map_free(_evas_xcb_xdefaults_file, _evas_xcb_xdefaults_data);
33 if (_evas_xcb_xdefaults_file) eina_file_close(_evas_xcb_xdefaults_file);
34}
35
36char *
37_evas_xcb_xdefaults_string_get(const char *prog, const char *param)
38{
39 char buff[1024], ret[1024];
40 char *str = NULL;
41 char **ea = NULL;
42 unsigned int count = 0, i = 0;
43
44 if ((!_evas_xcb_xdefaults_data) || (!_evas_xcb_xdefaults_file))
45 return NULL;
46
47 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
48
49 str = _evas_xcb_xdefaults_data;
50 ea = eina_str_split_full(str, "\n", -1, &count);
51 for (i = 0; i < count; i++)
52 {
53 if (_evas_xcb_xdefaults_glob_match(ea[i], buff))
54 sscanf(ea[i], "%*[^:]:%*[ ]%s", ret);
55 }
56 if ((ea) && (ea[0]))
57 {
58 free(ea[0]);
59 free(ea);
60 }
61
62 return strdup(ret);
63}
64
65int
66_evas_xcb_xdefaults_int_get(const char *prog, const char *param)
67{
68 char buff[1024];
69 char *str = NULL;
70 char **ea = NULL;
71 unsigned int count = 0, i = 0;
72 int ret = -1;
73
74 if ((!_evas_xcb_xdefaults_data) || (!_evas_xcb_xdefaults_file))
75 return 0;
76
77 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
78
79 str = _evas_xcb_xdefaults_data;
80 ea = eina_str_split_full(str, "\n", -1, &count);
81 for (i = 0; i < count; i++)
82 {
83 if (_evas_xcb_xdefaults_glob_match(ea[i], buff))
84 sscanf(ea[i], "%*[^:]:%*[ ]%d", &ret);
85 }
86 if ((ea) && (ea[0]))
87 {
88 free(ea[0]);
89 free(ea);
90 }
91
92 return ret;
93}
94
95/* local functions */
96static Eina_Bool
97_evas_xcb_xdefaults_glob_match(const char *str, const char *glob)
98{
99 if ((!str) || (!glob)) return EINA_FALSE;
100 if (glob[0] == 0)
101 {
102 if (str[0] == 0) return EINA_TRUE;
103 return EINA_FALSE;
104 }
105 if (!strcmp(glob, "*")) return EINA_TRUE;
106 if (!fnmatch(glob, str, 0)) return EINA_TRUE;
107 return EINA_FALSE;
108}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h
deleted file mode 100644
index c5f4ab8..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h
+++ /dev/null
@@ -1,11 +0,0 @@
1#ifndef EVAS_XCB_XDEFAULTS_H
2# define EVAS_XCB_XDEFAULTS_H
3
4# include "evas_engine.h"
5
6void _evas_xcb_xdefaults_init(void);
7void _evas_xcb_xdefaults_shutdown(void);
8char *_evas_xcb_xdefaults_string_get(const char *prog, const char *param);
9int _evas_xcb_xdefaults_int_get(const char *prog, const char *param);
10
11#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c
deleted file mode 100644
index 594041c..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c
+++ /dev/null
@@ -1,428 +0,0 @@
1#include "evas_common.h"
2
3#include "evas_xlib_buffer.h"
4
5static int _x_err = 0;
6
7void
8evas_software_xlib_x_write_mask_line(Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y)
9{
10 int x;
11 DATA32 *src_ptr;
12 DATA8 *dst_ptr;
13 int bpl = 0;
14
15 src_ptr = src;
16 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
17 dst_ptr = dst_ptr + (bpl * y);
18 w -= 7;
19 if (buf->priv.x11.xlib.bit_swap)
20 {
21 for (x = 0; x < w; x += 8)
22 {
23 *dst_ptr =
24 ((A_VAL(&(src_ptr[0])) >> 7) << 7) |
25 ((A_VAL(&(src_ptr[1])) >> 7) << 6) |
26 ((A_VAL(&(src_ptr[2])) >> 7) << 5) |
27 ((A_VAL(&(src_ptr[3])) >> 7) << 4) |
28 ((A_VAL(&(src_ptr[4])) >> 7) << 3) |
29 ((A_VAL(&(src_ptr[5])) >> 7) << 2) |
30 ((A_VAL(&(src_ptr[6])) >> 7) << 1) |
31 ((A_VAL(&(src_ptr[7])) >> 7) << 0);
32 src_ptr += 8;
33 dst_ptr++;
34 }
35 }
36 else
37 {
38 for (x = 0; x < w; x += 8)
39 {
40 *dst_ptr =
41 ((A_VAL(&(src_ptr[0])) >> 7) << 0) |
42 ((A_VAL(&(src_ptr[1])) >> 7) << 1) |
43 ((A_VAL(&(src_ptr[2])) >> 7) << 2) |
44 ((A_VAL(&(src_ptr[3])) >> 7) << 3) |
45 ((A_VAL(&(src_ptr[4])) >> 7) << 4) |
46 ((A_VAL(&(src_ptr[5])) >> 7) << 5) |
47 ((A_VAL(&(src_ptr[6])) >> 7) << 6) |
48 ((A_VAL(&(src_ptr[7])) >> 7) << 7);
49 src_ptr += 8;
50 dst_ptr++;
51 }
52 }
53 w += 7;
54 for (; x < w; x ++)
55 {
56 XPutPixel(xob->xim, x, y, A_VAL(src_ptr) >> 7);
57 src_ptr++;
58 }
59}
60
61void
62evas_software_xlib_x_write_mask_line_rev(Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y)
63{
64 int x;
65 DATA32 *src_ptr;
66 DATA8 *dst_ptr;
67 int bpl = 0;
68
69 src_ptr = src + w - 1;
70 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
71 dst_ptr = dst_ptr + (bpl * y);
72 w -= 7;
73 if (buf->priv.x11.xlib.bit_swap)
74 {
75 for (x = 0; x < w; x += 8)
76 {
77 *dst_ptr =
78 ((A_VAL(&(src_ptr[ 0])) >> 7) << 7) |
79 ((A_VAL(&(src_ptr[-1])) >> 7) << 6) |
80 ((A_VAL(&(src_ptr[-2])) >> 7) << 5) |
81 ((A_VAL(&(src_ptr[-3])) >> 7) << 4) |
82 ((A_VAL(&(src_ptr[-4])) >> 7) << 3) |
83 ((A_VAL(&(src_ptr[-5])) >> 7) << 2) |
84 ((A_VAL(&(src_ptr[-6])) >> 7) << 1) |
85 ((A_VAL(&(src_ptr[-7])) >> 7) << 0);
86 src_ptr -= 8;
87 dst_ptr++;
88 }
89 }
90 else
91 {
92 for (x = 0; x < w; x += 8)
93 {
94 *dst_ptr =
95 ((A_VAL(&(src_ptr[ 0])) >> 7) << 0) |
96 ((A_VAL(&(src_ptr[-1])) >> 7) << 1) |
97 ((A_VAL(&(src_ptr[-2])) >> 7) << 2) |
98 ((A_VAL(&(src_ptr[-3])) >> 7) << 3) |
99 ((A_VAL(&(src_ptr[-4])) >> 7) << 4) |
100 ((A_VAL(&(src_ptr[-5])) >> 7) << 5) |
101 ((A_VAL(&(src_ptr[-6])) >> 7) << 6) |
102 ((A_VAL(&(src_ptr[-7])) >> 7) << 7);
103 src_ptr -= 8;
104 dst_ptr++;
105 }
106 }
107 w += 7;
108 for (; x < w; x ++)
109 {
110 XPutPixel(xob->xim, x, y, A_VAL(src_ptr) >> 7);
111 src_ptr--;
112 }
113}
114
115void
116evas_software_xlib_x_write_mask_line_vert(Outbuf *buf, X_Output_Buffer *xob,
117 DATA32 *src,
118 int h, int ym, int w)
119{
120 int y;
121 DATA32 *src_ptr;
122 DATA8 *dst_ptr;
123 int bpl = 0;
124
125 src_ptr = src;
126 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
127 dst_ptr = dst_ptr + (bpl * ym);
128 h -= 7;
129 if (buf->priv.x11.xlib.bit_swap)
130 {
131 for (y = 0; y < h; y += 8)
132 {
133 *dst_ptr =
134 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 7) |
135 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 6) |
136 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 5) |
137 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 4) |
138 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 3) |
139 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 2) |
140 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 1) |
141 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 0);
142 src_ptr += 8 * w;
143 dst_ptr++;
144 }
145 }
146 else
147 {
148 for (y = 0; y < h; y += 8)
149 {
150 *dst_ptr =
151 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 0) |
152 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 1) |
153 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 2) |
154 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 3) |
155 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 4) |
156 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 5) |
157 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 6) |
158 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 7);
159 src_ptr += 8 * w;
160 dst_ptr++;
161 }
162 }
163 h += 7;
164 for (; y < h; y ++)
165 {
166 XPutPixel(xob->xim, y, ym, A_VAL(src_ptr) >> 7);
167 src_ptr += w;
168 }
169}
170
171void
172evas_software_xlib_x_write_mask_line_vert_rev(Outbuf *buf, X_Output_Buffer *xob,
173 DATA32 *src,
174 int h, int ym, int w)
175{
176 int y;
177 DATA32 *src_ptr;
178 DATA8 *dst_ptr;
179 int bpl = 0;
180
181 src_ptr = src + ((h - 1) * w);
182 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
183 dst_ptr = dst_ptr + (bpl * ym);
184 h -= 7;
185 if (buf->priv.x11.xlib.bit_swap)
186 {
187 for (y = 0; y < h; y += 8)
188 {
189 *dst_ptr =
190 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 7) |
191 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 6) |
192 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 5) |
193 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 4) |
194 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 3) |
195 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 2) |
196 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 1) |
197 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 0);
198 src_ptr -= 8 * w;
199 dst_ptr++;
200 }
201 }
202 else
203 {
204 for (y = 0; y < h; y += 8)
205 {
206 *dst_ptr =
207 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 0) |
208 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 1) |
209 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 2) |
210 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 3) |
211 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 4) |
212 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 5) |
213 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 6) |
214 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 7);
215 src_ptr -= 8 * w;
216 dst_ptr++;
217 }
218 }
219 h += 7;
220 for (; y < h; y ++)
221 {
222 XPutPixel(xob->xim, y, ym, A_VAL(src_ptr) >> 7);
223 src_ptr -= w;
224 }
225}
226
227int
228evas_software_xlib_x_can_do_shm(Display *d)
229{
230 static Display *cached_d = NULL;
231 static int cached_result = 0;
232
233 if (d == cached_d) return cached_result;
234 cached_d = d;
235 if (XShmQueryExtension(d))
236 {
237 X_Output_Buffer *xob;
238
239 xob = evas_software_xlib_x_output_buffer_new
240 (d, DefaultVisual(d, DefaultScreen(d)),
241 DefaultDepth(d, DefaultScreen(d)), 16, 16, 2, NULL);
242 if (!xob)
243 {
244 cached_result = 0;
245 return 0;
246 }
247 evas_software_xlib_x_output_buffer_free(xob, 1);
248 cached_result = 1;
249 return 1;
250 }
251 cached_result = 0;
252 return 0;
253}
254
255static void
256x_output_tmp_x_err(Display *d __UNUSED__, XErrorEvent *ev __UNUSED__)
257{
258 _x_err = 1;
259 return;
260}
261
262//static int creates = 0;
263
264X_Output_Buffer *
265evas_software_xlib_x_output_buffer_new(Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data)
266{
267 X_Output_Buffer *xob;
268
269 xob = calloc(1, sizeof(X_Output_Buffer));
270 if (!xob) return NULL;
271
272 xob->display = d;
273 xob->visual = v;
274 xob->xim = NULL;
275 xob->shm_info = NULL;
276 xob->w = w;
277 xob->h = h;
278
279 if (try_shm > 0)
280 {
281 xob->shm_info = malloc(sizeof(XShmSegmentInfo));
282 if (xob->shm_info)
283 {
284 xob->xim = XShmCreateImage(d, v, depth, ZPixmap, NULL,
285 xob->shm_info, w, h);
286 if (xob->xim)
287 {
288 xob->shm_info->shmid = shmget(IPC_PRIVATE,
289 xob->xim->bytes_per_line *
290 xob->xim->height,
291 IPC_CREAT | 0777);
292 if (xob->shm_info->shmid >= 0)
293 {
294 xob->shm_info->readOnly = False;
295 xob->shm_info->shmaddr = xob->xim->data =
296 shmat(xob->shm_info->shmid, 0, 0);
297 if (xob->shm_info->shmaddr != ((void *)-1))
298 {
299 XErrorHandler ph;
300
301 if (try_shm == 2) // only needed during testing
302 {
303 XSync(d, False);
304 _x_err = 0;
305 ph = XSetErrorHandler((XErrorHandler)
306 x_output_tmp_x_err);
307 }
308#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
309 /* workaround for libXext of lower then 1.1.1 */
310 if (evas_common_frameq_enabled())
311 XLockDisplay(d);
312#endif
313 XShmAttach(d, xob->shm_info);
314#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
315 /* workaround for libXext of lower then 1.1.1 */
316 if (evas_common_frameq_enabled())
317 XUnlockDisplay(d);
318#endif
319
320 if (try_shm == 2) // only needed during testing
321 {
322 XSync(d, False);
323 XSetErrorHandler((XErrorHandler)ph);
324 }
325 if (!_x_err)
326 {
327 xob->bpl = xob->xim->bytes_per_line;
328 xob->psize = xob->bpl * xob->h;
329 return xob;
330 }
331 }
332 shmdt(xob->shm_info->shmaddr);
333 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
334 }
335 if (xob->xim) XDestroyImage(xob->xim);
336 xob->xim = NULL;
337 }
338 if (xob->shm_info) free(xob->shm_info);
339 xob->shm_info = NULL;
340 }
341 }
342
343 if (try_shm > 1) return NULL;
344
345 xob->xim = XCreateImage(d, v, depth, ZPixmap, 0, data, w, h, 32, 0);
346 if (!xob->xim)
347 {
348 free(xob);
349 return NULL;
350 }
351
352 xob->data = data;
353
354 if (!xob->xim->data)
355 {
356 xob->xim->data = malloc(xob->xim->bytes_per_line * xob->xim->height);
357 if (!xob->xim->data)
358 {
359 XDestroyImage(xob->xim);
360 free(xob);
361 return NULL;
362 }
363 }
364 xob->bpl = xob->xim->bytes_per_line;
365 xob->psize = xob->bpl * xob->h;
366 return xob;
367}
368
369void
370evas_software_xlib_x_output_buffer_free(X_Output_Buffer *xob, int psync)
371{
372 if (xob->shm_info)
373 {
374 if (psync) XSync(xob->display, False);
375 XShmDetach(xob->display, xob->shm_info);
376 XDestroyImage(xob->xim);
377 shmdt(xob->shm_info->shmaddr);
378 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
379 free(xob->shm_info);
380 }
381 else
382 {
383 if (xob->data) xob->xim->data = NULL;
384 XDestroyImage(xob->xim);
385 }
386 free(xob);
387}
388
389void
390evas_software_xlib_x_output_buffer_paste(X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int psync)
391{
392 if (xob->shm_info)
393 {
394 XShmPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y,
395 xob->w, xob->h, False);
396 if (psync) XSync(xob->display, False);
397 }
398 else
399 {
400 XPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y,
401 xob->w, xob->h);
402 }
403}
404
405DATA8 *
406evas_software_xlib_x_output_buffer_data(X_Output_Buffer *xob, int *bytes_per_line_ret)
407{
408 if (bytes_per_line_ret) *bytes_per_line_ret = xob->xim->bytes_per_line;
409 return (DATA8 *)xob->xim->data;
410}
411
412int
413evas_software_xlib_x_output_buffer_depth(X_Output_Buffer *xob)
414{
415 return xob->xim->bits_per_pixel;
416}
417
418int
419evas_software_xlib_x_output_buffer_byte_order(X_Output_Buffer *xob)
420{
421 return xob->xim->byte_order;
422}
423
424int
425evas_software_xlib_x_output_buffer_bit_order(X_Output_Buffer *xob)
426{
427 return xob->xim->bitmap_bit_order;
428}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h
deleted file mode 100644
index 01c4db0..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h
+++ /dev/null
@@ -1,45 +0,0 @@
1#ifndef EVAS_XLIB_BUFFER_H
2#define EVAS_XLIB_BUFFER_H
3
4
5#include "evas_engine.h"
6
7
8typedef struct _X_Output_Buffer X_Output_Buffer;
9
10struct _X_Output_Buffer
11{
12 Display *display;
13 XImage *xim;
14 XShmSegmentInfo *shm_info;
15 Visual *visual;
16 void *data;
17 int w;
18 int h;
19 int bpl;
20 int psize;
21};
22
23void evas_software_xlib_x_write_mask_line (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y);
24void evas_software_xlib_x_write_mask_line_rev (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y);
25void evas_software_xlib_x_write_mask_line_vert (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int h, int ym, int w);
26void evas_software_xlib_x_write_mask_line_vert_rev (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int h, int ym, int w);
27
28int evas_software_xlib_x_can_do_shm (Display *d);
29
30X_Output_Buffer *evas_software_xlib_x_output_buffer_new (Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data);
31
32void evas_software_xlib_x_output_buffer_free (X_Output_Buffer *xob, int sync);
33
34void evas_software_xlib_x_output_buffer_paste (X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int sync);
35
36DATA8 *evas_software_xlib_x_output_buffer_data (X_Output_Buffer *xob, int *bytes_per_line_ret);
37
38int evas_software_xlib_x_output_buffer_depth (X_Output_Buffer *xob);
39
40int evas_software_xlib_x_output_buffer_byte_order (X_Output_Buffer *xob);
41
42int evas_software_xlib_x_output_buffer_bit_order (X_Output_Buffer *xob);
43
44
45#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c
deleted file mode 100644
index 1df0406..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c
+++ /dev/null
@@ -1,368 +0,0 @@
1#include "evas_common.h"
2
3#include "evas_engine.h"
4
5#include <X11/Xlib.h>
6#include <X11/Xutil.h>
7
8typedef struct _Convert_Pal_Priv Convert_Pal_Priv;
9
10struct _Convert_Pal_Priv
11{
12 Display *disp;
13 Colormap cmap;
14 Visual *vis;
15};
16
17typedef DATA8 * (*X_Func_Alloc_Colors) (Display *d, Colormap cmap, Visual *v);
18
19static X_Func_Alloc_Colors x_color_alloc[PAL_MODE_LAST + 1];
20static int x_color_count[PAL_MODE_LAST + 1];
21static Eina_List *palettes = NULL;
22
23static DATA8 * x_color_alloc_rgb(int nr, int ng, int nb, Display *d, Colormap cmap, Visual *v);
24static DATA8 * x_color_alloc_gray(int ng, Display *d, Colormap cmap, Visual *v);
25
26static DATA8 * x_color_alloc_rgb_332(Display *d, Colormap cmap, Visual *v);
27static DATA8 * x_color_alloc_rgb_666(Display *d, Colormap cmap, Visual *v);
28static DATA8 * x_color_alloc_rgb_232(Display *d, Colormap cmap, Visual *v);
29static DATA8 * x_color_alloc_rgb_222(Display *d, Colormap cmap, Visual *v);
30static DATA8 * x_color_alloc_rgb_221(Display *d, Colormap cmap, Visual *v);
31static DATA8 * x_color_alloc_rgb_121(Display *d, Colormap cmap, Visual *v);
32static DATA8 * x_color_alloc_rgb_111(Display *d, Colormap cmap, Visual *v);
33static DATA8 * x_color_alloc_gray_256(Display *d, Colormap cmap, Visual *v);
34static DATA8 * x_color_alloc_gray_64(Display *d, Colormap cmap, Visual *v);
35static DATA8 * x_color_alloc_gray_16(Display *d, Colormap cmap, Visual *v);
36static DATA8 * x_color_alloc_gray_4(Display *d, Colormap cmap, Visual *v);
37static DATA8 * x_color_alloc_mono(Display *d, Colormap cmap, Visual *v);
38
39static DATA8 *
40x_color_alloc_rgb(int nr, int ng, int nb, Display *d, Colormap cmap, Visual *v)
41{
42 int r, g, b, i;
43 DATA8 *color_lut;
44 int sig_mask = 0, delt = 0;
45
46 for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
47 sig_mask <<= (16 - v->bits_per_rgb);
48 i = 0;
49 color_lut = malloc((nr) * (ng) * (nb));
50 if (!color_lut) return NULL;
51 delt = 0x0101 * 3;
52 for (r = 0; r < (nr); r++)
53 {
54 for (g = 0; g < (ng); g++)
55 {
56 for (b = 0; b < (nb); b++)
57 {
58 XColor xcl;
59 XColor xcl_in;
60 int val;
61 Status ret;
62 int dr, dg, db;
63
64 val = (int)((((double)r) / ((nr) - 1)) * 255);
65 val = (val << 8) | val;
66 xcl.red = (unsigned short)(val);
67 val = (int)((((double)g) / ((ng) - 1)) * 255);
68 val = (val << 8) | val;
69 xcl.green = (unsigned short)(val);
70 val = (int)((((double)b) / ((nb) - 1)) * 255);
71 val = (val << 8) | val;
72 xcl.blue = (unsigned short)(val);
73 xcl_in = xcl;
74 ret = XAllocColor(d, cmap, &xcl);
75 dr = (int)xcl_in.red - (int)xcl.red;
76 if (dr < 0) dr = -dr;
77 dg = (int)xcl_in.green - (int)xcl.green;
78 if (dg < 0) dg = -dg;
79 db = (int)xcl_in.blue - (int)xcl.blue;
80 if (db < 0) db = -db;
81/*
82 printf("ASK [%i]: %04x %04x %04x = %04x %04x %04x | dif = %04x / %04x\n",
83 ret,
84 xcl_in.red, xcl_in.green, xcl_in.blue,
85 xcl.red, xcl.green, xcl.blue,
86 (dr + dg +db), delt);
87 */
88 if ((ret == 0) ||
89 ((dr + dg + db) > delt)
90/*
91 ||
92 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
93 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
94 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask))
95 */
96 )
97 {
98 unsigned long pixels[256];
99 int j;
100
101 if (i > 0)
102 {
103 for (j = 0; j < i; j++)
104 pixels[j] = (unsigned long) color_lut[j];
105 XFreeColors(d, cmap, pixels, i, 0);
106 }
107 free(color_lut);
108 return NULL;
109 }
110 color_lut[i] = xcl.pixel;
111 i++;
112 }
113 }
114 }
115 return color_lut;
116}
117
118static DATA8 *
119x_color_alloc_gray(int ng, Display *d, Colormap cmap, Visual *v)
120{
121 int g, i;
122 DATA8 *color_lut;
123 int sig_mask = 0;
124
125 for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
126 sig_mask <<= (16 - v->bits_per_rgb);
127 i = 0;
128 color_lut = malloc(ng);
129 if (!color_lut) return NULL;
130 for (g = 0; g < (ng); g++)
131 {
132 XColor xcl;
133 XColor xcl_in;
134 int val;
135 Status ret;
136
137 val = (int)((((double)g) / ((ng) - 1)) * 255);
138 val = (val << 8) | val;
139 xcl.red = (unsigned short)(val);
140 xcl.green = (unsigned short)(val);
141 xcl.blue = (unsigned short)(val);
142 xcl_in = xcl;
143 ret = XAllocColor(d, cmap, &xcl);
144 if ((ret == 0) ||
145 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
146 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
147 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
148 {
149 unsigned long pixels[256];
150 int j;
151
152 if (i > 0)
153 {
154 for (j = 0; j < i; j++)
155 pixels[j] = (unsigned long) color_lut[j];
156 XFreeColors(d, cmap, pixels, i, 0);
157 }
158 free(color_lut);
159 return NULL;
160 }
161 color_lut[i] = xcl.pixel;
162 i++;
163 }
164 return color_lut;
165}
166
167static DATA8 *
168x_color_alloc_rgb_332(Display *d, Colormap cmap, Visual *v)
169{
170 return x_color_alloc_rgb(8, 8, 4, d, cmap, v);
171}
172
173static DATA8 *
174x_color_alloc_rgb_666(Display *d, Colormap cmap, Visual *v)
175{
176 return x_color_alloc_rgb(6, 6, 6, d, cmap, v);
177}
178
179static DATA8 *
180x_color_alloc_rgb_232(Display *d, Colormap cmap, Visual *v)
181{
182 return x_color_alloc_rgb(4, 8, 4, d, cmap, v);
183}
184
185static DATA8 *
186x_color_alloc_rgb_222(Display *d, Colormap cmap, Visual *v)
187{
188 return x_color_alloc_rgb(4, 4, 4, d, cmap, v);
189}
190
191static DATA8 *
192x_color_alloc_rgb_221(Display *d, Colormap cmap, Visual *v)
193{
194 return x_color_alloc_rgb(4, 4, 2, d, cmap, v);
195}
196
197static DATA8 *
198x_color_alloc_rgb_121(Display *d, Colormap cmap, Visual *v)
199{
200 return x_color_alloc_rgb(2, 4, 2, d, cmap, v);
201}
202
203static DATA8 *
204x_color_alloc_rgb_111(Display *d, Colormap cmap, Visual *v)
205{
206 return x_color_alloc_rgb(2, 2, 2, d, cmap, v);
207}
208
209static DATA8 *
210x_color_alloc_gray_256(Display *d, Colormap cmap, Visual *v)
211{
212 return x_color_alloc_gray(256, d, cmap, v);
213}
214
215static DATA8 *
216x_color_alloc_gray_64(Display *d, Colormap cmap, Visual *v)
217{
218 return x_color_alloc_gray(64, d, cmap, v);
219}
220
221static DATA8 *
222x_color_alloc_gray_16(Display *d, Colormap cmap, Visual *v)
223{
224 return x_color_alloc_gray(32, d, cmap, v);
225}
226
227static DATA8 *
228x_color_alloc_gray_4(Display *d, Colormap cmap, Visual *v)
229{
230 return x_color_alloc_gray(16, d, cmap, v);
231}
232
233static DATA8 *
234x_color_alloc_mono(Display *d, Colormap cmap, Visual *v)
235{
236 return x_color_alloc_gray(2, d, cmap, v);
237}
238
239void
240evas_software_xlib_x_color_init(void)
241{
242 static int initialised = 0;
243
244 if (initialised) return;
245 x_color_alloc[PAL_MODE_NONE] = NULL;
246 x_color_count[PAL_MODE_NONE] = 0;
247
248 x_color_alloc[PAL_MODE_MONO] = x_color_alloc_mono;
249 x_color_count[PAL_MODE_MONO] = 2;
250
251 x_color_alloc[PAL_MODE_GRAY4] = x_color_alloc_gray_4;
252 x_color_count[PAL_MODE_GRAY4] = 4;
253
254 x_color_alloc[PAL_MODE_GRAY16] = x_color_alloc_gray_16;
255 x_color_count[PAL_MODE_GRAY16] = 16;
256
257 x_color_alloc[PAL_MODE_GRAY64] = x_color_alloc_gray_64;
258 x_color_count[PAL_MODE_GRAY64] = 64;
259
260 x_color_alloc[PAL_MODE_GRAY256] = x_color_alloc_gray_256;
261 x_color_count[PAL_MODE_GRAY256] = 256;
262
263 x_color_alloc[PAL_MODE_RGB111] = x_color_alloc_rgb_111;
264 x_color_count[PAL_MODE_RGB111] = 2 * 2 * 2;
265
266 x_color_alloc[PAL_MODE_RGB121] = x_color_alloc_rgb_121;
267 x_color_count[PAL_MODE_RGB121] = 2 * 4 * 2;
268
269 x_color_alloc[PAL_MODE_RGB221] = x_color_alloc_rgb_221;
270 x_color_count[PAL_MODE_RGB221] = 4 * 4 * 2;
271
272 x_color_alloc[PAL_MODE_RGB222] = x_color_alloc_rgb_222;
273 x_color_count[PAL_MODE_RGB222] = 4 * 4 * 4;
274
275 x_color_alloc[PAL_MODE_RGB232] = x_color_alloc_rgb_232;
276 x_color_count[PAL_MODE_RGB232] = 4 * 8 * 4;
277
278 x_color_alloc[PAL_MODE_RGB666] = x_color_alloc_rgb_666;
279 x_color_count[PAL_MODE_RGB666] = 6 * 6 * 6;
280
281 x_color_alloc[PAL_MODE_RGB332] = x_color_alloc_rgb_332;
282 x_color_count[PAL_MODE_RGB332] = 8 * 8 * 4;
283
284 x_color_alloc[PAL_MODE_LAST] = NULL;
285 x_color_count[PAL_MODE_LAST] = 0;
286 initialised = 1;
287}
288
289Convert_Pal *
290evas_software_xlib_x_color_allocate(Display *disp,
291 Colormap cmap,
292 Visual *vis,
293 Convert_Pal_Mode colors)
294{
295 Convert_Pal_Priv *palpriv;
296 Convert_Pal *pal;
297 Convert_Pal_Mode c;
298 Eina_List *l;
299
300/* printf("ALLOC cmap=%i vis=%p\n", cmap, vis);*/
301 EINA_LIST_FOREACH(palettes, l, pal)
302 {
303 palpriv = pal->data;
304 if ((disp == palpriv->disp) &&
305 (vis == palpriv->vis) &&
306 (cmap == palpriv->cmap))
307 {
308 pal->references++;
309 return pal;
310 }
311 }
312 pal = calloc(1, sizeof(struct _Convert_Pal));
313 if (!pal) return NULL;
314 for (c = colors; c > PAL_MODE_NONE; c--)
315 {
316 if (x_color_alloc[c])
317 {
318/* printf("TRY PAL %i\n", c);*/
319 pal->lookup = (x_color_alloc[c])(disp, cmap, vis);
320 if (pal->lookup) break;
321 }
322 }
323 pal->references = 1;
324 pal->colors = c;
325 pal->count = x_color_count[c];
326 palpriv = calloc(1, sizeof(Convert_Pal_Priv));
327 pal->data = palpriv;
328 if (!palpriv)
329 {
330 if (pal->lookup) free(pal->lookup);
331 free(pal);
332 return NULL;
333 }
334 palpriv->disp = disp;
335 palpriv->vis = vis;
336 palpriv->cmap = cmap;
337 if (pal->colors == PAL_MODE_NONE)
338 {
339 if (pal->lookup) free(pal->lookup);
340 free(pal);
341 return NULL;
342 }
343 palettes = eina_list_append(palettes, pal);
344 return pal;
345}
346
347void
348evas_software_xlib_x_color_deallocate(Display *disp,
349 Colormap cmap,
350 Visual *vis __UNUSED__,
351 Convert_Pal *pal)
352{
353 unsigned long pixels[256];
354 int j;
355
356 pal->references--;
357 if (pal->references > 0) return;
358 if (pal->lookup)
359 {
360 for(j = 0; j < pal->count; j++)
361 pixels[j] = (unsigned long) pal->lookup[j];
362 XFreeColors(disp, cmap, pixels, pal->count, 0);
363 free(pal->lookup);
364 }
365 free(pal->data);
366 palettes = eina_list_remove(palettes, pal);
367 free(pal);
368}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h
deleted file mode 100644
index e9f8afb..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h
+++ /dev/null
@@ -1,16 +0,0 @@
1#ifndef EVAS_XLIB_COLOR_H
2#define EVAS_XLIB_COLOR_H
3
4void evas_software_xlib_x_color_init (void);
5
6Convert_Pal *evas_software_xlib_x_color_allocate (Display *disp,
7 Colormap cmap,
8 Visual *vis,
9 Convert_Pal_Mode colors);
10
11void evas_software_xlib_x_color_deallocate (Display *disp,
12 Colormap cmap,
13 Visual *vis,
14 Convert_Pal *pal);
15
16#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c
deleted file mode 100644
index 3c153e1..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c
+++ /dev/null
@@ -1,7 +0,0 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4void
5evas_software_xlib_x_init(void)
6{
7}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c
deleted file mode 100644
index 24c45df..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c
+++ /dev/null
@@ -1,1137 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <sys/time.h>
6#include <sys/utsname.h>
7
8#include "evas_common.h"
9#include "evas_macros.h"
10#include "evas_xlib_outbuf.h"
11#include "evas_xlib_buffer.h"
12#include "evas_xlib_color.h"
13
14
15typedef struct _Outbuf_Region Outbuf_Region;
16
17struct _Outbuf_Region
18{
19 X_Output_Buffer *xob;
20 X_Output_Buffer *mxob;
21 int x;
22 int y;
23 int w;
24 int h;
25};
26
27static Eina_List *shmpool = NULL;
28static int shmsize = 0;
29static int shmmemlimit = 10 * 1024 * 1024;
30static const unsigned int shmcountlimit = 32;
31
32#ifdef EVAS_FRAME_QUEUING
33static LK(lock_shmpool);
34#define SHMPOOL_LOCK() LKL(lock_shmpool)
35#define SHMPOOL_UNLOCK() LKU(lock_shmpool)
36#else
37#define SHMPOOL_LOCK()
38#define SHMPOOL_UNLOCK()
39#endif
40
41static X_Output_Buffer *
42_find_xob(Display *d, Visual *v, int depth, int w, int h, int shm, void *data)
43{
44 Eina_List *l, *xl = NULL;
45 X_Output_Buffer *xob = NULL;
46 X_Output_Buffer *xob2;
47 int fitness = 0x7fffffff;
48 int sz, lbytes, bpp;
49
50 if (!shm)
51 return evas_software_xlib_x_output_buffer_new(d, v, depth, w, h, shm, data);
52 if (depth > 1)
53 {
54 bpp = depth / 8;
55 if (bpp == 3) bpp = 4;
56 lbytes = (((w * bpp) + 3) / 4) * 4;
57 }
58 else
59 lbytes = ((w + 31) / 32) * 4;
60 sz = lbytes * h;
61 SHMPOOL_LOCK();
62 EINA_LIST_FOREACH(shmpool, l, xob2)
63 {
64 int szdif;
65
66 if ((xob2->xim->depth != depth) || (xob2->visual != v) ||
67 (xob2->display != d))
68 continue;
69 szdif = xob2->psize - sz;
70 if (szdif < 0) continue;
71 if (szdif == 0)
72 {
73 xob = xob2;
74 xl = l;
75 goto have_xob;
76 }
77 if (szdif < fitness)
78 {
79 fitness = szdif;
80 xob = xob2;
81 xl = l;
82 }
83 }
84 if ((fitness > (100 * 100)) || (!xob))
85 {
86 SHMPOOL_UNLOCK();
87 xob = evas_software_xlib_x_output_buffer_new(d, v, depth, w, h, shm, data);
88 return xob;
89 }
90
91 have_xob:
92 shmpool = eina_list_remove_list(shmpool, xl);
93 xob->w = w;
94 xob->h = h;
95 xob->bpl = lbytes;
96 xob->xim->width = xob->w;
97 xob->xim->height = xob->h;
98 xob->xim->bytes_per_line = xob->bpl;
99 shmsize -= xob->psize * (xob->xim->depth / 8);
100 SHMPOOL_UNLOCK();
101 return xob;
102}
103
104static void
105_unfind_xob(X_Output_Buffer *xob, int psync)
106{
107 if (xob->shm_info)
108 {
109 SHMPOOL_LOCK();
110 shmpool = eina_list_prepend(shmpool, xob);
111 shmsize += xob->psize * xob->xim->depth / 8;
112 while ((shmsize > (shmmemlimit)) ||
113 (eina_list_count(shmpool) > shmcountlimit))
114 {
115 Eina_List *xl;
116
117 xl = eina_list_last(shmpool);
118 if (!xl)
119 {
120 shmsize = 0;
121 break;
122 }
123 xob = xl->data;
124 shmpool = eina_list_remove_list(shmpool, xl);
125 shmsize -= xob->psize * xob->xim->depth / 8;
126 evas_software_xlib_x_output_buffer_free(xob, psync);
127 }
128 SHMPOOL_UNLOCK();
129 }
130 else
131 evas_software_xlib_x_output_buffer_free(xob, psync);
132}
133
134static void
135_clear_xob(int psync)
136{
137 SHMPOOL_LOCK();
138 while (shmpool)
139 {
140 X_Output_Buffer *xob;
141
142 xob = shmpool->data;
143 shmpool = eina_list_remove_list(shmpool, shmpool);
144 evas_software_xlib_x_output_buffer_free(xob, psync);
145 }
146 shmsize = 0;
147 SHMPOOL_UNLOCK();
148}
149
150void
151evas_software_xlib_outbuf_init(void)
152{
153#ifdef EVAS_FRAME_QUEUING
154 LKI(lock_shmpool);
155#endif
156}
157
158void
159evas_software_xlib_outbuf_free(Outbuf *buf)
160{
161#ifdef EVAS_FRAME_QUEUING
162 LKL(buf->priv.lock);
163#endif
164 while (buf->priv.pending_writes)
165 {
166 RGBA_Image *im;
167 Outbuf_Region *obr;
168
169 im = buf->priv.pending_writes->data;
170 buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
171 obr = im->extended_info;
172 evas_cache_image_drop(&im->cache_entry);
173 if (obr->xob) _unfind_xob(obr->xob, 0);
174 if (obr->mxob) _unfind_xob(obr->mxob, 0);
175 free(obr);
176 }
177#ifdef EVAS_FRAME_QUEUING
178 LKU(buf->priv.lock);
179#endif
180 evas_software_xlib_outbuf_idle_flush(buf);
181 evas_software_xlib_outbuf_flush(buf);
182 if (buf->priv.x11.xlib.gc)
183 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc);
184 if (buf->priv.x11.xlib.gcm)
185 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm);
186 if (buf->priv.pal)
187 evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
188 buf->priv.x11.xlib.vis, buf->priv.pal);
189#ifdef EVAS_FRAME_QUEUING
190 LKD(buf->priv.lock);
191#endif
192 free(buf);
193 _clear_xob(0);
194}
195
196Outbuf *
197evas_software_xlib_outbuf_setup_x(int w, int h, int rot, Outbuf_Depth depth,
198 Display *disp, Drawable draw, Visual *vis,
199 Colormap cmap, int x_depth,
200 int grayscale, int max_colors, Pixmap mask,
201 int shape_dither, int destination_alpha)
202{
203 Outbuf *buf;
204
205 buf = calloc(1, sizeof(Outbuf));
206 if (!buf)
207 return NULL;
208
209 buf->w = w;
210 buf->h = h;
211 buf->depth = depth;
212 buf->rot = rot;
213
214 buf->priv.x11.xlib.disp = disp;
215 buf->priv.x11.xlib.vis = vis;
216 buf->priv.x11.xlib.cmap = cmap;
217 buf->priv.x11.xlib.depth = x_depth;
218
219 buf->priv.mask_dither = shape_dither;
220 buf->priv.destination_alpha = destination_alpha;
221
222 {
223 Gfx_Func_Convert conv_func;
224 X_Output_Buffer *xob;
225
226 buf->priv.x11.xlib.shm = evas_software_xlib_x_can_do_shm(buf->priv.x11.xlib.disp);
227 xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
228 buf->priv.x11.xlib.vis,
229 buf->priv.x11.xlib.depth,
230 1, 1, buf->priv.x11.xlib.shm, NULL);
231
232 conv_func = NULL;
233 if (xob)
234 {
235#ifdef WORDS_BIGENDIAN
236 if (evas_software_xlib_x_output_buffer_byte_order(xob) == LSBFirst)
237 buf->priv.x11.xlib.swap = 1;
238 if (evas_software_xlib_x_output_buffer_bit_order(xob) == MSBFirst)
239 buf->priv.x11.xlib.bit_swap = 1;
240#else
241 if (evas_software_xlib_x_output_buffer_byte_order(xob) == MSBFirst)
242 buf->priv.x11.xlib.swap = 1;
243 if (evas_software_xlib_x_output_buffer_bit_order(xob) == MSBFirst)
244 buf->priv.x11.xlib.bit_swap = 1;
245#endif
246 if (((vis->class == TrueColor) || (vis->class == DirectColor)) &&
247 (x_depth > 8))
248 {
249 buf->priv.mask.r = (DATA32) vis->red_mask;
250 buf->priv.mask.g = (DATA32) vis->green_mask;
251 buf->priv.mask.b = (DATA32) vis->blue_mask;
252 if (buf->priv.x11.xlib.swap)
253 {
254 SWAP32(buf->priv.mask.r);
255 SWAP32(buf->priv.mask.g);
256 SWAP32(buf->priv.mask.b);
257 }
258 }
259 else if ((vis->class == PseudoColor) ||
260 (vis->class == StaticColor) ||
261 (vis->class == GrayScale) ||
262 (vis->class == StaticGray) ||
263 (x_depth <= 8))
264 {
265 Convert_Pal_Mode pm = PAL_MODE_RGB332;
266
267 if ((vis->class == GrayScale) || (vis->class == StaticGray))
268 grayscale = 1;
269 if (grayscale)
270 {
271 if (max_colors >= 256)
272 pm = PAL_MODE_GRAY256;
273 else if (max_colors >= 64)
274 pm = PAL_MODE_GRAY64;
275 else if (max_colors >= 16)
276 pm = PAL_MODE_GRAY16;
277 else if (max_colors >= 4)
278 pm = PAL_MODE_GRAY4;
279 else
280 pm = PAL_MODE_MONO;
281 }
282 else
283 {
284 if (max_colors >= 256)
285 pm = PAL_MODE_RGB332;
286 else if (max_colors >= 216)
287 pm = PAL_MODE_RGB666;
288 else if (max_colors >= 128)
289 pm = PAL_MODE_RGB232;
290 else if (max_colors >= 64)
291 pm = PAL_MODE_RGB222;
292 else if (max_colors >= 32)
293 pm = PAL_MODE_RGB221;
294 else if (max_colors >= 16)
295 pm = PAL_MODE_RGB121;
296 else if (max_colors >= 8)
297 pm = PAL_MODE_RGB111;
298 else if (max_colors >= 4)
299 pm = PAL_MODE_GRAY4;
300 else
301 pm = PAL_MODE_MONO;
302 }
303 /* FIXME: only alloc once per display+cmap */
304 buf->priv.pal = evas_software_xlib_x_color_allocate(disp, cmap, vis,
305 pm);
306 if (!buf->priv.pal)
307 {
308 free(buf);
309 return NULL;
310 }
311 }
312 if (buf->priv.pal)
313 {
314 if (buf->rot == 0 || buf->rot == 180)
315 conv_func = evas_common_convert_func_get(0, buf->w, buf->h,
316 evas_software_xlib_x_output_buffer_depth
317 (xob), buf->priv.mask.r,
318 buf->priv.mask.g,
319 buf->priv.mask.b,
320 buf->priv.pal->colors,
321 buf->rot);
322 else if (buf->rot == 90 || buf->rot == 270)
323 conv_func = evas_common_convert_func_get(0, buf->h, buf->w,
324 evas_software_xlib_x_output_buffer_depth
325 (xob), buf->priv.mask.r,
326 buf->priv.mask.g,
327 buf->priv.mask.b,
328 buf->priv.pal->colors,
329 buf->rot);
330 }
331 else
332 {
333 if (buf->rot == 0 || buf->rot == 180)
334 conv_func = evas_common_convert_func_get(0, buf->w, buf->h,
335 evas_software_xlib_x_output_buffer_depth
336 (xob), buf->priv.mask.r,
337 buf->priv.mask.g,
338 buf->priv.mask.b, PAL_MODE_NONE,
339 buf->rot);
340 else if (buf->rot == 90 || buf->rot == 270)
341 conv_func = evas_common_convert_func_get(0, buf->h, buf->w,
342 evas_software_xlib_x_output_buffer_depth
343 (xob), buf->priv.mask.r,
344 buf->priv.mask.g,
345 buf->priv.mask.b, PAL_MODE_NONE,
346 buf->rot);
347 }
348 evas_software_xlib_x_output_buffer_free(xob, 1);
349 if (!conv_func)
350 {
351 ERR("At depth: %i, RGB format mask: %08x %08x %08x, "
352 "Palette mode: %i. "
353 "Not supported by compiled in converters!",
354 buf->priv.x11.xlib.depth,
355 buf->priv.mask.r,
356 buf->priv.mask.g,
357 buf->priv.mask.b,
358 buf->priv.pal ? (int)buf->priv.pal->colors : -1);
359 }
360 }
361 evas_software_xlib_outbuf_drawable_set(buf, draw);
362 evas_software_xlib_outbuf_mask_set(buf, mask);
363 }
364#ifdef EVAS_FRAME_QUEUING
365 LKI(buf->priv.lock);
366#endif
367 return buf;
368}
369
370RGBA_Image *
371evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
372{
373 RGBA_Image *im;
374 Outbuf_Region *obr;
375 int bpl = 0;
376 int use_shm = 1;
377 int alpha;
378
379 if ((buf->onebuf) && (buf->priv.x11.xlib.shm))
380 {
381 Eina_Rectangle *rect;
382
383 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, buf->w, buf->h);
384 obr = calloc(1, sizeof(Outbuf_Region));
385 if (!obr) return NULL;
386 rect = eina_rectangle_new(x, y, w, h);
387 if (!rect)
388 {
389 free(obr);
390 return NULL;
391 }
392
393 buf->priv.onebuf_regions = eina_list_append(buf->priv.onebuf_regions, rect);
394 if (buf->priv.onebuf)
395 {
396 *cx = x;
397 *cy = y;
398 *cw = w;
399 *ch = h;
400 if (!buf->priv.synced)
401 {
402 XSync(buf->priv.x11.xlib.disp, False);
403 buf->priv.synced = 1;
404 }
405 return buf->priv.onebuf;
406 }
407 obr->x = 0;
408 obr->y = 0;
409 obr->w = buf->w;
410 obr->h = buf->h;
411 *cx = x;
412 *cy = y;
413 *cw = w;
414 *ch = h;
415
416 alpha = ((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha));
417
418 use_shm = buf->priv.x11.xlib.shm;
419 if ((buf->rot == 0) &&
420 (buf->priv.mask.r == 0xff0000) &&
421 (buf->priv.mask.g == 0x00ff00) &&
422 (buf->priv.mask.b == 0x0000ff))
423 {
424 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
425 buf->priv.x11.xlib.vis,
426 buf->priv.x11.xlib.depth,
427 buf->w, buf->h,
428 use_shm,
429 NULL);
430 if (!obr->xob)
431 {
432 free(obr);
433 return NULL;
434 }
435 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
436 buf->w, buf->h,
437 (DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
438 alpha, EVAS_COLORSPACE_ARGB8888);
439 if (!im)
440 {
441 evas_software_xlib_x_output_buffer_free(obr->xob, 0);
442 free(obr);
443 return NULL;
444 }
445 im->extended_info = obr;
446 if (buf->priv.x11.xlib.mask)
447 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
448 buf->priv.x11.xlib.vis,
449 1,
450 buf->w, buf->h,
451 use_shm,
452 NULL);
453 }
454 else
455 {
456 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
457 if (!im)
458 {
459 free(obr);
460 return NULL;
461 }
462 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
463 evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
464 im->extended_info = obr;
465 if ((buf->rot == 0) || (buf->rot == 180))
466 {
467 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
468 buf->priv.x11.xlib.vis,
469 buf->priv.x11.xlib.depth,
470 buf->w, buf->h,
471 use_shm,
472 NULL);
473 if (!obr->xob)
474 {
475 evas_cache_image_drop(&im->cache_entry);
476 free(obr);
477 return NULL;
478 }
479 if (buf->priv.x11.xlib.mask)
480 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
481 buf->priv.x11.xlib.vis,
482 1, buf->w, buf->h,
483 use_shm,
484 NULL);
485 }
486 else if ((buf->rot == 90) || (buf->rot == 270))
487 {
488 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
489 buf->priv.x11.xlib.vis,
490 buf->priv.x11.xlib.depth,
491 buf->h, buf->w,
492 use_shm,
493 NULL);
494 if (!obr->xob)
495 {
496 evas_cache_image_drop(&im->cache_entry);
497 free(obr);
498 return NULL;
499 }
500 if (buf->priv.x11.xlib.mask)
501 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
502 buf->priv.x11.xlib.vis,
503 1, buf->h, buf->w,
504 use_shm,
505 NULL);
506 }
507 }
508 /* FIXME: We should be able to remove this memset, but somewhere in the process
509 we copy too much to the destination surface and some area are not cleaned before copy. */
510 if ((alpha) && (im->image.data))
511 {
512 /* FIXME: faster memset! */
513// memset(im->image.data, 0, w * h * sizeof(DATA32));
514 }
515
516 buf->priv.onebuf = im;
517 return im;
518 }
519
520 obr = calloc(1, sizeof(Outbuf_Region));
521 if (!obr) return NULL;
522 obr->x = x;
523 obr->y = y;
524 obr->w = w;
525 obr->h = h;
526 *cx = 0;
527 *cy = 0;
528 *cw = w;
529 *ch = h;
530
531 use_shm = buf->priv.x11.xlib.shm;
532 /* FIXME: magic - i found if shm regions are smaller than 200x200 its
533 * faster to use ximages over unix sockets - trial and error
534 */
535// use_shm = 0; /* 630 -> 1006 fps */
536// if ((w * h) < (200 * 200)) use_shm = 0; /* 630 -> 962 fps */
537
538 alpha = ((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha));
539
540 if ((buf->rot == 0) &&
541 (buf->priv.mask.r == 0xff0000) &&
542 (buf->priv.mask.g == 0x00ff00) &&
543 (buf->priv.mask.b == 0x0000ff))
544 {
545 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
546 buf->priv.x11.xlib.vis,
547 buf->priv.x11.xlib.depth,
548 w, h,
549 use_shm,
550 NULL);
551 if (!obr->xob)
552 {
553 free(obr);
554 return NULL;
555 }
556 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
557 w, h,
558 (DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
559 alpha, EVAS_COLORSPACE_ARGB8888);
560 if (!im)
561 {
562 _unfind_xob(obr->xob, 0);
563 free(obr);
564 return NULL;
565 }
566 im->extended_info = obr;
567 if (buf->priv.x11.xlib.mask)
568 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
569 buf->priv.x11.xlib.vis,
570 1, w, h,
571 use_shm,
572 NULL);
573 }
574 else
575 {
576 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
577 if (!im)
578 {
579 free(obr);
580 return NULL;
581 }
582 im->cache_entry.w = w;
583 im->cache_entry.h = h;
584 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
585 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
586 im->extended_info = obr;
587 if ((buf->rot == 0) || (buf->rot == 180))
588 {
589 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
590 buf->priv.x11.xlib.vis,
591 buf->priv.x11.xlib.depth,
592 w, h,
593 use_shm,
594 NULL);
595 if (!obr->xob)
596 {
597 evas_cache_image_drop(&im->cache_entry);
598 free(obr);
599 return NULL;
600 }
601 if (buf->priv.x11.xlib.mask)
602 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
603 buf->priv.x11.xlib.vis,
604 1, w, h,
605 use_shm,
606 NULL);
607 }
608 else if ((buf->rot == 90) || (buf->rot == 270))
609 {
610 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
611 buf->priv.x11.xlib.vis,
612 buf->priv.x11.xlib.depth,
613 h, w,
614 use_shm,
615 NULL);
616 if (!obr->xob)
617 {
618 evas_cache_image_drop(&im->cache_entry);
619 free(obr);
620 return NULL;
621 }
622 if (buf->priv.x11.xlib.mask)
623 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
624 buf->priv.x11.xlib.vis,
625 1, h, w,
626 use_shm,
627 NULL);
628 }
629 }
630 /* FIXME: We should be able to remove this memset, but somewhere in the process
631 we copy too much to the destination surface and some area are not cleaned before copy. */
632 if (((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha)) &&
633 (im->image.data))
634 {
635 /* FIXME: faster memset! */
636// memset(im->image.data, 0, w * h * sizeof(DATA32));
637 }
638
639#ifdef EVAS_FRAME_QUEUING
640 if (!evas_common_frameq_enabled())
641#endif
642 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
643 return im;
644}
645
646void
647evas_software_xlib_outbuf_free_region_for_update(Outbuf *buf __UNUSED__, RGBA_Image *update __UNUSED__)
648{
649 /* no need to do anything - they are cleaned up on flush */
650}
651
652void
653evas_software_xlib_outbuf_flush(Outbuf *buf)
654{
655 Eina_List *l;
656 RGBA_Image *im;
657 Outbuf_Region *obr;
658
659 if ((buf->priv.onebuf) && (buf->priv.onebuf_regions))
660 {
661 Region tmpr;
662
663 im = buf->priv.onebuf;
664 obr = im->extended_info;
665 tmpr = XCreateRegion();
666 while (buf->priv.onebuf_regions)
667 {
668 Eina_Rectangle *rect;
669 XRectangle xr;
670
671 rect = buf->priv.onebuf_regions->data;
672 buf->priv.onebuf_regions = eina_list_remove_list(buf->priv.onebuf_regions, buf->priv.onebuf_regions);
673 if (buf->rot == 0)
674 {
675 xr.x = rect->x;
676 xr.y = rect->y;
677 xr.width = rect->w;
678 xr.height = rect->h;
679 }
680 else if (buf->rot == 90)
681 {
682 xr.x = rect->y;
683 xr.y = buf->w - rect->x - rect->w;
684 xr.width = rect->h;
685 xr.height = rect->w;
686 }
687 else if (buf->rot == 180)
688 {
689 xr.x = buf->w - rect->x - rect->w;
690 xr.y = buf->h - rect->y - rect->h;
691 xr.width = rect->w;
692 xr.height = rect->h;
693 }
694 else if (buf->rot == 270)
695 {
696 xr.x = buf->h - rect->y - rect->h;
697 xr.y = rect->x;
698 xr.width = rect->h;
699 xr.height = rect->w;
700 }
701 XUnionRectWithRegion(&xr, tmpr, tmpr);
702 if (buf->priv.debug)
703 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
704 xr.x, xr.y, xr.width, xr.height);
705 eina_rectangle_free(rect);
706 }
707 XSetRegion(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc, tmpr);
708 if (obr->xob)
709 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
710 buf->priv.x11.xlib.gc,
711 0, 0, 0);
712 if (obr->mxob)
713 {
714 XSetRegion(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm, tmpr);
715 evas_software_xlib_x_output_buffer_paste(obr->mxob,
716 buf->priv.x11.xlib.mask,
717 buf->priv.x11.xlib.gcm,
718 0, 0, 0);
719 }
720 XDestroyRegion(tmpr);
721 buf->priv.synced = 0;
722 }
723 else
724 {
725#if 1
726 XSync(buf->priv.x11.xlib.disp, False);
727 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
728 {
729 obr = im->extended_info;
730 if (buf->priv.debug)
731 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
732 obr->x, obr->y, obr->w, obr->h);
733 if (obr->xob)
734 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
735 buf->priv.x11.xlib.gc,
736 obr->x, obr->y, 0);
737 if (obr->mxob)
738 evas_software_xlib_x_output_buffer_paste(obr->mxob,
739 buf->priv.x11.xlib.mask,
740 buf->priv.x11.xlib.gcm,
741 obr->x, obr->y, 0);
742 }
743#ifdef EVAS_FRAME_QUEUING
744 LKL(buf->priv.lock);
745#endif
746 while (buf->priv.prev_pending_writes)
747 {
748 im = buf->priv.prev_pending_writes->data;
749 buf->priv.prev_pending_writes =
750 eina_list_remove_list(buf->priv.prev_pending_writes,
751 buf->priv.prev_pending_writes);
752 obr = im->extended_info;
753 evas_cache_image_drop(&im->cache_entry);
754 if (obr->xob) _unfind_xob(obr->xob, 0);
755 if (obr->mxob) _unfind_xob(obr->mxob, 0);
756 free(obr);
757 }
758 buf->priv.prev_pending_writes = buf->priv.pending_writes;
759#ifdef EVAS_FRAME_QUEUING
760 LKU(buf->priv.lock);
761#endif
762 buf->priv.pending_writes = NULL;
763 XFlush(buf->priv.x11.xlib.disp);
764#else
765 /* XX async push - disable */
766 /*
767 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
768 {
769 obr = im->extended_info;
770 if (buf->priv.debug)
771 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
772 obr->x, obr->y, obr->w, obr->h);
773 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
774 buf->priv.x11.xlib.gc,
775 obr->x, obr->y, 0);
776 if (obr->mxob)
777 evas_software_xlib_x_output_buffer_paste(obr->mxob,
778 buf->priv.x11.xlib.mask,
779 buf->priv.x11.xlib.gcm,
780 obr->x, obr->y, 0);
781 }
782 */
783 XSync(buf->priv.x11.xlib.disp, False);
784
785 while (buf->priv.pending_writes)
786 {
787 RGBA_Image *im;
788 Outbuf_Region *obr;
789
790 im = eina_list_data_get(buf->priv.pending_writes);
791 buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
792 obr = im->extended_info;
793 evas_cache_image_drop(&im->cache_entry);
794 if (obr->xob) _unfind_xob(obr->xob, 0);
795 if (obr->mxob) _unfind_xob(obr->mxob, 0);
796 free(obr);
797 evas_cache_image_drop(&im->cache_entry);
798 }
799#endif
800 }
801 evas_common_cpu_end_opt();
802}
803
804void
805evas_software_xlib_outbuf_idle_flush(Outbuf *buf)
806{
807 if (buf->priv.onebuf)
808 {
809 RGBA_Image *im;
810 Outbuf_Region *obr;
811
812 im = buf->priv.onebuf;
813 buf->priv.onebuf = NULL;
814 obr = im->extended_info;
815 if (obr->xob) evas_software_xlib_x_output_buffer_free(obr->xob, 0);
816 if (obr->mxob) evas_software_xlib_x_output_buffer_free(obr->mxob, 0);
817 free(obr);
818 evas_cache_image_drop(&im->cache_entry);
819 }
820 else
821 {
822#ifdef EVAS_FRAME_QUEUING
823 LKL(buf->priv.lock);
824#endif
825 if (buf->priv.prev_pending_writes) XSync(buf->priv.x11.xlib.disp, False);
826 while (buf->priv.prev_pending_writes)
827 {
828 RGBA_Image *im;
829 Outbuf_Region *obr;
830
831 im = buf->priv.prev_pending_writes->data;
832 buf->priv.prev_pending_writes =
833 eina_list_remove_list(buf->priv.prev_pending_writes,
834 buf->priv.prev_pending_writes);
835 obr = im->extended_info;
836 evas_cache_image_drop(&im->cache_entry);
837 if (obr->xob) _unfind_xob(obr->xob, 0);
838 if (obr->mxob) _unfind_xob(obr->mxob, 0);
839 free(obr);
840 }
841#ifdef EVAS_FRAME_QUEUING
842 LKU(buf->priv.lock);
843#endif
844 _clear_xob(0);
845 }
846}
847
848void
849evas_software_xlib_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
850{
851 Gfx_Func_Convert conv_func = NULL;
852 Outbuf_Region *obr;
853 DATA32 *src_data;
854 unsigned char *data;
855 int bpl = 0, yy;
856
857 obr = update->extended_info;
858 if (buf->priv.pal)
859 {
860 if ((buf->rot == 0) || (buf->rot == 180))
861 conv_func = evas_common_convert_func_get(0, w, h,
862 evas_software_xlib_x_output_buffer_depth
863 (obr->xob), buf->priv.mask.r,
864 buf->priv.mask.g, buf->priv.mask.b,
865 buf->priv.pal->colors, buf->rot);
866 else if ((buf->rot == 90) || (buf->rot == 270))
867 conv_func = evas_common_convert_func_get(0, h, w,
868 evas_software_xlib_x_output_buffer_depth
869 (obr->xob), buf->priv.mask.r,
870 buf->priv.mask.g, buf->priv.mask.b,
871 buf->priv.pal->colors, buf->rot);
872 }
873 else
874 {
875 if ((buf->rot == 0) || (buf->rot == 180))
876 conv_func = evas_common_convert_func_get(0, w, h,
877 evas_software_xlib_x_output_buffer_depth
878 (obr->xob), buf->priv.mask.r,
879 buf->priv.mask.g, buf->priv.mask.b,
880 PAL_MODE_NONE, buf->rot);
881 else if ((buf->rot == 90) || (buf->rot == 270))
882 conv_func = evas_common_convert_func_get(0, h, w,
883 evas_software_xlib_x_output_buffer_depth
884 (obr->xob), buf->priv.mask.r,
885 buf->priv.mask.g, buf->priv.mask.b,
886 PAL_MODE_NONE, buf->rot);
887 }
888 if (!conv_func) return;
889
890 if (!obr->xob) return;
891 data = evas_software_xlib_x_output_buffer_data(obr->xob, &bpl);
892 if (!data) return;
893 src_data = update->image.data;
894 if (!src_data) return;
895 if (buf->rot == 0)
896 {
897 obr->x = x;
898 obr->y = y;
899 }
900 else if (buf->rot == 90)
901 {
902 obr->x = y;
903 obr->y = buf->w - x - w;
904 }
905 else if (buf->rot == 180)
906 {
907 obr->x = buf->w - x - w;
908 obr->y = buf->h - y - h;
909 }
910 else if (buf->rot == 270)
911 {
912 obr->x = buf->h - y - h;
913 obr->y = x;
914 }
915 if ((buf->rot == 0) || (buf->rot == 180))
916 {
917 obr->w = w;
918 obr->h = h;
919 }
920 else if ((buf->rot == 90) || (buf->rot == 270))
921 {
922 obr->w = h;
923 obr->h = w;
924 }
925 if (buf->onebuf)
926 {
927 src_data += x + (y * update->cache_entry.w);
928 data += (bpl * obr->y) +
929 (obr->x * (evas_software_xlib_x_output_buffer_depth(obr->xob) / 8));
930 }
931 if (buf->priv.pal)
932 {
933 if (data != (unsigned char *)src_data)
934 conv_func(src_data, data,
935 update->cache_entry.w - w,
936 bpl /
937 ((evas_software_xlib_x_output_buffer_depth(obr->xob) /
938 8)) - obr->w, obr->w, obr->h, x, y,
939 buf->priv.pal->lookup);
940 }
941 else
942 {
943 if (data != (unsigned char *)src_data)
944 conv_func(src_data, data,
945 update->cache_entry.w - w,
946 bpl /
947 ((evas_software_xlib_x_output_buffer_depth(obr->xob) /
948 8)) - obr->w, obr->w, obr->h, x, y, NULL);
949 }
950#if 1
951#else
952 /* XX async push */
953 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
954 {
955 if (buf->priv.debug)
956 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
957 obr->x, obr->y, obr->w, obr->h);
958 if (obr->xob)
959 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
960 buf->priv.x11.xlib.gc,
961 obr->x, obr->y, 0);
962 }
963#endif
964 if (obr->mxob)
965 {
966 if (buf->rot == 0)
967 {
968 for (yy = 0; yy < obr->h; yy++)
969 evas_software_xlib_x_write_mask_line(buf, obr->mxob,
970 src_data +
971 (yy * obr->w), obr->w, yy);
972 }
973 else if (buf->rot == 90)
974 {
975 for (yy = 0; yy < obr->h; yy++)
976 evas_software_xlib_x_write_mask_line_vert(buf, obr->mxob,
977 src_data + yy,
978 h, // h
979 obr->h - yy - 1, // ym
980 w); // w
981 }
982 else if (buf->rot == 180)
983 {
984 for (yy = 0; yy < obr->h; yy++)
985 {
986 evas_software_xlib_x_write_mask_line_rev(buf, obr->mxob,
987 src_data +
988 (yy * obr->w),
989 obr->w, obr->h - yy - 1);
990 }
991 }
992 else if (buf->rot == 270)
993 {
994 for (yy = 0; yy < obr->h; yy++)
995 evas_software_xlib_x_write_mask_line_vert_rev(buf, obr->mxob,
996 src_data + yy,
997 h, // h
998 yy, // ym
999 w); // w
1000 }
1001#if 1
1002#else
1003 /* XX async push */
1004 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
1005 evas_software_xlib_x_output_buffer_paste(obr->mxob,
1006 buf->priv.x11.xlib.mask,
1007 buf->priv.x11.xlib.gcm,
1008 obr->x, obr->y, 0);
1009#endif
1010 }
1011#if 1
1012#else
1013 XFlush(buf->priv.x11.xlib.disp);
1014#endif
1015}
1016
1017void
1018evas_software_xlib_outbuf_reconfigure(Outbuf * buf, int w, int h, int rot,
1019 Outbuf_Depth depth)
1020{
1021 if ((w == buf->w) &&
1022 (h == buf->h) &&
1023 (rot == buf->rot) &&
1024 (depth == buf->depth)) return;
1025 buf->w = w;
1026 buf->h = h;
1027 buf->rot = rot;
1028 evas_software_xlib_outbuf_idle_flush(buf);
1029}
1030
1031int
1032evas_software_xlib_outbuf_get_width(Outbuf * buf)
1033{
1034 return buf->w;
1035}
1036
1037int
1038evas_software_xlib_outbuf_get_height(Outbuf * buf)
1039{
1040 return buf->h;
1041}
1042
1043Outbuf_Depth
1044evas_software_xlib_outbuf_get_depth(Outbuf * buf)
1045{
1046 return buf->depth;
1047}
1048
1049int
1050evas_software_xlib_outbuf_get_rot(Outbuf * buf)
1051{
1052 return buf->rot;
1053}
1054
1055void
1056evas_software_xlib_outbuf_drawable_set(Outbuf * buf, Drawable draw)
1057{
1058 XGCValues gcv;
1059
1060 if (buf->priv.x11.xlib.win == draw) return;
1061 if (buf->priv.x11.xlib.gc)
1062 {
1063 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc);
1064 buf->priv.x11.xlib.gc = NULL;
1065 }
1066 buf->priv.x11.xlib.win = draw;
1067 buf->priv.x11.xlib.gc = XCreateGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.win, 0, &gcv);
1068}
1069
1070void
1071evas_software_xlib_outbuf_mask_set(Outbuf * buf, Pixmap mask)
1072{
1073 XGCValues gcv;
1074
1075 if (buf->priv.x11.xlib.mask == mask) return;
1076 if (buf->priv.x11.xlib.gcm)
1077 {
1078 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm);
1079 buf->priv.x11.xlib.gcm = NULL;
1080 }
1081 buf->priv.x11.xlib.mask = mask;
1082 if (buf->priv.x11.xlib.mask)
1083 buf->priv.x11.xlib.gcm = XCreateGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.mask, 0, &gcv);
1084}
1085
1086void
1087evas_software_xlib_outbuf_debug_set(Outbuf * buf, int debug)
1088{
1089 buf->priv.debug = debug;
1090}
1091
1092void
1093evas_software_xlib_outbuf_debug_show(Outbuf * buf, Drawable draw, int x, int y, int w,
1094 int h)
1095{
1096 int i;
1097 int screen_num = 0;
1098
1099 {
1100 int wx, wy;
1101 unsigned int ww, wh, bd, dp;
1102 Window wdum, root;
1103 XWindowAttributes wattr;
1104
1105 XGetGeometry(buf->priv.x11.xlib.disp, draw, &root, &wx, &wy, &ww, &wh, &bd, &dp);
1106 XGetGeometry(buf->priv.x11.xlib.disp, root, &wdum, &wx, &wy, &ww, &wh, &bd, &dp);
1107 XGetWindowAttributes(buf->priv.x11.xlib.disp, root, &wattr);
1108 screen_num = XScreenNumberOfScreen(wattr.screen);
1109 }
1110 for (i = 0; i < 20; i++)
1111 {
1112 XSetForeground(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc,
1113 BlackPixel(buf->priv.x11.xlib.disp, screen_num));
1114 XFillRectangle(buf->priv.x11.xlib.disp, draw, buf->priv.x11.xlib.gc, x, y, w, h);
1115 XSync(buf->priv.x11.xlib.disp, False);
1116 XSync(buf->priv.x11.xlib.disp, False);
1117 XSetForeground(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc,
1118 WhitePixel(buf->priv.x11.xlib.disp, screen_num));
1119 XFillRectangle(buf->priv.x11.xlib.disp, draw, buf->priv.x11.xlib.gc, x, y, w, h);
1120 XSync(buf->priv.x11.xlib.disp, False);
1121 XSync(buf->priv.x11.xlib.disp, False);
1122 }
1123}
1124
1125Eina_Bool
1126evas_software_xlib_outbuf_alpha_get(Outbuf *buf)
1127{
1128 return buf->priv.x11.xlib.mask;
1129}
1130
1131#ifdef EVAS_FRAME_QUEUING
1132void
1133evas_software_xlib_outbuf_set_priv(Outbuf *buf, void *cur, void *prev __UNUSED__)
1134{
1135 buf->priv.pending_writes = (Eina_List *)cur;
1136}
1137#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h
deleted file mode 100644
index d70eb8d..0000000
--- a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h
+++ /dev/null
@@ -1,92 +0,0 @@
1#ifndef EVAS_XLIB_OUTBUF_H
2#define EVAS_XLIB_OUTBUF_H
3
4
5#include "evas_engine.h"
6
7
8void evas_software_xlib_outbuf_init (void);
9
10void evas_software_xlib_outbuf_free (Outbuf *buf);
11
12Outbuf *evas_software_xlib_outbuf_setup_x (int w,
13 int h,
14 int rot,
15 Outbuf_Depth depth,
16 Display *disp,
17 Drawable draw,
18 Visual *vis,
19 Colormap cmap,
20 int x_depth,
21 int grayscale,
22 int max_colors,
23 Pixmap mask,
24 int shape_dither,
25 int destination_alpha);
26
27
28RGBA_Image *evas_software_xlib_outbuf_new_region_for_update (Outbuf *buf,
29 int x,
30 int y,
31 int w,
32 int h,
33 int *cx,
34 int *cy,
35 int *cw,
36 int *ch);
37
38void evas_software_xlib_outbuf_free_region_for_update (Outbuf *buf,
39 RGBA_Image *update);
40
41void evas_software_xlib_outbuf_flush (Outbuf *buf);
42
43void evas_software_xlib_outbuf_idle_flush (Outbuf *buf);
44
45void evas_software_xlib_outbuf_push_updated_region (Outbuf *buf,
46 RGBA_Image *update,
47 int x,
48 int y,
49 int w,
50 int h);
51
52void evas_software_xlib_outbuf_reconfigure (Outbuf *buf,
53 int w,
54 int h,
55 int rot,
56 Outbuf_Depth depth);
57
58int evas_software_xlib_outbuf_get_width (Outbuf *buf);
59
60int evas_software_xlib_outbuf_get_height (Outbuf *buf);
61
62Outbuf_Depth evas_software_xlib_outbuf_get_depth (Outbuf *buf);
63
64int evas_software_xlib_outbuf_get_rot (Outbuf *buf);
65
66void evas_software_xlib_outbuf_drawable_set (Outbuf *buf,
67 Drawable draw);
68
69void evas_software_xlib_outbuf_mask_set (Outbuf *buf,
70 Pixmap mask);
71
72void evas_software_xlib_outbuf_rotation_set (Outbuf *buf,
73 int rot);
74
75void evas_software_xlib_outbuf_debug_set (Outbuf *buf,
76 int debug);
77
78void evas_software_xlib_outbuf_debug_show (Outbuf *buf,
79 Drawable draw,
80 int x,
81 int y,
82 int w,
83 int h);
84
85Eina_Bool evas_software_xlib_outbuf_alpha_get (Outbuf *buf);
86#ifdef EVAS_FRAME_QUEUING
87void evas_software_xlib_outbuf_set_priv (Outbuf *buf,
88 void *cur,
89 void *prev);
90#endif
91
92#endif