Hi AND low pass filter -- fresh from the oven werks.
[ardour.git] / libs / gtkmm2ext / scroomer.cc
index 6e27f5ce0a6d79c1339aea12f310f86a2e9695dd..69944b4bc7ad17f4cfe4bd5ad5a405432afd6400 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2008 Paul Davis 
+    Copyright (C) 2008 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -111,29 +111,29 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev)
                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 = min(unzoomed_page, adj.get_upper() - unzoomed_val);
                unzoomed_page = max(unzoomed_page, min_page_size);
                break;
        default:
@@ -145,10 +145,10 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev)
         * We don't start doing zoom until we are at least one scroomer width outside the scroomer's
         * area.
         */
-       
+
        if (ev->x > (get_width() * 2)) {
                zoom = ev->x - get_width();
-               
+
                double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
                double lower = val_at_pointer - (unzoomed_val + half_min_page);
 
@@ -170,9 +170,9 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev)
                page = min(page, adj.get_upper() - val);
        } else if (ev->x < 0) {
                /* on zoom out increase the page size as well as moving the range towards the mouse pos*/
-               zoom = abs(ev->x);
+               /*zoom = abs(ev->x);
 
-               /*double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
+               double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer;
                double lower = val_at_pointer - (unzoomed_val + half_min_page);
 
                higher *= zoom / 128;
@@ -204,7 +204,7 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev)
        adj.set_page_size (rint (page));
        adj.set_value (rint (val));
        adj.value_changed();
-       
+
        return true;
 }
 
@@ -213,7 +213,7 @@ Scroomer::on_scroll_event (GdkEventScroll* ev)
 {
        switch (ev->direction) {
        case GDK_SCROLL_UP:
-               adj.set_value (adj.get_value() + adj.get_page_size() / 10.0);
+               adj.set_value (min (adj.get_value() + adj.get_page_size() / 10.0, adj.get_upper() - adj.get_page_size()));
                break;
        case GDK_SCROLL_DOWN:
                adj.set_value (adj.get_value() - adj.get_page_size() / 10.0);
@@ -241,7 +241,7 @@ 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 {
@@ -250,12 +250,12 @@ Scroomer::on_button_press_event (GdkEventButton* ev)
 
                DragStarting (); /* EMIT SIGNAL */
        }
-       
+
        if (ev->type == GDK_2BUTTON_PRESS && ev->button == 1) {
                DoubleClicked();
        }
 
-       return false;
+       return true;
 }
 
 bool
@@ -289,7 +289,7 @@ Scroomer::on_button_release_event (GdkEventButton* ev)
        default:
                break;
        }
-       
+
        grab_comp = None;
 
        remove_modal_grab();