diff options
Diffstat (limited to 'src/ui/widget/spinbutton.cpp')
| -rw-r--r-- | src/ui/widget/spinbutton.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/ui/widget/spinbutton.cpp b/src/ui/widget/spinbutton.cpp index b5769d8e2..130cd6c39 100644 --- a/src/ui/widget/spinbutton.cpp +++ b/src/ui/widget/spinbutton.cpp @@ -9,7 +9,6 @@ */ #include "spinbutton.h" - #include "unit-menu.h" #include "unit-tracker.h" #include "util/expression-evaluator.h" @@ -25,6 +24,8 @@ SpinButton::connect_signals() { signal_input().connect(sigc::mem_fun(*this, &SpinButton::on_input)); signal_focus_in_event().connect(sigc::mem_fun(*this, &SpinButton::on_my_focus_in_event)); signal_key_press_event().connect(sigc::mem_fun(*this, &SpinButton::on_my_key_press_event)); + gtk_widget_add_events(GTK_WIDGET(gobj()), GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK); + signal_scroll_event().connect(sigc::mem_fun(*this, &SpinButton::on_my_scroll_event)); }; int SpinButton::on_input(double* newvalue) @@ -48,7 +49,6 @@ int SpinButton::on_input(double* newvalue) Inkscape::Util::ExpressionEvaluator eval = Inkscape::Util::ExpressionEvaluator(get_text().c_str(), nullptr); result = eval.evaluate(); } - *newvalue = result.value; } catch(Inkscape::Util::EvaluatorException &e) { @@ -66,6 +66,28 @@ bool SpinButton::on_my_focus_in_event(GdkEventFocus* /*event*/) return false; // do not consume the event } +bool SpinButton::on_my_scroll_event(GdkEventScroll* event) +{ + if (!property_has_focus()) { + return true; + } + double step, page; + get_increments(step, page); + double change = 0.0; + if (event->direction == GDK_SCROLL_UP) { + change = step; + } else if (event->direction == GDK_SCROLL_DOWN) { + change = step * -1.0; + } else if (event->direction == GDK_SCROLL_SMOOTH) { + double delta_y_clamped = CLAMP(event->delta_y, step * -1.0, step); // values > 1 result in excessive changes + change = step * -delta_y_clamped; + } else { + return false; + } + set_value(get_value() + change); + return false; +} + bool SpinButton::on_my_key_press_event(GdkEventKey* event) { switch (Inkscape::UI::Tools::get_latin_keyval (event)) { |
