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