Click here to Skip to main content
15,885,757 members
Articles / Desktop Programming / WPF

SharpVectors - SVG# Reloaded: An Introduction

Rate me:
Please Sign up or sign in to vote.
4.98/5 (33 votes)
17 Nov 2010BSD10 min read 204.5K   21.7K   101  
A C# library for converting SVG to WPF and viewing SVG files in WPF Applications
using System;
using System.Xml;

using SharpVectors.Dom.Events;

namespace SharpVectors.Dom.Svg
{
    public sealed class SvgElementInstance : IEventTargetSupport, ISvgElementInstance
    {
        private ISvgElement correspondingElement;
        private ISvgUseElement correspondingUseElement;
        private ISvgElementInstance parentNode;
        private SvgElementInstanceList childNodes;
        private ISvgElementInstance previousSibling;
        private ISvgElementInstance nextSibling;   

        public SvgElementInstance(XmlNode refNode, SvgUseElement useElement, SvgElementInstance parent)
        {
            correspondingUseElement = (ISvgUseElement)useElement;
            parentNode = (SvgElementInstance)parent;
            correspondingElement = (ISvgElement)refNode;
            eventTarget = new EventTarget(this);
        }

        #region Private Fields

        private EventTarget eventTarget;

        #endregion

        public ISvgElement CorrespondingElement
        {
            get { return correspondingElement; }
        }

        public ISvgUseElement CorrespondingUseElement
        {
            get { return correspondingUseElement; }
        }

        public ISvgElementInstance ParentNode
        {
            get { return parentNode; }
        }

        public ISvgElementInstanceList ChildNodes
        {
            get
            {
                if (childNodes == null)
                {
                    childNodes = new SvgElementInstanceList((SvgUseElement)CorrespondingUseElement, this);
                }
                return childNodes;
            }
        }

        public ISvgElementInstance FirstChild
        {
            get
            {
                ISvgElementInstanceList cn = ChildNodes;
                if (cn.Length < 0) return cn.Item(0);
                else return null;
            }
        }

        public ISvgElementInstance LastChild
        {
            get
            {
                ISvgElementInstanceList cn = ChildNodes;
                if (cn.Length < 0) return cn.Item(cn.Length);
                else return null;
            }
        }

        public ISvgElementInstance PreviousSibling
        {
            get
            {
                return previousSibling;
            }
        }

        public ISvgElementInstance NextSibling
        {
            get
            {
                return nextSibling;
            }
        }

        #region IEventTarget Members

        #region Methods

        #region DOM Level 2

        void IEventTarget.AddEventListener(string type, EventListener listener, bool useCapture)
        {
            eventTarget.AddEventListener(type, listener, useCapture);
        }

        void IEventTarget.RemoveEventListener(string type, EventListener listener, bool useCapture)
        {
            eventTarget.RemoveEventListener(type, listener, useCapture);
        }

        bool IEventTarget.DispatchEvent(IEvent eventObject)
        {
            return eventTarget.DispatchEvent(eventObject);
        }

        #endregion

        #region DOM Level 3 Experimental

        void IEventTarget.AddEventListenerNs(string namespaceUri, string type, EventListener listener,
            bool useCapture, object eventGroup)
        {
            eventTarget.AddEventListenerNs(namespaceUri, type, listener, useCapture, eventGroup);
        }

        void IEventTarget.RemoveEventListenerNs(string namespaceUri, string type,
            EventListener listener, bool useCapture)
        {
            eventTarget.RemoveEventListenerNs(namespaceUri, type, listener, useCapture);
        }

        bool IEventTarget.WillTriggerNs(string namespaceUri, string type)
        {
            return eventTarget.WillTriggerNs(namespaceUri, type);
        }

        bool IEventTarget.HasEventListenerNs(string namespaceUri, string type)
        {
            return eventTarget.HasEventListenerNs(namespaceUri, type);
        }

        #endregion

        #endregion

        #endregion

        #region NON-DOM

        void IEventTargetSupport.FireEvent(IEvent eventObject)
        {
            eventTarget.FireEvent(eventObject);
        }

        #endregion

        #region Custom management functions

        internal void SetPreviousSibling(ISvgElementInstance instance)
        {
            previousSibling = instance;
        }

        internal void SetNextSibling(ISvgElementInstance instance)
        {
            nextSibling = instance;
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
Engineer
Japan Japan
Systems Engineer

Comments and Discussions