update VstTimeInfo structure, from Qtractor's version of vestige, which has all field...
[ardour.git] / gtk2_ardour / level_meter.cc
index 1c09b013ba7b217dbb8620398e886dd7a30a4313..493a08baea6b9257fb2a53adeb986bb079d514ca 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/barcontroller.h>
-#include "midi++/manager.h"
 #include "pbd/fastlog.h"
 
 #include "ardour_ui.h"
@@ -44,9 +43,10 @@ using namespace Gtk;
 using namespace std;
 
 LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord* ir, FastMeter::Orientation o)
-       : _meter (0)
-       , parent_invalidator(ir)
+       : parent_invalidator(ir)
+       , _meter (0)
        , _meter_orientation(o)
+       , regular_meter_width (6)
        , meter_length (0)
        , thin_meter_width(2)
 {
@@ -137,7 +137,7 @@ LevelMeterBase::update_meters ()
                        const float mpeak = _meter->meter_level(n, MeterMaxPeak);
                        if (mpeak > (*i).max_peak) {
                                (*i).max_peak = mpeak;
-                               (*i).meter->set_highlight(mpeak > Config->get_meter_peak());
+                               (*i).meter->set_highlight(mpeak >= Config->get_meter_peak());
                        }
                        if (mpeak > max_peak) {
                                max_peak = mpeak;
@@ -157,6 +157,8 @@ LevelMeterBase::update_meters ()
                                        (*i).meter->set (meter_deflect_ppm (peak + meter_lineup(0)));
                                } else if (meter_type == MeterVU) {
                                        (*i).meter->set (meter_deflect_vu (peak + vu_standard() + meter_lineup(0)));
+                               } else if (meter_type == MeterK12) {
+                                       (*i).meter->set (meter_deflect_k (peak, 12), meter_deflect_k(_meter->meter_level(n, MeterPeak), 12));
                                } else if (meter_type == MeterK14) {
                                        (*i).meter->set (meter_deflect_k (peak, 14), meter_deflect_k(_meter->meter_level(n, MeterPeak), 14));
                                } else if (meter_type == MeterK20) {
@@ -320,8 +322,20 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                                        c[6] = c[7] = 0xffff00ff;
                                        c[8] = c[9] = 0xff0000ff;
                                        break;
+                               case MeterK12:
+                                       stp[0] = 115.0 * meter_deflect_k(-32, 12);  //-20
+                                       stp[1] = 115.0 * meter_deflect_k(-12, 12);  //  0
+                                       stp[2] = 115.0 * meter_deflect_k(-10, 12);  // +2
+                                       stp[3] = 115.0 * meter_deflect_k( -8, 12);  // +4
+                                       c[0] = c[1] = 0x008800ff;
+                                       c[2] = c[3] = 0x00ff00ff;
+                                       c[4] = c[5] = 0xffff00ff;
+                                       c[6] = c[7] = 0xffff00ff;
+                                       c[8] = c[9] = 0xff0000ff;
+                                       break;
                                case MeterIEC2BBC:
-                                       c[0] = c[1] = c[2] = c[3] = c[4] = c[5] = c[6] = c[7] = c[8] = c[9] = 0xaaaaaaff;
+                                       c[0] = c[1] = c[2] = c[3] = c[4] = c[5] = c[6] = c[7] = c[8] = c[9] =
+                                               ARDOUR_UI::config()->color_by_name ("meter color BBC");
                                        stp[0] = stp[1] = stp[2] = stp[3] = 115.0;
                                        break;
                                case MeterIEC2EBU:
@@ -381,6 +395,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                }
                if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type) {
                        bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false;
+                       meters[n].packed = false;
                        delete meters[n].meter;
                        meters[n].meter = new FastMeter ((uint32_t) floor (Config->get_meter_hold()), width, _meter_orientation, len,
                                        c[0], c[1], c[2], c[3], c[4],
@@ -426,6 +441,7 @@ LevelMeterBase::meter_button_release (GdkEventButton* ev)
        if (ev->button == 1) {
                clear_meters (false);
        }
+       ButtonRelease(ev);
 
        return true;
 }
@@ -451,6 +467,7 @@ void
 LevelMeterBase::color_handler ()
 {
        color_changed = true;
+       setup_meters (meter_length, regular_meter_width, thin_meter_width);
 }
 
 LevelMeterHBox::LevelMeterHBox(Session* s)