public override void CalculatePreferredSize(LayoutVariables vars)
        {
            IEnumerator e = _panels.GetEnumerator();

            int prefWidth  = 0;
            int prefHeight = 0;

            while (e.MoveNext())
            {
                ((InterfaceNode)e.Current).CalculatePreferredSize(vars);
                PreferredSize size = ((InterfaceNode)e.Current).PreferredSize;

                if (prefWidth == PreferredSize.INFINITE || size.Width == PreferredSize.INFINITE)
                {
                    prefWidth = PreferredSize.INFINITE;
                }
                else
                {
                    prefWidth = Math.Max(size.Width, prefWidth);
                }

                if (prefHeight == PreferredSize.INFINITE || size.Height == PreferredSize.INFINITE)
                {
                    prefHeight = PreferredSize.INFINITE;
                }
                else
                {
                    prefHeight += size.Height;
                }
            }

            _prefSize = new PUC.Layout.PreferredSize(prefWidth, prefHeight);
        }
示例#2
0
文件: PanelNode.cs 项目: jwnichls/puc
        public override void CalculatePreferredSize(LayoutVariables vars)
        {
            IEnumerator e = _rows.GetEnumerator();

            int prefWidth  = 0;
            int prefHeight = 0;

            Row lastRow = null;

            while (e.MoveNext())
            {
                ((Row)e.Current).CalculatePreferredSize(vars);

                PreferredSize size = ((Row)e.Current).PreferredSize;

                if (prefWidth == PreferredSize.INFINITE || size.Width == PreferredSize.INFINITE)
                {
                    prefWidth = PreferredSize.INFINITE;
                }
                else
                {
                    prefWidth = Math.Max(size.Width, prefWidth);
                }

                if (prefHeight == PreferredSize.INFINITE || size.Height == PreferredSize.INFINITE)
                {
                    prefHeight = PreferredSize.INFINITE;
                }
                else
                {
                    prefHeight += size.Height;

                    if (lastRow != null)
                    {
                        int baselineSpace = (lastRow.PreferredSize.Height - lastRow.MaximumTextOffset) +
                                            ((Row)e.Current).MaximumTextOffset + vars.RowPadding;

                        if (baselineSpace < vars.BaselineSpacing)
                        {
                            prefHeight += vars.BaselineSpacing - baselineSpace;
                        }
                    }

                    lastRow = (Row)e.Current;
                }
            }

            _prefSize = new PUC.Layout.PreferredSize(prefWidth, prefHeight);
        }
示例#3
0
        public override void CalculatePreferredSize(LayoutVariables vars)
        {
            LabelCIO       labelCIO  = (LabelCIO)_CIOs[LABEL_INDEX];
            StateLinkedCIO stateCIO1 = (StateLinkedCIO)_CIOs[COMPONENT1_INDEX];
            StateLinkedCIO stateCIO2 = (StateLinkedCIO)_CIOs[COMPONENT2_INDEX];

            int prefWidth = 0, prefHeight = 0;

            PreferredSize lblSize = new PreferredSize(0, 0);

            if (labelCIO != null)
            {
                labelCIO.UseMinimumLabel();
                lblSize = labelCIO.GetPreferredSize();
            }

            PreferredSize cio1Size = stateCIO1.GetPreferredSize();
            PreferredSize cio2Size = stateCIO2.GetPreferredSize();

            if (lblSize.Height == PreferredSize.INFINITE ||
                cio1Size.Height == PreferredSize.INFINITE ||
                cio2Size.Height == PreferredSize.INFINITE)
            {
                prefHeight = PreferredSize.INFINITE;
            }

            if (lblSize.Width == PreferredSize.INFINITE ||
                cio1Size.Width == PreferredSize.INFINITE ||
                cio2Size.Width == PreferredSize.INFINITE)
            {
                prefWidth = PreferredSize.INFINITE;
            }


            if (_parent.IsVertical())
            {
                if (prefHeight != PreferredSize.INFINITE)
                {
                    prefHeight = lblSize.Height + cio1Size.Height +
                                 cio2Size.Height + 2 * vars.RowPadding;
                }

                if (prefWidth != PreferredSize.INFINITE)
                {
                    prefWidth = Math.Max(lblSize.Width,
                                         Math.Max(cio1Size.Width, cio2Size.Width));
                }
            }
            else
            {
                if (prefHeight != PreferredSize.INFINITE)
                {
                    prefHeight = Math.Max(cio1Size.Height, cio2Size.Height);
                }

                if (prefWidth != PreferredSize.INFINITE)
                {
                    prefWidth =
                        (int)Math.Ceiling((cio1Size.Width + cio2Size.Width + 2 * vars.RowPadding) / (1.0 - vars.OneColLabelPcnt));
                }
            }

            _prefSize = new PUC.Layout.PreferredSize(prefWidth, prefHeight);
        }