X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fege-adjustment-action.cpp;h=94232810054a6545620527584e9a02be661d4525;hb=7b51296159813ffbc382e4decef735f222ee23f8;hp=2380e2e6bf669fbf15bdcc48444d995bba1bd51c;hpb=46900d499528e68af1484f2b873df720da349aa5;p=inkscape.git diff --git a/src/ege-adjustment-action.cpp b/src/ege-adjustment-action.cpp index 2380e2e6b..942328100 100644 --- a/src/ege-adjustment-action.cpp +++ b/src/ege-adjustment-action.cpp @@ -41,12 +41,18 @@ /* Note: this file should be kept compilable as both .cpp and .c */ +#include #include #include +#include #include #include #include +#if GTK_CHECK_VERSION(2,12,0) +#include +#include +#endif /* GTK_CHECK_VERSION(2,12,0) */ #include #include #include @@ -89,6 +95,17 @@ enum { APPEARANCE_MINIMAL, // no label, just choices in a drop-down menu }; +#if GTK_CHECK_VERSION(2,12,0) +/* TODO need to have appropriate icons setup for these: */ +static const gchar *floogles[] = { + GTK_STOCK_REMOVE, + GTK_STOCK_ADD, + GTK_STOCK_GO_DOWN, + GTK_STOCK_ABOUT, + GTK_STOCK_GO_UP, + 0}; +#endif /* GTK_CHECK_VERSION(2,12,0) */ + typedef struct _EgeAdjustmentDescr EgeAdjustmentDescr; struct _EgeAdjustmentDescr @@ -751,6 +768,13 @@ static gboolean event_cb( EgeAdjustmentAction* act, GdkEvent* evt ) return handled; } +static gchar* +slider_format_falue (GtkScale* scale, gdouble value, gchar *label) +{ + (void)scale; + return g_strdup_printf("%s %d", label, (int) round(value)); +} + static GtkWidget* create_tool_item( GtkAction* action ) { GtkWidget* item = 0; @@ -759,25 +783,31 @@ static GtkWidget* create_tool_item( GtkAction* action ) EgeAdjustmentAction* act = EGE_ADJUSTMENT_ACTION( action ); GtkWidget* spinbutton = 0; GtkWidget* hb = gtk_hbox_new( FALSE, 5 ); + GValue value; + memset( &value, 0, sizeof(value) ); + g_value_init( &value, G_TYPE_STRING ); + g_object_get_property( G_OBJECT(action), "short_label", &value ); + const gchar* sss = g_value_get_string( &value ); if ( act->private_data->appearanceMode == APPEARANCE_FULL ) { spinbutton = gtk_hscale_new( act->private_data->adj); gtk_widget_set_size_request(spinbutton, 100, -1); + gtk_scale_set_digits (GTK_SCALE(spinbutton), 0); + gtk_signal_connect(GTK_OBJECT(spinbutton), "format-value", GTK_SIGNAL_FUNC(slider_format_falue), (void *) sss); + +#if GTK_CHECK_VERSION(2,12,0) + } else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) { + spinbutton = gtk_scale_button_new( GTK_ICON_SIZE_MENU, 0, 100, 2, 0 ); + gtk_scale_button_set_adjustment( GTK_SCALE_BUTTON(spinbutton), act->private_data->adj ); + gtk_scale_button_set_icons( GTK_SCALE_BUTTON(spinbutton), floogles ); +#endif /* GTK_CHECK_VERSION(2,12,0) */ } else { spinbutton = gtk_spin_button_new( act->private_data->adj, act->private_data->climbRate, act->private_data->digits ); } item = GTK_WIDGET( gtk_tool_item_new() ); - memset( &value, 0, sizeof(value) ); - g_value_init( &value, G_TYPE_STRING ); - g_object_get_property( G_OBJECT(action), "short_label", &value ); - const gchar* sss = g_value_get_string( &value ); - - GtkWidget* lbl = gtk_label_new( sss ? sss : "wwww" ); - GtkWidget* filler1 = gtk_label_new(" "); - { GValue tooltip; memset( &tooltip, 0, sizeof(tooltip) ); @@ -792,10 +822,14 @@ static GtkWidget* create_tool_item( GtkAction* action ) } } - gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 ); + if ( act->private_data->appearanceMode != APPEARANCE_FULL ) { + GtkWidget* lbl = gtk_label_new( sss ? sss : "wwww" ); + GtkWidget* filler1 = gtk_label_new(" "); + gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 ); + gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 ); + gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 ); + } - gtk_box_pack_start( GTK_BOX(hb), filler1, FALSE, FALSE, 0 ); - gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 ); if ( act->private_data->appearanceMode == APPEARANCE_FULL ) { gtk_box_pack_start( GTK_BOX(hb), spinbutton, TRUE, TRUE, 0 ); } else { @@ -817,6 +851,10 @@ static GtkWidget* create_tool_item( GtkAction* action ) g_signal_connect_swapped( G_OBJECT(spinbutton), "event", G_CALLBACK(event_cb), action ); if ( act->private_data->appearanceMode == APPEARANCE_FULL ) { /* */ +#if GTK_CHECK_VERSION(2,12,0) + } else if ( act->private_data->appearanceMode == APPEARANCE_MINIMAL ) { + /* */ +#endif /* GTK_CHECK_VERSION(2,12,0) */ } else { gtk_entry_set_width_chars( GTK_ENTRY(spinbutton), act->private_data->digits + 3 ); } @@ -860,6 +898,10 @@ gboolean focus_in_cb( GtkWidget *widget, GdkEventKey *event, gpointer data ) EgeAdjustmentAction* action = EGE_ADJUSTMENT_ACTION( data ); if ( GTK_IS_SPIN_BUTTON(widget) ) { action->private_data->lastVal = gtk_spin_button_get_value( GTK_SPIN_BUTTON(widget) ); +#if GTK_CHECK_VERSION(2,12,0) + } else if ( GTK_IS_SCALE_BUTTON(widget) ) { + action->private_data->lastVal = gtk_scale_button_get_value( GTK_SCALE_BUTTON(widget) ); +#endif /* GTK_CHECK_VERSION(2,12,0) */ } else if (GTK_IS_RANGE(widget) ) { action->private_data->lastVal = gtk_range_get_value( GTK_RANGE(widget) ); }