Note canvas event handling testing stuff.
[ardour.git] / gtk2_ardour / panner.cc
index acf06c4b07f8d0de235f0bb858b51e58a799108d..2607cdf2b85e3ac3f346acd05aead4f04fd0594e 100644 (file)
@@ -1,10 +1,29 @@
+/*
+    Copyright (C) 2000-2007 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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
 #include <iostream>
 
 #include "panner.h"
 
 using namespace std;
 
-static const int triangle_size = 9;
+static const int triangle_size = 5;
 
 static void
 null_label_callback (char* buf, unsigned int bufsize)
@@ -15,8 +34,8 @@ null_label_callback (char* buf, unsigned int bufsize)
 }
 
 
-PannerBar::PannerBar (Gtk::Adjustment& adj, PBD::Controllable& c)
-       : BarController (adj, c, sigc::ptr_fun (null_label_callback))
+PannerBar::PannerBar (Gtk::Adjustment& adj, boost::shared_ptr<PBD::Controllable> c)
+       : BarController (adj, *c.get(), sigc::ptr_fun (null_label_callback))
 {
        set_style (BarController::Line);
 }
@@ -37,8 +56,8 @@ PannerBar::expose (GdkEventExpose* ev)
 
        GdkPoint points[3];
 
+       // left
        
-
        points[0].x = 0;
        points[0].y = 0;
 
@@ -50,18 +69,22 @@ PannerBar::expose (GdkEventExpose* ev)
 
        gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
 
-       points[0].x = darea.get_width()/2 - (triangle_size - 2);
+       // center
+
+       points[0].x = (darea.get_width()/2 - triangle_size);
        points[0].y = 0;
 
-       points[1].x = darea.get_width()/2 + (triangle_size - 2);
+       points[1].x = (darea.get_width()/2 + triangle_size);
        points[1].y = 0;
        
        points[2].x = darea.get_width()/2;
-       points[2].y = triangle_size - 2;
+       points[2].y = triangle_size - 1;
 
-       gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
+       gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3); 
+
+       // right
 
-       points[0].x = darea.get_width() - triangle_size;
+       points[0].x = (darea.get_width() - triangle_size);
        points[0].y = 0;
 
        points[1].x = darea.get_width();
@@ -80,12 +103,12 @@ PannerBar::button_press (GdkEventButton* ev)
 {
        if (ev->button == 1 && ev->type == GDK_BUTTON_PRESS && ev->y < 10) {
                if (ev->x < triangle_size) {
-                       return true;
+                       adjustment.set_value (adjustment.get_lower());
                } else if (ev->x > (darea.get_width() - triangle_size)) {
-                       return true;
+                       adjustment.set_value (adjustment.get_upper());
                } else if (ev->x > (darea.get_width()/2 - triangle_size) &&
                           ev->x < (darea.get_width()/2 + triangle_size)) {
-                       return true;
+                       adjustment.set_value (adjustment.get_lower() + ((adjustment.get_upper() - adjustment.get_lower()) / 2.0));
                }
        }
 
@@ -95,19 +118,6 @@ PannerBar::button_press (GdkEventButton* ev)
 bool
 PannerBar::button_release (GdkEventButton* ev)
 {
-       if (ev->button == 1 && ev->type == GDK_BUTTON_RELEASE && ev->y < 10) {
-               if (ev->x < triangle_size) {
-                       adjustment.set_value (adjustment.get_lower());
-                       return true;
-               } else if (ev->x > (darea.get_width() - triangle_size)) {
-                       adjustment.set_value (adjustment.get_upper());
-                       return true;
-               } else if (ev->x > (darea.get_width()/2 - triangle_size) &&
-                          ev->x < (darea.get_width()/2 + triangle_size)) {
-                       adjustment.set_value (adjustment.get_lower() + ((adjustment.get_upper() - adjustment.get_lower()) / 2.0));
-                       return true;
-               }
-       }
-
        return BarController::button_release (ev);
 }
+