meterbridge: meter-type dependent color-schema
authorRobin Gareus <robin@gareus.org>
Tue, 23 Jul 2013 23:43:24 +0000 (01:43 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 8 Aug 2013 19:24:15 +0000 (15:24 -0400)
gtk2_ardour/level_meter.cc
gtk2_ardour/meter_patterns.cc

index 95ed249c149a9eae17955f852f731bfba420ea30..a7e9e0955dac3012df7f3ef6044bd107546aad98 100644 (file)
@@ -104,6 +104,7 @@ static float meter_lineup(float offset) {
 static float vu_standard() {
        // note - default meter config is +2dB (france)
        switch (Config->get_meter_vu_standard()) {
+               default:
                case MeteringVUfrench:   // 0VU = -2dBu
                        return 0;
                case MeteringVUamerican: // 0VU =  0dBu
index ef3513f2597759ca5d9bb46f2bd21219842367a9..756cdcccbd8a7094f603438d638f7b9559d3e6b4 100644 (file)
@@ -199,6 +199,38 @@ static inline float mtr_col_and_fract(
        return fraction;
 }
 
+static void set_bg_color(Gtk::Widget& w, cairo_t* cr, MeterType type) {
+       switch(type) {
+               case MeterVU:
+                       cairo_set_source_rgb (cr, 1.0, 1.0, 0.85);
+                       break;
+               case MeterIEC1DIN:
+               case MeterIEC1NOR:
+               case MeterIEC2BBC:
+               case MeterIEC2EBU:
+               case MeterK14:
+               case MeterK20:
+                       cairo_set_source_rgb (cr, 0.1, 0.1, 0.1);
+                       break;
+               default:
+                       {
+                       Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE);
+                       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
+                       }
+                       break;
+       }
+}
+
+static void set_fg_color(MeterType type, Gdk::Color * c) {
+       switch(type) {
+               case MeterVU:
+                       c->set_rgb_p(0.0, 0.0, 0.0);
+                       break;
+               default:
+                       c->set_rgb_p(1.0, 1.0, 1.0);
+                       break;
+       }
+}
 
 static cairo_pattern_t*
 meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> types)
@@ -217,8 +249,13 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
 
        cairo_move_to (cr, 0, 0);
        cairo_rectangle (cr, 0, 0, width, height);
-       {
-               Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL);
+
+       if (background) {
+               /* meterbridge */
+               set_bg_color(w, cr, type);
+       } else {
+               /* mixer */
+               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_NORMAL);
                cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
        }
        cairo_fill (cr);
@@ -229,24 +266,16 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
        for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
 
                Gdk::Color c;
-               c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
-
-               if (types.size() > 1) {
+               if (types.size() > 1 && (*i) == DataType::MIDI) {
                        /* we're overlaying more than 1 set of marks, so use different colours */
-                       switch (*i) {
-                       case DataType::AUDIO:
-                               c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
-                               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
-                               break;
-                       case DataType::MIDI:
-                               c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
-                               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
-                               break;
-                       }
+                       c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
+               } else if (background) {
+                       set_fg_color(type, &c);
+                       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
                } else {
                        c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
-                       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
                }
+               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
 
                // tick-maker position in dBFS, line-thickness
                std::map<float,float> points;
@@ -503,8 +532,12 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
 
        cairo_move_to (cr, 0, 0);
        cairo_rectangle (cr, 0, 0, width, height);
-       {
-               Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL);
+       if (background) {
+               /* meterbridge */
+               set_bg_color(w, cr, type);
+       } else {
+               /* mixer */
+               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_NORMAL);
                cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
        }
        cairo_fill (cr);
@@ -513,26 +546,20 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
 
        height = min(max_pattern_metric_size, height);
        uint32_t peakcolor = ARDOUR_UI::config()->color_by_name ("meterbridge peaklabel");
+       Gdk::Color c;
 
        for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
 
-               Gdk::Color c;
-               if (types.size() > 1) {
+               if (types.size() > 1 && (*i) == DataType::MIDI) {
                        /* we're overlaying more than 1 set of marks, so use different colours */
-                       switch (*i) {
-                       case DataType::AUDIO:
-                               c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
-                               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
-                               break;
-                       case DataType::MIDI:
-                               c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
-                               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
-                               break;
-                       }
+                       c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
+               } else if (background) {
+                       set_fg_color(type, &c);
+                       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
                } else {
                        c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
-                       cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
                }
+               cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
 
 
                // label-pos in dBFS, label-text
@@ -780,7 +807,9 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
                                layout->get_pixel_size(tw, th);
                                break;
                }
-               Gdk::Color c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
+               if (!background) {
+                       c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
+               }
                cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
                if (tickleft) {
                        cairo_move_to (cr, width - 2 - tw, height - th - 0.5);