static void gdl_dock_master_xor_rect (GdlDockMaster *master) { gint8 dash_list [2]; GdkWindow *window; GdkRectangle *rect; if (!master->_priv || !master->_priv->drag_request) return; master->_priv->rect_drawn = ~master->_priv->rect_drawn; if (master->_priv->rect_owner) { gdl_dock_xor_rect (master->_priv->rect_owner, &master->_priv->drag_request->rect); return; } rect = &master->_priv->drag_request->rect; window = gdk_get_default_root_window (); if (!master->_priv->root_xor_gc) { GdkGCValues values; values.function = GDK_INVERT; values.subwindow_mode = GDK_INCLUDE_INFERIORS; master->_priv->root_xor_gc = gdk_gc_new_with_values ( window, &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); }; gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1, GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL); dash_list[0] = 1; dash_list[1] = 1; gdk_gc_set_dashes (master->_priv->root_xor_gc, 1, dash_list, 2); gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, rect->x, rect->y, rect->width, rect->height); gdk_gc_set_dashes (master->_priv->root_xor_gc, 0, dash_list, 2); gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, rect->x + 1, rect->y + 1, rect->width - 2, rect->height - 2); }
static void gdl_dock_master_xor_rect (GdlDockMaster *master) { gint8 dash_list [2]; GdkWindow *window; GdkRectangle *rect; if (!master->_priv || !master->_priv->drag_request) return; master->_priv->rect_drawn = ~master->_priv->rect_drawn; if (master->_priv->rect_owner) { gdl_dock_xor_rect (master->_priv->rect_owner, &master->_priv->drag_request->rect); return; } rect = &master->_priv->drag_request->rect; window = gdk_get_default_root_window (); if (!master->_priv->root_xor_gc) { GdkGCValues values; values.function = GDK_INVERT; values.subwindow_mode = GDK_INCLUDE_INFERIORS; master->_priv->root_xor_gc = gdk_gc_new_with_values ( window, &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); }; #ifdef WIN32 GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; if (is_os_vista()) { // On Vista the dash-line is increadibly slow to draw, it takes several minutes to draw the tracking lines // With GDK_LINE_SOLID it is parts of a second // No performance issue on WinXP lineStyle = GDK_LINE_SOLID; } #else GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; #endif gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1, lineStyle, GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL); dash_list[0] = 1; dash_list[1] = 1; gdk_gc_set_dashes (master->_priv->root_xor_gc, 1, dash_list, 2); gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, rect->x, rect->y, rect->width, rect->height); gdk_gc_set_dashes (master->_priv->root_xor_gc, 0, dash_list, 2); gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, rect->x + 1, rect->y + 1, rect->width - 2, rect->height - 2); }