Browse Source

More work.

pull/59/head
ncarrillo 11 years ago
parent
commit
f2e511a014
  1. 11
      Cairo/Perspex.Cairo/Media/DrawingContext.cs
  2. 19
      Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs
  3. 7
      Cairo/Perspex.Cairo/Media/StreamGeometryImpl.cs

11
Cairo/Perspex.Cairo/Media/DrawingContext.cs

@ -116,19 +116,16 @@ namespace Perspex.Cairo.Media
/// <param name="geometry">The geometry.</param>
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<GeometryOp>(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
/// <param name="rect">The rectangle bounds.</param>
public void FillRectange(Perspex.Media.Brush brush, Rect rect)
{
this.SetBrush(brush);
this.context.Rectangle(rect.ToCairo());
this.context.Fill();

19
Cairo/Perspex.Cairo/Media/StreamGeometryContextImpl.cs

@ -13,11 +13,9 @@ namespace Perspex.Cairo.Media
public class StreamGeometryContextImpl : IStreamGeometryContextImpl
{
private Queue<GeometryOp> ops;
private StreamGeometryImpl impl;
public StreamGeometryContextImpl(Queue<GeometryOp> ops, StreamGeometryImpl imp)
public StreamGeometryContextImpl(StreamGeometryImpl imp)
{
this.ops = ops;
this.impl = imp;
points = new List<Point>();
}
@ -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<GeometryOp>(this.ops);
bool useFill = false;
var clone = new Queue<GeometryOp>(this.impl.Operations);
context.LineWidth = 2;
while (clone.Count > 0)
{
var current = clone.Dequeue();

7
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);
}
}
}

Loading…
Cancel
Save