diff --git a/src/Gtk/Perspex.Cairo/CairoPlatform.cs b/src/Gtk/Perspex.Cairo/CairoPlatform.cs index 5ddfe1eab0..f25aadda95 100644 --- a/src/Gtk/Perspex.Cairo/CairoPlatform.cs +++ b/src/Gtk/Perspex.Cairo/CairoPlatform.cs @@ -17,6 +17,8 @@ namespace Perspex.Cairo { private static readonly CairoPlatform s_instance = new CairoPlatform(); + private static Pango.Context s_pangoContext = CreatePangoContext(); + public static void Initialize() { var locator = Locator.CurrentMutable; @@ -36,12 +38,11 @@ namespace Perspex.Cairo TextAlignment textAlignment, Perspex.Media.FontWeight fontWeight) { - return new FormattedTextImpl(text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight); + return new FormattedTextImpl(s_pangoContext, text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight); } public IRenderer CreateRenderer(IPlatformHandle handle, double width, double height) { - Locator.CurrentMutable.RegisterConstant(GetPangoContext(handle), typeof(Pango.Context)); return new Renderer(handle, width, height); } @@ -69,18 +70,10 @@ namespace Perspex.Cairo return new BitmapImpl(pixbuf); } - private Pango.Context GetPangoContext(IPlatformHandle handle) + private static Pango.Context CreatePangoContext() { - switch (handle.HandleDescriptor) - { - case "GtkWindow": - var window = GLib.Object.GetObject(handle.Handle) as Gtk.Window; - return window.PangoContext; - default: - throw new NotSupportedException(string.Format( - "Don't know how to get a Pango Context from a '{0}'.", - handle.HandleDescriptor)); - } + Gtk.Application.Init(); + return new Gtk.Invisible().CreatePangoContext(); } } } diff --git a/src/Gtk/Perspex.Cairo/Media/FormattedTextImpl.cs b/src/Gtk/Perspex.Cairo/Media/FormattedTextImpl.cs index b61a6c6c15..81ae567817 100644 --- a/src/Gtk/Perspex.Cairo/Media/FormattedTextImpl.cs +++ b/src/Gtk/Perspex.Cairo/Media/FormattedTextImpl.cs @@ -15,6 +15,7 @@ namespace Perspex.Cairo.Media private Size _size; public FormattedTextImpl( + Pango.Context context, string text, string fontFamily, double fontSize, @@ -22,7 +23,8 @@ namespace Perspex.Cairo.Media TextAlignment textAlignment, FontWeight fontWeight) { - var context = Locator.Current.GetService(); + Contract.Requires(context != null); + Layout = new Pango.Layout(context); Layout.SetText(text); Layout.FontDescription = new Pango.FontDescription diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png index 163e53293f..97ad212701 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png index 18ecd01c7a..77a7601e13 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png index 40d0de862e..ff0c7b5984 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png index 73be4dcdc6..5f0166406b 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png index 3db06328cc..3ee5e25b7c 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png differ diff --git a/tests/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png b/tests/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png index 1c48ec82c6..ca04ee9121 100644 Binary files a/tests/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png and b/tests/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png differ