コード例 #1
0
    private void ArrangeNodeVertically(RPNode node, Size finalSize)
    {
        if (node == null)
        {
            return;
        }

        if (!node.IsArrangedVertically())
        {
            // We must resolve dependencies first.
            ArrangeNodeVertically(node.m_leftOfNode, finalSize);
            ArrangeNodeVertically(node.m_aboveNode, finalSize);
            ArrangeNodeVertically(node.m_rightOfNode, finalSize);
            ArrangeNodeVertically(node.m_belowNode, finalSize);
            ArrangeNodeVertically(node.m_alignLeftWithNode, finalSize);
            ArrangeNodeVertically(node.m_alignTopWithNode, finalSize);
            ArrangeNodeVertically(node.m_alignRightWithNode, finalSize);
            ArrangeNodeVertically(node.m_alignBottomWithNode, finalSize);
            ArrangeNodeVertically(node.m_alignHorizontalCenterWithNode, finalSize);
            ArrangeNodeVertically(node.m_alignVerticalCenterWithNode, finalSize);

            double nodeMeasureRectY, nodeMeasureRectHeight;
            CalculateMeasureRectVertically(node, finalSize, out nodeMeasureRectY, out nodeMeasureRectHeight);
            node.m_measureRect.Y      = nodeMeasureRectY;
            node.m_measureRect.Height = nodeMeasureRectHeight;
            double nodeArrangeRectY, nodeArrangeRectHeight;
            CalculateArrangeRectVertically(node, out nodeArrangeRectY, out nodeArrangeRectHeight);
            node.m_arrangeRect.Y      = nodeArrangeRectY;
            node.m_arrangeRect.Height = nodeArrangeRectHeight;
            node.SetArrangedVertically(true);
        }
    }