summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2018-09-11 19:27:52 +0000
committerEduard Braun <eduard.braun2@gmx.de>2018-09-11 20:00:27 +0000
commit414e974ae35c3649db8426147efec31215a5c45a (patch)
treeafa07279df47d7c81ee3aac9520fab42f8513473 /src
parentSupport smooth scrolling (part 1) (diff)
downloadinkscape-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.cpp13
-rw-r--r--src/ui/tool/control-point.cpp2
-rw-r--r--src/ui/tool/node.cpp6
-rw-r--r--src/ui/tools/select-tool.cpp3
-rw-r--r--src/ui/tools/spray-tool.cpp3
-rw-r--r--src/ui/widget/rotateable.cpp5
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;
}