using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Diagnostics;
namespace Svg
{
///
/// The element defines a graphics element consisting of text.
///
[SvgElement("textPath")]
public class SvgTextPath : SvgTextBase
{
private Uri _referencedPath;
public override SvgUnitCollection Dx
{
get { return null; }
set { /* do nothing */ }
}
[SvgAttribute("startOffset")]
public virtual SvgUnit StartOffset
{
get { return (_dx.Count < 1 ? SvgUnit.None : _dx[0]); }
set
{
if (_dx.Count < 1)
{
_dx.Add(value);
}
else
{
_dx[0] = value;
}
}
}
[SvgAttribute("method")]
public virtual SvgTextPathMethod Method
{
get { return (this.Attributes["method"] == null ? SvgTextPathMethod.align : (SvgTextPathMethod)this.Attributes["method"]); }
set { this.Attributes["method"] = value; }
}
[SvgAttribute("spacing")]
public virtual SvgTextPathSpacing Spacing
{
get { return (this.Attributes["spacing"] == null ? SvgTextPathSpacing.exact : (SvgTextPathSpacing)this.Attributes["spacing"]); }
set { this.Attributes["spacing"] = value; }
}
[SvgAttribute("href", SvgAttributeAttribute.XLinkNamespace)]
public virtual Uri ReferencedPath
{
get { return this._referencedPath; }
set { this._referencedPath = value; }
}
protected override GraphicsPath GetBaselinePath(ISvgRenderer renderer)
{
var path = this.OwnerDocument.IdManager.GetElementById(this.ReferencedPath) as SvgVisualElement;
if (path == null) return null;
var pathData = (GraphicsPath)path.Path(renderer).Clone();
if (path.Transforms.Count > 0)
{
Matrix transformMatrix = new Matrix(1, 0, 0, 1, 0, 0);
foreach (var transformation in path.Transforms)
{
transformMatrix.Multiply(transformation.Matrix);
}
pathData.Transform(transformMatrix);
}
return pathData;
}
protected override float GetAuthorPathLength()
{
var path = this.OwnerDocument.IdManager.GetElementById(this.ReferencedPath) as SvgPath;
if (path == null) return 0;
return path.PathLength;
}
public override SvgElement DeepCopy()
{
return base.DeepCopy();
}
}
}