using Annulus; using Azimuth; namespace Glass.Testbed { public class FontsTestCase : TestCase { public FontsTestCase(string name) : base(name) { } private const string LoremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud " + "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."; private const int LinesShown = 3; private const int BoxWidth = 340; private static TextMaterial Sample(SpriteFontDefinition font) { return new TextMaterial { Font = font, Text = LoremIpsum, TintColor = System.Drawing.Color.Black, VerticalAlignment = Alignment.Vertical.Top, OverflowBehavior = TextOverflow.Ellipsis, }; } private static Vector BoxSizeFor(SpriteFontDefinition font, Scalar verticalMargin) { return new Vector(BoxWidth, font.LineHeight * LinesShown + 2 * verticalMargin); } private void AddSample(ref Rect row, string face, SpriteFontDefinition font, Vector boxSize) { Rect cell = row.NewCol(boxSize.X, margin: Gutter); AddCaption($"{face} {font.LineHeight}px", ref cell); Add(Sample(font) .BuildControl(Constraints.Tight(boxSize)) .WrapIn(UiPacksheetMaterials.GreenFlatPanel, cell.TopLeft)); } protected override void Populate() { var rows = new[] { new[] { ("Philosopher", Fonts.Philosopher18), ("Liberation Sans", Fonts.LiberationSans16) }, new[] { ("Philosopher", Fonts.Philosopher32), ("Liberation Sans", Fonts.LiberationSans32) }, new[] { ("Philosopher", Fonts.Philosopher64), ("Liberation Sans", Fonts.LiberationSans64) }, }; Scalar verticalMargin = Sample(Fonts.Philosopher32).VerticalMargin; Scalar captionHeight = Widgets.Caption("").Font.LineHeight; foreach (var cells in rows) { Scalar tallest = 0; foreach (var (_, font) in cells) { Scalar boxHeight = BoxSizeFor(font, verticalMargin).Y; if (boxHeight > tallest) { tallest = boxHeight; } } Rect row = ContentAggregator.NewRow(tallest + captionHeight + 4, margin: Gutter); foreach (var (face, font) in cells) { AddSample(ref row, face, font, BoxSizeFor(font, verticalMargin)); } } } } }