public void forced_outerwidth_is_transferred_to_fixed_element()
 {
     var element = new LayoutedElement(new Box(), Children.Empty) { ForcedOuterWidth = 2.cm() };
     var page = Page.First();
     page.Add(new Line(0.cm(), false, element), 0.cm());
     page.Elements.Single().MarginBox.Width.ShouldBe(2.cm());
 }
Exemple #2
0
        protected Line ChildElement(Unit left = default(Unit),
            Unit top = default(Unit),
            Unit innerHeight = default(Unit),
            bool breakable = false,
            bool followLineHeight = false,
            Unit border = default(Unit),
            bool keepWithNextLine = false,
            Behaviors behavior = null,
            IEnumerable<Line> children = null)
        {
            LayoutedElement element;
            if (children == null)
            {
                element = new LayoutedElement(new TestSpecification(), Children.Empty);
            }
            else
            {
                element = new LayoutedElement(new TestSpecification(), new Children(children.GroupBy(x => x.Top).SelectMany(x => x)));
            }

            element.Left = left;
            element.ForcedInnerHeight = innerHeight;
            element.Specification.FollowLineHeight = followLineHeight;
            element.Specification.Breakable = breakable;
            element.Specification.Margins = new Margins { Bottom = border, Left = border, Right = border, Top = border };
            element.Specification.Behavior = behavior ?? new NullBehavior();

            return new Line(top, keepWithNextLine, element);
        }
 public void forced_innerheight_is_transferred_to_fixed_element()
 {
     var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 2.cm() };
     var page = Page.First();
     page.Add(new Line(0.cm(), false, element), 0.cm());
     page.Elements.Single().InnerBox.Height.ShouldBe(2.cm());
 }
Exemple #4
0
 public FixedElement(LayoutedElement element, Unit left, Unit down)
 {
     Name = element.Name;
     Specification = element.Specification;
     MarginBox = new FixedBox(left, down, element.OuterWidth, element.OuterHeight);
     BorderBox = new FixedBox(left, down, element.OuterWidth, element.OuterHeight, element.Specification.Margins);
     InnerBox = new FixedBox(left, down, element.OuterWidth, element.OuterHeight, element.Specification.Edge);
     InnerBoxBeforeSplitOrCrop = new FixedBox(InnerBox.Left, InnerBox.Top, element.InnerWidthBeforeSplitOrCrop, element.InnerHeightBeforeSplitOrCrop);
     VisiblePartOfSpecification = new FixedBox(0.cm(), element.ViewportTop, InnerBox.Width, InnerBox.Height);
 }
        public void element_splitted_twice_views_corrects_parts_of_element()
        {
            var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 40.cm() };
            var result1 = element.Split(15.cm(), 15.cm()).Result;
            var result2 = result1[1].Split(15.cm(), 15.cm()).Result;

            result1[0].ViewportTop.ShouldBe(0.cm());
            result1[1].ViewportTop.ShouldBe(15.cm());
            result2[0].ViewportTop.ShouldBe(result1[1].ViewportTop);
            result2[1].ViewportTop.ShouldBe(30.cm());
        }
Exemple #6
0
 void ConstrainOuterHeightToContainerInnerHeight(LayoutedElement positionedElement, Unit lineTop)
 {
     if (containerInnerHeight != 0.cm() && lineTop + positionedElement.OuterHeight > containerInnerHeight)
         positionedElement.ForcedOuterHeight = containerInnerHeight - lineTop;
 }
