diff --git a/Cairo/Perspex.Cairo/Media/DrawingContext.cs b/Cairo/Perspex.Cairo/Media/DrawingContext.cs index 8349da6bde..47fc45048b 100644 --- a/Cairo/Perspex.Cairo/Media/DrawingContext.cs +++ b/Cairo/Perspex.Cairo/Media/DrawingContext.cs @@ -116,19 +116,16 @@ namespace Perspex.Cairo.Media /// The geometry. public void DrawGeometry(Perspex.Media.Brush brush, Perspex.Media.Pen pen, Perspex.Media.Geometry geometry) { - // TODO: Implement - System.Diagnostics.Debug.WriteLine("Geometry {0}", geometry.GetType()); var impl = geometry.PlatformImpl as StreamGeometryImpl; var clone = new Queue(impl.Operations); bool useFill = false; - - //this.context.Save(); + var pop = this.PushTransform(impl.Transform); + this.SetPen(pen); + while (clone.Count > 0) { - // this.SetBrush(brush); - this.SetPen(new Pen(brush, 0.5)); var current = clone.Dequeue(); @@ -192,6 +189,7 @@ namespace Perspex.Cairo.Media { var layout = ((FormattedTextImpl)text.PlatformImpl).Layout; this.SetBrush(foreground); + this.context.MoveTo(origin.X, origin.Y); Pango.CairoHelper.ShowLayout(this.context, layout); } @@ -203,6 +201,7 @@ namespace Perspex.Cairo.Media /// The rectangle bounds. public void FillRectange(Perspex.Media.Brush brush, Rect rect) { + this.SetBrush(brush); this.context.Rectangle(rect.ToCairo()); this.context.Fill(); diff --git a/Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs b/Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs index 3b04123481..1d53ef6ec4 100644 --- a/Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs +++ b/Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs @@ -13,11 +13,9 @@ namespace Perspex.Cairo.Media public class StreamGeometryContextImpl : IStreamGeometryContextImpl { - private Queue ops; private StreamGeometryImpl impl; - public StreamGeometryContextImpl(Queue ops, StreamGeometryImpl imp) + public StreamGeometryContextImpl(StreamGeometryImpl imp) { - this.ops = ops; this.impl = imp; points = new List(); } @@ -34,14 +32,14 @@ namespace Perspex.Cairo.Media public void BeginFigure(Point startPoint, bool isFilled) { System.Diagnostics.Debug.WriteLine("IS filled {0}", isFilled); - ops.Enqueue(new BeginOp { Point = startPoint, IsFilled = isFilled }); + this.impl.Operations.Enqueue(new BeginOp { Point = startPoint, IsFilled = isFilled }); points.Add(startPoint); } public void BezierTo(Point point1, Point point2, Point point3) { // TODO: Implement - ops.Enqueue(new CurveToOp { Point = point1, Point2 = point2, Point3 = point3 }); + this.impl.Operations.Enqueue(new CurveToOp { Point = point1, Point2 = point2, Point3 = point3 }); points.Add(point1); points.Add(point2); points.Add(point3); @@ -49,13 +47,13 @@ namespace Perspex.Cairo.Media public void LineTo(Point point) { - ops.Enqueue(new LineToOp { Point = point }); + this.impl.Operations.Enqueue(new LineToOp { Point = point }); points.Add(point); } public void EndFigure(bool isClosed) { - this.ops.Enqueue(new EndOp { IsClosed = isClosed }); + this.impl.Operations.Enqueue(new EndOp { IsClosed = isClosed }); double maxX = 0; double maxY = 0; @@ -67,9 +65,10 @@ namespace Perspex.Cairo.Media } var context = new Cairo.Context(new Cairo.ImageSurface(Cairo.Format.Argb32, (int)maxX, (int)maxY)); - var clone = new Queue(this.ops); - bool useFill = false; - + var clone = new Queue(this.impl.Operations); + + context.LineWidth = 2; + while (clone.Count > 0) { var current = clone.Dequeue(); diff --git a/Cairo/Perspex.Cairo/Media/StreamGeometryImpl.cs b/Cairo/Perspex.Cairo/Media/StreamGeometryImpl.cs index f949d7382b..cf423dbc17 100644 --- a/Cairo/Perspex.Cairo/Media/StreamGeometryImpl.cs +++ b/Cairo/Perspex.Cairo/Media/StreamGeometryImpl.cs @@ -76,7 +76,7 @@ namespace Perspex.Cairo.Media private Matrix transform = Matrix.Identity; public Matrix Transform { - get { return transform; } + get { return this.transform; } set { if (value != this.Transform) @@ -91,20 +91,17 @@ namespace Perspex.Cairo.Media public IStreamGeometryImpl Clone() { - // TODO: Implement return new StreamGeometryImpl(this.Operations); } public Rect GetRenderBounds(double strokeThickness) { - // TODO: Implement return this.Bounds; } public IStreamGeometryContextImpl Open() { - // TODO: Implement - return new StreamGeometryContextImpl(this.Operations, this); + return new StreamGeometryContextImpl(this); } } }