SvgFallbackPaintServer .cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Drawing;
  6. #pragma warning disable
  7. namespace Svg
  8. {
  9. /// <summary>
  10. /// A wrapper for a paint server has a fallback if the primary server doesn't work.
  11. /// </summary>
  12. public class SvgFallbackPaintServer : SvgPaintServer
  13. {
  14. private IEnumerable<SvgPaintServer> _fallbacks;
  15. private SvgPaintServer _primary;
  16. public SvgFallbackPaintServer() : base() { }
  17. public SvgFallbackPaintServer(SvgPaintServer primary, IEnumerable<SvgPaintServer> fallbacks) : this()
  18. {
  19. _fallbacks = fallbacks;
  20. _primary = primary;
  21. }
  22. public override Brush GetBrush(SvgVisualElement styleOwner, ISvgRenderer renderer, float opacity, bool forStroke = false)
  23. {
  24. try
  25. {
  26. _primary.GetCallback = () => _fallbacks.FirstOrDefault();
  27. return _primary.GetBrush(styleOwner, renderer, opacity, forStroke);
  28. }
  29. finally
  30. {
  31. _primary.GetCallback = null;
  32. }
  33. }
  34. public override SvgElement DeepCopy()
  35. {
  36. return base.DeepCopy<SvgFallbackPaintServer>();
  37. }
  38. public override SvgElement DeepCopy<T>()
  39. {
  40. var newObj = base.DeepCopy<T>() as SvgFallbackPaintServer;
  41. newObj._fallbacks = this._fallbacks;
  42. newObj._primary = this._primary;
  43. return newObj;
  44. }
  45. }
  46. }
  47. #pragma warning restore