summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-10-13 17:11:38 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-10-13 17:18:54 -0400
commit1552547f650a82487ac72615c8533fd25b4ffc39 (patch)
tree68a07a8a2ec756b4052a8a2f0215e95f4a808eb2
parent228556ab9c7356b868c33da47fcdc6362e4b5a93 (diff)
stop using gkd_pango_context_get() in ArdourCanvas::Canvas and require concrete instances to supply a Pango::Context; do this for GtkCanvas and Push2Canvas
-rw-r--r--libs/canvas/canvas.cc6
-rw-r--r--libs/canvas/canvas/canvas.h12
-rw-r--r--libs/canvas/text.cc3
-rw-r--r--libs/surfaces/push2/canvas.cc27
-rw-r--r--libs/surfaces/push2/canvas.h3
5 files changed, 48 insertions, 3 deletions
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<Pango::Context>
+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<Pango::Context> 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<Pango::Context> 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<Pango::Context> context = Glib::wrap (gdk_pango_context_get());
+ assert (_canvas);
+ Glib::RefPtr<Pango::Context> context = _canvas->get_pango_context();
Glib::RefPtr<Pango::Layout> 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 <vector>
+
#include <cairomm/region.h>
#include <cairomm/surface.h>
#include <cairomm/context.h>
#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<Pango::Context>
+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<Pango::Context> ();
+ }
+
+ 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> ();
+ }
+
+ 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<Pango::Context> get_pango_context ();
+
private:
Push2& p2;
int _cols;
@@ -83,6 +85,7 @@ class Push2Canvas : public ArdourCanvas::Canvas
Cairo::RefPtr<Cairo::ImageSurface> frame_buffer;
Cairo::RefPtr<Cairo::Context> context;
Cairo::RefPtr<Cairo::Region> expose_region;
+ Glib::RefPtr<Pango::Context> pango_context;
bool expose ();
int blit_to_device_frame_buffer ();