Просмотр исходного кода

Merge remote-tracking branch 'origin/master' into perspex-gallery

Nelson Carrillo 10 лет назад
Родитель
Сommit
8760cbce89

+ 14 - 1
src/Gtk/Perspex.Cairo/Media/FormattedTextImpl.cs

@@ -36,6 +36,7 @@ namespace Perspex.Cairo.Media
             };
 
             Layout.Alignment = textAlignment.ToCairo();
+            Layout.Attributes = new Pango.AttrList();
         }
 
         public Size Constraint
@@ -115,7 +116,19 @@ namespace Perspex.Cairo.Media
 
         public void SetForegroundBrush(Brush brush, int startIndex, int count)
         {
-            // TODO: Implement.
+            var scb = brush as SolidColorBrush;
+            if (scb != null)
+            {
+
+                var color = new Pango.Color();
+                color.Parse(string.Format("#{0}", scb.Color.ToString().Substring(3)));
+
+                var brushAttr = new Pango.AttrForeground(color);
+                brushAttr.StartIndex = (uint)startIndex;
+                brushAttr.EndIndex = (uint)(startIndex + count);
+
+                Layout.Attributes.Insert(brushAttr);
+            }
         }
     }
 }

BIN
tests/Perspex.RenderTests/Controls/BorderTests.cs


+ 24 - 0
tests/Perspex.RenderTests/Media/VisualBrushTests.cs

@@ -83,7 +83,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_NoStretch_NoTile_Alignment_Center()
         {
             Decorator target = new Decorator
@@ -133,7 +137,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_Fill_NoTile()
         {
             Decorator target = new Decorator
@@ -156,7 +164,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_Uniform_NoTile()
         {
             Decorator target = new Decorator
@@ -179,7 +191,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_UniformToFill_NoTile()
         {
             Decorator target = new Decorator
@@ -226,7 +242,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_NoStretch_NoTile_BottomRightQuarterDest()
         {
             Decorator target = new Decorator
@@ -356,7 +376,11 @@ namespace Perspex.Direct2D1.RenderTests.Media
             CompareImages();
         }
 
+#if PERSPEX_CAIRO
+        [Fact(Skip = "Font scaling currently broken on cairo")]
+#else
         [Fact]
+#endif
         public void VisualBrush_NoStretch_FlipXY_TopLeftDest()
         {
             Decorator target = new Decorator