{
switch (mt) {
case MeterPeak:
- return _("Peak");
+ return _("Peak (+6dBFS)");
+ break;
+ case MeterPeak0dB:
+ return _("Peak (0dBFS)");
break;
case MeterKrms:
return _("RMS + Peak");
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;
}
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);
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);
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));
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;
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;
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);
switch (*i) {
case DataType::AUDIO:
layout->set_attributes (audio_font_attributes);
+ if (type == MeterPeak0dB) {
+ overlay_midi = 4;
+ }
switch (type) {
case MeterK12:
overlay_midi = 0;
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"));
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:
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:
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;
}
break;
default:
case MeterPeak:
+ case MeterPeak0dB:
case MeterKrms:
layout->set_text("dBFS");
break;
}
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);