diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-16 16:18:50 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-16 16:18:50 +0000 |
commit | 64ccab5227c7b477c4191e89c8590f9cfb9c941a (patch) | |
tree | 3e20eddf9042aec5c789d97c1b902fb22d02c3e0 /libs | |
parent | 8e00b86ebb0b6e3fd489b4cac58863d7c16465db (diff) |
lincoln's patch for scroomer pinching, from #3222
git-svn-id: svn://localhost/ardour2/branches/3.0@7786 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/scroomer.h | 1 | ||||
-rw-r--r-- | libs/gtkmm2ext/scroomer.cc | 45 |
2 files changed, 30 insertions, 16 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/scroomer.h b/libs/gtkmm2ext/gtkmm2ext/scroomer.h index d4f2ce6aa3..34d5e309ae 100644 --- a/libs/gtkmm2ext/gtkmm2ext/scroomer.h +++ b/libs/gtkmm2ext/gtkmm2ext/scroomer.h @@ -81,6 +81,7 @@ private: double grab_y; double unzoomed_val; double unzoomed_page; + bool pinch; }; } // namespace diff --git a/libs/gtkmm2ext/scroomer.cc b/libs/gtkmm2ext/scroomer.cc index 07e5b46452..40892301bc 100644 --- a/libs/gtkmm2ext/scroomer.cc +++ b/libs/gtkmm2ext/scroomer.cc @@ -103,17 +103,33 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev) unzoomed_val = max(unzoomed_val, adj.get_lower()); break; case Handle1: + unzoomed_page += scale * fract * range; unzoomed_page = min(unzoomed_page, adj.get_upper() - unzoomed_val); unzoomed_page = max(unzoomed_page, min_page_size); + + if (pinch){ + temp = unzoomed_val + unzoomed_page; + unzoomed_val -= scale * fract * range * 0.5; + unzoomed_val = min(unzoomed_val, temp - min_page_size); + unzoomed_val = max(unzoomed_val, adj.get_lower()); + } + break; case Handle2: temp = unzoomed_val + unzoomed_page; unzoomed_val += scale * fract * range; unzoomed_val = min(unzoomed_val, temp - min_page_size); unzoomed_val = max(unzoomed_val, adj.get_lower()); - + unzoomed_page = temp - unzoomed_val; + + if (pinch){ + + unzoomed_page -= scale * fract * range; + } + + unzoomed_page = min(unzoomed_page, adj.get_upper() - unzoomed_val); unzoomed_page = max(unzoomed_page, min_page_size); break; default: @@ -178,28 +194,18 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev) val = unzoomed_val; page = unzoomed_page; } - + adj.set_page_size(page); + adj.set_value(val); + adj.value_changed(); - if (val == adj.get_value()) { - adj.value_changed(); - } - - if (val < adj.get_lower()) { - adj.value_changed(); - } else if (val > adj.get_upper()) { - adj.value_changed(); - } else { - adj.set_value(val); - } - return true; } bool Scroomer::on_button_press_event (GdkEventButton* ev) { - if (ev->button == 1) { + if (ev->button == 1 || ev->button == 3) { Component comp = point_in(ev->y); if (comp == Total || comp == None) { @@ -212,7 +218,14 @@ Scroomer::on_button_press_event (GdkEventButton* ev) unzoomed_val = adj.get_value(); unzoomed_page = adj.get_page_size(); grab_window = ev->window; + + if (ev->button == 3){ + pinch = true; + } else { + pinch = false; + } } + return false; } @@ -229,7 +242,7 @@ Scroomer::on_button_release_event (GdkEventButton* ev) return true; } - if (ev->button != 1) { + if (ev->button != 1 && ev->button != 3) { return true; } |