From: buliabyak Date: Wed, 5 Jul 2006 20:14:31 +0000 (+0000) Subject: replace single toggle button with less confusing pick-alpha and set-alpha options X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=cb5346ef4a77117f8ba1868d40e0f5222134f4ea;p=inkscape.git replace single toggle button with less confusing pick-alpha and set-alpha options --- diff --git a/share/icons/icons.svg b/share/icons/icons.svg index 20e4026e2..2b7c4ff34 100644 --- a/share/icons/icons.svg +++ b/share/icons/icons.svg @@ -12579,90 +12579,6 @@ http://www.inkscape.org/ width="1250" height="1250" /> - - - - - - - - - - - - - - > 8, - pick == SP_DROPPER_PICK_ACTUAL? SP_COLOR_F_TO_U(dc->alpha) : 255); + (pick == SP_DROPPER_PICK_ACTUAL && setalpha)? SP_COLOR_F_TO_U(dc->alpha) : 255); Glib::ustring text; text += c; @@ -227,6 +229,7 @@ static gint sp_dropper_context_root_handler(SPEventContext *ec, GdkEvent *event) int ret = FALSE; int pick = prefs_get_int_attribute("tools.dropper", "pick", SP_DROPPER_PICK_VISIBLE); + int setalpha = prefs_get_int_attribute("tools.dropper", "setalpha", 1); switch (event->type) { case GDK_BUTTON_PRESS: @@ -344,14 +347,15 @@ static gint sp_dropper_context_root_handler(SPEventContext *ec, GdkEvent *event) dc->alpha = A; // status message - guint32 c32 = SP_RGBA32_F_COMPOSE(R, G, B, A); + double alpha_to_set = setalpha? dc->alpha : 1.0; + guint32 c32 = SP_RGBA32_F_COMPOSE(R, G, B, alpha_to_set); gchar c[64]; sp_svg_write_color(c, 64, c32); // alpha of color under cursor, to show in the statusbar // locale-sensitive printf is OK, since this goes to the UI, not into SVG - gchar *alpha = g_strdup_printf(_(" alpha %.3g"), A); + gchar *alpha = g_strdup_printf(_(" alpha %.3g"), alpha_to_set); // where the color is picked, to show in the statusbar gchar *where = dc->dragging ? g_strdup_printf(_(", averaged with radius %d"), (int) rw) : g_strdup_printf(_(" under cursor")); // message, to show in the statusbar @@ -375,10 +379,12 @@ static gint sp_dropper_context_root_handler(SPEventContext *ec, GdkEvent *event) sp_canvas_item_hide(dc->area); dc->dragging = FALSE; + double alpha_to_set = setalpha? dc->alpha : 1.0; + // do the actual color setting sp_desktop_set_color(ec->desktop, (event->button.state & GDK_MOD1_MASK)? - ColorRGBA(1 - dc->R, 1 - dc->G, 1 - dc->B, dc->alpha) : ColorRGBA(dc->R, dc->G, dc->B, dc->alpha), + ColorRGBA(1 - dc->R, 1 - dc->G, 1 - dc->B, alpha_to_set) : ColorRGBA(dc->R, dc->G, dc->B, alpha_to_set), false, !(event->button.state & GDK_SHIFT_MASK)); // REJON: set aux. toolbar input to hex color! diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h index f8759d8c2..111fc6bf1 100644 --- a/src/preferences-skeleton.h +++ b/src/preferences-skeleton.h @@ -69,7 +69,7 @@ static char const preferences_skeleton[] = " \n" " \n" " \n" -" \n" +" \n" " \n" " \n" " \n" diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 495c620ac..6862794b3 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -2535,10 +2535,22 @@ sp_arc_toolbox_new(SPDesktop *desktop) //## Dropper ## //######################## -static void toggle_dropper_color_pick (GtkWidget *button, gpointer data) { +static void toggle_dropper_pick_alpha (GtkWidget *button, gpointer tbl) { prefs_set_int_attribute ("tools.dropper", "pick", - // 0 and 1 are backwards here because of pref - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 0 : 1); + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))); + GtkWidget *set_checkbox = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "set_checkbox"); + if (set_checkbox) { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) { + gtk_widget_set_sensitive (GTK_WIDGET (set_checkbox), TRUE); + } else { + gtk_widget_set_sensitive (GTK_WIDGET (set_checkbox), FALSE); + } + } +} + +static void toggle_dropper_set_alpha (GtkWidget *button, gpointer data) { + prefs_set_int_attribute ("tools.dropper", "setalpha", + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 1 : 0); } @@ -2721,26 +2733,43 @@ sp_dropper_toolbox_new(SPDesktop *desktop) { GtkWidget *hb = gtk_hbox_new(FALSE, 1); - - GtkWidget *button = - sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION, - SP_BUTTON_TYPE_TOGGLE, - NULL, - "pick_color", - _("When pressed, picks visible color " - "without alpha and when not pressed, " - "picks color including its " - "alpha"), - tt); + GtkWidget *button = gtk_check_button_new_with_label(_("Pick alpha")); + gtk_tooltips_set_tip(tt, button, _("Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"), NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + prefs_get_int_attribute ("tools.dropper", + "pick", 1)); gtk_widget_show(button); gtk_container_add (GTK_CONTAINER (hb), button); + gtk_object_set_data(GTK_OBJECT(tbl), "pick_checkbox", button); + g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (toggle_dropper_pick_alpha), tbl); + gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, + AUX_BETWEEN_BUTTON_GROUPS); + } - g_signal_connect_after (G_OBJECT (button), "clicked", - G_CALLBACK (toggle_dropper_color_pick), NULL); + { + GtkWidget *hb = gtk_hbox_new(FALSE, 1); + + GtkWidget *button = gtk_check_button_new_with_label(_("Set alpha")); + gtk_tooltips_set_tip(tt, button, _("If alpha was picked, assign it to selection as fill or stroke transparency"), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), - !prefs_get_int_attribute ("tools.dropper", - "pick", 0)); + prefs_get_int_attribute ("tools.dropper", + "setalpha", 1)); + gtk_widget_show(button); + gtk_container_add (GTK_CONTAINER (hb), button); + gtk_object_set_data(GTK_OBJECT(tbl), "set_checkbox", button); + g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (toggle_dropper_set_alpha), tbl); + + // make sure it's disabled if we're not picking alpha + GtkWidget *pick_checkbox = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "pick_checkbox"); + if (pick_checkbox) { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pick_checkbox))) { + gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE); + } else { + gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); + } + } + gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); }