remove xcb support in ecore_x and evas engines as per mailing list
[platform/upstream/efl.git] / src / lib / ecore_x / ecore_x_gc.c
1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif /* ifdef HAVE_CONFIG_H */
4
5 #include <string.h>
6
7 #include "Ecore.h"
8 #include "ecore_x_private.h"
9 #include "Ecore_X.h"
10
11 /**
12  * Creates a new default graphics context associated with the given
13  * drawable.
14  * @param  draw Drawable to create graphics context with.  If @c 0 is
15  *              given instead, the default root window is used.
16  * @param value_mask Bitmask values.
17  * @param value_list List of values. The order of values must be the
18  *                   same than the corresponding bitmaks.
19  * @return The new default graphics context.
20  */
21 EAPI Ecore_X_GC
22 ecore_x_gc_new(Ecore_X_Drawable draw,
23                Ecore_X_GC_Value_Mask value_mask,
24                const unsigned int *value_list)
25 {
26    Ecore_X_GC gc;
27    XGCValues gcv;
28    int mask;
29    int idx;
30    int i;
31
32    LOGFN(__FILE__, __LINE__, __FUNCTION__);
33    if (!draw)
34      draw = DefaultRootWindow(_ecore_x_disp);
35
36    memset(&gcv, 0, sizeof (gcv));
37
38    for (i = 0, idx = 0, mask = 1; i <= 22; i++, mask <<= 1)
39      {
40         switch (mask & value_mask)
41           {
42            case ECORE_X_GC_VALUE_MASK_FUNCTION:
43              gcv.function = value_list[idx];
44              idx++;
45              break;
46
47            case ECORE_X_GC_VALUE_MASK_PLANE_MASK:
48              gcv.plane_mask = value_list[idx];
49              idx++;
50              break;
51
52            case ECORE_X_GC_VALUE_MASK_FOREGROUND:
53              gcv.foreground = value_list[idx];
54              idx++;
55              break;
56
57            case ECORE_X_GC_VALUE_MASK_BACKGROUND:
58              gcv.background = value_list[idx];
59              idx++;
60              break;
61
62            case ECORE_X_GC_VALUE_MASK_LINE_WIDTH:
63              gcv.line_width = value_list[idx];
64              idx++;
65              break;
66
67            case ECORE_X_GC_VALUE_MASK_LINE_STYLE:
68              gcv.line_style = value_list[idx];
69              idx++;
70              break;
71
72            case ECORE_X_GC_VALUE_MASK_CAP_STYLE:
73              gcv.cap_style = value_list[idx];
74              idx++;
75              break;
76
77            case ECORE_X_GC_VALUE_MASK_JOIN_STYLE:
78              gcv.join_style = value_list[idx];
79              idx++;
80              break;
81
82            case ECORE_X_GC_VALUE_MASK_FILL_STYLE:
83              gcv.fill_style = value_list[idx];
84              idx++;
85              break;
86
87            case ECORE_X_GC_VALUE_MASK_FILL_RULE:
88              gcv.fill_rule = value_list[idx];
89              idx++;
90              break;
91
92            case ECORE_X_GC_VALUE_MASK_TILE:
93              gcv.tile = value_list[idx];
94              idx++;
95              break;
96
97            case ECORE_X_GC_VALUE_MASK_STIPPLE:
98              gcv.stipple = value_list[idx];
99              idx++;
100              break;
101
102            case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X:
103              gcv.ts_x_origin = value_list[idx];
104              idx++;
105              break;
106
107            case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y:
108              gcv.ts_y_origin = value_list[idx];
109              idx++;
110              break;
111
112            case ECORE_X_GC_VALUE_MASK_FONT:
113              gcv.font = value_list[idx];
114              idx++;
115              break;
116
117            case ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE:
118              gcv.subwindow_mode = value_list[idx];
119              idx++;
120              break;
121
122            case ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES:
123              gcv.graphics_exposures = value_list[idx];
124              idx++;
125              break;
126
127            case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X:
128              gcv.clip_x_origin = value_list[idx];
129              idx++;
130              break;
131
132            case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y:
133              gcv.clip_y_origin = value_list[idx];
134              idx++;
135              break;
136
137            case ECORE_X_GC_VALUE_MASK_CLIP_MASK:
138              gcv.clip_mask = value_list[idx];
139              idx++;
140              break;
141
142            case ECORE_X_GC_VALUE_MASK_DASH_OFFSET:
143              gcv.dash_offset = value_list[idx];
144              idx++;
145              break;
146
147            case ECORE_X_GC_VALUE_MASK_DASH_LIST:
148              gcv.dashes = value_list[idx];
149              idx++;
150              break;
151
152            case ECORE_X_GC_VALUE_MASK_ARC_MODE:
153              gcv.arc_mode = value_list[idx];
154              idx++;
155              break;
156           }
157      }
158
159    gc = XCreateGC(_ecore_x_disp, draw, value_mask, &gcv);
160    if (_ecore_xlib_sync) ecore_x_sync();
161    return gc;
162 }
163
164 /**
165  * Deletes and frees the given graphics context.
166  * @param gc The given graphics context.
167  */
168 EAPI void
169 ecore_x_gc_free(Ecore_X_GC gc)
170 {
171    LOGFN(__FILE__, __LINE__, __FUNCTION__);
172    XFreeGC(_ecore_x_disp, gc);
173    if (_ecore_xlib_sync) ecore_x_sync();
174 }
175