summaryrefslogtreecommitdiffstats
path: root/src/widgets/eraser-toolbar.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-05-22 18:44:21 +0000
committerjabiertxof <info@marker.es>2016-05-22 18:44:21 +0000
commitd7887bf24bbb703739e56fa9056e1c67d8483b4c (patch)
treeff5074a2f4c809c7133c29649d6ccb2972a052f9 /src/widgets/eraser-toolbar.cpp
parentSpeed improvements (diff)
downloadinkscape-d7887bf24bbb703739e56fa9056e1c67d8483b4c.tar.gz
inkscape-d7887bf24bbb703739e56fa9056e1c67d8483b4c.zip
Added some widgets from caligraphic tool
(bzr r14865.1.13)
Diffstat (limited to 'src/widgets/eraser-toolbar.cpp')
-rw-r--r--src/widgets/eraser-toolbar.cpp113
1 files changed, 112 insertions, 1 deletions
diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp
index 482075dc6..ddfe31d72 100644
--- a/src/widgets/eraser-toolbar.cpp
+++ b/src/widgets/eraser-toolbar.cpp
@@ -64,6 +64,28 @@ static void sp_erc_mass_value_changed( GtkAdjustment *adj, GObject* tbl )
update_presets_list(tbl);
}
+static void sp_erc_velthin_value_changed( GtkAdjustment *adj, GObject* tbl )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble("/tools/eraser/thinning", gtk_adjustment_get_value(adj) );
+ update_presets_list(tbl);
+}
+
+static void sp_erc_cap_rounding_value_changed( GtkAdjustment *adj, GObject* tbl )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/eraser/cap_rounding", gtk_adjustment_get_value(adj) );
+ update_presets_list(tbl);
+}
+
+static void sp_erc_tremor_value_changed( GtkAdjustment *adj, GObject* tbl )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/eraser/tremor", gtk_adjustment_get_value(adj) );
+ update_presets_list(tbl);
+}
+
+
static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl )
{
SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data( tbl, "desktop" ));
@@ -75,15 +97,27 @@ static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl )
GtkAction *split = GTK_ACTION( g_object_get_data(tbl, "split") );
GtkAction *mass = GTK_ACTION( g_object_get_data(tbl, "mass") );
GtkAction *width = GTK_ACTION( g_object_get_data(tbl, "width") );
- if(eraser_mode != 0){
+ GtkAction *usepressure = GTK_ACTION( g_object_get_data(tbl, "usepressure") );
+ GtkAction *cap_rounding = GTK_ACTION( g_object_get_data(tbl, "cap_rounding") );
+ GtkAction *thinning = GTK_ACTION( g_object_get_data(tbl, "thinning") );
+ GtkAction *tremor = GTK_ACTION( g_object_get_data(tbl, "tremor") );
+ if (eraser_mode != 0) {
if(eraser_mode == 1) {
gtk_action_set_visible( split, TRUE );
} else {
gtk_action_set_visible( split, FALSE );
}
+ gtk_action_set_visible(usepressure, TRUE );
+ gtk_action_set_visible(tremor, TRUE );
+ gtk_action_set_visible(cap_rounding, TRUE );
+ gtk_action_set_visible(thinning, TRUE );
gtk_action_set_visible( mass, TRUE );
gtk_action_set_visible( width, TRUE );
} else {
+ gtk_action_set_visible(usepressure, FALSE );
+ gtk_action_set_visible(tremor, FALSE );
+ gtk_action_set_visible(cap_rounding, FALSE );
+ gtk_action_set_visible(thinning, FALSE );
gtk_action_set_visible( split, FALSE );
gtk_action_set_visible( mass, FALSE );
gtk_action_set_visible( width, FALSE );
@@ -175,6 +209,71 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
g_object_set_data( holder, "width", eact );
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
}
+ /* Use Pressure button */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "EraserPressureAction",
+ _("Eraser Pressure"),
+ _("Use the pressure of the input device to alter the width of the pen"),
+ INKSCAPE_ICON("draw-use-pressure"),
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/eraser/usepressure", update_presets_list, holder);
+ g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher);
+ g_object_set_data( holder, "usepressure", act );
+ }
+ {
+
+ /* Thinning */
+ gchar const* labels[] = {_("(speed blows up stroke)"), 0, 0, _("(slight widening)"), _("(constant width)"), _("(slight thinning, default)"), 0, 0, _("(speed deflates stroke)")};
+ gdouble values[] = {-100, -40, -20, -10, 0, 10, 20, 40, 100};
+ EgeAdjustmentAction* eact = create_adjustment_action( "EraserThinningAction",
+ _("Eraser Stroke Thinning"), _("Thinning:"),
+ _("How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"),
+ "/tools/eraser/thinning", 10,
+ GTK_WIDGET(desktop->canvas), holder, FALSE, NULL,
+ -100, 100, 1, 10.0,
+ labels, values, G_N_ELEMENTS(labels),
+ sp_erc_velthin_value_changed, NULL /*unit tracker*/, 1, 0);
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ g_object_set_data( holder, "thinning", 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
+ EgeAdjustmentAction* eact = create_adjustment_action( "EraserCapRoundingAction",
+ _("Eraser Cap rounding"), _("Caps:"),
+ _("Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"),
+ "/tools/eraser/cap_rounding", 0.0,
+ GTK_WIDGET(desktop->canvas), holder, FALSE, NULL,
+ 0.0, 5.0, 0.01, 0.1,
+ labels, values, G_N_ELEMENTS(labels),
+ sp_erc_cap_rounding_value_changed, NULL /*unit tracker*/, 0.01, 2 );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ g_object_set_data( holder, "cap_rounding", eact );
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
+
+ {
+ /* Tremor */
+ gchar const* labels[] = {_("(smooth line)"), _("(slight tremor)"), _("(noticeable tremor)"), 0, 0, _("(maximum tremor)")};
+ gdouble values[] = {0, 10, 20, 40, 60, 100};
+ EgeAdjustmentAction* eact = create_adjustment_action( "EraserTremorAction",
+ _("EraserStroke Tremor"), _("Tremor:"),
+ _("Increase to make strokes rugged and trembling"),
+ "/tools/eraser/tremor", 0.0,
+ GTK_WIDGET(desktop->canvas), holder, FALSE, NULL,
+ 0.0, 100, 1, 10.0,
+ labels, values, G_N_ELEMENTS(labels),
+ sp_erc_tremor_value_changed, NULL /*unit tracker*/, 1, 0);
+
+ ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
+ g_object_set_data( holder, "tremor", eact );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+ gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
+ }
{
/* Mass */
gchar const* labels[] = {_("(no inertia)"), _("(slight smoothing, default)"), _("(noticeable lagging)"), 0, 0, _("(maximum inertia)")};
@@ -207,15 +306,27 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
GtkAction *split = GTK_ACTION( g_object_get_data(holder, "split") );
GtkAction *mass = GTK_ACTION( g_object_get_data(holder, "mass") );
GtkAction *width = GTK_ACTION( g_object_get_data(holder, "width") );
+ GtkAction *usepressure = GTK_ACTION( g_object_get_data(holder, "usepressure") );
+ GtkAction *cap_rounding = GTK_ACTION( g_object_get_data(holder, "cap_rounding") );
+ GtkAction *thinning = GTK_ACTION( g_object_get_data(holder, "thinning") );
+ GtkAction *tremor = GTK_ACTION( g_object_get_data(holder, "tremor") );
if (eraser_mode != 0) {
if(eraser_mode == 1) {
gtk_action_set_visible( split, TRUE );
} else {
gtk_action_set_visible( split, FALSE );
}
+ gtk_action_set_visible(usepressure, TRUE );
+ gtk_action_set_visible(tremor, TRUE );
+ gtk_action_set_visible(cap_rounding, TRUE );
+ gtk_action_set_visible(thinning, TRUE );
gtk_action_set_visible( mass, TRUE );
gtk_action_set_visible( width, TRUE );
} else {
+ gtk_action_set_visible(usepressure, FALSE );
+ gtk_action_set_visible(tremor, FALSE );
+ gtk_action_set_visible(cap_rounding, FALSE );
+ gtk_action_set_visible(thinning, FALSE );
gtk_action_set_visible( split, FALSE );
gtk_action_set_visible( mass, FALSE );
gtk_action_set_visible( width, FALSE );