コード例 #1
0
ファイル: Scale.cs プロジェクト: lmingle/library
        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();
        }
コード例 #2
0
ファイル: PaddingTests.cs プロジェクト: lmingle/library
 public void Measure_NotEnoughHeight()
 {
     TestPlan
     .For(GetPadding)
     .MeasureElement(new Size(20, 300))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #3
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();
        }
コード例 #4
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));
        }
コード例 #5
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));
        }
コード例 #6
0
 public void Measure_Wrap()
 {
     TestPlan
     .For(GetLayers)
     .MeasureElement(new Size(800, 600))
     .ExpectChildMeasure(MainLayer, new Size(800, 600), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #7
0
ファイル: ColumnTests.cs プロジェクト: lmingle/library
 public void Measure_ReturnsWrap_WhenFirstChildWraps()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #8
0
ファイル: ColumnTests.cs プロジェクト: lmingle/library
 public void Draw_WhenFirstChildWraps()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .DrawElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
     .CheckDrawResult();
 }
コード例 #9
0
ファイル: PaddingTests.cs プロジェクト: lmingle/library
 public void Measure_AcceptsWrap()
 {
     TestPlan
     .For(GetPadding)
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(340, 260), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #10
0
ファイル: Line.cs プロジェクト: lmingle/library
 internal override SpacePlan Measure(Size availableSpace)
 {
     return(Type switch
     {
         LineType.Vertical when availableSpace.Width + Infrastructure.Size.Epsilon >= Size => SpacePlan.FullRender(Size, 0),
         LineType.Horizontal when availableSpace.Height + Infrastructure.Size.Epsilon >= Size => SpacePlan.FullRender(0, Size),
         _ => SpacePlan.Wrap()
     });
コード例 #11
0
ファイル: ColumnTests.cs プロジェクト: lmingle/library
 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));
 }
コード例 #12
0
 public void Measure_MinWidth_ExpectWrap()
 {
     TestPlan
     .For(x => new Constrained
     {
         MinWidth = 100
     })
     .MeasureElement(new Size(50, 400))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #13
0
 public void Measure_MinHeight_ExpectWrap()
 {
     TestPlan
     .For(x => new Constrained
     {
         MinHeight = 100
     })
     .MeasureElement(new Size(400, 50))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #14
0
 public void Measure_ReturnsWrap_WhenAfterReturnsPartialRender()
 {
     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.PartialRender(100, 50))
     .ExpectChildMeasure("content", new Size(400, 250), SpacePlan.FullRender(100, 100))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #15
0
ファイル: EnsureSpace.cs プロジェクト: lmingle/library
        internal override SpacePlan Measure(Size availableSpace)
        {
            var measurement = base.Measure(availableSpace);

            if (measurement.Type == SpacePlanType.PartialRender && availableSpace.Height < MinHeight)
            {
                return(SpacePlan.Wrap());
            }

            return(measurement);
        }
コード例 #16
0
 private static void Measure_Wrap <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.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #17
0
 public void Measure_ReturnsWrap_WhenChildReturnsWrap()
 {
     TestPlan
     .For(x => new Extend
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(400, 200))
     .ExpectChildMeasure(new Size(400, 200), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #18
0
ファイル: ShowEntireTests.cs プロジェクト: lmingle/library
 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());
 }
コード例 #19
0
ファイル: BoxTests.cs プロジェクト: lmingle/library
 public void Draw_Wrap()
 {
     TestPlan
     .For(x => new MinimalBox
     {
         Child = x.CreateChild()
     })
     .DrawElement(new Size(400, 300))
     .ExpectChildMeasure(expectedInput: new Size(400, 300), returns: SpacePlan.Wrap())
     .CheckDrawResult();
 }
コード例 #20
0
ファイル: ShowEntire.cs プロジェクト: lmingle/library
        internal override SpacePlan Measure(Size availableSpace)
        {
            var childMeasurement = base.Measure(availableSpace);

            if (childMeasurement.Type == SpacePlanType.FullRender)
            {
                return(childMeasurement);
            }

            return(SpacePlan.Wrap());
        }
コード例 #21
0
 public void Measure_Wrap()
 {
     TestPlan
     .For(x => new Unconstrained
     {
         Child = x.CreateChild()
     })
     .MeasureElement(new Size(900, 800))
     .ExpectChildMeasure(Size.Max, SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #22
0
 public void Draw_SkipWhenChildWraps()
 {
     TestPlan
     .For(x => new Unconstrained
     {
         Child = x.CreateChild()
     })
     .DrawElement(new Size(900, 800))
     .ExpectChildMeasure(Size.Max, SpacePlan.Wrap())
     .CheckDrawResult();
 }
コード例 #23
0
 public void Measure_MaxHeight_ExpectWrap()
 {
     TestPlan
     .For(x => new Constrained
     {
         MaxHeight = 100,
         Child     = x.CreateChild()
     })
     .MeasureElement(new Size(400, 200))
     .ExpectChildMeasure(new Size(400, 100), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #24
0
ファイル: ColumnTests.cs プロジェクト: lmingle/library
 public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
 {
     TestPlan
     .For(CreateColumnWithTwoItems)
     .DrawElement(new Size(400, 300))
     .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
     .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
     .ExpectCanvasTranslate(0, 0)
     .ExpectChildDraw("first", new Size(400, 100))
     .ExpectCanvasTranslate(0, 0)
     .CheckDrawResult();
 }
コード例 #25
0
 public void Measure_FitWidth_NotEnoughSpace()
 {
     TestPlan
     .For(x => new AspectRatio
     {
         Child  = x.CreateChild(),
         Option = AspectRatioOption.FitWidth,
         Ratio  = 2f
     })
     .MeasureElement(new Size(400, 199))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #26
0
ファイル: EnsureSpaceTests.cs プロジェクト: lmingle/library
 public void Measure_ReturnsWrap_WhenChildReturnsPartialRender_AndNotEnoughSpace()
 {
     TestPlan
     .For(x => new EnsureSpace
     {
         Child     = x.CreateChild(),
         MinHeight = 200
     })
     .MeasureElement(new Size(400, 100))
     .ExpectChildMeasure(new Size(400, 100), SpacePlan.PartialRender(300, 50))
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #27
0
ファイル: SimpleRotateTests.cs プロジェクト: lmingle/library
 public void Measure_Wrap()
 {
     TestPlan
     .For(x => new SimpleRotate
     {
         Child     = x.CreateChild(),
         TurnCount = 0
     })
     .MeasureElement(new Size(400, 300))
     .ExpectChildMeasure(new Size(400, 300), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #28
0
 public void Measure_FitWidth_EnoughSpace_Wrap()
 {
     TestPlan
     .For(x => new AspectRatio
     {
         Child  = x.CreateChild(),
         Option = AspectRatioOption.FitArea,
         Ratio  = 2f
     })
     .MeasureElement(new Size(400, 201))
     .ExpectChildMeasure(new Size(400, 200), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #29
0
ファイル: ScaleTests.cs プロジェクト: lmingle/library
 public void Measure_Wrap()
 {
     TestPlan
     .For(x => new Scale
     {
         Child  = x.CreateChild(),
         ScaleX = 3,
         ScaleY = 2
     })
     .MeasureElement(new Size(900, 800))
     .ExpectChildMeasure(new Size(300, 400), SpacePlan.Wrap())
     .CheckMeasureResult(SpacePlan.Wrap());
 }
コード例 #30
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();
        }