peak-indicator threshold configuration
[ardour.git] / gtk2_ardour / meter_patterns.cc
index f7e1226b13eba1fc23b372debeb3f33f2a6ccf1e..f6c39676baa1f0f4e4f17e7008862c6746731236 100644 (file)
@@ -22,6 +22,7 @@
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/rgb_macros.h>
 
+#include <ardour/rc_configuration.h>
 #include "ardour_ui.h"
 #include "utils.h"
 #include "logmeter.h"
@@ -38,13 +39,22 @@ using namespace std;
 
 static const int max_pattern_metric_size = 1026;
 
+sigc::signal<void> ResetAllPeakDisplays;
+sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
+sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
+sigc::signal<void> RedrawMetrics;
+
 cairo_pattern_t*
 meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
 {
        Glib::RefPtr<Gdk::Window> win (w.get_window());
 
+       bool background;
        gint width, height;
        win->get_size (width, height);
+       background =
+                  w.get_name().substr(w.get_name().length() - 4) == "Left"
+               || w.get_name().substr(w.get_name().length() - 5) == "Right";
 
        cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
        cairo_t* cr = cairo_create (surface);
@@ -52,7 +62,7 @@ meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
        cairo_move_to (cr, 0, 0);
        cairo_rectangle (cr, 0, 0, width, height);
        {
-               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE);
+               Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL);
                cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
        }
        cairo_fill (cr);
@@ -90,7 +100,11 @@ meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
                        points.insert (std::pair<int,float>(-50, 0.5));
                        points.insert (std::pair<int,float>(-40, 0.5));
                        points.insert (std::pair<int,float>(-30, 0.5));
-                       points.insert (std::pair<int,float>(-25, 0.5));
+                       if (Config->get_meter_line_up_level() == MeteringLineUp24) {
+                               points.insert (std::pair<int,float>(-24, 0.5));
+                       } else {
+                               points.insert (std::pair<int,float>(-25, 0.5));
+                       }
                        points.insert (std::pair<int,float>(-20, 1.0));
 
                        points.insert (std::pair<int,float>(-19, 0.5));
@@ -184,11 +198,13 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
 {
        Glib::RefPtr<Gdk::Window> win (w.get_window());
 
-       bool tickleft = true;
+       bool tickleft;
+       bool background;
        gint width, height;
        win->get_size (width, height);
 
        tickleft = w.get_name().substr(w.get_name().length() - 4) == "Left";
+       background = tickleft || w.get_name().substr(w.get_name().length() - 5) == "Right";
 
        cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
        cairo_t* cr = cairo_create (surface);
@@ -226,7 +242,7 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
        cairo_move_to (cr, 0, 0);
        cairo_rectangle (cr, 0, 0, width, height);
        {
-               Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE);
+               Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL);
                cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
        }
        cairo_fill (cr);
@@ -266,7 +282,11 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
                        points.insert (std::pair<int,float>(-30, 0.5));
                        points.insert (std::pair<int,float>(-20, 1.0));
                        if (types.size() == 1) {
-                               points.insert (std::pair<int,float>(-25, 0.5));
+                               if (Config->get_meter_line_up_level() == MeteringLineUp24) {
+                                       points.insert (std::pair<int,float>(-24, 0.5));
+                               } else {
+                                       points.insert (std::pair<int,float>(-25, 0.5));
+                               }
                                points.insert (std::pair<int,float>(-15, 1.0));
                        }
                        points.insert (std::pair<int,float>(-18, 1.0));
@@ -466,4 +486,5 @@ gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> typ
 void meter_clear_pattern_cache() {
        metric_patterns.clear();
        ticks_patterns.clear();
+       RedrawMetrics();
 }