Example #1
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            if (NormalizedTurnCount == 0 || NormalizedTurnCount == 2)
            {
                return(base.Measure(availableSpace));
            }

            availableSpace = new Size(availableSpace.Height, availableSpace.Width);
            var childSpace = base.Measure(availableSpace);

            if (childSpace.Type == SpacePlanType.Wrap)
            {
                return(SpacePlan.Wrap());
            }

            var targetSpace = new Size(childSpace.Height, childSpace.Width);

            if (childSpace.Type == SpacePlanType.FullRender)
            {
                return(SpacePlan.FullRender(targetSpace));
            }

            if (childSpace.Type == SpacePlanType.PartialRender)
            {
                return(SpacePlan.PartialRender(targetSpace));
            }

            throw new ArgumentException();
        }
Example #2
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            if (!RenderingQueue.Any())
            {
                return(SpacePlan.FullRender(Size.Zero));
            }

            var lines = DivideTextItemsIntoLines(availableSpace.Width, availableSpace.Height).ToList();

            if (!lines.Any())
            {
                return(SpacePlan.Wrap());
            }

            var width  = lines.Max(x => x.Width);
            var height = lines.Sum(x => x.LineHeight);

            if (width > availableSpace.Width + Size.Epsilon || height > availableSpace.Height + Size.Epsilon)
            {
                return(SpacePlan.Wrap());
            }

            var fullyRenderedItemsCount = lines
                                          .SelectMany(x => x.Elements)
                                          .GroupBy(x => x.Item)
                                          .Count(x => x.Any(y => y.Measurement.IsLast));

            if (fullyRenderedItemsCount == RenderingQueue.Count)
            {
                return(SpacePlan.FullRender(width, height));
            }

            return(SpacePlan.PartialRender(width, height));
        }
Example #3
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            if (!Cells.Any())
            {
                return(SpacePlan.FullRender(Size.Zero));
            }

            UpdateColumnsWidth(availableSpace.Width);
            var renderingCommands = PlanLayout(availableSpace);

            if (!renderingCommands.Any())
            {
                return(SpacePlan.Wrap());
            }

            var width     = Columns.Sum(x => x.Width);
            var height    = renderingCommands.Max(x => x.Offset.Y + x.Size.Height);
            var tableSize = new Size(width, height);

            if (tableSize.Width > availableSpace.Width + Size.Epsilon)
            {
                return(SpacePlan.Wrap());
            }

            return(FindLastRenderedRow(renderingCommands) == StartingRowsCount
                ? SpacePlan.FullRender(tableSize)
                : SpacePlan.PartialRender(tableSize));
        }
Example #4
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            var targetSpace = new Size(
                Math.Abs(availableSpace.Width / ScaleX),
                Math.Abs(availableSpace.Height / ScaleY));

            var measure = base.Measure(targetSpace);

            if (measure.Type == SpacePlanType.Wrap)
            {
                return(SpacePlan.Wrap());
            }

            var targetSize = new Size(
                Math.Abs(measure.Width * ScaleX),
                Math.Abs(measure.Height * ScaleY));

            if (measure.Type == SpacePlanType.PartialRender)
            {
                return(SpacePlan.PartialRender(targetSize));
            }

            if (measure.Type == SpacePlanType.FullRender)
            {
                return(SpacePlan.FullRender(targetSize));
            }

            throw new ArgumentException();
        }
Example #5
0
 public void Measure_PartialRender()
 {
     TestPlan
     .For(GetLayers)
     .MeasureElement(new Size(800, 600))
     .ExpectChildMeasure(MainLayer, new Size(800, 600), SpacePlan.PartialRender(700, 500))
     .CheckMeasureResult(SpacePlan.PartialRender(700, 500));
 }
Example #6
0
 public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(300, 200))
     .CheckMeasureResult(SpacePlan.PartialRender(300, 200));
 }
Example #7
0
 public void Measure_AcceptsPartialRender()
 {
     TestPlan
     .For(GetPadding)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(340, 260), SpacePlan.PartialRender(40, 160))
     .CheckMeasureResult(SpacePlan.PartialRender(100, 200));
 }
Example #8
0
 public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
     .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.PartialRender(200, 100));
 }
Example #9
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            if (IsRendered)
            {
                return(SpacePlan.FullRender(0, 0));
            }

            return(SpacePlan.PartialRender(Size.Zero));
        }
Example #10
0
 public void Measure_ReturnsWrap_WhenContentReturnsPartialRender()
 {
     TestPlan
     .For(CreateDecoration)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure("before", new Size(400, 300), SpacePlan.FullRender(100, 50))
     .ExpectChildMeasure("after", new Size(400, 300), SpacePlan.FullRender(100, 50))
     .ExpectChildMeasure("content", new Size(400, 200), SpacePlan.PartialRender(150, 100))
     .CheckMeasureResult(SpacePlan.PartialRender(150, 200));
 }
Example #11
0
 public void Measure_ReturnsWrap_WhenElementReturnsPartialRender()
 {
     TestPlan
     .For(x => new ShowEntire
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(400, 300), SpacePlan.PartialRender(300, 200))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
Example #12
0
 private static void Measure_PartialRender <TElement>() where TElement : Element, IContainer, new()
 {
     TestPlan
     .For(x => new TElement
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(400, 300), SpacePlan.PartialRender(200, 100))
     .CheckMeasureResult(SpacePlan.PartialRender(200, 100));
 }
Example #13
0
 public void Measure_PartialRender()
 {
     TestPlan
     .For(x => new Unconstrained
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(900, 800))
     .ExpectChildMeasure(Size.Max, SpacePlan.PartialRender(1200, 1600))
     .CheckMeasureResult(SpacePlan.PartialRender(Size.Zero));
 }
Example #14
0
 public void Draw_WhenFirstChildPartiallyRenders()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .DrawElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(200, 100))
     .ExpectCanvasTranslate(0, 0)
     .ExpectChildDraw("first", new Size(400, 100))
     .ExpectCanvasTranslate(0, 0)
     .CheckDrawResult();
 }
Example #15
0
 public void Measure_PartialRender()
 {
     TestPlan
     .For(x => new MinimalBox
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(expectedInput: new Size(400, 300), returns: SpacePlan.PartialRender(200, 100))
     .ExpectChildDraw(new Size(200, 100))
     .CheckDrawResult();
 }
Example #16
0
 public void Draw_UsesEmpty_WhenFirstChildIsRendered()
 {
     TestPlan
     .For(CreateColumnWithTwoItemsWhereFirstIsFullyRendered)
     .DrawElement(new Size(400, 300))
     .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.PartialRender(200, 300))
     .ExpectCanvasTranslate(0, 0)
     .ExpectChildDraw("second", new Size(400, 300))
     .ExpectCanvasTranslate(0, 0)
     .CheckState <Column>(x => x.Items.First().IsRendered)
     .CheckDrawResult();
 }
Example #17
0
 public void Measure_PartialRender()
 {
     TestPlan
     .For(x => new SimpleRotate
     {
         Child     = x.CreateChild(),
         TurnCount = 0
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(400, 300), SpacePlan.PartialRender(300, 200))
     .CheckMeasureResult(SpacePlan.PartialRender(300, 200));
 }
Example #18
0
 public void Measure_ReturnsPartialRender_WhenChildReturnsPartialRender_AndEnoughSpace()
 {
     TestPlan
     .For(x => new EnsureSpace
     {
         Child     = x.CreateChild(),
         MinHeight = 200
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(400, 300), SpacePlan.PartialRender(300, 250))
     .CheckMeasureResult(SpacePlan.PartialRender(300, 250));
 }
Example #19
0
 public void Measure_MaxWidth_PartialRender()
 {
     TestPlan
     .For(x => new Constrained
     {
         MaxWidth = 100,
         Child    = x.CreateChild()
     })
     .MeasureElement(new Size(200, 400))
     .ExpectChildMeasure(new Size(100, 400), SpacePlan.PartialRender(75, 400))
     .CheckMeasureResult(SpacePlan.PartialRender(75, 400));
 }
Example #20
0
 public void Measure_MaxHeight_PartialRender()
 {
     TestPlan
     .For(x => new Constrained
     {
         MaxHeight = 100,
         Child     = x.CreateChild()
     })
     .MeasureElement(new Size(400, 200))
     .ExpectChildMeasure(new Size(400, 100), SpacePlan.PartialRender(400, 75))
     .CheckMeasureResult(SpacePlan.PartialRender(400, 75));
 }
Example #21
0
 public void Draw_WhenChildPartiallyRenders()
 {
     TestPlan
     .For(x => new Unconstrained
     {
         Child = x.CreateChild()
     })
     .DrawElement(new Size(900, 800))
     .ExpectChildMeasure(Size.Max, SpacePlan.PartialRender(1200, 1600))
     .ExpectChildDraw(new Size(1200, 1600))
     .CheckDrawResult();
 }
Example #22
0
 public void Measure_ReturnsPartialRender_WhenChildReturnsPartialRender()
 {
     TestPlan
     .For(x => new Extend
     {
         Child            = x.CreateChild(),
         ExtendHorizontal = true,
         ExtendVertical   = true
     })
     .MeasureElement(new Size(400, 200))
     .ExpectChildMeasure(new Size(400, 200), SpacePlan.PartialRender(300, 100))
     .CheckMeasureResult(SpacePlan.PartialRender(400, 200));
 }
Example #23
0
 public void Measure_PartialRender()
 {
     TestPlan
     .For(x => new Scale
     {
         Child  = x.CreateChild(),
         ScaleX = 3,
         ScaleY = 2
     })
     .MeasureElement(new Size(900, 800))
     .ExpectChildMeasure(new Size(300, 400), SpacePlan.PartialRender(200, 350))
     .CheckMeasureResult(SpacePlan.PartialRender(600, 700));
 }
Example #24
0
 public void Measure_FitWidth_EnoughSpace_PartialRender()
 {
     TestPlan
     .For(x => new AspectRatio
     {
         Child  = x.CreateChild(),
         Option = AspectRatioOption.FitArea,
         Ratio  = 2f
     })
     .MeasureElement(new Size(400, 201))
     .ExpectChildMeasure(new Size(400, 200), SpacePlan.PartialRender(100, 50))
     .CheckMeasureResult(SpacePlan.PartialRender(400, 200));
 }
Example #25
0
        public void Measure()
        {
            TestPlan
            .For(x => new PageBreak())

            .MeasureElement(new Size(400, 300))
            .CheckMeasureResult(SpacePlan.PartialRender(Size.Zero))

            .DrawElement(new Size(400, 300))
            .CheckDrawResult()

            .MeasureElement(new Size(500, 400))
            .CheckMeasureResult(SpacePlan.FullRender(0, 0));
        }
Example #26
0
        public void Draw_WhenSecondaryLayerReturnsWrap_SkipThatLayer_1()
        {
            TestPlan
            .For(GetLayers)
            .MeasureElement(new Size(800, 600))

            .ExpectChildMeasure(BackgroundLayer, new Size(800, 600), SpacePlan.PartialRender(100, 200))
            .ExpectChildMeasure(MainLayer, new Size(800, 600), SpacePlan.PartialRender(200, 300))
            .ExpectChildMeasure(ForegroundLayer, new Size(800, 600), SpacePlan.Wrap())

            .ExpectChildDraw(BackgroundLayer, new Size(800, 600))
            .ExpectChildDraw(MainLayer, new Size(800, 600))

            .CheckDrawResult();
        }
Example #27
0
        internal override SpacePlan Measure(Size availableSpace)
        {
            var childSize = base.Measure(Size.Max);

            if (childSize.Type == SpacePlanType.PartialRender)
            {
                return(SpacePlan.PartialRender(0, 0));
            }

            if (childSize.Type == SpacePlanType.FullRender)
            {
                return(SpacePlan.FullRender(0, 0));
            }

            return(childSize);
        }
Example #28
0
        public void Draw_Simple()
        {
            TestPlan
            .For(GetLayers)
            .MeasureElement(new Size(800, 600))

            .ExpectChildMeasure(BackgroundLayer, new Size(800, 600), SpacePlan.FullRender(100, 200))
            .ExpectChildMeasure(MainLayer, new Size(800, 600), SpacePlan.PartialRender(200, 300))
            .ExpectChildMeasure(ForegroundLayer, new Size(800, 600), SpacePlan.FullRender(300, 400))


            .ExpectChildDraw(BackgroundLayer, new Size(800, 600))
            .ExpectChildDraw(MainLayer, new Size(800, 600))
            .ExpectChildDraw(ForegroundLayer, new Size(800, 600))

            .CheckDrawResult();
        }
Example #29
0
        public void Draw_HorizontalCenter_VerticalCenter()
        {
            TestPlan
            .For(x => new Alignment
            {
                Horizontal = HorizontalAlignment.Center,
                Vertical   = VerticalAlignment.Middle,

                Child = x.CreateChild()
            })
            .DrawElement(new Size(1000, 500))
            .ExpectChildMeasure(expectedInput: new Size(1000, 500), returns: SpacePlan.PartialRender(new Size(400, 200)))
            .ExpectCanvasTranslate(new Position(300, 150))
            .ExpectChildDraw(new Size(400, 200))
            .ExpectCanvasTranslate(new Position(-300, -150))
            .CheckDrawResult();
        }
Example #30
0
        public void Draw()
        {
            TestPlan
            .For(x => new ShowOnce()
            {
                Child = x.CreateChild()
            })

            // Measure the element and return result
            .MeasureElement(new Size(300, 200))
            .ExpectChildMeasure("child", new Size(300, 200), SpacePlan.PartialRender(new Size(200, 200)))
            .CheckMeasureResult(SpacePlan.PartialRender(new Size(200, 200)))

            // Draw element partially
            .DrawElement(new Size(200, 200))
            .ExpectChildMeasure(new Size(200, 200), SpacePlan.PartialRender(new Size(200, 200)))
            .ExpectChildDraw(new Size(200, 200))
            .CheckDrawResult()

            // Element was not fully drawn
            // It should be measured again for rendering on next page
            .MeasureElement(new Size(800, 200))
            .ExpectChildMeasure(new Size(800, 200), SpacePlan.FullRender(new Size(400, 200)))
            .CheckMeasureResult(SpacePlan.FullRender(new Size(400, 200)))

            // Draw element on next page
            // Element was fully drawn at this point
            .DrawElement(new Size(400, 200))
            .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(new Size(400, 200)))
            .ExpectChildDraw(new Size(400, 200))
            .CheckDrawResult()

            // In the next attempt of measuring element, it should behave like empty parent.
            .MeasureElement(new Size(600, 200))
            .CheckMeasureResult(SpacePlan.FullRender(0, 0))

            // In the next attempt of measuring element, it should not draw its child
            .DrawElement(new Size(600, 200))
            .CheckDrawResult();
        }