Ecore_X(cb): Remove extra calls to ecore_x_flush. Move main loop
[framework/uifw/ecore.git] / src / lib / ecore_x / xcb / ecore_xcb_gc.c
1 #include "ecore_xcb_private.h"
2
3 /**
4  * Creates a new default graphics context associated with the given
5  * drawable.
6  * @param  draw Drawable to create graphics context with.  If @c 0 is
7  *              given instead, the default root window is used.
8  * @param value_mask Bitmask values.
9  * @param value_list List of values. The order of values must be the
10  *                   same than the corresponding bitmaks.
11  * @return The new default graphics context.
12  */
13 EAPI Ecore_X_GC 
14 ecore_x_gc_new(Ecore_X_Drawable drawable, Ecore_X_GC_Value_Mask value_mask, const unsigned int *value_list) 
15 {
16    xcb_gcontext_t gc;
17    uint32_t vmask = 0;
18    int i = 0, mask = 0;
19
20    LOGFN(__FILE__, __LINE__, __FUNCTION__);
21
22    if (!drawable) drawable = ((xcb_screen_t *)_ecore_xcb_screen)->root;
23
24    for (i = 0, mask = 1; i <= 22; i++, mask <<= 1) 
25      {
26         switch (mask & value_mask) 
27           {
28            case ECORE_X_GC_VALUE_MASK_FUNCTION:
29              vmask |= XCB_GC_FUNCTION;
30              break;
31            case ECORE_X_GC_VALUE_MASK_PLANE_MASK:
32              vmask |= XCB_GC_PLANE_MASK;
33              break;
34            case ECORE_X_GC_VALUE_MASK_FOREGROUND:
35              vmask |= XCB_GC_FOREGROUND;
36              break;
37            case ECORE_X_GC_VALUE_MASK_BACKGROUND:
38              vmask |= XCB_GC_BACKGROUND;
39              break;
40            case ECORE_X_GC_VALUE_MASK_LINE_WIDTH:
41              vmask |= XCB_GC_LINE_WIDTH;
42              break;
43            case ECORE_X_GC_VALUE_MASK_LINE_STYLE:
44              vmask |= XCB_GC_LINE_STYLE;
45              break;
46            case ECORE_X_GC_VALUE_MASK_CAP_STYLE:
47              vmask |= XCB_GC_CAP_STYLE;
48              break;
49            case ECORE_X_GC_VALUE_MASK_JOIN_STYLE:
50              vmask |= XCB_GC_JOIN_STYLE;
51              break;
52            case ECORE_X_GC_VALUE_MASK_FILL_STYLE:
53              vmask |= XCB_GC_FILL_STYLE;
54              break;
55            case ECORE_X_GC_VALUE_MASK_FILL_RULE:
56              vmask |= XCB_GC_FILL_RULE;
57              break;
58            case ECORE_X_GC_VALUE_MASK_TILE:
59              vmask |= XCB_GC_TILE;
60              break;
61            case ECORE_X_GC_VALUE_MASK_STIPPLE:
62              vmask |= XCB_GC_STIPPLE;
63              break;
64            case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X:
65              vmask |= XCB_GC_TILE_STIPPLE_ORIGIN_X;
66              break;
67            case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y:
68              vmask |= XCB_GC_TILE_STIPPLE_ORIGIN_Y;
69              break;
70            case ECORE_X_GC_VALUE_MASK_FONT:
71              vmask |= XCB_GC_FONT;
72              break;
73            case ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE:
74              vmask |= XCB_GC_SUBWINDOW_MODE;
75              break;
76            case ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES:
77              vmask |= XCB_GC_GRAPHICS_EXPOSURES;
78              break;
79            case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X:
80              vmask |= XCB_GC_CLIP_ORIGIN_X;
81              break;
82            case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y:
83              vmask |= XCB_GC_CLIP_ORIGIN_Y;
84              break;
85            case ECORE_X_GC_VALUE_MASK_CLIP_MASK:
86              vmask |= XCB_GC_CLIP_MASK;
87              break;
88            case ECORE_X_GC_VALUE_MASK_DASH_OFFSET:
89              vmask |= XCB_GC_DASH_OFFSET;
90              break;
91            case ECORE_X_GC_VALUE_MASK_DASH_LIST:
92              vmask |= XCB_GC_DASH_LIST;
93              break;
94            case ECORE_X_GC_VALUE_MASK_ARC_MODE:
95              vmask |= XCB_GC_ARC_MODE;
96              break;
97           }
98      }
99
100    gc = xcb_generate_id(_ecore_xcb_conn);
101    xcb_create_gc(_ecore_xcb_conn, gc, drawable, vmask, value_list);
102
103 //   ecore_x_flush();
104    return gc;
105 }
106
107 /**
108  * Deletes and frees the given graphics context.
109  * @param gc The given graphics context.
110  */
111 EAPI void 
112 ecore_x_gc_free(Ecore_X_GC gc) 
113 {
114    LOGFN(__FILE__, __LINE__, __FUNCTION__);
115
116    xcb_free_gc(_ecore_xcb_conn, gc);
117 //   ecore_x_flush();
118 }
119
120 EAPI void 
121 ecore_x_gc_foreground_set(Ecore_X_GC gc, unsigned long foreground) 
122 {
123    uint32_t list;
124
125    LOGFN(__FILE__, __LINE__, __FUNCTION__);
126
127    list = foreground;
128    xcb_change_gc(_ecore_xcb_conn, gc, XCB_GC_FOREGROUND, &list);
129 //   ecore_x_flush();
130 }
131
132 EAPI void 
133 ecore_x_gc_background_set(Ecore_X_GC gc, unsigned long background) 
134 {
135    uint32_t list;
136
137    LOGFN(__FILE__, __LINE__, __FUNCTION__);
138
139    list = background;
140    xcb_change_gc(_ecore_xcb_conn, gc, XCB_GC_BACKGROUND, &list);
141 //   ecore_x_flush();
142 }