fix verbose plugin scan
[ardour.git] / gtk2_ardour / meter_patterns.cc
index 38048e999eb30e5754648354a106bfd4b69e952d..b9653e6ab34e01a5651080c1eb27f1ac8e236c13 100644 (file)
@@ -79,7 +79,10 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
 {
        switch (mt) {
                case MeterPeak:
-                       return _("Peak");
+                       return _("Peak (+6dBFS)");
+                       break;
+               case MeterPeak0dB:
+                       return _("Peak (0dBFS)");
                        break;
                case MeterKrms:
                        return _("RMS + Peak");
@@ -97,18 +100,19 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
                        return _("IEC2/EBU");
                        break;
                case MeterK20:
-                       return _("K20");
+                       return _("K20/RMS");
                        break;
                case MeterK14:
-                       return _("K14");
+                       return _("K14/RMS");
                        break;
                case MeterK12:
-                       return _("K12");
+                       return _("K12/RMS");
                        break;
                case MeterVU:
                        return _("VU");
                        break;
                default:
+                       assert(0);
                        return _("???");
                        break;
        }
@@ -141,6 +145,17 @@ static inline float mtr_col_and_fract(
                                cairo_set_source_rgb (cr, c->get_red_p(), c->get_green_p(), c->get_blue_p());
                        }
                        break;
+               case MeterPeak0dB:
+                       fraction = log_meter0dB (val);
+                       if (val >= 0 || val == -9) {
+                               cairo_set_source_rgb (cr,
+                                               UINT_RGBA_R_FLT(peakcolor),
+                                               UINT_RGBA_G_FLT(peakcolor),
+                                               UINT_RGBA_B_FLT(peakcolor));
+                       } else {
+                               cairo_set_source_rgb (cr, c->get_red_p(), c->get_green_p(), c->get_blue_p());
+                       }
+                       break;
                case MeterIEC2BBC:
                case MeterIEC2EBU:
                        fraction = meter_deflect_ppm(val);
@@ -289,8 +304,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
 
        float box_l=0;
        float box_w=0;
-       const double scale = ARDOUR_UI::config()->get_font_scale() / 102400.;
-#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * scale))
+#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * ARDOUR_UI::ui_scale))
        if (tickleft) {
                if (w.get_name().substr(0, 3) == "Bar") {
                        box_w = PX_SCALE(2, 2);
@@ -492,6 +506,14 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
                                        break;
 
                                default:
+                                       points.insert (std::pair<float,float>(  0, 1.0));
+                                       points.insert (std::pair<float,float>(  1, 0.5));
+                                       points.insert (std::pair<float,float>(  2, 0.5));
+                                       points.insert (std::pair<float,float>(  3, 1.0));
+                                       points.insert (std::pair<float,float>(  4, 0.5));
+                                       points.insert (std::pair<float,float>(  5, 0.5));
+                                       // no break
+                               case MeterPeak0dB:
                                        points.insert (std::pair<float,float>(-60, 0.5));
                                        points.insert (std::pair<float,float>(-50, 1.0));
                                        points.insert (std::pair<float,float>(-40, 1.0));
@@ -524,13 +546,6 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
                                        points.insert (std::pair<float,float>( -3, 1.0));
                                        points.insert (std::pair<float,float>( -2, 0.5));
                                        points.insert (std::pair<float,float>( -1, 0.5));
-
-                                       points.insert (std::pair<float,float>(  0, 1.0));
-                                       points.insert (std::pair<float,float>(  1, 0.5));
-                                       points.insert (std::pair<float,float>(  2, 0.5));
-                                       points.insert (std::pair<float,float>(  3, 1.0));
-                                       points.insert (std::pair<float,float>(  4, 0.5));
-                                       points.insert (std::pair<float,float>(  5, 0.5));
                                        break;
                        }
                        break;
@@ -604,8 +619,14 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                tickright = true;
        }
 
+#ifdef NO_OVERSAMPLE
        cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
        cairo_t* cr = cairo_create (surface);
+#else
+       cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width*2, height*2);
+       cairo_t* cr = cairo_create (surface);
+       cairo_scale(cr, 2.0, 2.0);
+#endif
        Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create(w.get_pango_context());
 
        Pango::AttrList audio_font_attributes;
