public Size GetPreferredSize(Size proposedSize)
        {
            var padding   = Parent?.LogicalToDeviceUnits(Padding.Horizontal) ?? Padding.Horizontal;
            var font_size = Parent?.LogicalToDeviceUnits(Theme.FontSize) ?? Theme.FontSize;
            var text_size = (int)Math.Round(TextMeasurer.MeasureText(Text, Theme.UIFont, font_size));

            return(new Size(text_size + padding, Bounds.Height));
        }
Exemple #2
0
        public virtual Size GetPreferredSize(Size proposedSize)
        {
            var owner = OwnerControl;

            if (owner is Menu menu)
            {
                var padding   = menu.LogicalToDeviceUnits(Padding.Horizontal);
                var font_size = menu.LogicalToDeviceUnits(Theme.FontSize);
                var text_size = (int)Math.Round(TextMeasurer.MeasureText(Text, Theme.UIFont, font_size).Width);

                return(new Size(text_size + padding, Bounds.Height));
            }

            if (owner is ToolBar bar)
            {
                var width     = bar.LogicalToDeviceUnits(Padding.Horizontal);
                var font_size = bar.LogicalToDeviceUnits(Theme.FontSize);
                width += (int)Math.Round(TextMeasurer.MeasureText(Text, Theme.UIFont, font_size).Width);

                if (!(Image is null))
                {
                    width += bar.LogicalToDeviceUnits(20);
                }

                if (HasItems)
                {
                    width += bar.LogicalToDeviceUnits(14);
                }

                return(new Size(width, Bounds.Height));
            }

            if (owner is MenuDropDown dropdown)
            {
                var padding   = dropdown.LogicalToDeviceUnits(Padding);
                var font_size = dropdown.LogicalToDeviceUnits(Theme.FontSize);
                var text_size = TextMeasurer.MeasureText(Text, Theme.UIFont, font_size);

                return(new Size((int)Math.Round(text_size.Width, 0, MidpointRounding.AwayFromZero) + padding.Horizontal + dropdown.LogicalToDeviceUnits(70), (int)Math.Round(text_size.Height, 0, MidpointRounding.AwayFromZero) + dropdown.LogicalToDeviceUnits(8)));
            }

            return(proposedSize);
        }