/// <summary>
        /// Moves a display object (source) to before another display object (target)
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target">Specify null to move to end</param>
        public void MoveToBefore(IRenderable source, IRenderable target)
        {
            int sourceIndex = IndexOf(source);

            int targetIndex = -2;

            if (target != null)
            {
                targetIndex = IndexOf(target);
            }

            if (sourceIndex == -1 || targetIndex == -1 || sourceIndex == targetIndex)
            {
                return;
            }

            DisplayObjectEntry temp = displayObjects[sourceIndex];

            displayObjects.RemoveAt(sourceIndex);

            if (targetIndex == -2)
            {
                displayObjects.Add(temp);
            }
            else if (targetIndex < sourceIndex)
            {
                displayObjects.Insert(targetIndex, temp);
            }
            else
            {
                displayObjects.Insert(targetIndex - 1, temp);
            }

            OnZOrderChanged();
        }
 public IRenderable this[string name] {
     get {
         DisplayObjectEntry entry = displayObjects.Find(delegate(DisplayObjectEntry ent) { return(ent.displayObject.Name == name); });
         if (entry != null)
         {
             return(entry.displayObject);
         }
         else
         {
             return(null);
         }
     }
 }
        public void MoveToBottom(IRenderable source)
        {
            int sourceIndex = IndexOf(source);

            if (sourceIndex != -1)
            {
                DisplayObjectEntry temp = displayObjects[sourceIndex];
                displayObjects.RemoveAt(sourceIndex);
                displayObjects.Insert(0, temp);

                OnZOrderChanged();
            }
        }
        public void MoveUp(IRenderable displayObject)
        {
            int index = IndexOf(displayObject);

            if (index != -1 && index < displayObjects.Count - 1)
            {
                // swap the entries
                DisplayObjectEntry temp = displayObjects[index];
                displayObjects[index]     = displayObjects[index + 1];
                displayObjects[index + 1] = temp;

                OnZOrderChanged();
            }
        }
        public void MoveDown(IRenderable displayObject)
        {
            // find the entry
            int index = IndexOf(displayObject);

            if (index > 0)
            {
                // swap the entries
                DisplayObjectEntry temp = displayObjects[index];
                displayObjects[index]     = displayObjects[index - 1];
                displayObjects[index - 1] = temp;

                OnZOrderChanged();
            }
        }