summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-09-16 16:18:50 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-09-16 16:18:50 +0000
commit64ccab5227c7b477c4191e89c8590f9cfb9c941a (patch)
tree3e20eddf9042aec5c789d97c1b902fb22d02c3e0 /libs
parent8e00b86ebb0b6e3fd489b4cac58863d7c16465db (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.h1
-rw-r--r--libs/gtkmm2ext/scroomer.cc45
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;
}