a couple of debug output statements to help diagnose a crash
[ardour.git] / libs / canvas / text.cc
index 399488af8059835bb060266fe28bf61babb65d1a..a77e03020d1124b6530b9c1f674b4ee8e96d2584 100644 (file)
@@ -107,25 +107,25 @@ void
 Text::__redraw (Glib::RefPtr<Pango::Layout> layout) const
 {
 #ifdef __APPLE__
-        if (_width_correction < 0.0) {
-                // Pango returns incorrect text width on some OS X
-                // So we have to make a correction
-                // To determine the correct indent take the largest symbol for which the width is correct
-                // and make the calculation
-                Gtk::Window win;
-                Gtk::Label foo;
-                win.add (foo);
-                
-                int width = 0;
-                int height = 0;
-                Glib::RefPtr<Pango::Layout> test_layout = foo.create_pango_layout ("H");
+       if (_width_correction < 0.0) {
+               // Pango returns incorrect text width on some OS X
+               // So we have to make a correction
+               // To determine the correct indent take the largest symbol for which the width is correct
+               // and make the calculation
+               Gtk::Window win;
+               Gtk::Label foo;
+               win.add (foo);
+
+               int width = 0;
+               int height = 0;
+               Glib::RefPtr<Pango::Layout> test_layout = foo.create_pango_layout ("H");
                if (_font_description) {
                        test_layout->set_font_description (*_font_description);
                }
-                test_layout->get_pixel_size (width, height);
-                
-                _width_correction = width*1.5;
-        }
+               test_layout->get_pixel_size (width, height);
+
+               _width_correction = width*1.5;
+       }
 #else
         /* don't bother with a conditional here */
         _width_correction = 0.0;
@@ -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