Example #1
0
        public void flow_layout_estimates_accurate_height()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 30), FlowLayoutStyle.Empty,
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 5)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(13, 7)),
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(12, 3)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 12)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(8, 15)),
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(10, 5))
                                                         );

            var result = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(result));
        }
Example #2
0
        public void flow_layout_supports_horizontal_alignment_center()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 30), new FlowLayoutStyle(alignment: Alignment.Center),
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 10)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 10)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 10)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(7, 10))
                                                         );

            var result = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(result));
        }
Example #3
0
        public void flow_layout_supports_padding_between_individual_items()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 30), new FlowLayoutStyle(paddingBetweenItemsInEachRow: 4),
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 10)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 10)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 10)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(7, 10))
                                                         );

            var result = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(result));
        }
Example #4
0
        public void flow_layout_halts_on_illegal_overflow()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 20), new FlowLayoutStyle(overflowRule: OverflowRule.EverythingMustBeInside),
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 10)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 10)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 10)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(8, 12)),
                                                         LayoutNode.Leaf("itemG", LayoutSize.Pixels(9, 10))
                                                         );

            var result = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(result));
        }
Example #5
0
        public void fixed_aspect_with_spacers()
        {
            var layout = LayoutNode.VerticalParent("root", LayoutSize.Pixels(50, 80), LayoutStyle.Empty,
                                                   LayoutNode.StretchedSpacer(),
                                                   LayoutNode.HorizontalParent("aligner", LayoutSize.StretchedBoth(), LayoutStyle.Empty,
                                                                               LayoutNode.StretchedSpacer(),
                                                                               LayoutNode.Leaf("fixed-aspect", LayoutSize.FixedAspectRatio(16, 9)),
                                                                               LayoutNode.StretchedSpacer()
                                                                               ),
                                                   LayoutNode.StretchedSpacer()
                                                   );

            var firstBakeResult = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(firstBakeResult));
        }
Example #6
0
        public void create_window_test()
        {
            var headerHeight = 8;
            var layout       = LayoutNode.VerticalParent("root", LayoutSize.Pixels(80, 40), LayoutStyle.Empty,
                                                         LayoutNode.HorizontalParent("header", LayoutSize.StretchedHorizontally(headerHeight), new LayoutStyle(padding: 2),
                                                                                     LayoutNode.StretchedSpacer(),
                                                                                     LayoutNode.Leaf("minimize", LayoutSize.Square(headerHeight)),
                                                                                     LayoutNode.Leaf("fullscreen", LayoutSize.Square(headerHeight)),
                                                                                     LayoutNode.Leaf("close", LayoutSize.Square(headerHeight))
                                                                                     ),
                                                         LayoutNode.Leaf("canvas", LayoutSize.StretchedBoth())
                                                         );

            var firstBakeResult = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(firstBakeResult));
        }
Example #7
0
        public void flow_layout_allows_forced_linebreaks()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 40), FlowLayoutStyle.Empty,
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 10)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 10)),
                                                         FlowLayoutInstruction.Linebreak,
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 5)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 7)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(7, 5)),
                                                         FlowLayoutInstruction.Linebreak,
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(8, 10)),
                                                         LayoutNode.Leaf("itemG", LayoutSize.Pixels(9, 10))
                                                         );

            var result = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(result));
        }
Example #8
0
        public void vertical_stretch_test()
        {
            var layout = LayoutNode.VerticalParent("root", LayoutSize.Pixels(50, 80), LayoutStyle.Empty,
                                                   LayoutNode.HorizontalParent("group-1", LayoutSize.Pixels(50, 20), new LayoutStyle(margin: new Point(3, 3)),
                                                                               LayoutNode.Leaf("tall-item", LayoutSize.StretchedVertically(15)),
                                                                               LayoutNode.Leaf("both-item", LayoutSize.StretchedBoth())
                                                                               ),
                                                   LayoutNode.StretchedSpacer(),
                                                   LayoutNode.VerticalParent("group-2", LayoutSize.Pixels(50, 20), new LayoutStyle(margin: new Point(3, 3)),
                                                                             LayoutNode.Leaf("tall-item-2", LayoutSize.StretchedVertically(15)),
                                                                             LayoutNode.Leaf("both-item-2", LayoutSize.StretchedBoth())
                                                                             )
                                                   );

            var firstBakeResult = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(firstBakeResult));
        }
Example #9
0
        public void verify_used_rows_vertical()
        {
            var layout = FlowLayout.VerticalFlowParent("root", LayoutSize.Pixels(40, 30), new FlowLayoutStyle(alignment: Alignment.Center, paddingBetweenItemsInEachRow: 2, paddingBetweenRows: 2),
                                                       LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 5)),
                                                       LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 5)),
                                                       FlowLayoutInstruction.Linebreak,
                                                       LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 5)),
                                                       FlowLayoutInstruction.Linebreak,
                                                       LayoutNode.Leaf("itemD", LayoutSize.Pixels(10, 5)),
                                                       LayoutNode.Leaf("itemE", LayoutSize.Pixels(13, 5)),
                                                       LayoutNode.Leaf("itemF", LayoutSize.Pixels(7, 5)),
                                                       LayoutNode.Leaf("itemG", LayoutSize.Pixels(7, 5))
                                                       );

            var result = layout.Bake();

            Approvals.Verify(
                $"Layout\n{LayoutNodeUtils.DrawResult(result)}\n\nUsed Row Rectangles:\n{LayoutNodeUtils.DrawUsedRectangles(result, result.Rows)}\n\nJust Items:\n{LayoutNodeUtils.DrawItems(result, result.Rows)}"
                );
        }
Example #10
0
        public void nested_layout_test()
        {
            var layout = LayoutNode.VerticalParent("root", LayoutSize.Pixels(50, 100), LayoutStyle.Empty,
                                                   LayoutNode.Leaf("item-1", LayoutSize.StretchedHorizontally(10)),
                                                   LayoutNode.HorizontalParent("item-2", LayoutSize.StretchedHorizontally(20), new LayoutStyle(new Point(2, 3), 0),
                                                                               LayoutNode.Leaf("item-2a", LayoutSize.StretchedHorizontally(10)),
                                                                               LayoutNode.Leaf("item-2b", LayoutSize.StretchedHorizontally(10)),
                                                                               LayoutNode.Leaf("item-2c", LayoutSize.StretchedHorizontally(10))
                                                                               ),
                                                   LayoutNode.VerticalParent("item-3", LayoutSize.StretchedBoth(), new LayoutStyle(new Point(0, 2), 3),
                                                                             LayoutNode.Leaf("item-3a", LayoutSize.StretchedBoth()),
                                                                             LayoutNode.Leaf("item-3b", LayoutSize.StretchedBoth()),
                                                                             LayoutNode.Leaf("item-3c", LayoutSize.StretchedHorizontally(10))
                                                                             )
                                                   );

            var layoutResult = layout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(layoutResult));
        }
Example #11
0
        public void fixed_aspect_no_spacers()
        {
            var layout = LayoutNode.VerticalParent("root", LayoutSize.Pixels(36, 64), LayoutStyle.Empty,
                                                   LayoutNode.HorizontalParent("fixed-aspect", LayoutSize.FixedAspectRatio(16, 9), new LayoutStyle(margin: new Point(3, 3)),
                                                                               LayoutNode.Leaf("tall-item", LayoutSize.StretchedVertically(15))
                                                                               )
                                                   );

            var firstBakeResult  = layout.Bake();                                        // wide in tall
            var secondBakeResult = layout.RootNode.GetResized(new Point(64, 36)).Bake(); // wide in wide (perfect match)
            var thirdBakeResult  = layout.RootNode.GetResized(new Point(100, 36)).Bake();

            Approvals.Verify(
                LayoutNodeUtils.DrawResult(firstBakeResult)
                + "\n\n" +
                LayoutNodeUtils.DrawResult(secondBakeResult)
                + "\n\n" +
                LayoutNodeUtils.DrawResult(thirdBakeResult)
                );
        }
