diff options
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 21 | ||||
-rw-r--r-- | gtk2_ardour/level_meter.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/meter_patterns.cc | 41 | ||||
-rw-r--r-- | gtk2_ardour/meter_strip.cc | 100 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 17 | ||||
-rw-r--r-- | gtk2_ardour/mono_panner.cc | 26 | ||||
-rw-r--r-- | gtk2_ardour/panner_ui.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/panner_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/rc_option_editor.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/stereo_panner.cc | 15 | ||||
-rw-r--r-- | libs/backends/coreaudio/wscript | 7 |
14 files changed, 156 insertions, 113 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 6381fbcb74..1c2862926f 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -199,11 +199,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) uint32_t text_color; uint32_t led_color; -#ifdef __APPLE__ - const double dpiscale = 1.0; -#else const double dpiscale = ARDOUR_UI::config()->get_font_scale () / 102400.; -#endif const double corner_radius = std::max(2.0, _corner_radius * dpiscale); if (_update_colors) { @@ -326,7 +322,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) if ((_elements & VectorIcon) && _icon == RecTapeMode) { const double x = get_width() * .5; const double y = get_height() * .5; - const double r = std::min(10., std::min(x, y) * .6); // TODO we need a better way to limit max. radius. + const double r = std::min(x, y) * .6; const double slit = .11 * M_PI; cairo_save(cr); cairo_translate(cr, x, y); @@ -384,7 +380,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) else if ((_elements & VectorIcon) && _icon == RecButton) { const double x = get_width() * .5; const double y = get_height() * .5; - const double r = std::min(10., std::min(x, y) * .55); // TODO we need a better way to limit max. radius. + const double r = std::min(x, y) * .55; cairo_arc (cr, x, y, r, 0, 2 * M_PI); if (active_state() == Gtkmm2ext::ExplicitActive) cairo_set_source_rgba (cr, .95, .1, .1, 1.); @@ -831,7 +827,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req) CairoWidget::on_size_request (req); if (_diameter == 0) { - const float newdia = rint (char_pixel_height()); + const float newdia = rint (11. * ARDOUR_UI::config()->get_font_scale () / 102400.); if (_diameter != newdia) { _pattern_height = 0; _diameter = newdia; diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 26b6324068..4939c78735 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -818,7 +818,13 @@ ARDOUR_UI::starting () if ((nsm_url = g_getenv ("NSM_URL")) != 0) { nsm = new NSM_Client; if (!nsm->init (nsm_url)) { - nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3"); + /* TODO this needs fixing! + * waf's obj.target for distro versions: eg ardour4, ardourvst4 + * Ardour4, Mixbus3 for bundled versions + full path on OSX & windows + * argv[0] does not apply since we need the wrapper-script (not the binary itself) + * No idea how to address all these. + */ + nsm->announce (PROGRAM_NAME, ":dirty:", "ardour4"); unsigned int i = 0; // wait for announce reply from nsm server diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 582d442ab8..497a379448 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -223,11 +223,7 @@ ARDOUR_UI::setup_transport () { RefPtr<Action> act; -#ifdef __APPLE__ - const double btn_scale = 1.0; -#else const double btn_scale = config()->get_font_scale () / 102400.; -#endif transport_tearoff_hbox.set_border_width (PX_SCALE(3,3)); transport_tearoff_hbox.set_spacing (PX_SCALE(3,3)); diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 619cb349ed..3af9641070 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -63,7 +63,6 @@ using namespace std; using Gtkmm2ext::Keyboard; using namespace ArdourMeter; - static void reset_cursor_to_default (Gtk::Entry* widget) { @@ -102,6 +101,9 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int next_release_selects = false; _width = Wide; + fader_length = rint (fader_length * ARDOUR_UI::config()->get_font_scale() / 102400.); + fader_girth = rint (fader_girth * ARDOUR_UI::config()->get_font_scale() / 102400.); + if (horizontal) { gain_slider = manage (new HSliderController (&gain_adjustment, boost::shared_ptr<PBD::Controllable>(), fader_length, fader_girth)); } else { @@ -934,6 +936,8 @@ GainMeterBase::redraw_metrics() meter_ticks2_area.queue_draw (); } +#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * scale)) + GainMeter::GainMeter (Session* s, int fader_length) : GainMeterBase (s, false, fader_length, 24) , gain_display_box(true, 0) @@ -949,8 +953,10 @@ GainMeter::GainMeter (Session* s, int fader_length) } gain_display_box.pack_start (peak_display, true, true); + const double scale = ARDOUR_UI::config()->get_font_scale() / 102400.; + meter_metric_area.set_name ("AudioTrackMetrics"); - meter_metric_area.set_size_request(24, -1); + meter_metric_area.set_size_request(PX_SCALE(24, 24), -1); gain_automation_style_button.set_name ("mixer strip button"); gain_automation_state_button.set_name ("mixer strip button"); @@ -961,8 +967,8 @@ GainMeter::GainMeter (Session* s, int fader_length) gain_automation_style_button.unset_flags (Gtk::CAN_FOCUS); gain_automation_state_button.unset_flags (Gtk::CAN_FOCUS); - gain_automation_state_button.set_size_request(15, 15); - gain_automation_style_button.set_size_request(15, 15); + gain_automation_state_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15)); + gain_automation_style_button.set_size_request (PX_SCALE(12, 15), PX_SCALE(12, 15)); fader_vbox = manage (new Gtk::VBox()); fader_vbox->set_spacing (0); @@ -973,7 +979,7 @@ GainMeter::GainMeter (Session* s, int fader_length) hbox.pack_start (fader_alignment, true, true); - set_spacing (2); + set_spacing (PX_SCALE(2, 2)); pack_start (gain_display_box, Gtk::PACK_SHRINK); pack_start (hbox, Gtk::PACK_SHRINK); @@ -984,8 +990,8 @@ GainMeter::GainMeter (Session* s, int fader_length) meter_metric_area.signal_expose_event().connect ( sigc::mem_fun(*this, &GainMeter::meter_metrics_expose)); - meter_ticks1_area.set_size_request(3,-1); - meter_ticks2_area.set_size_request(3,-1); + meter_ticks1_area.set_size_request (PX_SCALE(3, 3), -1); + meter_ticks2_area.set_size_request (PX_SCALE(3, 3), -1); meter_ticks1_area.signal_expose_event().connect ( sigc::mem_fun(*this, &GainMeter::meter_ticks1_expose)); @@ -997,6 +1003,7 @@ GainMeter::GainMeter (Session* s, int fader_length) meter_hbox.pack_start (meter_ticks2_area, false, false); meter_hbox.pack_start (meter_metric_area, false, false); } +#undef PX_SCALE GainMeter::~GainMeter () { } diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index efa98bb434..8dc37a0134 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -258,6 +258,8 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) width = thin_meter_width; } + width = rint (width * ARDOUR_UI::config()->get_font_scale() / 102400.); + while (meters.size() < nmeters) { meters.push_back (MeterInfo()); } diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index 25b709c827..b70a75a3a2 100644 --- a/gtk2_ardour/meter_patterns.cc +++ b/gtk2_ardour/meter_patterns.cc @@ -289,23 +289,28 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ float box_l=0; float box_w=0; + const double scale = ARDOUR_UI::config()->get_font_scale() / 102400.; +#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * scale)) if (tickleft) { if (w.get_name().substr(0, 3) == "Bar") { - box_l = width-2; box_w = 2; + box_w = PX_SCALE(2, 2); + box_l = width - box_w; } else if (w.get_name().substr(0, 4) == "Mark") { - box_l = width-2; box_w = 2; + box_w = PX_SCALE(2, 2); + box_l = width - box_w; background = false; } } else if (tickright) { if (w.get_name().substr(0, 3) == "Bar") { - box_l = 0; box_w = 2; + box_l = 0; box_w = PX_SCALE(2, 2); } else if (w.get_name().substr(0, 4) == "Mark") { - box_l = 0; box_w = 2; + box_l = 0; box_w = PX_SCALE(2, 2); background = false; } } else { - box_l = 0; box_w = 3; + box_l = 0; box_w = width; } +#undef PX_SCALE cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); cairo_t* cr = cairo_create (surface); @@ -557,7 +562,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ pos = height - (gint) floor (height * fraction); pos = max (pos, 1); cairo_move_to(cr, 0, pos + .5); - cairo_line_to(cr, 3, pos + .5); + cairo_line_to(cr, width, pos + .5); cairo_stroke (cr); break; case DataType::MIDI: @@ -565,7 +570,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ pos = 1 + height - (gint) floor (height * fraction); pos = min (pos, height); cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p()); - cairo_arc(cr, 1.5, pos + .5, 1.0, 0, 2 * M_PI); + cairo_arc(cr, width * .5, pos + .5, 1.0, 0, 2 * M_PI); cairo_fill(cr); break; } @@ -611,22 +616,27 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types) Pango::FontDescription font; font = Pango::FontDescription (ARDOUR_UI::config()->get_SmallMonospaceFont()); - double fixfontsize = 81920.0 / (double) ARDOUR_UI::config()->get_font_scale(); +#ifdef __APPLE__ + const double fixfontsize = 1.125; +#else + // counter-act global font-scaling. + const double fixfontsize = std::min(1.0, 0.9 / sqrt((double) ARDOUR_UI::config()->get_font_scale() / 102400.)); +#endif font.set_weight (Pango::WEIGHT_NORMAL); - font.set_size (9.0 * PANGO_SCALE * fixfontsize); + font.set_size (8.0 * fixfontsize * PANGO_SCALE); font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font)); audio_font_attributes.change (*font_attr); delete font_attr; font.set_weight (Pango::WEIGHT_ULTRALIGHT); font.set_stretch (Pango::STRETCH_ULTRA_CONDENSED); - font.set_size (8.0 * PANGO_SCALE * fixfontsize); + font.set_size (7.0 * fixfontsize * PANGO_SCALE); font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font)); midi_font_attributes.change (*font_attr); delete font_attr; - font.set_size (6.0 * PANGO_SCALE * fixfontsize); + font.set_size (6.0 * fixfontsize * PANGO_SCALE); font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font)); unit_font_attributes.change (*font_attr); delete font_attr; @@ -878,20 +888,11 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types) cairo_stroke (cr); } break; - case DataType::MIDI: align_center = false; // don't bleed into legend fraction = (j->first) / 127.0; pos = 1 + height - (gint) lrintf (height * fraction); pos = min (pos, height); - cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p()); - if (tickleft) { - cairo_arc(cr, width - 2.0, pos + .5, 1.0, 0, 2 * M_PI); - cairo_fill(cr); - } else if (tickright) { - cairo_arc(cr, 3, pos + .5, 1.0, 0, 2 * M_PI); - cairo_fill(cr); - } break; } diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index bfba07d1cf..392149f593 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -59,6 +59,8 @@ PBD::Signal1<void,MeterStrip*> MeterStrip::CatchDeletion; PBD::Signal0<void> MeterStrip::MetricChanged; PBD::Signal0<void> MeterStrip::ConfigurationChanged; +#define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * scale)) + MeterStrip::MeterStrip (int metricmode, MeterType mt) : AxisView(0) , RouteUI(0) @@ -68,15 +70,18 @@ MeterStrip::MeterStrip (int metricmode, MeterType mt) _tick_bar = 0; _metricmode = -1; metric_type = MeterPeak; - mtr_vbox.set_spacing(2); - nfo_vbox.set_spacing(2); - peakbx.set_size_request(-1, 14); - namebx.set_size_request(18, 52); - spacer.set_size_request(-1,0); + + const double scale = (double) ARDOUR_UI::config()->get_font_scale() / 102400.; + + mtr_vbox.set_spacing (PX_SCALE(2, 2)); + nfo_vbox.set_spacing (PX_SCALE(2, 2)); + peakbx.set_size_request (-1, PX_SCALE(14, 14)); + namebx.set_size_request (PX_SCALE(16, 18), PX_SCALE(32, 52)); + spacer.set_size_request (-1,0); set_metric_mode(metricmode, mt); - meter_metric_area.set_size_request(25, 10); + meter_metric_area.set_size_request (PX_SCALE(25, 25), 10); meter_metric_area.signal_expose_event().connect ( sigc::mem_fun(*this, &MeterStrip::meter_metrics_expose)); RedrawMetrics.connect (sigc::mem_fun(*this, &MeterStrip::redraw_metrics)); @@ -88,7 +93,7 @@ MeterStrip::MeterStrip (int metricmode, MeterType mt) mtr_vbox.pack_start (spacer, false, false); mtr_container.add(mtr_vbox); - mtr_hsep.set_size_request(-1,1); + mtr_hsep.set_size_request (-1, 1); mtr_hsep.set_name("BlackSeparator"); nfo_vbox.pack_start (mtr_hsep, false, false); @@ -119,8 +124,10 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) , _route(rt) , peak_display() { - mtr_vbox.set_spacing(2); - nfo_vbox.set_spacing(2); + const double scale = (double) ARDOUR_UI::config()->get_font_scale() / 102400.; + + mtr_vbox.set_spacing (PX_SCALE(2, 2)); + nfo_vbox.set_spacing (PX_SCALE(2, 2)); SessionHandlePtr::set_session (sess); RouteUI::init (); RouteUI::set_route (rt); @@ -130,6 +137,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) _metricmode = -1; metric_type = MeterPeak; + // note: level_meter->setup_meters() does the scaling int meter_width = 6; if (_route->shared_peak_meter()->input_streams().n_total() == 1) { meter_width = 12; @@ -157,27 +165,27 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) ARDOUR_UI::instance()->set_tip (peak_display, _("Reset Peak")); max_peak = minus_infinity(); peak_display.unset_flags (Gtk::CAN_FOCUS); - peak_display.set_size_request(12, 8); - peak_display.set_corner_radius(2); + peak_display.set_size_request(PX_SCALE(12, 12), PX_SCALE(8, 8)); + peak_display.set_corner_radius(2); // ardour-button scales this peak_align.set(0.5, 1.0, 1.0, 0.8); peak_align.add(peak_display); - peakbx.pack_start(peak_align, true, true, 3); - peakbx.set_size_request(-1, 14); + peakbx.pack_start(peak_align, true, true, 2); + peakbx.set_size_request(-1, PX_SCALE(14, 14)); // add track-name & -number label number_label.set_text("-"); - number_label.set_size_request(18, 18); + number_label.set_size_request(PX_SCALE(18, 18), PX_SCALE(18, 18)); name_changed(); - name_label.set_corner_radius(2); + name_label.set_corner_radius(2); // ardour button scales radius name_label.set_elements((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text|ArdourButton::Inactive)); name_label.set_name("meterbridge label"); name_label.set_angle(-90.0); name_label.set_text_ellipsize (Pango::ELLIPSIZE_END); name_label.set_layout_ellipsize_width(48 * PANGO_SCALE); - name_label.set_size_request(18, 50); + name_label.set_size_request(PX_SCALE(18, 18), PX_SCALE(50, 50)); name_label.set_alignment(-1.0, .5); ARDOUR_UI::instance()->set_tip (name_label, _route->name()); ARDOUR_UI::instance()->set_tip (*level_meter, _route->name()); @@ -189,7 +197,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) number_label.set_layout_ellipsize_width(18 * PANGO_SCALE); number_label.set_alignment(.5, .5); - namebx.set_size_request(18, 52); + namebx.set_size_request(PX_SCALE(18, 18), PX_SCALE(52, 52)); namebx.pack_start(namenumberbx, true, false, 0); namenumberbx.pack_start(name_label, true, false, 0); namenumberbx.pack_start(number_label, false, false, 0); @@ -207,25 +215,25 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) btnbox.pack_start(solobox, false, false, 1); rec_enable_button->set_corner_radius(2); - rec_enable_button->set_size_request(18, 18); + rec_enable_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); mute_button->set_corner_radius(2); - mute_button->set_size_request(18, 18); + mute_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); solo_button->set_corner_radius(2); - solo_button->set_size_request(18, 18); + solo_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); monitor_input_button->set_corner_radius(2); - monitor_input_button->set_size_request(18, 18); + monitor_input_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); monitor_disk_button->set_corner_radius(2); - monitor_disk_button->set_size_request(18, 18); + monitor_disk_button->set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); - mutebox.set_size_request(18, 18); - solobox.set_size_request(18, 18); - recbox.set_size_request(18, 18); - mon_in_box.set_size_request(18, 18); - mon_disk_box.set_size_request(18, 18); + mutebox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); + solobox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); + recbox.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); + mon_in_box.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); + mon_disk_box.set_size_request (PX_SCALE(18, 18), PX_SCALE(18, 18)); spacer.set_size_request(-1,0); update_button_box(); @@ -284,8 +292,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt) meter_configuration_changed (_route->shared_peak_meter()->input_streams ()); - meter_ticks1_area.set_size_request(3,-1); - meter_ticks2_area.set_size_request(3,-1); + meter_ticks1_area.set_size_request(PX_SCALE(3, 3), -1); + meter_ticks2_area.set_size_request(PX_SCALE(3, 3), -1); meter_ticks1_area.signal_expose_event().connect (sigc::mem_fun(*this, &MeterStrip::meter_ticks1_expose)); meter_ticks2_area.signal_expose_event().connect (sigc::mem_fun(*this, &MeterStrip::meter_ticks2_expose)); @@ -509,6 +517,8 @@ MeterStrip::on_size_request (Gtk::Requisition* r) void MeterStrip::on_size_allocate (Gtk::Allocation& a) { + const double scale = (double) ARDOUR_UI::config()->get_font_scale() / 102400.; + const int wh = a.get_height(); int nh; int mh = 0; @@ -541,18 +551,21 @@ MeterStrip::on_size_allocate (Gtk::Allocation& a) tnh = 4 + std::max(2u, _session->track_number_decimals()) * 8; // TODO 8 = max_with_of_digit_0_to_9() } + nh *= scale; + tnh *= scale; + int prev_height, ignored; bool need_relayout = false; - namebx.get_size_request(ignored, prev_height); - namebx.set_size_request(18, nh + tnh); + namebx.get_size_request (ignored, prev_height); + namebx.set_size_request (PX_SCALE(18, 18), nh + tnh); if (prev_height != nh + tnh) { need_relayout = true; } - namenumberbx.get_size_request(ignored, prev_height); - namenumberbx.set_size_request(18, nh + tnh); + namenumberbx.get_size_request (ignored, prev_height); + namenumberbx.set_size_request (PX_SCALE(18, 18), nh + tnh); if (prev_height != nh + tnh) { need_relayout = true; @@ -561,8 +574,8 @@ MeterStrip::on_size_allocate (Gtk::Allocation& a) if (_route) { int nlh = nh + (_route->is_master() ? tnh : -1); name_label.get_size_request(ignored, prev_height); - name_label.set_size_request(18, nlh); - name_label.set_layout_ellipsize_width ((nh - 4 + (_route->is_master() ? tnh : 0)) * PANGO_SCALE); + name_label.set_size_request (PX_SCALE(18, 18), nlh); + name_label.set_layout_ellipsize_width ((nh - 4 + (_route->is_master() ? tnh : 0)) * PANGO_SCALE); // XXX if (prev_height != nlh) { need_relayout = true; } @@ -713,35 +726,38 @@ MeterStrip::redraw_metrics () void MeterStrip::update_button_box () { + const double scale = (double) ARDOUR_UI::config()->get_font_scale() / 102400.; + if (!_session) return; int height = 0; if (_session->config.get_show_mute_on_meterbridge()) { - height += 20; + height += PX_SCALE(18, 18) + PX_SCALE(2, 2); mutebox.show(); } else { mutebox.hide(); } if (_session->config.get_show_solo_on_meterbridge()) { - height += 20; + height += PX_SCALE(18, 18) + PX_SCALE(2, 2); solobox.show(); } else { solobox.hide(); } if (_session->config.get_show_rec_on_meterbridge()) { - height += 20; + height += PX_SCALE(18, 18) + PX_SCALE(2, 2); recbox.show(); } else { recbox.hide(); } if (_session->config.get_show_monitor_on_meterbridge()) { - height += 20 + 20; + height += PX_SCALE(18, 18) + PX_SCALE(2, 2); + height += PX_SCALE(18, 18) + PX_SCALE(2, 2); mon_in_box.show(); mon_disk_box.show(); } else { mon_in_box.hide(); mon_disk_box.hide(); } - btnbox.set_size_request(18, height); + btnbox.set_size_request(PX_SCALE(18, 18), height); check_resize(); } @@ -791,6 +807,8 @@ MeterStrip::name_changed () { if (!_route) { return; } + const double scale = (double) ARDOUR_UI::config()->get_font_scale() / 102400.; + name_label.set_text(_route->name ()); if (_session && _session->config.get_track_name_number()) { const int64_t track_number = _route->track_number (); @@ -803,7 +821,7 @@ MeterStrip::name_changed () { } const int tnh = 4 + std::max(2u, _session->track_number_decimals()) * 8; // TODO 8 = max_width_of_digit_0_to_9() // NB numbers are rotated 90deg. on the meterbridge -> use height - number_label.set_size_request(18, tnh); + number_label.set_size_request(PX_SCALE(18, 18), tnh * scale); } else { number_label.hide(); } diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 6225f71b89..dc9cdcc59b 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -684,6 +684,8 @@ MixerStrip::set_width_enum (Width w, void* owner) set_button_names (); + const double scale = std::max(1.0, ARDOUR_UI::config()->get_font_scale() / 102400.); + switch (w) { case Wide: @@ -703,8 +705,12 @@ MixerStrip::set_width_enum (Width w, void* owner) panners.astate_string(_route->panner()->automation_state())); } - - set_size_request (max (110, gpm.get_gm_width()+5), -1); + { + // panners expect an even number of horiz. pixels + int width = rint(max (110 * scale, gpm.get_gm_width() + 10 * scale)) + 1; + width &= ~1; + set_size_request (width, -1); + } break; case Narrow: @@ -726,7 +732,12 @@ MixerStrip::set_width_enum (Width w, void* owner) panners.short_astate_string(_route->panner()->automation_state())); } - set_size_request (max (60, gpm.get_gm_width() + 10), -1); + { + // panners expect an even number of horiz. pixels + int width = rint(max (60 * scale, gpm.get_gm_width() + 10 * scale)) + 1; + width &= ~1; + set_size_request (width, -1); + } break; } diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc index ce8b55eacf..43bdc9f711 100644 --- a/gtk2_ardour/mono_panner.cc +++ b/gtk2_ardour/mono_panner.cc @@ -52,11 +52,6 @@ using namespace Gtk; using namespace Gtkmm2ext; using namespace ARDOUR_UI_UTILS; -static const int pos_box_size = 9; -static const int lr_box_size = 15; -static const int step_down = 10; -static const int top_step = 2; - MonoPanner::ColorScheme MonoPanner::colors; bool MonoPanner::have_colors = false; @@ -136,11 +131,17 @@ MonoPanner::on_expose_event (GdkEventExpose*) int width, height; double pos = position_control->get_value (); /* 0..1 */ uint32_t o, f, t, b, pf, po; - const double corner_radius = 5; width = get_width(); height = get_height (); + const double scale = ARDOUR_UI::config()->get_font_scale() / 102400.; + const int step_down = rint(height / 3.5); + const int lr_box_size = height - 2 * step_down; + const int pos_box_size = (int)(rint(step_down * .8)) | 1; + const int top_step = step_down - pos_box_size; + const double corner_radius = 5 * scale; + o = colors.outline; f = colors.fill; t = colors.text; @@ -165,7 +166,6 @@ MonoPanner::on_expose_event (GdkEventExpose*) context->rectangle (0, 0, width, height); context->fill (); - double usable_width = width - pos_box_size; /* compute the centers of the L/R boxes based on the current stereo width */ @@ -173,8 +173,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) usable_width -= 1.0; } const double half_lr_box = lr_box_size/2.0; - const double left = 4 + half_lr_box; // center of left box - const double right = width - 4 - half_lr_box; // center of right box + const double left = pos_box_size * .5 + half_lr_box; // center of left box + const double right = width - pos_box_size * .5 - half_lr_box; // center of right box /* center line */ context->set_source_rgba (UINT_RGBA_R_FLT(o), UINT_RGBA_G_FLT(o), UINT_RGBA_B_FLT(o), UINT_RGBA_A_FLT(o)); @@ -255,8 +255,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) context->set_line_width (2.0); context->move_to (spos + (pos_box_size/2.0), top_step); /* top right */ context->rel_line_to (0.0, pos_box_size); /* lower right */ - context->rel_line_to (-pos_box_size/2.0, 4.0); /* bottom point */ - context->rel_line_to (-pos_box_size/2.0, -4.0); /* lower left */ + context->rel_line_to (-pos_box_size/2.0, 4.0 * scale); /* bottom point */ + context->rel_line_to (-pos_box_size/2.0, -4.0 * scale); /* lower left */ context->rel_line_to (0.0, -pos_box_size); /* upper left */ context->close_path (); @@ -268,8 +268,8 @@ MonoPanner::on_expose_event (GdkEventExpose*) /* marker line */ context->set_line_width (1.0); - context->move_to (spos, pos_box_size + 5); - context->rel_line_to (0, half_lr_box+step_down); + context->move_to (spos, 1 + top_step + pos_box_size + 4.0 * scale); + context->line_to (spos, half_lr_box + step_down + lr_box_size - 1); context->set_source_rgba (UINT_RGBA_R_FLT(po), UINT_RGBA_G_FLT(po), UINT_RGBA_B_FLT(po), UINT_RGBA_A_FLT(po)); context->stroke (); diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc index 02f1dd46a2..83b296f7a0 100644 --- a/gtk2_ardour/panner_ui.cc +++ b/gtk2_ardour/panner_ui.cc @@ -43,8 +43,6 @@ using namespace PBD; using namespace Gtkmm2ext; using namespace Gtk; -const int PannerUI::pan_bar_height = 35; - PannerUI::PannerUI (Session* s) : _current_nouts (-1) , _current_nins (-1) @@ -242,6 +240,8 @@ PannerUI::setup_pan () return; } + const double scale = std::max(1.0, ARDOUR_UI::config()->get_font_scale() / 102400.); + if (_current_uri == "http://ardour.org/plugin/panner_2in2out#ui") { delete big_window; @@ -250,7 +250,7 @@ PannerUI::setup_pan () boost::shared_ptr<Pannable> pannable = _panner->pannable(); _stereo_panner = new StereoPanner (_panshell); - _stereo_panner->set_size_request (-1, pan_bar_height); + _stereo_panner->set_size_request (-1, 5 * ceil(7. * scale)); _stereo_panner->set_send_drawing_mode (_send_mode); pan_vbox.pack_start (*_stereo_panner, false, false); @@ -286,7 +286,7 @@ PannerUI::setup_pan () _mono_panner->signal_button_release_event().connect (sigc::mem_fun(*this, &PannerUI::pan_button_event)); - _mono_panner->set_size_request (-1, pan_bar_height); + _mono_panner->set_size_request (-1, 5 * ceil(7. * scale)); _mono_panner->set_send_drawing_mode (_send_mode); update_pan_sensitive (); @@ -295,7 +295,7 @@ PannerUI::setup_pan () else if (_current_uri == "http://ardour.org/plugin/panner_vbap#ui") { if (!twod_panner) { - twod_panner = new Panner2d (_panshell, 61); + twod_panner = new Panner2d (_panshell, 61 * scale); twod_panner->set_name ("MixerPanZone"); twod_panner->show (); twod_panner->signal_button_press_event().connect (sigc::mem_fun(*this, &PannerUI::pan_button_event), false); @@ -306,7 +306,7 @@ PannerUI::setup_pan () if (big_window) { big_window->reset (nins); } - twod_panner->set_size_request (-1, 61); + twod_panner->set_size_request (-1, 61 * scale); twod_panner->set_send_drawing_mode (_send_mode); /* and finally, add it to the panner frame */ diff --git a/gtk2_ardour/panner_ui.h b/gtk2_ardour/panner_ui.h index 600a9d145c..0c0b7cfc66 100644 --- a/gtk2_ardour/panner_ui.h +++ b/gtk2_ardour/panner_ui.h @@ -100,8 +100,6 @@ class PannerUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr std::string _current_uri; bool _send_mode; - static const int pan_bar_height; - Panner2d* twod_panner; ///< 2D panner, or 0 Panner2dWindow* big_window; diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 13f425883e..2e42e0bad5 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -541,7 +541,7 @@ public: { _dpi_adjustment.set_value (_ui_config->get_font_scale() / 1024.); - Label* l = manage (new Label (_("Font scaling:"))); + Label* l = manage (new Label (_("GUI and Font scaling:"))); l->set_name ("OptionsLabel"); const Glib::ustring dflt = _("Default"); @@ -570,7 +570,7 @@ public: _box->pack_start (*h, false, false); - set_note (_("Major font-scale changes require an application restart to re-layout.")); + set_note (_("Adjusting the scale require an application restart to re-layout.")); _dpi_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &FontScalingOptions::dpi_changed)); } diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc index 53cb65996e..b52f2d2b05 100644 --- a/gtk2_ardour/stereo_panner.cc +++ b/gtk2_ardour/stereo_panner.cc @@ -53,11 +53,6 @@ using namespace Gtk; using namespace Gtkmm2ext; using namespace ARDOUR_UI_UTILS; -static const int pos_box_size = 8; -static const int lr_box_size = 15; -static const int step_down = 10; -static const int top_step = 2; - StereoPanner::ColorScheme StereoPanner::colors[3]; bool StereoPanner::have_colors = false; @@ -150,13 +145,19 @@ StereoPanner::on_expose_event (GdkEventExpose*) const double pos = position_control->get_value (); /* 0..1 */ const double swidth = width_control->get_value (); /* -1..+1 */ const double fswidth = fabs (swidth); - const double corner_radius = 5.0; uint32_t o, f, t, b, r; State state; width = get_width(); height = get_height (); + const double scale = ARDOUR_UI::config()->get_font_scale() / 102400.; + const int step_down = rint(height / 3.5); + const double corner_radius = 5.0 * scale; + const int lr_box_size = height - 2 * step_down; + const int pos_box_size = (int)(rint(step_down * .8)) | 1; + const int top_step = step_down - pos_box_size; + if (swidth == 0.0) { state = Mono; } else if (swidth < 0.0) { @@ -412,6 +413,7 @@ StereoPanner::on_button_press_event (GdkEventButton* ev) double pos = position_control->get_value (); /* 0..1 */ double swidth = width_control->get_value (); /* -1..+1 */ double fswidth = fabs (swidth); + const int lr_box_size = get_height() - 2 * rint(get_height() / 3.5); int usable_width = get_width() - lr_box_size; double center = (lr_box_size/2.0) + (usable_width * pos); int left = lrint (center - (fswidth * usable_width / 2.0)); // center of leftmost box @@ -529,6 +531,7 @@ StereoPanner::on_motion_notify_event (GdkEventMotion* ev) return false; } + const int lr_box_size = get_height() - 2 * rint(get_height() / 3.5); int usable_width = get_width() - lr_box_size; double delta = (ev->x - last_drag_x) / (double) usable_width; double current_width = width_control->get_value (); diff --git a/libs/backends/coreaudio/wscript b/libs/backends/coreaudio/wscript index 9fcc678050..75bed910df 100644 --- a/libs/backends/coreaudio/wscript +++ b/libs/backends/coreaudio/wscript @@ -29,7 +29,12 @@ def build(bld): obj.name = 'coreaudio_backend' obj.target = 'coreaudio_backend' obj.use = 'libardour libpbd' - obj.framework = [ 'CoreAudio', 'AudioToolbox', 'CoreServices', 'CoreMidi' ] + obj.framework = [ 'CoreAudio', 'AudioToolbox', 'CoreServices' ] + if bld.env['build_target'] not in [ 'lion' ]: + obj.framework += [ 'CoreMidi' ] + else: + obj.framework += [ 'CoreMIDI' ] + obj.install_path = os.path.join(bld.env['LIBDIR'], 'backends') obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"', 'ARDOURBACKEND_DLL_EXPORTS' |