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()); }
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()); }
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()); }
void ConstrainOuterHeightToContainerInnerHeight(LayoutedElement positionedElement, Unit lineTop) { if (containerInnerHeight != 0.cm() && lineTop + positionedElement.OuterHeight > containerInnerHeight) positionedElement.ForcedOuterHeight = containerInnerHeight - lineTop; }
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()); }
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()); }
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()); }
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()); }
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()); }