From 3d845f95272a06c4f0f901423319ad85cc19f159 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 15 Sep 2015 01:42:09 +0200 Subject: [PATCH] Fixed failing Border render tests. They were failing because passing a Pango.Context to FormattedTextImpl was a hack. Create a pango context on startup that can be used for all FormattedTextImpls. Fix the expected test output for tests containing text as the expected output came from the Direct2D renderer where text rendering is slightly different. --- src/Gtk/Perspex.Cairo/CairoPlatform.cs | 19 ++++++------------ .../Perspex.Cairo/Media/FormattedTextImpl.cs | 4 +++- .../Border_Bottom_Aligns_Content.expected.png | Bin 797 -> 761 bytes ..._Centers_Content_Horizontally.expected.png | Bin 830 -> 760 bytes ...er_Centers_Content_Vertically.expected.png | Bin 811 -> 771 bytes .../Border_Left_Aligns_Content.expected.png | Bin 838 -> 743 bytes .../Border_Right_Aligns_Content.expected.png | Bin 800 -> 734 bytes .../Border_Top_Aligns_Content.expected.png | Bin 801 -> 758 bytes 8 files changed, 9 insertions(+), 14 deletions(-) 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 163e53293fc42a63090e5b3a09791835bf86ce72..97ad2127019cab5521f2e18160fd8abd650b2239 100644 GIT binary patch literal 761 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyD!!coe${k}9u$q-*SzP(`7@7M#h9+25ad2&&-vu`pQoqbvUKezArishE?GVM%xNb!1@J z*w6hZk(Ggg>A0thV@O5Z+nWb{?>I;_TvRQ6A`-;*vRN$1ON-OAz)j{wqs(QtnVmT) zieC<@DIBQs|7Ey_KjvBV`4j9w;}{qk=2}Irdz!cNkX$PB{At=B`kx6O32xb2d2QD> zmPQ2u4yI9JkcC0PrkK-r|MK7HJbUOon~kFa2TPNKf{f^i>xRXLx1BpGabxr1`3l>U zpEcH=`}v2V?2H)qp>7tV?NPVaUcWjc^ltO_ymdF1-`USTGkwC&qfuw?*Z2Q4ORM$& zlzryqjOFiYXUZRtzNzyk=fVDS3dIxS`+pjyncDxhdzR*Nx4Hkp)pH8-r@u~qCAUZ2 zJ%6L#@tp1MpM5^wFw6QE`~89L-dkd?7j8DRKYr%FQMzriPbt4$)0*^;-?{H^x2xV1 y`Qv88cLf0!riVA9b#7=z>wwZ914F{=f*;J+jZAx%e2_c<67Y2Ob6Mw<&;$Sx0qU9n 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 18ecd01c7a707b53da0ef2d890604cd900c6658c..77a7601e1348985970742148a38a0d56bb43d6ea 100644 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu_bxCyDDd^)E+vHWA)s?x=e)(d7jZ+<^{0>krzjQ@)SB$v|g>_?1oIjk)c( zF4k?Y>9*G=WtzR$xCb@PiMM+kemq9{_Q#OEq|Dg+Mds_P>)$VM%xNb!1@J z*w6hZk(Ggg>4m3@V@O5Z+ZzXaFFPhBWn?|xYI zX7kH^+nOB&I9M7T1Wt(7N+nl4uoZe}; z`Fx`8^TVZO6SSqxzu(vXoY*rzxkmDF#;-S@CH5a%Q5@6mkay*Gs@>9ag|)M{Dcy=V zF!_JdT3ffd*5+y7EZ01(*>V18-HVC6tTBIQe}66UIsDnjU)I^rj~V`!xo+ZH-!rH9 z&qUq(sYjRQzbZ70>8~}rd;OlH0tZWz!zeL0!{E?oqv_LA+p4GV-Tmu=3!`)_kPMm^4HN7**d zkB{AJ4BpCi_Q#hlK4P77nA3y*^Y1HTaO*DGLEybu-9g+zAP5A)@*QMb{|{lf2TQjG zJClI|ev?oFPAS-3F!y-1Rltq1g8%>k0002Mf9N}#*eKxk&2vlu0000VM%xNb!1@J z*w6hZk(Ggg>8huTV@O5Z+nbJlB90Ob7bVX>^s;5Ub6C4V#D7tGfp0_wdrVdD##1Ge z`xNDSJQ}|3eX=~E>fo|{FJFCO1e(Xdkg&Y(bd=v|uIeegdm_Ug=%2Oj*v(P>c|q-4 zJ|;&60hZxFJlwJ7X~}QqvZT!)H#3$Ca4 z7*a9k?X5(=M-B`P7Y|m5oPSokr$>(M{iVN(Djr{oW1i*wz=W;Nw#-&Sz;gbcg^2h@HRKae0%l5uw~P>$g(s!DAZ_AxO?;CmZLon z#Ap8FFWMrXY?EUk_@nnul4FGGgzF#wU3;Bc#FKZ>=vc(G!>?a{tSS2UqptqPp8rX2 zvi7sxlezxUDt^lx-9JxrF3z7(9Y?#}y}z>F%(CY==6^S7 zuHK)I2TkYqt~E5=aUewDvj68Qv2N+&m`n4XweD9H;9zQ07$pX27;KomBkg95Sb^=$ h23Zzx`eOL!Tn|jO3tY^m9=-??@pScbS?83{1OOxT(y9Oe literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZk(Ggg>4T?>V@O5Z+goRIuLMXq1h(_~9%!1sD5EiG1WydCUVFOs`fkJBR_x0Y?gsWw|D3+REc|uP+iO2>zpa=z-}wIScXyVj{xl1-SoSq; zkHwx_YxgzV$bPOnv)XX?&wHm0<&VddzB|0hCgy%a^}F@8?3G*Aw%f!_dw*N;&*y9G z$0{PXM-HoenOFHy3a!?$b1XPN(4=HVouv@7v=ocoy+^fnu7)8rBPyVhJnTHYeoCk7IbZ5^cMi9 eQ-&Y!bx!-6X>_?Q<`GQ>33(My-{9|m+(HvNSm;aJ0i_TipO!PH zFpj(B?AfD7=68Gk|GNG7ca5x^HFK_Si}>IjCSX>c!)m#$_g7xdjiis$LlnBxyPAvp zdV8mS{xxNL<=*b2X?j2Orfsi$xSWN_Q9)po7_4DXrhRUv_Y5i_2A}*C4*9tDnm{r-UW|G>xxO literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-V}>VM%xNb!1@J z*w6hZk(Ggg>6E97V@O5Z+glfNF9%38T%6)4ki>T{QB*8}eMXC|gUtr!B;iAQr}AoM z**QgV3!R%-cUNWGrzif`^L8-f33q>l)G(o7Nn#{g=XS`84Lnk?nWi zz23nvUpHU=&4Z+E%?Ea}FgYp+upByCVVY)Vu;z2#nQJVETz?v*{kxiRZuZZE$3XHi zd-{|4^7r2BkG#6^_@;LmAFiLd?-=)Qk63>CoxHdEb=E((io0`8^Z2t}KAV~g0{P}U z#`XNPdG>Y2^W?Dn<26#j$Nf|V)?K=sy4PRU`nYGbU{2=VqqDZVKTi5%csy_Mv)@)` z*Hh)*T-?WTu2g4&<$jysJC@IHY-~P%sb<6fxnI5gEXBMkI1E% zVw^(KPnt=JA-y;Yu<~PcGbq7+kaHwtqnX7l-u28FW&i*H0002)({5qT^VL@Y?R*|j$!<147TpC?;tM^`_t*?DFKevvC210h4e66e$lE%zeJvDqy4RAOHXW e0002+ANmd!s3za4rCZnl00006pm}BM_i{FZt8Zy_ijZQ&pJ* z000000KiV2E!T3hTw#y0fp^OlIO4%8h-HL5*}V8x5cpRDfqx(n2qy*dam?JXt#dsF z_Uz;p1uW>wGNwVUtkeeQk-nP-r>#ahk3e~D$_dWYCZ@>%Ly!hF`qs}1nCI3F=a?EPp`!eRon0f|p!Lyw~-Y?f<>KVKy zCvUO7j@fRH<~^C>*fwhZU(etrJ=+%RZ=c3ojhUY^XFX#~^$gyEtY>lih3{LRJ=whY z*?`|cAP58=Y3{Dkvqinzm0ssI200030ox|Y| X!&Nnm!C(Q>00000NkvXXu0mjfOO3ST