add red-boxes to meter-marks and fix Nordic scale color
authorRobin Gareus <robin@gareus.org>
Sat, 27 Jul 2013 20:44:38 +0000 (22:44 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 8 Aug 2013 19:26:01 +0000 (15:26 -0400)
gtk2_ardour/level_meter.cc
gtk2_ardour/meter_patterns.cc

index f3c3e7b6fb08cba45b2e89b6b8726078412a3773..c277fc6e88b2a60a57347cabcdd1f5fdd1e3af12 100644 (file)
@@ -328,7 +328,8 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
                                        stp[1] = 115.0 * meter_deflect_nordic(-18);
                                        stp[2] = 115.0 * meter_deflect_nordic(-12);
                                        stp[3] = 115.0 * meter_deflect_nordic( -9); // ignored
-                                       c[1] = c[2] = c[3];
+                                       //c[2] = c[3] = c[1]; // dark-green
+                                       c[0] = c[1] = c[2]; // bright-green
                                        c[6] = c[7] = c[8] = c[9];
                                        break;
                                case MeterIEC1DIN:
index dede422b2df651d889cb2d656e802c89f113791f..aad7c96d98bf778c491fde195a235b1f7b669ca4 100644 (file)
@@ -260,11 +260,21 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
        Glib::RefPtr<Gdk::Window> win (w.get_window());
 
        bool background;
+       bool tickleft, tickright;
        gint width, height;
        win->get_size (width, height);
-       background = types.size() == 0
-               || w.get_name().substr(w.get_name().length() - 4) == "Left"
-               || w.get_name().substr(w.get_name().length() - 5) == "Right";
+       tickleft = w.get_name().substr(w.get_name().length() - 4) == "Left";
+       tickright = w.get_name().substr(w.get_name().length() - 5) == "Right";
+       background = types.size() == 0 || tickleft || tickright;
+
+       int box_l, box_r;
+       if (tickleft) {
+               box_l = 2; box_r = 3;
+       } else if (tickright) {
+               box_l = 0; box_r = 1;
+       } else {
+               box_l = 0; box_r = 3;
+       }
 
        cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
        cairo_t* cr = cairo_create (surface);
@@ -302,6 +312,8 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
                // tick-maker position in dBFS, line-thickness
                std::map<float,float> points;
 
+#define DFL_H(fract) (height - floor (height * (fract)) + .5)
+
                switch (*i) {
                case DataType::AUDIO:
 
@@ -377,9 +389,14 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
 
                                        points.insert (std::pair<float,float>(-18.0f, 1.0));
                                        points.insert (std::pair<float,float>(-15.0f, 0.5));
-                                       points.insert (std::pair<float,float>(-12.0f, 0.5));
+                                       points.insert (std::pair<float,float>(-12.0f, 1.0));
                                        points.insert (std::pair<float,float>( -9.0f, 1.0));
                                        points.insert (std::pair<float,float>( -6.0f, 0.5));
+                                       cairo_set_source_rgba (cr, .8, 0, 0, 0.8);
+                                       cairo_rectangle (cr,
+                                                       box_l, DFL_H(meter_deflect_nordic( -6)),
+                                                       box_r, DFL_H(meter_deflect_nordic(-12)));
+                                       cairo_fill (cr);
                                        break;
                                case MeterIEC1DIN:
                                        points.insert (std::pair<float,float>( -3.0f, 0.5)); // "200%"
@@ -405,6 +422,11 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
                                        points.insert (std::pair<float,float>(-49.0f, 1.0));
                                        points.insert (std::pair<float,float>(-54.0f, 0.5));
                                        points.insert (std::pair<float,float>(-59.0f, 1.0));
+                                       cairo_set_source_rgba (cr, .8, 0, 0, 0.8);
+                                       cairo_rectangle (cr,
+                                                       box_l, DFL_H(meter_deflect_din(0)),
+                                                       box_r, DFL_H(meter_deflect_din(-9.0)));
+                                       cairo_fill (cr);
                                        break;
                                case MeterVU:
                                        points.insert (std::pair<float,float>(-17.0f, 1.0)); //+3 VU
@@ -423,6 +445,12 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
                                        points.insert (std::pair<float,float>(-30.0f, 1.0));
                                        points.insert (std::pair<float,float>(-35.0f, 0.5));
                                        points.insert (std::pair<float,float>(-40.0f, 1.0));
+                                       // red-box
+                                       cairo_set_source_rgba (cr, .8, 0, 0, 0.8);
+                                       cairo_rectangle (cr,
+                                                       box_l, DFL_H(meter_deflect_vu(-16)),
+                                                       box_r, DFL_H(meter_deflect_vu(-20)));
+                                       cairo_fill (cr);
                                        break;
 
                                default: