diff options
| author | Eduard Braun <eduard.braun2@gmx.de> | 2018-09-11 19:27:52 +0000 |
|---|---|---|
| committer | Eduard Braun <eduard.braun2@gmx.de> | 2018-09-11 20:00:27 +0000 |
| commit | 414e974ae35c3649db8426147efec31215a5c45a (patch) | |
| tree | afa07279df47d7c81ee3aac9520fab42f8513473 /src | |
| parent | Support smooth scrolling (part 1) (diff) | |
| download | inkscape-414e974ae35c3649db8426147efec31215a5c45a.tar.gz inkscape-414e974ae35c3649db8426147efec31215a5c45a.zip | |
Support smooth scrolling (part 2)
Fix scrolling when smooth scrolling is enabled /
allow to scroll smoothly for:
- canvas palette
- node selection in path tool
- selection cycling in select tool while holding Alt key
- spraying in spray tool with mouse wheel
- adjusting color by scrolling in lower left stroke/fill fields
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/previewholder.cpp | 13 | ||||
| -rw-r--r-- | src/ui/tool/control-point.cpp | 2 | ||||
| -rw-r--r-- | src/ui/tool/node.cpp | 6 | ||||
| -rw-r--r-- | src/ui/tools/select-tool.cpp | 3 | ||||
| -rw-r--r-- | src/ui/tools/spray-tool.cpp | 3 | ||||
| -rw-r--r-- | src/ui/widget/rotateable.cpp | 5 |
6 files changed, 26 insertions, 6 deletions
diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index ae6907cc7..a39eb7ca6 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -76,7 +76,18 @@ bool PreviewHolder::on_scroll_event(GdkEventScroll *event) return FALSE; } - int move = (event->direction == GDK_SCROLL_DOWN) ? adj->get_page_size() : -adj->get_page_size(); + int move; + switch (event->direction) { + case GDK_SCROLL_UP: + move = -adj->get_page_size(); + break; + case GDK_SCROLL_DOWN: + move = adj->get_page_size(); + break; + case GDK_SCROLL_SMOOTH: + move = event->delta_y > 0 ? adj->get_page_size() : -adj->get_page_size(); + break; + } double value = std::min(adj->get_upper() - move, adj->get_value() + move ); diff --git a/src/ui/tool/control-point.cpp b/src/ui/tool/control-point.cpp index 85475d2d5..54fc4718f 100644 --- a/src/ui/tool/control-point.cpp +++ b/src/ui/tool/control-point.cpp @@ -52,7 +52,7 @@ Geom::Point ControlPoint::_drag_origin(Geom::infinity(), Geom::infinity()); int const ControlPoint::_grab_event_mask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_KEY_PRESS_MASK | - GDK_KEY_RELEASE_MASK); + GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK); bool ControlPoint::_drag_initiated = false; bool ControlPoint::_event_grab = false; diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp index 9223b44de..49ee0cb1d 100644 --- a/src/ui/tool/node.cpp +++ b/src/ui/tool/node.cpp @@ -980,7 +980,11 @@ bool Node::_eventHandler(Inkscape::UI::Tools::ToolBase *event_context, GdkEvent dir = 1; } else if (event->scroll.direction == GDK_SCROLL_DOWN) { dir = -1; - } else break; + } else if (event->scroll.direction == GDK_SCROLL_SMOOTH) { + dir = event->scroll.delta_y > 0 ? -1 : 1; + } else { + break; + } if (held_control(event->scroll)) { _linearGrow(dir); } else { diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index 835bb6f94..92ae7558b 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -398,7 +398,8 @@ void SelectTool::sp_select_context_cycle_through_items(Inkscape::Selection *sele std::vector<SPItem *>::iterator next = cycling_items.end(); - if (scroll_event->direction == GDK_SCROLL_UP) { + if ((scroll_event->direction == GDK_SCROLL_UP) || + (scroll_event->direction == GDK_SCROLL_SMOOTH && scroll_event->delta_y < 0)) { if (! cycling_cur_item) { next = cycling_items.begin(); } else { diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index cf677ff0c..c56bceda4 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -1304,7 +1304,8 @@ bool SprayTool::root_handler(GdkEvent* event) { switch (event->scroll.direction) { case GDK_SCROLL_DOWN: - case GDK_SCROLL_UP: { + case GDK_SCROLL_UP: + case GDK_SCROLL_SMOOTH: { if (Inkscape::have_viable_layer(desktop, this->message_context) == false) { return TRUE; } diff --git a/src/ui/widget/rotateable.cpp b/src/ui/widget/rotateable.cpp index 64b37a07f..6c2056da1 100644 --- a/src/ui/widget/rotateable.cpp +++ b/src/ui/widget/rotateable.cpp @@ -34,7 +34,7 @@ Rotateable::Rotateable(): signal_button_press_event().connect(sigc::mem_fun(*this, &Rotateable::on_click)); signal_motion_notify_event().connect(sigc::mem_fun(*this, &Rotateable::on_motion)); signal_button_release_event().connect(sigc::mem_fun(*this, &Rotateable::on_release)); - gtk_widget_add_events(GTK_WIDGET(gobj()), GDK_SCROLL_MASK); + gtk_widget_add_events(GTK_WIDGET(gobj()), GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK); signal_scroll_event().connect(sigc::mem_fun(*this, &Rotateable::on_scroll)); } @@ -139,6 +139,9 @@ bool Rotateable::on_scroll(GdkEventScroll* event) change = 1.0; } else if (event->direction == GDK_SCROLL_DOWN) { change = -1.0; + } else if (event->direction == GDK_SCROLL_SMOOTH) { + double delta_y_clamped = CLAMP(event->delta_y, -1.0, 1.0); // values > 1 result in excessive changes + change = 1.0 * -delta_y_clamped; } else { return FALSE; } |
