Exemple #1
0
        /// <summary>
        /// layout controls in OpenGL canvas.(
        /// Updates absolute and relative (location and size) of specified node and its children nodes.
        /// <para>This coordinate system is shown as below.</para>
        /// <para>   /\ y</para>
        /// <para>   |</para>
        /// <para>   |</para>
        /// <para>   |</para>
        /// <para>   |</para>
        /// <para>   |</para>
        /// <para>   |-----------------&gt;x</para>
        /// <para>(0, 0)</para>
        /// </summary>
        /// <param name="node"></param>
        public static void Layout(GLControl node)
        {
            if (node == null)
            {
                return;
            }

            var  layoutEvent      = node;
            bool cancelTreeLayout = layoutEvent.DoBeforeLayout();

            var parent = node.Parent;

            if ((parent != null) && (!cancelTreeLayout))
            {
                NonRootNodeLayout(node, parent);
            }

            layoutEvent.DoAfterLayout();

            node.UpdateAbsoluteLocation();

            foreach (var item in node.Children)
            {
                GLControl.Layout(item);
            }

            if (parent != null)
            {
                node.parentLastWidth  = parent.width;
                node.parentLastHeight = parent.height;
            }
        }