Code

Filters. Custom predefined filters update and new ABC filters.
[inkscape.git] / src / libgdl / gdl-dock-master.c
index 8a6aba315081026cbd59f4026be62552c68dc2ae..1c362ed16f2f56986b94eae28f311602d5d4231f 100644 (file)
@@ -33,6 +33,9 @@
 #include "gdl-dock-item.h"
 #include "libgdlmarshal.h"
 #include "libgdltypebuiltins.h"
+#ifdef WIN32
+#include "gdl-win32.h"
+#endif
 
 /* ----- Private prototypes ----- */
 
@@ -79,7 +82,8 @@ enum {
     PROP_0,
     PROP_DEFAULT_TITLE,
     PROP_LOCKED,
-    PROP_SWITCHER_STYLE
+    PROP_SWITCHER_STYLE,
+    PROP_EXPANSION_DIRECTION
 };
 
 enum {
@@ -109,6 +113,8 @@ struct _GdlDockMasterPrivate {
     GHashTable     *unlocked_items;
     
     GdlSwitcherStyle switcher_style;
+
+    GdlDockExpansionDirection expansion_direction;
 };
 
 #define COMPUTE_LOCKED(master)                                          \
@@ -157,6 +163,15 @@ gdl_dock_master_class_init (GdlDockMasterClass *klass)
                            GDL_SWITCHER_STYLE_BOTH,
                            G_PARAM_READWRITE));
 
+    g_object_class_install_property (
+        g_object_class, PROP_EXPANSION_DIRECTION,
+        g_param_spec_enum ("expand-direction", _("Expand direction"),
+                           _("Allow the master's dock items to expand their container "
+                             "dock objects in the given direction"),
+                           GDL_TYPE_EXPANSION_DIRECTION,
+                           GDL_DOCK_EXPANSION_DIRECTION_NONE,
+                           G_PARAM_READWRITE));
+
     master_signals [LAYOUT_CHANGED] = 
         g_signal_new ("layout-changed", 
                       G_TYPE_FROM_CLASS (klass),
@@ -183,6 +198,7 @@ gdl_dock_master_instance_init (GdlDockMaster *master)
     master->_priv = g_new0 (GdlDockMasterPrivate, 1);
     master->_priv->number = 1;
     master->_priv->switcher_style = GDL_SWITCHER_STYLE_BOTH;
+    master->_priv->expansion_direction = GDL_DOCK_EXPANSION_DIRECTION_NONE;
     master->_priv->locked_items = g_hash_table_new (g_direct_hash, g_direct_equal);
     master->_priv->unlocked_items = g_hash_table_new (g_direct_hash, g_direct_equal);
 }
@@ -359,6 +375,9 @@ gdl_dock_master_set_property  (GObject      *object,
         case PROP_SWITCHER_STYLE:
             gdl_dock_master_set_switcher_style (master, g_value_get_enum (value));
             break;
+        case PROP_EXPANSION_DIRECTION:
+            master->_priv->expansion_direction = g_value_get_enum (value);
+            break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -383,6 +402,9 @@ gdl_dock_master_get_property  (GObject      *object,
         case PROP_SWITCHER_STYLE:
             g_value_set_enum (value, master->_priv->switcher_style);
             break;
+        case PROP_EXPANSION_DIRECTION:
+            g_value_set_enum (value, master->_priv->expansion_direction);
+            break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -626,8 +648,20 @@ gdl_dock_master_xor_rect (GdlDockMaster *master)
             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,
-                                GDK_LINE_ON_OFF_DASH,
+                                lineStyle,
                                 GDK_CAP_NOT_LAST,
                                 GDK_JOIN_BEVEL);