einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas);
if (einfo)
{
+ unsigned int foreground;
+ Ecore_X_GC gc;
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
- xcb_rectangle_t rectangle;
- Ecore_X_GC gc;
- uint32_t value_list;
-# else
- GC gc;
- XGCValues gcv;
-# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
+ xcb_rectangle_t rectangle;
+# endif /* BUILD_ECORE_EVAS_SOFTWARE_XCB */
if (ee->engine.x.mask) ecore_x_pixmap_del(ee->engine.x.mask);
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
+ foreground = 0;
+ gc = ecore_x_gc_new(ee->engine.x.mask,
+ ECORE_X_GC_VALUE_MASK_FOREGROUND,
+ &foreground);
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
- gc = xcb_generate_id(ecore_x_connection_get());
- value_list = 0;
- xcb_create_gc(ecore_x_connection_get(), gc, ee->engine.x.mask,
- XCB_GC_FOREGROUND, &value_list);
rectangle.x = 0;
rectangle.y = 0;
rectangle.width = ee->w;
rectangle.height = ee->h;
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
1, &rectangle);
- xcb_free_gc(ecore_x_connection_get(), gc);
# else
- gcv.foreground = 0;
- gc = XCreateGC(ecore_x_display_get(), ee->engine.x.mask,
- GCForeground,
- &gcv);
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
0, 0, ee->w, ee->h);
- XFreeGC(ecore_x_display_get(), gc);
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
+ ecore_x_gc_del(gc);
einfo->info.mask = ee->engine.x.mask;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
if (einfo)
{
+ unsigned int foreground;
+ Ecore_X_GC gc;
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
xcb_rectangle_t rectangle;
- Ecore_X_GC gc;
- uint32_t value_list;
-# else
- GC gc;
- XGCValues gcv;
-# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
+# endif /* BUILD_ECORE_EVAS_XRENDER_XCB */
if (ee->engine.x.mask) ecore_x_pixmap_del(ee->engine.x.mask);
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
+ foreground = 0;
+ ecore_x_gc_new(ee->engine.x.mask,
+ ECORE_X_GC_VALUE_MASK_FOREGROUND,
+ &foreground);
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
- gc = xcb_generate_id(ecore_x_connection_get());
- value_list = 0;
- xcb_create_gc(ecore_x_connection_get(), gc, ee->engine.x.mask,
- XCB_GC_FOREGROUND, &value_list);
rectangle.x = 0;
rectangle.y = 0;
rectangle.width = ee->w;
rectangle.height = ee->h;
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
1, &rectangle);
- xcb_free_gc(ecore_x_connection_get(), gc);
# else
- gcv.foreground = 0;
- gc = XCreateGC(ecore_x_display_get(), ee->engine.x.mask,
- GCForeground,
- &gcv);
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
0, 0, ee->w, ee->h);
- XFreeGC(ecore_x_display_get(), gc);
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
+ ecore_x_gc_del(gc);
einfo->info.mask = ee->engine.x.mask;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
{
if (ee->shaped)
{
+ unsigned int foreground;
+ Ecore_X_GC gc;
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
xcb_rectangle_t rectangle;
- Ecore_X_GC gc;
- uint32_t value_list;
-# else
- GC gc;
- XGCValues gcv;
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
if (!ee->engine.x.mask)
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
+ foreground = 0;
+ gc = ecore_x_gc_new(ee->engine.x.mask,
+ ECORE_X_GC_VALUE_MASK_FOREGROUND,
+ &foreground);
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
- gc = xcb_generate_id(ecore_x_connection_get());
- value_list = 0;
- xcb_create_gc(ecore_x_connection_get(),
- gc, ee->engine.x.mask,
- XCB_GC_FOREGROUND,
- &value_list);
rectangle.x = 0;
rectangle.y = 0;
rectangle.width = ee->w;
xcb_poly_fill_rectangle(ecore_x_connection_get(),
ee->engine.x.mask, gc,
1, &rectangle);
- xcb_free_gc(ecore_x_connection_get(), gc);
# else
- gcv.foreground = 0;
- gc = XCreateGC(ecore_x_display_get(), ee->engine.x.mask,
- GCForeground,
- &gcv);
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
0, 0, ee->w, ee->h);
- XFreeGC(ecore_x_display_get(), gc);
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
+ ecore_x_gc_del(gc);
einfo->info.mask = ee->engine.x.mask;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
{
if (ee->shaped)
{
+ unsigned int foreground;
+ Ecore_X_GC gc;
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
xcb_rectangle_t rectangle;
- Ecore_X_GC gc;
- uint32_t value_list;
-# else
- GC gc;
- XGCValues gcv;
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
if (!ee->engine.x.mask)
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
+ foreground = 0;
+ gc = ecore_x_gc_new(ee->engine.x.mask,
+ ECORE_X_GC_VALUE_MASK_FOREGROUND,
+ &foreground);
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
- gc = xcb_generate_id(ecore_x_connection_get());
- value_list = 0;
- xcb_create_gc(ecore_x_connection_get(),
- gc, ee->engine.x.mask,
- XCB_GC_FOREGROUND,
- &value_list);
rectangle.x = 0;
rectangle.y = 0;
rectangle.width = ee->w;
xcb_poly_fill_rectangle(ecore_x_connection_get(),
ee->engine.x.mask, gc,
1, &rectangle);
- xcb_free_gc(ecore_x_connection_get(), gc);
# else
- gcv.foreground = 0;
- gc = XCreateGC(ecore_x_display_get(), ee->engine.x.mask,
- GCForeground,
- &gcv);
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
0, 0, ee->w, ee->h);
- XFreeGC(ecore_x_display_get(), gc);
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
+ ecore_x_gc_del(gc);
einfo->info.mask = ee->engine.x.mask;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
if (ee->prop.avoid_damage)
{
ee->engine.x.pmap = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, einfo->info.depth);
- ee->engine.x.gc = ecore_x_gc_new(ee->engine.x.pmap);
+ ee->engine.x.gc = ecore_x_gc_new(ee->engine.x.pmap, 0, NULL);
einfo->info.drawable = ee->engine.x.pmap;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
if ((ee->rotation == 90) || (ee->rotation == 270))
if (ee->prop.avoid_damage)
{
ee->engine.x.pmap = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 16);
- ee->engine.x.gc = ecore_x_gc_new(ee->engine.x.pmap);
+ ee->engine.x.gc = ecore_x_gc_new(ee->engine.x.pmap, 0, NULL);
einfo->info.drawable = ee->engine.x.pmap;
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
if ((ee->rotation == 90) || (ee->rotation == 270))
unsigned int *data;
} Ecore_X_Icon;
+typedef enum _Ecore_X_GC_Value_Mask {
+ ECORE_X_GC_VALUE_MASK_FUNCTION = (1L << 0),
+ ECORE_X_GC_VALUE_MASK_PLANE_MASK = (1L << 1),
+ ECORE_X_GC_VALUE_MASK_FOREGROUND = (1L << 2),
+ ECORE_X_GC_VALUE_MASK_BACKGROUND = (1L << 3),
+ ECORE_X_GC_VALUE_MASK_LINE_WIDTH = (1L << 4),
+ ECORE_X_GC_VALUE_MASK_LINE_STYLE = (1L << 5),
+ ECORE_X_GC_VALUE_MASK_CAP_STYLE = (1L << 6),
+ ECORE_X_GC_VALUE_MASK_JOIN_STYLE = (1L << 7),
+ ECORE_X_GC_VALUE_MASK_FILL_STYLE = (1L << 8),
+ ECORE_X_GC_VALUE_MASK_FILL_RULE = (1L << 9),
+ ECORE_X_GC_VALUE_MASK_TILE = (1L << 10),
+ ECORE_X_GC_VALUE_MASK_STIPPLE = (1L << 11),
+ ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X = (1L << 12),
+ ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y = (1L << 13),
+ ECORE_X_GC_VALUE_MASK_FONT = (1L << 14),
+ ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE = (1L << 15),
+ ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES = (1L << 16),
+ ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X = (1L << 17),
+ ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y = (1L << 18),
+ ECORE_X_GC_VALUE_MASK_CLIP_MASK = (1L << 19),
+ ECORE_X_GC_VALUE_MASK_DASH_OFFSET = (1L << 20),
+ ECORE_X_GC_VALUE_MASK_DASH_LIST = (1L << 21),
+ ECORE_X_GC_VALUE_MASK_ARC_MODE = (1L << 22)
+} Ecore_X_GC_Value_Mask;
+
typedef enum _Ecore_X_Window_State {
/** The window is iconified. */
ECORE_X_WINDOW_STATE_ICONIFIED,
EAPI void ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap, int *x, int *y, int *w, int *h);
EAPI int ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap);
-EAPI Ecore_X_GC ecore_x_gc_new(Ecore_X_Drawable draw);
+EAPI Ecore_X_GC ecore_x_gc_new(Ecore_X_Drawable draw, Ecore_X_GC_Value_Mask value_mask, const unsigned int *value_list);
EAPI void ecore_x_gc_del(Ecore_X_GC gc);
EAPI int ecore_x_client_message32_send(Ecore_X_Window win, Ecore_X_Atom type, Ecore_X_Event_Mask mask, long d0, long d1, long d2, long d3, long d4);
* drawable.
* @param draw Drawable to create graphics context with. If @c 0 is
* given instead, the default root window is used.
+ * @param value_mask Bitmask values.
+ * @param value_list List of values. The order of values must be the
+ * same than the corresponding bitmaks.
* @return The new default graphics context.
*/
EAPI Ecore_X_GC
-ecore_x_gc_new(Ecore_X_Drawable draw)
+ecore_x_gc_new(Ecore_X_Drawable draw, Ecore_X_GC_Value_Mask value_mask, const unsigned int *value_list)
{
- XGCValues gcv;
+ XGCValues gcv;
+ int mask;
+ int index;
+ int i;
- if (!draw) draw = DefaultRootWindow(_ecore_x_disp);
- return XCreateGC(_ecore_x_disp, draw, 0, &gcv);
+ if (!draw) draw = DefaultRootWindow(_ecore_x_disp);
+
+ for (i = 0, index = 0, mask = 1; i <= 22; i++, mask <<= 1)
+ {
+ switch (mask & value_mask)
+ {
+ case ECORE_X_GC_VALUE_MASK_FUNCTION:
+ gcv.function = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_PLANE_MASK:
+ gcv.plane_mask = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_FOREGROUND:
+ gcv.foreground = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_BACKGROUND:
+ gcv.background = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_LINE_WIDTH:
+ gcv.line_width = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_LINE_STYLE:
+ gcv.line_style = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_CAP_STYLE:
+ gcv.cap_style = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_JOIN_STYLE:
+ gcv.join_style = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_FILL_STYLE:
+ gcv.fill_style = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_FILL_RULE:
+ gcv.fill_rule = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_TILE:
+ gcv.tile = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_STIPPLE:
+ gcv.stipple = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_X:
+ gcv.ts_x_origin = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_TILE_STIPPLE_ORIGIN_Y:
+ gcv.ts_y_origin = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_FONT:
+ gcv.font = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_SUBWINDOW_MODE:
+ gcv.subwindow_mode = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_GRAPHICS_EXPOSURES:
+ gcv.graphics_exposures = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_X:
+ gcv.clip_x_origin = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_CLIP_ORIGIN_Y:
+ gcv.clip_y_origin = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_CLIP_MASK:
+ gcv.clip_mask = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_DASH_OFFSET:
+ gcv.dash_offset = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_DASH_LIST:
+ gcv.dashes = value_list[index];
+ index++;
+ break;
+ case ECORE_X_GC_VALUE_MASK_ARC_MODE:
+ gcv.arc_mode = value_list[index];
+ index++;
+ break;
+ }
+ }
+
+ return XCreateGC(_ecore_x_disp, draw, value_mask, &gcv);
}
/**
EAPI void
ecore_x_gc_del(Ecore_X_GC gc)
{
- XFreeGC(_ecore_x_disp, gc);
+ XFreeGC(_ecore_x_disp, gc);
}