Beispiel #1
0
        private void WlkFirstWalk(Elem v)
        {
            if (v.NumChildren() == 0)
            {
                v.prelim = 0;
                Elem left = WlkGetLeftSibling(v);
                if (left != null)
                    v.prelim = left.prelim + MarginHorizontal() + left.Dimensions.Width;
            }
            else
            {
                Elem leftmostChild = WlkLeftmostChild(v);
                Elem rightmostChild = WlkRightmostChild(v);
                Elem defaultAncestor = leftmostChild;
                foreach (Elem w1 in v.Children())
                {
                    WlkFirstWalk(w1);
                    WlkApportion(w1, defaultAncestor);
                }
                WlkExecuteShifts(v);
                int midpoint = (leftmostChild.prelim + leftmostChild.Dimensions.Width / 2 +
                    rightmostChild.prelim + rightmostChild.Dimensions.Width / 2)
                    - v.Dimensions.Width;
                midpoint /= 2;

                Elem w = WlkGetLeftSibling(v);
                if (w != null)
                {
                    v.prelim = w.prelim + MarginHorizontal() + w.Dimensions.Width;
                    v.mod = v.prelim - midpoint;
                }
                else
                    v.prelim = midpoint;

            }
        }
Beispiel #2
0
 private Elem WlkNextRight(Elem v)
 {
     if (v.NumChildren() > 0)
         return WlkRightmostChild(v);
     else
         return v.thread;
 }
Beispiel #3
0
 private void WlkExecuteShifts(Elem v)
 {
     int shift = 0;
     int change = 0;
     List<Elem> reverse = new List<Elem>(v.NumChildren());
     foreach (Elem e in v.Children()) /*and this monstrosity. ug!*/
         reverse.Add(e);
     reverse.Reverse();
     foreach (Elem w in reverse)
     {
         w.prelim = w.prelim + shift;
         w.mod = w.mod + shift;
         change = change + w.change;
         shift = shift + w.shift + change;
     }
 }