@@ -617,10 +638,10 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
 
        font = Pango::FontDescription (ARDOUR_UI::config()->get_SmallMonospaceFont());
 #ifdef __APPLE__
-       const double fixfontsize = 1.125;
+       const double fixfontsize = 1.0;
 #else
        // counter-act global font-scaling.
-       const double fixfontsize = std::min(1.0, 1.0 / sqrt((double) ARDOUR_UI::config()->get_font_scale() / 102400.));
+       const double fixfontsize = std::min(1.0, 0.9 / sqrtf(ARDOUR_UI::ui_scale));
 #endif
 
        font.set_weight (Pango::WEIGHT_NORMAL);
@@ -679,6 +700,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                switch (*i) {
                case DataType::AUDIO:
                        layout->set_attributes (audio_font_attributes);
+                       if (type == MeterPeak0dB) {
+                               overlay_midi = 4;
+                       }
                        switch (type) {
                                case MeterK12:
                                        overlay_midi = 0;
@@ -726,6 +750,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                default:
                                case MeterPeak:
                                case MeterKrms:
+                                       points.insert (std::pair<float,string>(  3.0f, "+3"));
+                                       // no break
+                               case MeterPeak0dB:
                                        points.insert (std::pair<float,string>(-50.0f, "-50"));
                                        points.insert (std::pair<float,string>(-40.0f, "-40"));
                                        points.insert (std::pair<float,string>(-30.0f, "-30"));
@@ -743,7 +770,6 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                        points.insert (std::pair<float,string>( -5.0f, "-5"));
                                        points.insert (std::pair<float,string>( -3.0f, "-3"));
                                        points.insert (std::pair<float,string>(  0.0f, "+0"));
-                                       points.insert (std::pair<float,string>(  3.0f, "+3"));
                                        break;
 
                                case MeterIEC2EBU:
@@ -833,6 +859,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                points.insert (std::pair<float,string>( 96,  "96"));
                                points.insert (std::pair<float,string>(100, "100"));
                                points.insert (std::pair<float,string>(112, "112"));
+                               points.insert (std::pair<float,string>(127, "127"));
                        } else {
                                switch (overlay_midi) {
                                        case 1:
@@ -860,6 +887,13 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                                points.insert (std::pair<float,string>( 72, "72"));
                                                points.insert (std::pair<float,string>(112, "112"));
                                                points.insert (std::pair<float,string>(127, "127"));
+                                       case 4:
+                                               /* labels that don't overlay with 0dBFS*/
+                                               points.insert (std::pair<float,string>(  0, "0"));
+                                               points.insert (std::pair<float,string>( 16, "16"));
+                                               points.insert (std::pair<float,string>( 48, "48"));
+                                               points.insert (std::pair<float,string>( 84, "84"));
+                                               points.insert (std::pair<float,string>(100, "100"));
                                        default:
                                                break;
                                }
@@ -948,6 +982,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                                break;
                                        default:
                                        case MeterPeak:
+                                       case MeterPeak0dB:
                                        case MeterKrms:
                                                layout->set_text("dBFS");
                                                break;
@@ -1057,12 +1092,19 @@ ArdourMeter::meter_expose_metrics (GdkEventExpose *ev, MeterType type, std::vect
        }
 
        cairo_move_to (cr, 0, 0);
-       cairo_set_source (cr, pattern);
 
        gint width, height;
        win->get_size (width, height);
-
+#ifdef NO_OVERSAMPLE
+       cairo_set_source (cr, pattern);
        cairo_rectangle (cr, 0, 0, width, height);
+#else
+       cairo_scale(cr, 0.5, 0.5);
+       cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST);
+       cairo_set_source (cr, pattern);
+       cairo_rectangle (cr, 0, 0, width * 2., height * 2.);
+#endif
+
        cairo_fill (cr);
 
        cairo_destroy (cr);