forked from enlightenment/efl
* API BREAK: ecore_gc_new can create now a graphic context
with all the values that the X protocol allows. See documentation for more info about its use * use it in ecore_evas SVN revision: 39654
This commit is contained in:
parent
34822db882
commit
3e94ac52b6
|
@ -325,38 +325,30 @@ _ecore_evas_x_resize_shape(Ecore_Evas *ee)
|
||||||
einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas);
|
einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas);
|
||||||
if (einfo)
|
if (einfo)
|
||||||
{
|
{
|
||||||
|
unsigned int foreground;
|
||||||
|
Ecore_X_GC gc;
|
||||||
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
|
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
|
||||||
xcb_rectangle_t rectangle;
|
xcb_rectangle_t rectangle;
|
||||||
Ecore_X_GC gc;
|
# endif /* BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
||||||
uint32_t value_list;
|
|
||||||
# else
|
|
||||||
GC gc;
|
|
||||||
XGCValues gcv;
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
|
||||||
|
|
||||||
if (ee->engine.x.mask) ecore_x_pixmap_del(ee->engine.x.mask);
|
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);
|
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
|
# 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.x = 0;
|
||||||
rectangle.y = 0;
|
rectangle.y = 0;
|
||||||
rectangle.width = ee->w;
|
rectangle.width = ee->w;
|
||||||
rectangle.height = ee->h;
|
rectangle.height = ee->h;
|
||||||
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
|
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
|
||||||
1, &rectangle);
|
1, &rectangle);
|
||||||
xcb_free_gc(ecore_x_connection_get(), gc);
|
|
||||||
# else
|
# 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,
|
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
|
||||||
0, 0, ee->w, ee->h);
|
0, 0, ee->w, ee->h);
|
||||||
XFreeGC(ecore_x_display_get(), gc);
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
||||||
|
ecore_x_gc_del(gc);
|
||||||
einfo->info.mask = ee->engine.x.mask;
|
einfo->info.mask = ee->engine.x.mask;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
||||||
|
@ -371,38 +363,30 @@ _ecore_evas_x_resize_shape(Ecore_Evas *ee)
|
||||||
einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
|
einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
|
||||||
if (einfo)
|
if (einfo)
|
||||||
{
|
{
|
||||||
|
unsigned int foreground;
|
||||||
|
Ecore_X_GC gc;
|
||||||
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
|
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
|
||||||
xcb_rectangle_t rectangle;
|
xcb_rectangle_t rectangle;
|
||||||
Ecore_X_GC gc;
|
# endif /* BUILD_ECORE_EVAS_XRENDER_XCB */
|
||||||
uint32_t value_list;
|
|
||||||
# else
|
|
||||||
GC gc;
|
|
||||||
XGCValues gcv;
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
|
|
||||||
|
|
||||||
if (ee->engine.x.mask) ecore_x_pixmap_del(ee->engine.x.mask);
|
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);
|
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
|
# 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.x = 0;
|
||||||
rectangle.y = 0;
|
rectangle.y = 0;
|
||||||
rectangle.width = ee->w;
|
rectangle.width = ee->w;
|
||||||
rectangle.height = ee->h;
|
rectangle.height = ee->h;
|
||||||
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
|
xcb_poly_fill_rectangle(ecore_x_connection_get(), ee->engine.x.mask, gc,
|
||||||
1, &rectangle);
|
1, &rectangle);
|
||||||
xcb_free_gc(ecore_x_connection_get(), gc);
|
|
||||||
# else
|
# 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,
|
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
|
||||||
0, 0, ee->w, ee->h);
|
0, 0, ee->w, ee->h);
|
||||||
XFreeGC(ecore_x_display_get(), gc);
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
|
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
|
||||||
|
ecore_x_gc_del(gc);
|
||||||
einfo->info.mask = ee->engine.x.mask;
|
einfo->info.mask = ee->engine.x.mask;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
||||||
|
@ -1418,24 +1402,19 @@ _ecore_evas_x_shaped_set(Ecore_Evas *ee, int shaped)
|
||||||
{
|
{
|
||||||
if (ee->shaped)
|
if (ee->shaped)
|
||||||
{
|
{
|
||||||
|
unsigned int foreground;
|
||||||
|
Ecore_X_GC gc;
|
||||||
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
|
# ifdef BUILD_ECORE_EVAS_SOFTWARE_XCB
|
||||||
xcb_rectangle_t rectangle;
|
xcb_rectangle_t rectangle;
|
||||||
Ecore_X_GC gc;
|
|
||||||
uint32_t value_list;
|
|
||||||
# else
|
|
||||||
GC gc;
|
|
||||||
XGCValues gcv;
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
||||||
|
|
||||||
if (!ee->engine.x.mask)
|
if (!ee->engine.x.mask)
|
||||||
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
|
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
|
# 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.x = 0;
|
||||||
rectangle.y = 0;
|
rectangle.y = 0;
|
||||||
rectangle.width = ee->w;
|
rectangle.width = ee->w;
|
||||||
|
@ -1443,16 +1422,11 @@ _ecore_evas_x_shaped_set(Ecore_Evas *ee, int shaped)
|
||||||
xcb_poly_fill_rectangle(ecore_x_connection_get(),
|
xcb_poly_fill_rectangle(ecore_x_connection_get(),
|
||||||
ee->engine.x.mask, gc,
|
ee->engine.x.mask, gc,
|
||||||
1, &rectangle);
|
1, &rectangle);
|
||||||
xcb_free_gc(ecore_x_connection_get(), gc);
|
|
||||||
# else
|
# 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,
|
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
|
||||||
0, 0, ee->w, ee->h);
|
0, 0, ee->w, ee->h);
|
||||||
XFreeGC(ecore_x_display_get(), gc);
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
# endif /* ! BUILD_ECORE_EVAS_SOFTWARE_XCB */
|
||||||
|
ecore_x_gc_del(gc);
|
||||||
einfo->info.mask = ee->engine.x.mask;
|
einfo->info.mask = ee->engine.x.mask;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
||||||
|
@ -1481,24 +1455,19 @@ _ecore_evas_x_shaped_set(Ecore_Evas *ee, int shaped)
|
||||||
{
|
{
|
||||||
if (ee->shaped)
|
if (ee->shaped)
|
||||||
{
|
{
|
||||||
|
unsigned int foreground;
|
||||||
|
Ecore_X_GC gc;
|
||||||
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
|
# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
|
||||||
xcb_rectangle_t rectangle;
|
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)
|
if (!ee->engine.x.mask)
|
||||||
ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
|
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
|
# 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.x = 0;
|
||||||
rectangle.y = 0;
|
rectangle.y = 0;
|
||||||
rectangle.width = ee->w;
|
rectangle.width = ee->w;
|
||||||
|
@ -1506,16 +1475,11 @@ _ecore_evas_x_shaped_set(Ecore_Evas *ee, int shaped)
|
||||||
xcb_poly_fill_rectangle(ecore_x_connection_get(),
|
xcb_poly_fill_rectangle(ecore_x_connection_get(),
|
||||||
ee->engine.x.mask, gc,
|
ee->engine.x.mask, gc,
|
||||||
1, &rectangle);
|
1, &rectangle);
|
||||||
xcb_free_gc(ecore_x_connection_get(), gc);
|
|
||||||
# else
|
# 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,
|
XFillRectangle(ecore_x_display_get(), ee->engine.x.mask, gc,
|
||||||
0, 0, ee->w, ee->h);
|
0, 0, ee->w, ee->h);
|
||||||
XFreeGC(ecore_x_display_get(), gc);
|
|
||||||
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
|
# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
|
||||||
|
ecore_x_gc_del(gc);
|
||||||
einfo->info.mask = ee->engine.x.mask;
|
einfo->info.mask = ee->engine.x.mask;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
||||||
|
@ -2167,7 +2131,7 @@ _ecore_evas_x_avoid_damage_set(Ecore_Evas *ee, int on)
|
||||||
if (ee->prop.avoid_damage)
|
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.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;
|
einfo->info.drawable = ee->engine.x.pmap;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
if ((ee->rotation == 90) || (ee->rotation == 270))
|
if ((ee->rotation == 90) || (ee->rotation == 270))
|
||||||
|
@ -2218,7 +2182,7 @@ _ecore_evas_x_avoid_damage_set(Ecore_Evas *ee, int on)
|
||||||
if (ee->prop.avoid_damage)
|
if (ee->prop.avoid_damage)
|
||||||
{
|
{
|
||||||
ee->engine.x.pmap = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 16);
|
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;
|
einfo->info.drawable = ee->engine.x.pmap;
|
||||||
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
|
||||||
if ((ee->rotation == 90) || (ee->rotation == 270))
|
if ((ee->rotation == 90) || (ee->rotation == 270))
|
||||||
|
|
|
@ -81,6 +81,32 @@ typedef struct _Ecore_X_Icon {
|
||||||
unsigned int *data;
|
unsigned int *data;
|
||||||
} Ecore_X_Icon;
|
} 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 {
|
typedef enum _Ecore_X_Window_State {
|
||||||
/** The window is iconified. */
|
/** The window is iconified. */
|
||||||
ECORE_X_WINDOW_STATE_ICONIFIED,
|
ECORE_X_WINDOW_STATE_ICONIFIED,
|
||||||
|
@ -1160,7 +1186,7 @@ EAPI void ecore_x_pixmap_paste(Ecore_X_Pixmap pmap, Ecore_X_Drawable
|
||||||
EAPI void ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap, int *x, int *y, int *w, int *h);
|
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 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 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);
|
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);
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
* drawable.
|
* drawable.
|
||||||
* @param drawable Drawable to create graphics context with. If @c 0 is
|
* @param drawable Drawable to create graphics context with. If @c 0 is
|
||||||
* given instead, the default root window is used.
|
* 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.
|
* @return The new default graphics context.
|
||||||
*
|
*
|
||||||
* Creates a new default graphics context associated with @p
|
* Creates a new default graphics context associated with @p
|
||||||
|
@ -18,14 +21,14 @@
|
||||||
* other drawables results in a BadMatch error.
|
* other drawables results in a BadMatch error.
|
||||||
*/
|
*/
|
||||||
EAPI Ecore_X_GC
|
EAPI Ecore_X_GC
|
||||||
ecore_x_gc_new(Ecore_X_Drawable drawable)
|
ecore_x_gc_new(Ecore_X_Drawable drawable, Ecore_X_GC_Value_Mask value_mask, const unsigned int *value_list)
|
||||||
{
|
{
|
||||||
xcb_gcontext_t gc;
|
xcb_gcontext_t gc;
|
||||||
|
|
||||||
if (!drawable) drawable = ((xcb_screen_t *)_ecore_xcb_screen)->root;
|
if (!drawable) drawable = ((xcb_screen_t *)_ecore_xcb_screen)->root;
|
||||||
|
|
||||||
gc = xcb_generate_id(_ecore_xcb_conn);
|
gc = xcb_generate_id(_ecore_xcb_conn);
|
||||||
xcb_create_gc(_ecore_xcb_conn, gc, drawable, 0, NULL);
|
xcb_create_gc(_ecore_xcb_conn, gc, drawable, value_mask, value_list);
|
||||||
|
|
||||||
return gc;
|
return gc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,15 +15,121 @@
|
||||||
* drawable.
|
* drawable.
|
||||||
* @param draw Drawable to create graphics context with. If @c 0 is
|
* @param draw Drawable to create graphics context with. If @c 0 is
|
||||||
* given instead, the default root window is used.
|
* 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.
|
* @return The new default graphics context.
|
||||||
*/
|
*/
|
||||||
EAPI Ecore_X_GC
|
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);
|
if (!draw) draw = DefaultRootWindow(_ecore_x_disp);
|
||||||
return XCreateGC(_ecore_x_disp, draw, 0, &gcv);
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,5 +139,5 @@ ecore_x_gc_new(Ecore_X_Drawable draw)
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_gc_del(Ecore_X_GC gc)
|
ecore_x_gc_del(Ecore_X_GC gc)
|
||||||
{
|
{
|
||||||
XFreeGC(_ecore_x_disp, gc);
|
XFreeGC(_ecore_x_disp, gc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue