diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-06-16 07:51:50 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-06-16 07:52:00 -0400 |
commit | d65f03d07455c4ea38084af71a38c383bd2b3e19 (patch) | |
tree | f28a57e824020b847a365a4794fad7c60330980a /libs/canvas | |
parent | 3f157f961aa848e7f35fb6224f8eb49526bc12b8 (diff) |
fixes for canvas text display on Retina (from Valeriy)
Diffstat (limited to 'libs/canvas')
-rw-r--r-- | libs/canvas/text.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/libs/canvas/text.cc b/libs/canvas/text.cc index 78f7d31e48..a77e03020d 100644 --- a/libs/canvas/text.cc +++ b/libs/canvas/text.cc @@ -147,10 +147,20 @@ Text::__redraw (Glib::RefPtr<Pango::Layout> layout) const _width = w + _width_correction; _height = h; +#ifdef __APPLE__ + _image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, _width * 2, _height * 2); +#else _image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, _width, _height); - +#endif + Cairo::RefPtr<Cairo::Context> img_context = Cairo::Context::create (_image); +#ifdef __APPLE__ + /* Below, the rendering scaling is set to support retina display + */ + img_context->scale (2, 2); +#endif + /* and draw, in the appropriate color of course */ if (_outline) { @@ -193,8 +203,18 @@ Text::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const Rect intersection (i.get()); context->rectangle (intersection.x0, intersection.y0, intersection.width(), intersection.height()); +#ifdef __APPLE__ + /* Below, the rendering scaling is set to support retina display + */ + Cairo::Matrix original_matrix = context->get_matrix(); + context->scale (0.5, 0.5); + context->set_source (_image, self.x0 * 2, self.y0 * 2); + context->fill (); + context->set_matrix (original_matrix); +#else context->set_source (_image, self.x0, self.y0); context->fill (); +#endif } void |