7 static const int triangle_size = 5;
10 null_label_callback (char* buf, unsigned int bufsize)
18 PannerBar::PannerBar (Gtk::Adjustment& adj, PBD::Controllable& c)
19 : BarController (adj, c, sigc::ptr_fun (null_label_callback))
21 set_style (BarController::Line);
24 PannerBar::~PannerBar ()
29 PannerBar::expose (GdkEventExpose* ev)
31 Glib::RefPtr<Gdk::Window> win (darea.get_window());
32 Glib::RefPtr<Gdk::GC> gc (get_style()->get_base_gc (get_state()));
34 BarController::expose (ev);
36 /* now draw triangles for left, right and center */
45 points[1].x = triangle_size;
49 points[2].y = triangle_size;
51 gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
55 points[0].x = (darea.get_width()/2 - triangle_size);
58 points[1].x = (darea.get_width()/2 + triangle_size);
61 points[2].x = darea.get_width()/2;
62 points[2].y = triangle_size - 1;
64 gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
68 points[0].x = (darea.get_width() - triangle_size);
71 points[1].x = darea.get_width();
74 points[2].x = darea.get_width();
75 points[2].y = triangle_size;
77 gdk_draw_polygon (win->gobj(), gc->gobj(), true, points, 3);
83 PannerBar::button_press (GdkEventButton* ev)
85 if (ev->button == 1 && ev->type == GDK_BUTTON_PRESS && ev->y < 10) {
86 if (ev->x < triangle_size) {
87 adjustment.set_value (adjustment.get_lower());
88 } else if (ev->x > (darea.get_width() - triangle_size)) {
89 adjustment.set_value (adjustment.get_upper());
90 } else if (ev->x > (darea.get_width()/2 - triangle_size) &&
91 ev->x < (darea.get_width()/2 + triangle_size)) {
92 adjustment.set_value (adjustment.get_lower() + ((adjustment.get_upper() - adjustment.get_lower()) / 2.0));
96 return BarController::button_press (ev);
100 PannerBar::button_release (GdkEventButton* ev)
102 return BarController::button_release (ev);