make config-window suitable for small[er] screens
[ardour.git] / gtk2_ardour / meter_patterns.cc
index 9b90931e73eacb881e99846ba2b5a6113f44489a..9de01146b01d4f1bbe7c987952076d4351256dd8 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"
@@ -41,6 +42,9 @@ 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;
+
+sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> SetMeterTypeMulti;
 
 cairo_pattern_t*
 meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
@@ -50,8 +54,8 @@ meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
        bool background;
        gint width, height;
        win->get_size (width, height);
-       background =
-                  w.get_name().substr(w.get_name().length() - 4) == "Left"
+       background = types.size() == 0
+               || 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);
@@ -98,7 +102,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));
@@ -198,7 +206,7 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
        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";
+       background = types.size() == 0 || 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);
@@ -276,7 +284,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));
@@ -382,7 +394,7 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
                }
                Gdk::Color 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());
-               cairo_move_to (cr, 1, height - th - 1.5);
+               cairo_move_to (cr, 2, height - th - 1.5);
                pango_cairo_show_layout (cr, layout->gobj());
        }
 
@@ -474,6 +486,8 @@ gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> typ
 }
 
 void meter_clear_pattern_cache() {
+       // TODO allow to clear meterbridge "*Left|Right" patterns independenly
        metric_patterns.clear();
        ticks_patterns.clear();
+       RedrawMetrics();
 }