From 1552547f650a82487ac72615c8533fd25b4ffc39 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 13 Oct 2016 17:11:38 -0400 Subject: stop using gkd_pango_context_get() in ArdourCanvas::Canvas and require concrete instances to supply a Pango::Context; do this for GtkCanvas and Push2Canvas --- libs/canvas/canvas.cc | 6 ++++++ libs/canvas/canvas/canvas.h | 12 ++++++++++-- libs/canvas/text.cc | 3 ++- libs/surfaces/push2/canvas.cc | 27 +++++++++++++++++++++++++++ libs/surfaces/push2/canvas.h | 3 +++ 5 files changed, 48 insertions(+), 3 deletions(-) (limited to 'libs') diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc index 22c586090e..92100c9ce1 100644 --- a/libs/canvas/canvas.cc +++ b/libs/canvas/canvas.cc @@ -1259,6 +1259,12 @@ GtkCanvas::hide_tooltip () } } +Glib::RefPtr +GtkCanvas::get_pango_context () +{ + return Glib::wrap (gdk_pango_context_get()); +} + /** Create a GtkCanvaSViewport. * @param hadj Adjustment to use for horizontal scrolling. * @param vadj Adjustment to use for vertica scrolling. diff --git a/libs/canvas/canvas/canvas.h b/libs/canvas/canvas/canvas.h index b818c7eb41..7731b8533b 100644 --- a/libs/canvas/canvas/canvas.h +++ b/libs/canvas/canvas/canvas.h @@ -43,6 +43,10 @@ namespace Gtk { class Label; } +namespace Pango { + class Context; +} + namespace ArdourCanvas { struct Rect; @@ -154,7 +158,9 @@ public: */ static void set_tooltip_timeout (uint32_t msecs); -protected: + virtual Glib::RefPtr get_pango_context() = 0; + + protected: Root _root; Color _bg_color; @@ -195,7 +201,9 @@ public: void start_tooltip_timeout (Item*); void stop_tooltip_timeout (); -protected: + Glib::RefPtr get_pango_context(); + + protected: void on_size_allocate (Gtk::Allocation&); bool on_scroll_event (GdkEventScroll *); bool on_expose_event (GdkEventExpose *); diff --git a/libs/canvas/text.cc b/libs/canvas/text.cc index fb38423dec..735b9b87f8 100644 --- a/libs/canvas/text.cc +++ b/libs/canvas/text.cc @@ -106,7 +106,8 @@ void Text::_redraw () const { assert (!_text.empty()); - Glib::RefPtr context = Glib::wrap (gdk_pango_context_get()); + assert (_canvas); + Glib::RefPtr context = _canvas->get_pango_context(); Glib::RefPtr layout = Pango::Layout::create (context); #ifdef __APPLE__ diff --git a/libs/surfaces/push2/canvas.cc b/libs/surfaces/push2/canvas.cc index 52a8534f5e..6a8d046aa9 100644 --- a/libs/surfaces/push2/canvas.cc +++ b/libs/surfaces/push2/canvas.cc @@ -17,11 +17,15 @@ */ +#include + #include #include #include #include "pbd/compose.h" +#include "pbd/error.h" +#include "pbd/i18n.h" #include "ardour/debug.h" @@ -233,3 +237,26 @@ Push2Canvas::visible_area () const /* may need to get more sophisticated once we do scrolling */ return Rect (0, 0, 960, 160); } + +Glib::RefPtr +Push2Canvas::get_pango_context () +{ + if (!pango_context) { + PangoFontMap* map = pango_cairo_font_map_get_default (); + if (!map) { + error << _("Default Cairo font map is null!") << endmsg; + return Glib::RefPtr (); + } + + PangoContext* context = pango_font_map_create_context (map); + + if (!context) { + error << _("cannot create new PangoContext from cairo font map") << endmsg; + return Glib::RefPtr (); + } + + pango_context = Glib::wrap (context); + } + + return pango_context; +} diff --git a/libs/surfaces/push2/canvas.h b/libs/surfaces/push2/canvas.h index e3343e3296..fe419f44ba 100644 --- a/libs/surfaces/push2/canvas.h +++ b/libs/surfaces/push2/canvas.h @@ -69,6 +69,8 @@ class Push2Canvas : public ArdourCanvas::Canvas void pick_current_item (ArdourCanvas::Duple const &, int) {} bool get_mouse_position (ArdourCanvas::Duple&) const { return false; } + Glib::RefPtr get_pango_context (); + private: Push2& p2; int _cols; @@ -83,6 +85,7 @@ class Push2Canvas : public ArdourCanvas::Canvas Cairo::RefPtr frame_buffer; Cairo::RefPtr context; Cairo::RefPtr expose_region; + Glib::RefPtr pango_context; bool expose (); int blit_to_device_frame_buffer (); -- cgit v1.2.3