implement scroll wheel support for ardour-dropdown
[ardour.git] / gtk2_ardour / ardour_button.cc
index 1c2862926fde5d40e0dd1960277d9ca9039ccc08..89f19b001eb70609ff65757ff6d88dcab55405a2 100644 (file)
@@ -199,8 +199,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
        uint32_t text_color;
        uint32_t led_color;
 
-       const double dpiscale = ARDOUR_UI::config()->get_font_scale () / 102400.;
-       const double corner_radius = std::max(2.0, _corner_radius * dpiscale);
+       const float corner_radius = std::max(2.f, _corner_radius * ARDOUR_UI::ui_scale);
 
        if (_update_colors) {
                set_colors ();
@@ -450,7 +449,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
                const double r = std::min(x, y) * .75;
                ArdourCanvas::set_source_rgba (cr, text_color);
                cairo_set_line_width(cr, 1);
-               cairo_arc (cr, x, y, r, 0, 2 * M_PI);
+               cairo_arc (cr, x, y, r, .57 * M_PI, 2.43 * M_PI);
                cairo_stroke(cr);
 
                // pins equally spaced 45deg
@@ -467,7 +466,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
                cairo_fill(cr);
 
                // bottom notch
-               cairo_arc (cr, x, y+r, r * .28, 1.05 * M_PI, 1.95 * M_PI);
+               cairo_arc (cr, x, y+r, r * .26, 1.05 * M_PI, 1.95 * M_PI);
                cairo_stroke(cr);
        }
        else if ((_elements & VectorIcon) && _icon == TransportStop) {
@@ -498,8 +497,8 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
                const double xc = get_width() * .5;
                const double yh = get_height();
                cairo_rectangle (cr,
-                               xc - wh, yh *.2,
-                               wh * 2,  yh *.4);
+                               xc - wh, yh *.19,
+                               wh * 2,  yh *.41);
                VECTORICONSTROKEFILL(0.8);
 
                cairo_arc (cr, xc, yh *.75, wh, 0, 2 * M_PI);
@@ -549,18 +548,18 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
                const double y = get_height() * .5;
                const double r = std::min(x, y);
 
-               cairo_arc (cr, x, y, r * .6, 0, 2 * M_PI);
-               cairo_arc_negative (cr, x, y, r * .3, 2 * M_PI, 0);
+               cairo_arc          (cr, x, y, r * .62, 0, 2 * M_PI);
+               cairo_arc_negative (cr, x, y, r * .35, 2 * M_PI, 0);
 
                VECTORICONSTROKEFILL(1.0);
 #define ARCARROW(rad, ang) \
                x + (rad) * sin((ang) * 2.0 * M_PI), y + (rad) * cos((ang) * 2.0 * M_PI)
 
-               cairo_move_to (cr, ARCARROW(r * .30, .72));
-               cairo_line_to (cr, ARCARROW(r * .08, .72));
-               cairo_line_to (cr, ARCARROW(r * .54, .60));
-               cairo_line_to (cr, ARCARROW(r * .73, .72));
-               cairo_line_to (cr, ARCARROW(r * .60, .72));
+               cairo_move_to (cr, ARCARROW(r * .35, .72));
+               cairo_line_to (cr, ARCARROW(r * .15, .72));
+               cairo_line_to (cr, ARCARROW(r * .56, .60));
+               cairo_line_to (cr, ARCARROW(r * .75, .72));
+               cairo_line_to (cr, ARCARROW(r * .62, .72));
 
                cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
                cairo_stroke_preserve(cr);
@@ -573,9 +572,9 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
                const double x  = get_width() * .5;
                const double y  = get_height() * .5;
                const double wh = std::min(x, y);
-               const double h  = wh * .8;
-               const double w  = wh * .5;
-               const double lw = w * .25;
+               const double h  = wh * .85;
+               const double w  = wh * .55;
+               const double lw = w  * .34;
 
                cairo_rectangle (cr,
                                 x - w * .7, y + h * .25,
@@ -740,12 +739,12 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
 
                //black ring
                cairo_set_source_rgb (cr, 0, 0, 0);
-               cairo_arc (cr, 0, 0, _diameter * .5 - 1 * dpiscale, 0, 2 * M_PI);
+               cairo_arc (cr, 0, 0, _diameter * .5 - 1 * ARDOUR_UI::ui_scale, 0, 2 * M_PI);
                cairo_fill(cr);
 
                //led color
                ArdourCanvas::set_source_rgba (cr, led_color);
-               cairo_arc (cr, 0, 0, _diameter * .5 - 3 * dpiscale, 0, 2 * M_PI);
+               cairo_arc (cr, 0, 0, _diameter * .5 - 3 * ARDOUR_UI::ui_scale, 0, 2 * M_PI);
                cairo_fill(cr);
 
                cairo_restore (cr);
@@ -827,7 +826,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
        CairoWidget::on_size_request (req);
 
        if (_diameter == 0) {
-               const float newdia = rint (11. * ARDOUR_UI::config()->get_font_scale () / 102400.);
+               const float newdia = rintf (11.f * ARDOUR_UI::ui_scale);
                if (_diameter != newdia) {
                        _pattern_height = 0;
                        _diameter = newdia;