index 2d77a41507f519b479bb2c7ad75055fa86279b83..87b9595322cf3c3fd1386491668fa185461be2c4 100644 (file)
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
#include "toolbox.h"
+#include "flood-context.h"
+
#include "ink-action.h"
#include "ege-adjustment-action.h"
GtkWidget *dataKludge,
gboolean altx, gchar const *altx_mark,
gdouble lower, gdouble upper, gdouble step, gdouble page,
+ gchar const** descrLabels, gdouble const* descrValues, guint descrCount,
void (*callback)(GtkAdjustment *, GtkWidget *),
gdouble climb = 0.1, guint digits = 3, double factor = 1.0 )
{
EgeAdjustmentAction* act = ege_adjustment_action_new( adj, name, label, tooltip, 0, climb, digits );
+ if ( (descrCount > 0) && descrLabels && descrValues ) {
+ ege_adjustment_action_set_descriptions( act, descrLabels, descrValues, descrCount );
+ }
+
if ( focusTarget ) {
ege_adjustment_action_set_focuswidget( act, focusTarget );
}
//## Star ##
//########################
-static void
-sp_stb_magnitude_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
+static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GtkWidget *dataKludge )
{
- SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(tbl), "desktop");
+ SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(dataKludge), "desktop");
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
// do not remember prefs if this call is initiated by an undo change, because undoing object
}
// quit if run by the attr_changed listener
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
+ if (g_object_get_data(G_OBJECT(dataKludge), "freeze")) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(TRUE));
bool modmade = false;
if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
_("Star: Change number of corners"));
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
-
- spinbutton_defocus(GTK_OBJECT(tbl));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(FALSE));
}
-static void
-sp_stb_proportion_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
+static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GtkWidget *dataKludge )
{
- SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(tbl), "desktop");
+ SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(dataKludge), "desktop");
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
prefs_set_double_attribute("tools.shapes.star", "proportion", adj->value);
}
// quit if run by the attr_changed listener
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
+ if (g_object_get_data(G_OBJECT(dataKludge), "freeze")) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(TRUE));
bool modmade = false;
Inkscape::Selection *selection = sp_desktop_selection(desktop);
if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
_("Star: Change spoke ratio"));
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
-
- spinbutton_defocus(GTK_OBJECT(tbl));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(FALSE));
}
-static void
-sp_stb_sides_flat_state_changed(GtkWidget *widget, GtkObject *tbl)
+static void sp_stb_sides_flat_state_changed( GtkToggleAction *act, GtkObject *dataKludge )
{
- SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(tbl), "desktop");
+ SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(dataKludge), "desktop");
+ bool flat = gtk_toggle_action_get_active(act);
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
- prefs_set_string_attribute("tools.shapes.star", "isflatsided", "true");
- } else {
- prefs_set_string_attribute("tools.shapes.star", "isflatsided", "false");
- }
+ prefs_set_string_attribute( "tools.shapes.star", "isflatsided",
+ flat ? "true" : "false" );
}
// quit if run by the attr_changed listener
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
+ if (g_object_get_data(G_OBJECT(dataKludge), "freeze")) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(TRUE));
Inkscape::Selection *selection = sp_desktop_selection(desktop);
GSList const *items = selection->itemList();
- GtkWidget *prop_widget = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "prop_widget");
+ GtkAction* prop_action = GTK_ACTION( g_object_get_data(G_OBJECT(dataKludge), "prop_action") );
bool modmade = false;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
- gtk_widget_set_sensitive(GTK_WIDGET(prop_widget), FALSE);
- for (; items != NULL; items = items->next) {
- if (SP_IS_STAR((SPItem *) items->data)) {
- Inkscape::XML::Node *repr = SP_OBJECT_REPR((SPItem *) items->data);
- repr->setAttribute("inkscape:flatsided", "true");
- SP_OBJECT((SPItem *) items->data)->updateRepr(repr, SP_OBJECT_WRITE_EXT);
- modmade = true;
- }
- }
- } else {
- gtk_widget_set_sensitive(GTK_WIDGET(prop_widget), TRUE);
- for (; items != NULL; items = items->next) {
- if (SP_IS_STAR((SPItem *) items->data)) {
- Inkscape::XML::Node *repr = SP_OBJECT_REPR((SPItem *) items->data);
- repr->setAttribute("inkscape:flatsided", "false");
- SP_OBJECT(items->data)->updateRepr(repr, SP_OBJECT_WRITE_EXT);
- modmade = true;
- }
+
+ gtk_action_set_sensitive( prop_action, !flat );
+ for (; items != NULL; items = items->next) {
+ if (SP_IS_STAR((SPItem *) items->data)) {
+ Inkscape::XML::Node *repr = SP_OBJECT_REPR((SPItem *) items->data);
+ repr->setAttribute("inkscape:flatsided", flat ? "true" : "false" );
+ SP_OBJECT((SPItem *) items->data)->updateRepr(repr, SP_OBJECT_WRITE_EXT);
+ modmade = true;
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))? _("Make polygon") : _("Make star"));
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
+ if (modmade) {
+ sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ flat ? _("Make polygon") : _("Make star"));
+ }
- spinbutton_defocus(GTK_OBJECT(tbl));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(FALSE));
}
-static void
-sp_stb_rounded_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
+static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GtkWidget *dataKludge )
{
- SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(tbl), "desktop");
+ SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(dataKludge), "desktop");
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
prefs_set_double_attribute("tools.shapes.star", "rounded", (gdouble) adj->value);
}
// quit if run by the attr_changed listener
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
+ if (g_object_get_data(G_OBJECT(dataKludge), "freeze")) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(TRUE));
bool modmade = false;
if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
_("Star: Change rounding"));
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
-
- spinbutton_defocus(GTK_OBJECT(tbl));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(FALSE));
}
-
-static void
-sp_stb_randomized_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
+static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GtkWidget *dataKludge )
{
- SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(tbl), "desktop");
+ SPDesktop *desktop = (SPDesktop *) gtk_object_get_data(GTK_OBJECT(dataKludge), "desktop");
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
prefs_set_double_attribute("tools.shapes.star", "randomized", (gdouble) adj->value);
}
// quit if run by the attr_changed listener
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
+ if (g_object_get_data(G_OBJECT(dataKludge), "freeze")) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(TRUE));
bool modmade = false;
if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
_("Star: Change randomization"));
- g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
-
- spinbutton_defocus(GTK_OBJECT(tbl));
+ g_object_set_data(G_OBJECT(dataKludge), "freeze", GINT_TO_POINTER(FALSE));
}
@@ -1095,24 +1076,24 @@ static void star_tb_event_attr_changed(Inkscape::XML::Node *repr, gchar const *n
// in turn, prevent callbacks from responding
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
- GtkAdjustment *adj;
+ GtkAdjustment *adj = 0;
if (!strcmp(name, "inkscape:randomized")) {
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "randomized");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(tbl), "randomized") );
gtk_adjustment_set_value(adj, sp_repr_get_double_attribute(repr, "inkscape:randomized", 0.0));
} else if (!strcmp(name, "inkscape:rounded")) {
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "rounded");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(tbl), "rounded") );
gtk_adjustment_set_value(adj, sp_repr_get_double_attribute(repr, "inkscape:rounded", 0.0));
} else if (!strcmp(name, "inkscape:flatsided")) {
- GtkWidget *fscb = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "flat_checkbox");
- GtkWidget *prop_widget = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "prop_widget");
+ GtkToggleAction* flat_action = GTK_TOGGLE_ACTION( g_object_get_data( G_OBJECT(tbl), "flat_action" ) );
+ GtkAction* prop_action = GTK_ACTION( g_object_get_data(G_OBJECT(tbl), "prop_action") );
char const *flatsides = repr->attribute("inkscape:flatsided");
if (flatsides && !strcmp(flatsides,"false" )) {
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(fscb), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(prop_widget), TRUE);
+ gtk_toggle_action_set_active( flat_action, FALSE );
+ gtk_action_set_sensitive( prop_action, TRUE );
} else {
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(fscb), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(prop_widget), FALSE);
+ gtk_toggle_action_set_active( flat_action, TRUE );
+ gtk_action_set_sensitive( prop_action, FALSE );
}
} else if (!strcmp(name, "sodipodi:r1") || !strcmp(name, "sodipodi:r2")) {
adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "proportion");
@@ -1162,12 +1143,12 @@ sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GtkObject *tbl
}
}
- GtkWidget *l = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(tbl), "mode_label"));
+ //GtkWidget *l = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(tbl), "mode_label"));
if (n_selected == 0) {
- gtk_label_set_markup(GTK_LABEL(l), _("<b>New:</b>"));
+ //gtk_label_set_markup(GTK_LABEL(l), _("<b>New:</b>"));
} else if (n_selected == 1) {
- gtk_label_set_markup(GTK_LABEL(l), _("<b>Change:</b>"));
+ //gtk_label_set_markup(GTK_LABEL(l), _("<b>Change:</b>"));
oldrepr = (Inkscape::XML::Node *) gtk_object_get_data(GTK_OBJECT(tbl), "repr");
if (oldrepr) { // remove old listener
@@ -1186,18 +1167,17 @@ sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GtkObject *tbl
} else {
// FIXME: implement averaging of all parameters for multiple selected stars
//gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
- gtk_label_set_markup(GTK_LABEL(l), _("<b>Change:</b>"));
+ //gtk_label_set_markup(GTK_LABEL(l), _("<b>Change:</b>"));
}
}
-static void
-sp_stb_defaults(GtkWidget *widget, GtkWidget *tbl)
+static void sp_stb_defaults( GtkWidget *widget, GtkWidget *dataKludge )
{
// FIXME: in this and all other _default functions, set some flag telling the value_changed
// callbacks to lump all the changes for all selected objects in one undo step
- GtkAdjustment *adj;
+ GtkAdjustment *adj = 0;
// fixme: make settable in prefs!
gint mag = 5;
gdouble randomized = 0;
gdouble rounded = 0;
- GtkWidget *fscb = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "flat_checkbox");
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(fscb), flat);
- GtkWidget *sb2 = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "prop_widget");
- gtk_widget_set_sensitive(GTK_WIDGET(sb2), !flat);
+ GtkToggleAction* flat_action = GTK_TOGGLE_ACTION( g_object_get_data( G_OBJECT(dataKludge), "flat_action" ) );
+ gtk_toggle_action_set_active( flat_action, flat );
+
+ GtkAction* sb2 = GTK_ACTION( g_object_get_data(G_OBJECT(dataKludge), "prop_action") );
+ gtk_action_set_sensitive( sb2, !flat );
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "magnitude");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(dataKludge), "magnitude") );
gtk_adjustment_set_value(adj, mag);
gtk_adjustment_value_changed(adj);
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "proportion");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(dataKludge), "proportion") );
gtk_adjustment_set_value(adj, prop);
gtk_adjustment_value_changed(adj);
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "rounded");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(dataKludge), "rounded") );
gtk_adjustment_set_value(adj, rounded);
gtk_adjustment_value_changed(adj);
- adj = (GtkAdjustment*)gtk_object_get_data(GTK_OBJECT(tbl), "randomized");
+ adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(dataKludge), "randomized") );
gtk_adjustment_set_value(adj, randomized);
gtk_adjustment_value_changed(adj);
-
- spinbutton_defocus(GTK_OBJECT(tbl));
}
static GtkWidget *
sp_star_toolbox_new(SPDesktop *desktop)
{
- GtkWidget *tbl = gtk_hbox_new(FALSE, 0);
-
- gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas);
- gtk_object_set_data(GTK_OBJECT(tbl), "desktop", desktop);
-
- GtkTooltips *tt = gtk_tooltips_new();
-
- sp_toolbox_add_label(tbl, _("<b>New:</b>"));
+ GtkWidget *toolBar = 0;
+ GtkWidget* holder = gtk_table_new( 1, 2, FALSE );
- gchar const *flatsidedstr = NULL;
+ gchar const * descr =
+ "<ui>"
+ " <toolbar name='StarToolbar'>"
+ " <separator />"
+ " <toolitem action='FlatAction' />"
+ " <separator />"
+ " <toolitem action='MagnitudeAction' />"
+ " <toolitem action='SpokeAction' />"
+ " <toolitem action='RoundednessAction' />"
+ " <toolitem action='RandomizationAction' />"
+ " <separator />"
+ " <toolitem action='ResetAction' />"
+ " </toolbar>"
+ "</ui>";
+ GtkUIManager* mgr = gtk_ui_manager_new();
+ GError* errVal = 0;
+ GtkActionGroup* mainActions = gtk_action_group_new("main");
+// sp_toolbox_add_label(tbl, _("<b>New:</b>"));
- /* Flatsided checkbox */
{
- GtkWidget *hb = gtk_hbox_new(FALSE, 1);
- GtkWidget *fscb = gtk_check_button_new_with_label(_("Polygon"));
- gtk_widget_set_sensitive(GTK_WIDGET(fscb), TRUE);
- flatsidedstr = prefs_get_string_attribute("tools.shapes.star", "isflatsided");
- if (!flatsidedstr || (flatsidedstr && !strcmp(flatsidedstr, "false")))
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(fscb), FALSE);
- else
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(fscb), TRUE);
- gtk_tooltips_set_tip(tt, fscb, _("Regular polygon (with one handle) instead of a star"), NULL);
- gtk_widget_show(fscb);
- gtk_object_set_data(GTK_OBJECT(tbl), "flat_checkbox", fscb);
- gtk_container_add(GTK_CONTAINER(hb), fscb);
- g_signal_connect(G_OBJECT(fscb), "toggled", GTK_SIGNAL_FUNC(sp_stb_sides_flat_state_changed ), tbl);
- gtk_box_pack_start(GTK_BOX(tbl),hb, FALSE, FALSE, AUX_SPACING);
- }
+ gtk_object_set_data(GTK_OBJECT(holder), "dtw", desktop->canvas);
+ gtk_object_set_data(GTK_OBJECT(holder), "desktop", desktop);
- aux_toolbox_space(tbl, AUX_BETWEEN_BUTTON_GROUPS);
+ //EgeAdjustmentAction* calligraphy_angle = 0;
+ EgeAdjustmentAction* eact = 0;
+ gchar const *flatsidedstr = prefs_get_string_attribute( "tools.shapes.star", "isflatsided" );
- /* Magnitude */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Corners:"), _("Number of corners of a polygon or star"),
+ /* Flatsided checkbox */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "FlatAction",
+ _("Polygon"),
+ _("Regular polygon (with one handle) instead of a star"),
+ NULL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_stb_sides_flat_state_changed), holder);
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.shapes.star", "isflatsided", 1 ) );
+ gtk_object_set_data( GTK_OBJECT(holder), "flat_action", act );
+ }
+
+ /* Magnitude */
+ //gchar const* labels[] = {_("tri (default)"), _("quad"), _("pent")};
+ //gdouble values[] = {3, 4, 5};
+ eact = create_adjustment_action( "MagnitudeAction",
+ _("Corners:"), _("Number of corners of a polygon or star"),
"tools.shapes.star", "magnitude", 3,
- NULL, tbl, TRUE, "altx-star",
- 3, 1024, 1, 1,
- sp_stb_magnitude_value_changed, 1, 0);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
+ GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
+ 3, 1024, 1, 5,
+ 0, 0, 0, // labels, values, G_N_ELEMENTS(labels),
+ sp_stb_magnitude_value_changed,
+ 1.0, 0 );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
- /* Spoke ratio */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Spoke ratio:"),
+ /* Spoke ratio */
+ //gchar const* labels2[] = {_("(left edge up)"), _("(horizontal)"), _("(default)"), _("(right edge up)")};
+ //gdouble values2[] = {-90, 0, 30, 90};
+ eact = create_adjustment_action( "SpokeAction",
+ _("Spoke ratio:"),
// TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
// Base radius is the same for the closest handle.
_("Base radius to tip radius ratio"),
"tools.shapes.star", "proportion", 0.5,
- NULL, tbl, FALSE, NULL,
+ GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.01, 1.0, 0.01, 0.1,
- sp_stb_proportion_value_changed);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- g_object_set_data(G_OBJECT(tbl), "prop_widget", hb);
- if (!flatsidedstr || (flatsidedstr && !strcmp(flatsidedstr, "false")))
- gtk_widget_set_sensitive(GTK_WIDGET(hb), TRUE);
- else
- gtk_widget_set_sensitive(GTK_WIDGET(hb), FALSE);
- }
+ 0, 0, 0, // labels2, values2, G_N_ELEMENTS(labels2),
+ sp_stb_proportion_value_changed );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ g_object_set_data(G_OBJECT(holder), "prop_action", eact);
- /* Roundedness */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Rounded:"), _("How much rounded are the corners (0 for sharp)"),
+ if ( !flatsidedstr || (flatsidedstr && !strcmp(flatsidedstr, "false")) ) {
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ } else {
+ gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
+ }
+
+ /* Roundedness */
+ //gchar const* labels3[] = {_("(left edge up)"), _("(horizontal)"), _("(default)"), _("(right edge up)")};
+ //gdouble values3[] = {-90, 0, 30, 90};
+ eact = create_adjustment_action( "RoundednessAction",
+ _("Rounded:"), _("How much rounded are the corners (0 for sharp)"),
"tools.shapes.star", "rounded", 0.0,
- NULL, tbl, FALSE, NULL,
+ GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-100.0, 100.0, 0.01, 0.1,
- sp_stb_rounded_value_changed);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
+ 0, 0, 0, // labels3, values3, G_N_ELEMENTS(labels3),
+ sp_stb_rounded_value_changed );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
- /* Randomization */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Randomized:"), _("Scatter randomly the corners and angles"),
+ /* Randomization */
+ //gchar const* labels4[] = {_("(left edge up)"), _("(horizontal)"), _("(default)"), _("(right edge up)")};
+ //gdouble values4[] = {-90, 0, 30, 90};
+ eact = create_adjustment_action( "RandomizationAction",
+ _("Randomized:"), _("Scatter randomly the corners and angles"),
"tools.shapes.star", "randomized", 0.0,
- NULL, tbl, FALSE, NULL,
+ GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-10.0, 10.0, 0.001, 0.01,
- sp_stb_randomized_value_changed, 0.1, 3);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
+ 0, 0, 0, // labels4, values4, G_N_ELEMENTS(labels4),
+ sp_stb_randomized_value_changed, 0.1, 3 );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
}
- aux_toolbox_space(tbl, AUX_SPACING);
-
- /* Reset */
{
- GtkWidget *hb = gtk_hbox_new(FALSE, 1);
- GtkWidget *b = gtk_button_new_with_label(_("Defaults"));
- gtk_tooltips_set_tip(tt, b, _("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), NULL);
- gtk_widget_show(b);
- gtk_container_add(GTK_CONTAINER(hb), b);
- gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_stb_defaults), tbl);
- gtk_box_pack_start(GTK_BOX(tbl),hb, FALSE, FALSE, AUX_SPACING);
+ /* Reset */
+ {
+ GtkAction* act = gtk_action_new( "ResetAction",
+ _("Defaults"),
+ _("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"),
+ GTK_STOCK_CLEAR );
+ g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(sp_stb_defaults), holder );
+ gtk_action_group_add_action( mainActions, act );
+ gtk_action_set_sensitive( act, TRUE );
+ }
}
+ gtk_ui_manager_insert_action_group( mgr, mainActions, 0 );
+ gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal );
+
+ toolBar = gtk_ui_manager_get_widget( mgr, "/ui/StarToolbar" );
+ gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS );
+ gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), GTK_ICON_SIZE_SMALL_TOOLBAR );
+
+
+ gtk_table_attach( GTK_TABLE(holder), toolBar, 0, 1, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0 );
+
Inkscape::UI::Widget::StyleSwatch *swatch = new Inkscape::UI::Widget::StyleSwatch(NULL, _("Style of new stars"));
- swatch->setDesktop (desktop);
- swatch->setClickVerb (SP_VERB_CONTEXT_STAR_PREFS);
- swatch->setWatchedTool ("tools.shapes.star", true);
+ swatch->setDesktop( desktop );
+ swatch->setClickVerb( SP_VERB_CONTEXT_STAR_PREFS );
+ swatch->setWatchedTool( "tools.shapes.star", true );
GtkWidget *swatch_ = GTK_WIDGET(swatch->gobj());
- gtk_box_pack_end(GTK_BOX(tbl), swatch_, FALSE, FALSE, 0);
+ gtk_table_attach( GTK_TABLE(holder), swatch_, 1, 2, 0, 1, (GtkAttachOptions)(GTK_SHRINK | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), AUX_BETWEEN_BUTTON_GROUPS, 0 );
- gtk_widget_show_all(tbl);
- sp_set_font_size_smaller (tbl);
+ gtk_widget_show_all(holder);
+ //sp_set_font_size_smaller (tbl);
sigc::connection *connection = new sigc::connection(
- sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_star_toolbox_selection_changed), (GtkObject *)tbl))
+ sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_star_toolbox_selection_changed), (GtkObject *)holder))
);
- g_signal_connect(G_OBJECT(tbl), "destroy", G_CALLBACK(delete_connection), connection);
+ g_signal_connect(G_OBJECT(holder), "destroy", G_CALLBACK(delete_connection), connection);
- return tbl;
+ return holder;
}
//## Calligraphy ##
//########################
-static void sp_ddc_mass_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_mass_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "mass", adj->value );
- //spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_wiggle_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_wiggle_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "wiggle", adj->value );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_angle_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_angle_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "angle", adj->value );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_width_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_width_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "width", adj->value * 0.01 );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_velthin_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_velthin_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute("tools.calligraphic", "thinning", adj->value);
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_flatness_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_flatness_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "flatness", adj->value );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_tremor_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_tremor_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "tremor", adj->value );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_cap_rounding_value_changed2( GtkAdjustment *adj, GtkWidget *tbl )
+static void sp_ddc_cap_rounding_value_changed( GtkAdjustment *adj, GtkWidget *tbl )
{
prefs_set_double_attribute( "tools.calligraphic", "cap_rounding", adj->value );
-// spinbutton_defocus(GTK_OBJECT(tbl));
}
-static void sp_ddc_pressure_state_changed2( GtkToggleAction *act, gpointer data )
+static void sp_ddc_pressure_state_changed( GtkToggleAction *act, gpointer data )
{
prefs_set_int_attribute( "tools.calligraphic", "usepressure", gtk_toggle_action_get_active( act ) ? 1 : 0);
}
-static void sp_ddc_tilt_state_changed2( GtkToggleAction *act, GtkAction *calligraphy_angle )
+static void sp_ddc_tilt_state_changed( GtkToggleAction *act, GtkAction *calligraphy_angle )
{
prefs_set_int_attribute( "tools.calligraphic", "usetilt", gtk_toggle_action_get_active( act ) ? 1 : 0 );
gtk_action_set_sensitive( calligraphy_angle, !gtk_toggle_action_get_active( act ) );
}
-static void sp_ddc_defaults2(GtkWidget *, GtkWidget *dataKludge)
+static void sp_ddc_defaults(GtkWidget *, GtkWidget *dataKludge)
{
// FIXME: make defaults settable via Inkscape Options
struct KeyValue {
gtk_adjustment_set_value(adj, kv.value);
}
}
-
-// spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_mass_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "mass", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_wiggle_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "wiggle", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_angle_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "angle", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_width_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "width", adj->value * 0.01);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_velthin_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "thinning", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_flatness_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "flatness", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_tremor_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "tremor", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_cap_rounding_value_changed(GtkAdjustment *adj, GtkWidget *tbl)
-{
- prefs_set_double_attribute("tools.calligraphic", "cap_rounding", adj->value);
- spinbutton_defocus(GTK_OBJECT(tbl));
-}
-
-static void
-sp_ddc_pressure_state_changed(GtkWidget *button, gpointer data)
-{
- prefs_set_int_attribute ("tools.calligraphic", "usepressure", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 1 : 0);
-}
-
-static void
-sp_ddc_tilt_state_changed(GtkWidget *button, GtkWidget *calligraphy_angle)
-{
- prefs_set_int_attribute ("tools.calligraphic", "usetilt", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 1 : 0);
-
- gtk_widget_set_sensitive(GTK_WIDGET(calligraphy_angle), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
-}
-
-static void sp_ddc_defaults(GtkWidget *, GtkWidget *tbl)
-{
- // FIXME: make defaults settable via Inkscape Options
- struct KeyValue {
- char const *key;
- double value;
- } const key_values[] = {
- {"mass", 0.02},
- {"wiggle", 0.0},
- {"angle", 30.0},
- {"width", 15},
- {"thinning", 0.1},
- {"tremor", 0.0},
- {"flatness", 0.9},
- {"cap_rounding", 0.0}
- };
-
- for (unsigned i = 0; i < G_N_ELEMENTS(key_values); ++i) {
- KeyValue const &kv = key_values[i];
- GtkAdjustment &adj = *static_cast<GtkAdjustment *>(gtk_object_get_data(GTK_OBJECT(tbl), kv.key));
- gtk_adjustment_set_value(&adj, kv.value);
- }
-
- spinbutton_defocus(GTK_OBJECT(tbl));
}
-
-
static GtkWidget *
sp_calligraphy_toolbox_new(SPDesktop *desktop)
{
- if ( prefs_get_int_attribute_limited( "options.stocktoolbars", "value", 1, 0, 1 ) ) {
GtkWidget *toolBar = 0;
GtkWidget* holder = gtk_table_new( 1, 2, FALSE );
{
EgeAdjustmentAction* calligraphy_angle = 0;
- EgeAdjustmentAction* eact = 0;
+ {
/* Width */
- eact = create_adjustment_action( "WidthAction",
+ gchar const* labels[] = {_("(hairline)"), 0, 0, 0, _("(default)"), 0, 0, 0, 0, _("(broad stroke)")};
+ gdouble values[] = {1, 3, 5, 10, 15, 20, 30, 50, 75, 100};
+ EgeAdjustmentAction *eact = create_adjustment_action( "WidthAction",
_("Width:"), _("The width of the calligraphic pen (relative to the visible canvas area)"),
"tools.calligraphic", "width", 15,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-calligraphy",
1, 100, 1.0, 10.0,
- sp_ddc_width_value_changed2, 0.01, 0, 100 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_width_value_changed, 0.01, 0, 100 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Thinning */
- eact = create_adjustment_action( "ThinningAction",
+ gchar const* labels[] = {_("(speed blows up stroke)"), 0, 0, _("(slight widening)"), _("(constant width)"), _("(slight thinning, default)"), 0, 0, _("(speed deflates stroke)")};
+ gdouble values[] = {-1, -0.4, -0.2, -0.1, 0, 0.1, -0.2, 0.4, 1};
+ EgeAdjustmentAction* eact = create_adjustment_action( "ThinningAction",
_("Thinning:"), _("How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"),
"tools.calligraphic", "thinning", 0.1,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-1.0, 1.0, 0.01, 0.1,
- sp_ddc_velthin_value_changed2, 0.01, 2);
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_velthin_value_changed, 0.01, 2);
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Angle */
- eact = create_adjustment_action( "AngleAction",
+ gchar const* labels[] = {_("(left edge up)"), 0, 0, _("(horizontal)"), _("(default)"), 0, _("(right edge up)")};
+ gdouble values[] = {-90, -60, -30, 0, 30, 60, 90};
+ EgeAdjustmentAction* eact = create_adjustment_action( "AngleAction",
_("Angle:"), _("The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"),
"tools.calligraphic", "angle", 30,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "calligraphy-angle",
-90.0, 90.0, 1.0, 10.0,
- sp_ddc_angle_value_changed2, 1, 0 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_angle_value_changed, 1, 0 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
calligraphy_angle = eact;
+ }
+ {
/* Fixation */
- eact = create_adjustment_action( "FixationAction",
+ gchar const* labels[] = {_("(perpendicular to stroke, \"brush\")"), 0, 0, 0, _("(almost fixed, default)"), _("(fixed by Angle, \"pen\")")};
+ gdouble values[] = {0, 0.2, 0.4, 0.6, 0.9, 1.0};
+ EgeAdjustmentAction* eact = create_adjustment_action( "FixationAction",
_("Fixation:"), _("Angle behavior (0 = nib always perpendicular to stroke direction, 1 = fixed angle)"),
"tools.calligraphic", "flatness", 0.9,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 1.0, 0.01, 0.1,
- sp_ddc_flatness_value_changed2, 0.01, 2 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_flatness_value_changed, 0.01, 2 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Cap Rounding */
+ gchar const* labels[] = {_("(blunt caps, default)"), _("(slightly bulging)"), 0, 0, _("(approximately round)"), _("(long protruding caps)")};
+ gdouble values[] = {0, 0.3, 0.5, 1.0, 1.4, 5.0};
// TRANSLATORS: "cap" means "end" (both start and finish) here
- eact = create_adjustment_action( "CapRoundingAction",
+ EgeAdjustmentAction* eact = create_adjustment_action( "CapRoundingAction",
_("Caps:"), _("Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"),
"tools.calligraphic", "cap_rounding", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 5.0, 0.01, 0.1,
- sp_ddc_cap_rounding_value_changed2, 0.01, 2 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_cap_rounding_value_changed, 0.01, 2 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Tremor */
- eact = create_adjustment_action( "TremorAction",
+ gchar const* labels[] = {_("(smooth line)"), _("(slight tremor)"), _("(noticeable tremor)"), 0, 0, _("(maximum tremor)")};
+ gdouble values[] = {0, 0.1, 0.2, 0.4, 0.6, 1.0};
+ EgeAdjustmentAction* eact = create_adjustment_action( "TremorAction",
_("Tremor:"), _("Increase to make strokes rugged and trembling"),
"tools.calligraphic", "tremor", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 1.0, 0.01, 0.1,
- sp_ddc_tremor_value_changed2, 0.01, 2 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_tremor_value_changed, 0.01, 2 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Wiggle */
- eact = create_adjustment_action( "WiggleAction",
+ gchar const* labels[] = {_("(no wiggle)"), _("(slight deviation)"), 0, 0, _("(wild waves and curls)")};
+ gdouble values[] = {0, 0.2, 0.4, 0.6, 1.0};
+ EgeAdjustmentAction* eact = create_adjustment_action( "WiggleAction",
_("Wiggle:"), _("Increase to make the pen waver and wiggle"),
"tools.calligraphic", "wiggle", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 1.0, 0.01, 0.1,
- sp_ddc_wiggle_value_changed2, 0.01, 2 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_wiggle_value_changed, 0.01, 2 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+ {
/* Mass */
- eact = create_adjustment_action( "MassAction",
+ gchar const* labels[] = {_("(no inertia)"), _("(slight smoothing, default)"), _("(noticeable lagging)"), 0, 0, _("(maximum inertia)")};
+ gdouble values[] = {0.0, 0.02, 0.1, 0.2, 0.5, 1.0};
+ EgeAdjustmentAction* eact = create_adjustment_action( "MassAction",
_("Mass:"), _("Increase to make the pen drag behind, as if slowed by inertia"),
"tools.calligraphic", "mass", 0.02,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 1.0, 0.01, 0.1,
- sp_ddc_mass_value_changed2, 0.01, 2 );
+ labels, values, G_N_ELEMENTS(labels),
+ sp_ddc_mass_value_changed, 0.01, 2 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
/* Use Pressure button */
"use_pressure",
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_pressure_state_changed2), NULL);
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_pressure_state_changed), NULL);
gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.calligraphic", "usepressure", 1 ) );
}
"use_tilt",
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_tilt_state_changed2), calligraphy_angle );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_tilt_state_changed), calligraphy_angle );
gtk_action_set_sensitive( GTK_ACTION(calligraphy_angle), !prefs_get_int_attribute( "tools.calligraphic", "usetilt", 1 ) );
gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs_get_int_attribute( "tools.calligraphic", "usetilt", 1 ) );
}
_("Defaults"),
_("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"),
GTK_STOCK_CLEAR );
- g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(sp_ddc_defaults2), holder );
+ g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(sp_ddc_defaults), holder );
gtk_action_group_add_action( mainActions, act );
gtk_action_set_sensitive( act, TRUE );
}
//sp_set_font_size_smaller (tbl);
return holder;
- } else {
- GtkWidget *tbl = gtk_hbox_new(FALSE, 0);
- gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas);
- gtk_object_set_data(GTK_OBJECT(tbl), "desktop", desktop);
-
- GtkTooltips *tt = gtk_tooltips_new();
- GtkWidget *calligraphy_angle;
-
- // interval
- gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
-
- /* Width */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Width:"), _("The width of the calligraphic pen (relative to the visible canvas area)"),
- "tools.calligraphic", "width", 15,
- NULL, tbl, TRUE, "altx-calligraphy",
- 1, 100, 1.0, 10.0,
- sp_ddc_width_value_changed, 0.01, 0, 100);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- /* Thinning */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Thinning:"), _("How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"),
- "tools.calligraphic", "thinning", 0.1,
- NULL, tbl, FALSE, NULL,
- -1.0, 1.0, 0.01, 0.1,
- sp_ddc_velthin_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- // interval
- gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
-
- /* Angle */
- {
- calligraphy_angle = sp_tb_spinbutton(_("Angle:"), _("The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"),
- "tools.calligraphic", "angle", 30,
- NULL, tbl, TRUE, "calligraphy-angle",
- -90.0, 90.0, 1.0, 10.0,
- sp_ddc_angle_value_changed, 1, 0);
- gtk_box_pack_start(GTK_BOX(tbl), calligraphy_angle, FALSE, FALSE, AUX_SPACING);
- }
-
- /* Fixation */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Fixation:"), _("Angle behavior (0 = nib always perpendicular to stroke direction, 1 = fixed angle)"),
- "tools.calligraphic", "flatness", 0.9,
- NULL, tbl, FALSE, NULL,
- 0.0, 1.0, 0.01, 0.1,
- sp_ddc_flatness_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- /* Cap Rounding */
- {
- // TRANSLATORS: "cap" means "end" (both start and finish) here
- GtkWidget *hb = sp_tb_spinbutton(_("Round:"), _("Increase to round the ends of strokes"),
- "tools.calligraphic", "cap_rounding", 0.0,
- NULL, tbl, FALSE, NULL,
- 0.0, 1.0, 0.01, 0.1,
- sp_ddc_cap_rounding_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- // interval
- gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
-
- /* Tremor */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Tremor:"), _("Increase to make strokes rugged and trembling"),
- "tools.calligraphic", "tremor", 0.0,
- NULL, tbl, FALSE, NULL,
- 0.0, 1.0, 0.01, 0.1,
- sp_ddc_tremor_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- /* Wiggle */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Wiggle:"), _("Increase to make the pen waver and wiggle"),
- "tools.calligraphic", "wiggle", 0.0,
- NULL, tbl, FALSE, NULL,
- 0.0, 1.0, 0.01, 0.1,
- sp_ddc_wiggle_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
-
- /* Mass */
- {
- GtkWidget *hb = sp_tb_spinbutton(_("Mass:"), _("Increase to make the pen drag behind, as if slowed by inertia"),
- "tools.calligraphic", "mass", 0.02,
- NULL, tbl, FALSE, NULL,
- 0.0, 1.0, 0.01, 0.1,
- sp_ddc_mass_value_changed, 0.01, 2);
- gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_SPACING);
- }
-
- // interval
- gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
-
- GtkWidget *cvbox = gtk_vbox_new (FALSE, 0);
- GtkWidget *cbox = gtk_hbox_new (FALSE, 0);
-
- /* Use Pressure button */
- {
- GtkWidget *button = sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION,
- SP_BUTTON_TYPE_TOGGLE,
- NULL,
- "use_pressure",
- _("Use the pressure of the input device to alter the width of the pen"),
- tt);
- g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (sp_ddc_pressure_state_changed), NULL);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.calligraphic", "usepressure", 1));
- gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0);
- }
-
- /* Use Tilt button */
- {
- GtkWidget *button = sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION,
- SP_BUTTON_TYPE_TOGGLE,
- NULL,
- "use_tilt",
- _("Use the tilt of the input device to alter the angle of the pen's nib"),
- tt);
- g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (sp_ddc_tilt_state_changed), calligraphy_angle);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), prefs_get_int_attribute ("tools.calligraphic", "usetilt", 1));
- gtk_widget_set_sensitive(GTK_WIDGET(calligraphy_angle), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
- gtk_box_pack_start(GTK_BOX(cbox), button, FALSE, FALSE, 0);
- }
-
- gtk_box_pack_start(GTK_BOX(cvbox), cbox, TRUE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(tbl), cvbox, FALSE, FALSE, 0);
-
- /* Reset */
- {
- GtkWidget *hb = gtk_hbox_new(FALSE, 1);
- GtkWidget *b = gtk_button_new_with_label(_("Defaults"));
- gtk_tooltips_set_tip(tt, b, _("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), NULL);
- gtk_widget_show(b);
- gtk_container_add(GTK_CONTAINER(hb), b);
- gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_ddc_defaults), tbl);
- gtk_box_pack_start(GTK_BOX(tbl),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
- }
-
-
- Inkscape::UI::Widget::StyleSwatch *swatch = new Inkscape::UI::Widget::StyleSwatch(NULL, _("Style of new calligraphic strokes"));
- swatch->setDesktop (desktop);
- swatch->setClickVerb (SP_VERB_CONTEXT_CALLIGRAPHIC_PREFS);
- swatch->setWatchedTool ("tools.calligraphic", true);
- GtkWidget *swatch_ = GTK_WIDGET(swatch->gobj());
- gtk_box_pack_end(GTK_BOX(tbl), swatch_, FALSE, FALSE, 0);
-
- gtk_widget_show_all(tbl);
- sp_set_font_size_smaller (tbl);
-
- return tbl;
- }
}
} // end of sp_connector_toolbox_new()
-static void paintbucket_tolerance_changed(GtkAdjustment *adj, GtkWidget *tbl)
+static void paintbucket_threshold_changed(GtkAdjustment *adj, GtkWidget *tbl)
{
- prefs_set_int_attribute("tools.paintbucket", "tolerance", (gint)adj->value);
+ prefs_set_int_attribute("tools.paintbucket", "threshold", (gint)adj->value);
spinbutton_defocus(GTK_OBJECT(tbl));
}
static void paintbucket_offset_changed(GtkAdjustment *adj, GtkWidget *tbl)
{
- prefs_set_double_attribute("tools.paintbucket", "offset", (gint)adj->value);
+ GtkWidget *us = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tbl), "units");
+ SPUnit const *unit = sp_unit_selector_get_unit(SP_UNIT_SELECTOR(us));
+
+ prefs_set_double_attribute("tools.paintbucket", "offset", (gdouble)sp_units_get_pixels(adj->value, *unit));
spinbutton_defocus(GTK_OBJECT(tbl));
}
sp_paintbucket_toolbox_new(SPDesktop *desktop)
{
GtkWidget *tbl = gtk_hbox_new(FALSE, 0);
+
+ // interval
+ gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
+
+ {
+ sp_toolbox_add_label(tbl, _("Fill by:"), false);
+
+ GtkWidget *channels = gtk_combo_box_new_text();
+
+ GList *items = flood_channels_dropdown_items_list();
+
+ for ( ; items ; items = items->next )
+ {
+ gtk_combo_box_append_text(GTK_COMBO_BOX(channels), (char*)items->data);
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX(channels), prefs_get_int_attribute("tools.paintbucket", "channels", 0));
+ gtk_box_pack_start (GTK_BOX (tbl), channels, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (channels), "changed", G_CALLBACK (flood_channels_changed), tbl);
+ }
+
+ // interval
+ gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
// Spacing spinbox
{
- GtkWidget *tolerance = sp_tb_spinbutton(_("Tolerance:"),
+ GtkWidget *threshold = sp_tb_spinbutton(_("Threshold:"),
_("The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"),
- "tools.paintbucket", "tolerance", 5, NULL, tbl, TRUE,
- "inkscape:paintbucket-tolerance", 0, 100, 1.0, 10.0,
- paintbucket_tolerance_changed, 1, 0);
+ "tools.paintbucket", "threshold", 5, NULL, tbl, TRUE,
+ "inkscape:paintbucket-threshold", 0, 100, 1.0, 10.0,
+ paintbucket_threshold_changed, 1, 0);
- gtk_box_pack_start(GTK_BOX(tbl), tolerance, FALSE, FALSE,
+ gtk_box_pack_start(GTK_BOX(tbl), threshold, FALSE, FALSE,
AUX_SPACING);
}
// interval
gtk_box_pack_start(GTK_BOX(tbl), gtk_hbox_new(FALSE, 0), FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
+ // Create the units menu.
+ GtkWidget *us = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
+ sp_unit_selector_setsize(us, AUX_OPTION_MENU_WIDTH, AUX_OPTION_MENU_HEIGHT);
+ sp_unit_selector_set_unit (SP_UNIT_SELECTOR(us), sp_desktop_namedview(desktop)->doc_units);
+
// Offset spinbox
{
- GtkWidget *offset = sp_tb_spinbutton(_("Offset:"),
- _("The amount to grow the path after it has been traced"),
- "tools.paintbucket", "offset", 5, NULL, tbl, TRUE,
- "inkscape:paintbucket-offset", 0.0, 2.0, 0.1, 0.5,
+ GtkWidget *offset = sp_tb_spinbutton(_("Grow/shrink by:"),
+ _("The amount to grow (positive) or shrink (negative) the created fill path"),
+ "tools.paintbucket", "offset", 0, us, tbl, TRUE,
+ "inkscape:paintbucket-offset", -1e6, 1e6, 0.1, 0.5,
paintbucket_offset_changed, 1, 2);
gtk_box_pack_start(GTK_BOX(tbl), offset, FALSE, FALSE,
AUX_SPACING);
+
+ gtk_box_pack_start(GTK_BOX(tbl), us, FALSE, FALSE, AUX_SPACING);
+ gtk_object_set_data(GTK_OBJECT(tbl), "units", us);
}
Inkscape::UI::Widget::StyleSwatch *swatch = new Inkscape::UI::Widget::StyleSwatch(NULL, _("Style of Paint Bucket fill objects"));