diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-20 05:35:23 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-20 20:45:36 +0200 |
commit | 494009a6e28bafac071a3160fbf385c6a076ae8e (patch) | |
tree | 84b02a17fa27d94903f6816b9d5df477cdb1db55 /gtk2_ardour/meter_patterns.cc | |
parent | 00f06ca9e91470f92d8f6d5ef83cbae069904f51 (diff) |
towards scaleable meter and mixer UI
somewhat hacky solution, but there's no good central point to
control this and get integer rounding/summing, is there?
Diffstat (limited to 'gtk2_ardour/meter_patterns.cc')
-rw-r--r-- | gtk2_ardour/meter_patterns.cc | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index 25b709c827..38048e999e 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, 1.0 / 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; } |