Exemple #7
0
        public StopOr<Change<LayoutedElement>> Split(Unit pageHeight, Unit spaceLeftBeforeSplit)
        {
            if (!Breakable)
                return new Stop<Change<LayoutedElement>>();

            var innerSpaceLeftBeforeSplit = spaceLeftBeforeSplit - Edge.TotalVertical;

            innerSpaceLeftBeforeSplit = TryCorrectSpaceLeftBeforeSplit(innerSpaceLeftBeforeSplit);

            var part2InnerHeightAfterSplit = InnerHeight - innerSpaceLeftBeforeSplit;
            if (part2InnerHeightAfterSplit < WidowHeight)
            {
                innerSpaceLeftBeforeSplit = innerSpaceLeftBeforeSplit - (WidowHeight - part2InnerHeightAfterSplit);
                innerSpaceLeftBeforeSplit = TryCorrectSpaceLeftBeforeSplit(innerSpaceLeftBeforeSplit);
                part2InnerHeightAfterSplit = InnerHeight - innerSpaceLeftBeforeSplit;
            }

            if (innerSpaceLeftBeforeSplit < OrphanHeight)
                return new Stop<Change<LayoutedElement>>();

            //TODO: Fejl her... children skal også splittes med horeunger for øje
            var signal = children.Split(pageHeight - Edge.TotalVertical, innerSpaceLeftBeforeSplit);
            if (signal.OperationWasNotAllowed)
                return new Stop<Change<LayoutedElement>>();

            var upper = new LayoutedElement(Specification, signal.Result[0])
            {
                Name = GenerateNextPartName(1),
                Left = Left,
                ForcedInnerWidth = ForcedInnerWidth,
                ForcedOuterWidth = ForcedOuterWidth,
                ForcedInnerHeight = innerSpaceLeftBeforeSplit,
                InnerHeightBeforeSplitOrCrop = InnerHeight,
                ViewportTop = ViewportTop,
            };

            var lower = new LayoutedElement(Specification, signal.Result[1])
            {
                Name = GenerateNextPartName(2),
                Left = Left,
                InnerHeightBeforeSplitOrCrop = InnerHeight,
                ForcedInnerWidth = ForcedInnerWidth,
                ForcedOuterWidth = ForcedOuterWidth,
                ForcedInnerHeight = signal.Result[1].Any() ? Unit.Undefined : part2InnerHeightAfterSplit,
                ViewportTop = ViewportTop + innerSpaceLeftBeforeSplit
            };

            return new Changed<LayoutedElement>(upper, lower);
        }
 protected override Unit CalculateHeight(LayoutedElement element)
 {
     return 5.cm();
 }
        public void split_element_has_original_layouted_element_height_and_width_stored()
        {
            var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 6.cm(), ForcedInnerWidth = 6.cm() };
            var result = element.Split(15.cm(), 3.cm()).Result;

            //result[0].TotalInnerHeightAsIfItWasOneBigElement.ShouldBe(0.cm());
            //            result[0].LayoutedInnerWidth.ShouldBe(0.cm());
            result[1].ViewportTop.ShouldBe(3.cm());
        }
Exemple #10
0
 public void crop_forces_max_height()
 {
     var element = new LayoutedElement(new Box { Margins = new Margins(1.cm(), 1.cm(), 1.cm(), 1.cm()) }, Children.Empty) { ForcedInnerHeight = 2.cm() };
     var croppedElement = element.Crop(2.cm());
     croppedElement.OuterHeight.ShouldBe(2.cm());
 }
Exemple #11
0
 public void crop_does_not_force_a_larger_height_than_current()
 {
     var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 2.cm() };
     var croppedElement = element.Crop(3.cm());
     croppedElement.OuterHeight.ShouldBe(2.cm());
 }
Exemple #12
0
 public void cropped_element_is_viewing_top_of_element()
 {
     var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 4.cm() };
     var result = element.Crop(3.cm());
     result.ViewportTop.ShouldBe(0.cm());
 }
Exemple #13
0
        public void split_element_views_corrects_parts_of_element()
        {
            var element = new LayoutedElement(new Box(), Children.Empty) { ForcedInnerHeight = 6.cm() };
            var result = element.Split(15.cm(), 3.cm()).Result;

            result[0].ViewportTop.ShouldBe(0.cm());
            result[1].ViewportTop.ShouldBe(3.cm());
        }