using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace Svg
{
///
/// A wrapper for a paint server has a fallback if the primary server doesn't work.
///
public class SvgFallbackPaintServer : SvgPaintServer
{
private IEnumerable _fallbacks;
private SvgPaintServer _primary;
public SvgFallbackPaintServer() : base() { }
public SvgFallbackPaintServer(SvgPaintServer primary, IEnumerable fallbacks) : this()
{
_fallbacks = fallbacks;
_primary = primary;
}
public override Brush GetBrush(SvgVisualElement styleOwner, ISvgRenderer renderer, float opacity, bool forStroke = false)
{
try
{
_primary.GetCallback = () => _fallbacks.FirstOrDefault();
return _primary.GetBrush(styleOwner, renderer, opacity, forStroke);
}
finally
{
_primary.GetCallback = null;
}
}
public override SvgElement DeepCopy()
{
return base.DeepCopy();
}
public override SvgElement DeepCopy()
{
var newObj = base.DeepCopy() as SvgFallbackPaintServer;
newObj._fallbacks = this._fallbacks;
newObj._primary = this._primary;
return newObj;
}
}
}