Example #12
0
        public void all_alignment_scenarios_multiple_objects_horizontal()
        {
            var layout = LayoutNode.HorizontalParent("root", LayoutSize.Pixels(20, 20), new LayoutStyle(margin: new Point(3, 1), padding: 2, Alignment.TopLeft),
                                                     LayoutNode.Leaf("objA", LayoutSize.Pixels(4, 6)),
                                                     LayoutNode.Leaf("objB", LayoutSize.Pixels(4, 6))
                                                     );

            var result = new[] {
                layout.Bake(),
                layout.RootNode.GetRealigned(Alignment.TopCenter).Bake(),
                layout.RootNode.GetRealigned(Alignment.TopRight).Bake(),
                layout.RootNode.GetRealigned(Alignment.CenterLeft).Bake(),
                layout.RootNode.GetRealigned(Alignment.Center).Bake(),
                layout.RootNode.GetRealigned(Alignment.CenterRight).Bake(),
                layout.RootNode.GetRealigned(Alignment.BottomLeft).Bake(),
                layout.RootNode.GetRealigned(Alignment.BottomCenter).Bake(),
                layout.RootNode.GetRealigned(Alignment.BottomRight).Bake(),
            };

            Approvals.Verify(
                LayoutNodeUtils.DrawResult(result[0])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[1])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[2])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[3])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[4])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[5])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[6])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[7])
                + "\n\n" +
                LayoutNodeUtils.DrawResult(result[8])
                );
        }
Example #13
0
        public void resize_and_rebake_test()
        {
            var layout = LayoutNode.VerticalParent("root", LayoutSize.Pixels(50, 50), LayoutStyle.Empty,
                                                   LayoutNode.Leaf("item-1", LayoutSize.StretchedHorizontally(10)),
                                                   LayoutNode.HorizontalParent("item-2", LayoutSize.StretchedHorizontally(20), new LayoutStyle(new Point(2, 3), 0),
                                                                               LayoutNode.Leaf("item-2a", LayoutSize.StretchedHorizontally(10)),
                                                                               LayoutNode.Leaf("item-2b", LayoutSize.StretchedHorizontally(10)),
                                                                               LayoutNode.Leaf("item-2c", LayoutSize.StretchedHorizontally(10))
                                                                               ),
                                                   LayoutNode.VerticalParent("item-3", LayoutSize.StretchedBoth(), new LayoutStyle(new Point(5, 2), 1),
                                                                             LayoutNode.Leaf("item-3a", LayoutSize.StretchedBoth()),
                                                                             LayoutNode.Leaf("item-3b", LayoutSize.StretchedBoth()),
                                                                             LayoutNode.Leaf("item-3c", LayoutSize.StretchedHorizontally(10))
                                                                             )
                                                   );

            var resizedLayout = layout.RootNode.GetResized(new Point(60, 60));

            var firstBakeResult  = layout.Bake();
            var secondBakeResult = resizedLayout.Bake();

            Approvals.Verify(LayoutNodeUtils.DrawResult(firstBakeResult) + "\n\n" + LayoutNodeUtils.DrawResult(secondBakeResult));
        }
Example #14
0
        public void flow_layout_can_permit_overflow_extra_rows()
        {
            var layout = FlowLayout.HorizontalFlowParent("root", LayoutSize.Pixels(40, 20), new FlowLayoutStyle(overflowRule: OverflowRule.Free),
                                                         LayoutNode.Leaf("itemA", LayoutSize.Pixels(12, 10)),
                                                         LayoutNode.Leaf("itemB", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemC", LayoutSize.Pixels(9, 10)),
                                                         LayoutNode.Leaf("itemD", LayoutSize.Pixels(13, 10)),
                                                         LayoutNode.Leaf("itemE", LayoutSize.Pixels(7, 10)),
                                                         LayoutNode.Leaf("itemF", LayoutSize.Pixels(8, 10)),
                                                         LayoutNode.Leaf("itemG", LayoutSize.Pixels(9, 10)),
                                                         LayoutNode.Leaf("itemH", LayoutSize.Pixels(4, 4))
                                                         );

            var result = layout.Bake();

            Approvals.Verify("There are supposed to be a bunch of skipped pixels here: \n\n" + LayoutNodeUtils.DrawResult(result));
        }