summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c559a44)
raw | patch | inline | side by side (parent: c559a44)
author | Jon A. Cruz <jon@joncruz.org> | |
Tue, 7 Dec 2010 03:48:01 +0000 (19:48 -0800) | ||
committer | Jon A. Cruz <jon@joncruz.org> | |
Tue, 7 Dec 2010 03:48:01 +0000 (19:48 -0800) |
src/widgets/sp-color-wheel-selector.cpp | patch | blob | history |
index d548b732532f96d4936fd62aedf1096cd41c1436..784dd23ad4241a1917fcc6e023b051ecf21abdfa 100644 (file)
}
}
+static void resizeHSVWheel( GtkHSV *hsv, GtkAllocation *allocation )
+{
+ gint diam = std::min(allocation->width, allocation->height);
+
+ // drop a little for resizing
+ diam -= 4;
+
+ GtkStyle *style = gtk_widget_get_style( GTK_WIDGET(hsv) );
+ if ( style ) {
+ gint thick = std::max(style->xthickness, style->ythickness);
+ if (thick > 0) {
+ diam -= thick * 2;
+ }
+ }
+ gint padding = -1;
+ gtk_widget_style_get( GTK_WIDGET(hsv),
+ "focus-padding", &padding,
+ NULL );
+ if (padding > 0) {
+ diam -= padding * 2;
+ }
+
+ diam = std::max(20, diam);
+ gint ring = static_cast<gint>( static_cast<gdouble>(diam) / (4.0 * 1.618) );
+ gtk_hsv_set_metrics( hsv, diam, ring );
+}
+
+static void handleWheelStyleSet(GtkHSV *hsv, GtkStyle* /*previous*/, gpointer /*userData*/)
+{
+ GtkAllocation allocation = {0, 0, 0, 0};
+ gtk_widget_get_allocation( GTK_WIDGET(hsv), &allocation );
+ resizeHSVWheel( hsv, &allocation );
+}
+
+static void handleWheelAllocation(GtkHSV *hsv, GtkAllocation *allocation, gpointer /*userData*/)
+{
+ resizeHSVWheel( hsv, allocation );
+}
+
void ColorWheelSelector::init()
{
GtkWidget *t;
row = 0;
_wheel = gtk_hsv_new();
+ gtk_hsv_set_metrics( GTK_HSV(_wheel), 48, 8 );
gtk_widget_show( _wheel );
gtk_table_attach( GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), XPAD, YPAD);
gtk_signal_connect( GTK_OBJECT(_wheel), "changed",
GTK_SIGNAL_FUNC(_wheelChanged), _csel );
+
+
+ // GTK does not automatically scale the color wheel, so we have to add that in:
+ gtk_signal_connect( GTK_OBJECT(_wheel), "size-allocate",
+ GTK_SIGNAL_FUNC(handleWheelAllocation), _csel );
+ gtk_signal_connect( GTK_OBJECT(_wheel), "style-set",
+ GTK_SIGNAL_FUNC(handleWheelStyleSet), _csel );
}
static void