Revert "Revert new meter types (postponed until after 3.3 release)"
[ardour.git] / gtk2_ardour / meter_patterns.cc
index cb5209d8ea35964d478ec49d3d0a1f2c776939db..d658a0b3ef8c6e248cafc43c81ecc9e6d6bc8c26 100644 (file)
@@ -54,6 +54,30 @@ namespace ArdourMeter {
 static ArdourMeter::TickPatterns ticks_patterns;
 static ArdourMeter::MetricPatterns metric_patterns;
 
+const std::string
+ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
+{
+       switch (mt) {
+               case MeterPeak:
+                       return _("Peak");
+                       break;
+               case MeterKrms:
+                       return _("RMS + Peak");
+                       break;
+               case MeterIEC1:
+                       return _("DIN");
+                       break;
+               case MeterIEC2:
+                       return _("EBU/BBC");
+                       break;
+               case MeterVU:
+                       return _("VU");
+                       break;
+               default:
+                       return _("???");
+                       break;
+       }
+}
 
 static cairo_pattern_t*
 meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
@@ -209,13 +233,18 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
 {
        Glib::RefPtr<Gdk::Window> win (w.get_window());
 
-       bool tickleft;
+       bool tickleft, tickright;
        bool background;
        gint width, height;
        win->get_size (width, height);
 
        tickleft = w.get_name().substr(w.get_name().length() - 4) == "Left";
-       background = types.size() == 0 || tickleft || w.get_name().substr(w.get_name().length() - 5) == "Right";
+       tickright = w.get_name().substr(w.get_name().length() - 5) == "Right";
+       background = types.size() == 0 || tickleft || tickright;
+
+       if (!tickleft && !tickright) {
+               tickright = true;
+       }
 
        cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
        cairo_t* cr = cairo_create (surface);
@@ -228,24 +257,23 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
        Pango::AttrFontDesc* font_attr;
        Pango::FontDescription font;
 
-       font = Pango::FontDescription (""); // use defaults
-       //font = get_font_for_style("gain-fader");
-       //font = w.get_style()->get_font();
+       font = Pango::FontDescription ("ArdourMono");
+       double fixfontsize = 81920.0 / (double) ARDOUR::Config->get_font_scale();
 
        font.set_weight (Pango::WEIGHT_NORMAL);
-       font.set_size (9.0 * PANGO_SCALE);
+       font.set_size (9.0 * PANGO_SCALE * fixfontsize);
        font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
        audio_font_attributes.change (*font_attr);
        delete font_attr;
 
        font.set_weight (Pango::WEIGHT_ULTRALIGHT);
        font.set_stretch (Pango::STRETCH_ULTRA_CONDENSED);
-       font.set_size (7.5 * PANGO_SCALE);
+       font.set_size (8.0 * PANGO_SCALE * fixfontsize);
        font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
        midi_font_attributes.change (*font_attr);
        delete font_attr;
 
-       font.set_size (7.0 * PANGO_SCALE);
+       font.set_size (6.0 * PANGO_SCALE * fixfontsize);
        font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
        unit_font_attributes.change (*font_attr);
        delete font_attr;
@@ -349,13 +377,14 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
                                snprintf (buf, sizeof (buf), "%+2d", j->first);
                                pos = height - (gint) floor (height * fraction);
                                if (tickleft) {
-                                       cairo_move_to(cr, width-2.5, pos + .5);
+                                       cairo_move_to(cr, width-1.5, pos + .5);
                                        cairo_line_to(cr, width, pos + .5);
-                               } else {
+                                       cairo_stroke (cr);
+                               } else if (tickright) {
                                        cairo_move_to(cr, 0, pos + .5);
-                                       cairo_line_to(cr, 2.5, pos + .5);
+                                       cairo_line_to(cr, 1.5, pos + .5);
+                                       cairo_stroke (cr);
                                }
-                               cairo_stroke (cr);
                                break;
                        case DataType::MIDI:
                                cairo_set_line_width (cr, 1.0);
@@ -365,10 +394,11 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
                                pos = min (pos, height);
                                if (tickleft) {
                                        cairo_arc(cr, width - 2.0, pos + .5, 1.0, 0, 2 * M_PI);
-                               } else {
+                                       cairo_fill(cr);
+                               } else if (tickright) {
                                        cairo_arc(cr, 3, pos + .5, 1.0, 0, 2 * M_PI);
+                                       cairo_fill(cr);
                                }
-                               cairo_fill(cr);
                                break;
                        }
 
@@ -379,11 +409,11 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
                        int tw, th;
                        layout->get_pixel_size(tw, th);
 
-                       int p = pos - (th / 2);
+                       int p = pos - (th / 2) - 1;
                        p = min (p, height - th);
                        p = max (p, 0);
 
-                       cairo_move_to (cr, width-4-tw, p);
+                       cairo_move_to (cr, width-3-tw, p);
                        pango_cairo_show_layout (cr, layout->gobj());
                }
        }