Example #1
0
        private void AddAdornerInfo(IDictionary infoMap, AdornerInfo adornerInfo, object key)
        {
            ArrayList adornerInfos; 

            if (infoMap[key] == null) 
            { 
                adornerInfos = new ArrayList(1);
                infoMap[key] = adornerInfos; 
            }
            else
            {
                adornerInfos = (ArrayList)infoMap[key]; 
            }
            adornerInfos.Add(adornerInfo); 
        } 
Example #2
0
 /// <summary>
 /// Clean all the dynamically-updated data from the Adorner 
 /// </summary>
 /// <param name="adornerInfo">AdornerInfo to scrub</param> 
 internal void InvalidateAdorner(AdornerInfo adornerInfo) 
 {
     Debug.Assert(adornerInfo != null, "Adorner should not be null"); 
     adornerInfo.Adorner.InvalidateMeasure();
     adornerInfo.Adorner.InvalidateVisual();
     adornerInfo.RenderSize = new Size(Double.NaN, Double.NaN);
     adornerInfo.Transform = null; 
 }
Example #3
0
        //------------------------------------------------------
        // 
        //  Internal Events
        // 
        //----------------------------------------------------- 
        //------------------------------------------------------
        // 
        //  Private Methods
        //
        //-----------------------------------------------------
 
        #region Private Methods
 
        /// <summary> 
        /// Adds the given adorner to the visual tree in the proper zOrder order.
        /// </summary> 
        /// <param name="adornerInfo"></param>
        /// <param name="zOrder"></param>
        private void AddAdornerToVisualTree(AdornerInfo adornerInfo, int zOrder)
        { 
            Adorner adorner = adornerInfo.Adorner;
            Debug.Assert(adorner != null); 
 
            AddAdornerInfo(_zOrderMap, adornerInfo, zOrder);
 
            // We've already added the adorner to the zOrderMap, so we can't get null back
            ArrayList adornerInfos = (ArrayList)_zOrderMap[zOrder];
            if (adornerInfos.Count > 1)
            { 
                // The easy case.  Find the index of the adorner immediately in front of the
                // new one and insert the new one after it. 
                int index = adornerInfos.IndexOf(adornerInfo); 
                int insertionIndex = _children.IndexOf(((AdornerInfo)adornerInfos[index - 1]).Adorner) + 1;
                _children.Insert(insertionIndex, adorner); 
            }
            else
            {
                // The hard case.  Find the set of adorners with the closest, but lower, zOrder. 
                IList keys = _zOrderMap.GetKeyList();
                int index = keys.IndexOf(zOrder) - 1; 
                if (index < 0) 
                {
                    // nothing's lower than the new adorner.  Make it the first child. 
                    _children.Insert(0, adorner);
                }
                else
                { 
                    // find the last adorner at this zOrder and add the new one after it.
                    adornerInfos = (ArrayList)_zOrderMap[keys[index]]; 
                    int insertionIndex = _children.IndexOf(((AdornerInfo)adornerInfos[adornerInfos.Count - 1]).Adorner) + 1; 
                    _children.Insert(insertionIndex, adorner);
                } 
            }
        }
Example #4
0
        //----------------------------------------------------- 
        //
        //  Internal Methods
        //
        //------------------------------------------------------ 

        #region Internal Methods 
 
        /// <summary>
        /// Add given Adorner to our children 
        /// </summary>
        /// <param name="adorner">Adorner to add</param>
        /// <param name="zOrder">z-order</param>
        internal void Add(Adorner adorner, int zOrder) 
        {
            if (adorner == null) 
                throw new ArgumentNullException("adorner"); 

            AdornerInfo adornerInfo = new AdornerInfo(adorner); 
            adornerInfo.ZOrder = zOrder;

            AddAdornerInfo(ElementMap, adornerInfo, adorner.AdornedElement);
 
            AddAdornerToVisualTree(adornerInfo, zOrder);
 
            AddLogicalChild(adorner); 

            UpdateAdorner(adorner.AdornedElement); 
        }