summaryrefslogtreecommitdiff
path: root/gtk2_ardour/meter_patterns.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-05-05 03:02:09 +0200
committerRobin Gareus <robin@gareus.org>2015-05-05 03:02:09 +0200
commit7447843a33a4bef1613fe1b9bbf1a463ad81de49 (patch)
tree4e96e9ad1eb52fc53e19ce6cd5e229d5e204bbff /gtk2_ardour/meter_patterns.cc
parent6b69fd5640871fb3d10a861f3eb3c9b4469794d6 (diff)
oversample meter faceplate image surfaces
Works around issues with pango on windows, fixes crude text on OSX/retina and can provide sub-pixel rendering on GNU/Linux/X11.
Diffstat (limited to 'gtk2_ardour/meter_patterns.cc')
-rw-r--r--gtk2_ardour/meter_patterns.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc
index de95915c36..675e567df6 100644
--- a/gtk2_ardour/meter_patterns.cc
+++ b/gtk2_ardour/meter_patterns.cc
@@ -619,8 +619,14 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
tickright = true;
}
+#ifdef NO_OVERSAMPLE
cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
cairo_t* cr = cairo_create (surface);
+#else
+ cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width*2, height*2);
+ cairo_t* cr = cairo_create (surface);
+ cairo_scale(cr, 2.0, 2.0);
+#endif
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create(w.get_pango_context());
Pango::AttrList audio_font_attributes;
@@ -632,7 +638,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
font = Pango::FontDescription (ARDOUR_UI::config()->get_SmallMonospaceFont());
#ifdef __APPLE__
- const double fixfontsize = 1.125;
+ const double fixfontsize = 1.0;
#else
// counter-act global font-scaling.
const double fixfontsize = std::min(1.0, 0.9 / sqrtf(ARDOUR_UI::ui_scale));
@@ -1086,12 +1092,19 @@ ArdourMeter::meter_expose_metrics (GdkEventExpose *ev, MeterType type, std::vect
}
cairo_move_to (cr, 0, 0);
- cairo_set_source (cr, pattern);
gint width, height;
win->get_size (width, height);
-
+#ifdef NO_OVERSAMPLE
+ cairo_set_source (cr, pattern);
cairo_rectangle (cr, 0, 0, width, height);
+#else
+ cairo_scale(cr, 0.5, 0.5);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST);
+ cairo_set_source (cr, pattern);
+ cairo_rectangle (cr, 0, 0, width * 2., height * 2.);
+#endif
+
cairo_fill (cr);
cairo_destroy (cr);