Skip to content

Commit

Permalink
Merge branch 'develop' into devsecops
Browse files Browse the repository at this point in the history
  • Loading branch information
aleks-ivanov committed Jun 7, 2024
2 parents 2d12824 + f777baf commit 1056b3d
Show file tree
Hide file tree
Showing 8 changed files with 115 additions and 143 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -686,5 +686,56 @@ public virtual void FrColumnsTest() {
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
));
}

[NUnit.Framework.Test]
public virtual void ColumnSpanTest() {
String filename = DESTINATION_FOLDER + "columnSpanTest.pdf";
String cmpName = SOURCE_FOLDER + "cmp_columnSpanTest.pdf";
IList<GridValue> templateColumns = new List<GridValue>();
templateColumns.Add(GridValue.CreatePointValue(100.0f));
templateColumns.Add(GridValue.CreatePointValue(100.0f));
templateColumns.Add(GridValue.CreatePointValue(100.0f));
SolidBorder border = new SolidBorder(ColorConstants.BLUE, 1);
using (Document document = new Document(new PdfDocument(new PdfWriter(filename)))) {
GridContainer grid = new GridContainer();
grid.SetProperty(Property.GRID_TEMPLATE_COLUMNS, templateColumns);
Paragraph paragraph1 = new Paragraph("One").SetBorder(border);
paragraph1.SetProperty(Property.GRID_COLUMN_START, 1);
paragraph1.SetProperty(Property.GRID_COLUMN_SPAN, 2);
grid.Add(paragraph1);
grid.Add(new Paragraph("Two").SetBorder(border));
grid.Add(new Paragraph("Three").SetBorder(border));
grid.Add(new Paragraph("Four").SetBorder(border));
document.Add(grid);
}
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
));
}

[NUnit.Framework.Test]
public virtual void RowSpanTest() {
String filename = DESTINATION_FOLDER + "rowSpanTest.pdf";
String cmpName = SOURCE_FOLDER + "cmp_rowSpanTest.pdf";
IList<GridValue> template = new List<GridValue>();
template.Add(GridValue.CreatePointValue(100.0f));
template.Add(GridValue.CreatePointValue(100.0f));
template.Add(GridValue.CreatePointValue(100.0f));
SolidBorder border = new SolidBorder(ColorConstants.BLUE, 1);
using (Document document = new Document(new PdfDocument(new PdfWriter(filename)))) {
GridContainer grid = new GridContainer();
grid.SetProperty(Property.GRID_TEMPLATE_COLUMNS, template);
grid.SetProperty(Property.GRID_TEMPLATE_ROWS, template);
Paragraph paragraph1 = new Paragraph("One").SetBorder(border);
paragraph1.SetProperty(Property.GRID_ROW_SPAN, 2);
paragraph1.SetProperty(Property.GRID_ROW_END, 3);
grid.Add(paragraph1);
grid.Add(new Paragraph("Two").SetBorder(border));
grid.Add(new Paragraph("Three").SetBorder(border));
grid.Add(new Paragraph("Four").SetBorder(border));
document.Add(grid);
}
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(filename, cmpName, DESTINATION_FOLDER, "diff_"
));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -218,32 +218,5 @@ public virtual void ColumnWithFixedTallCellPackingTest() {
NUnit.Framework.Assert.AreEqual(cell5, grid.GetRows()[2][1]);
NUnit.Framework.Assert.AreEqual(cell6, grid.GetRows()[0][2]);
}

[NUnit.Framework.Test]
public virtual void ColumnWithTallAndWideCellPackingTest() {
Grid grid = new Grid(3, 3, GridFlow.COLUMN);
GridCell cell1 = new GridCell(new TextRenderer(new Text("One")));
GridCell tallCell = new GridCell(new TextRenderer(new Text("Two")));
tallCell.GetGridArea().SetHeight(2);
GridCell cell3 = new GridCell(new TextRenderer(new Text("Three")));
GridCell cell4 = new GridCell(new TextRenderer(new Text("Four")));
cell4.GetGridArea().SetWidth(2);
GridCell cell5 = new GridCell(new TextRenderer(new Text("Five")));
GridCell cell6 = new GridCell(new TextRenderer(new Text("Six")));
grid.AddCell(cell1);
grid.AddCell(tallCell);
grid.AddCell(cell3);
grid.AddCell(cell4);
grid.AddCell(cell5);
grid.AddCell(cell6);
NUnit.Framework.Assert.AreEqual(cell1, grid.GetRows()[0][0]);
NUnit.Framework.Assert.AreEqual(tallCell, grid.GetRows()[1][0]);
NUnit.Framework.Assert.AreEqual(tallCell, grid.GetRows()[2][0]);
NUnit.Framework.Assert.AreEqual(cell3, grid.GetRows()[0][1]);
NUnit.Framework.Assert.AreEqual(cell4, grid.GetRows()[1][1]);
NUnit.Framework.Assert.AreEqual(cell4, grid.GetRows()[1][2]);
NUnit.Framework.Assert.AreEqual(cell5, grid.GetRows()[2][1]);
NUnit.Framework.Assert.AreEqual(cell6, grid.GetRows()[0][2]);
}
}
}
Binary file not shown.
Binary file not shown.
6 changes: 5 additions & 1 deletion itext/itext.layout/itext/layout/properties/Property.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,10 +191,14 @@ public sealed class Property {

public const int GRID_COLUMN_START = 148;

public const int GRID_COLUMN_SPAN = 155;

public const int GRID_ROW_END = 149;

public const int GRID_ROW_START = 150;

public const int GRID_ROW_SPAN = 156;

public const int GRID_TEMPLATE_COLUMNS = 145;

public const int GRID_TEMPLATE_ROWS = 146;
Expand Down Expand Up @@ -402,7 +406,7 @@ public sealed class Property {
/// </remarks>
private static readonly bool[] INHERITED_PROPERTIES;

private const int MAX_INHERITED_PROPERTY_ID = 154;
private const int MAX_INHERITED_PROPERTY_ID = 156;

static Property() {
INHERITED_PROPERTIES = new bool[MAX_INHERITED_PROPERTY_ID + 1];
Expand Down
171 changes: 58 additions & 113 deletions itext/itext.layout/itext/layout/renderer/GridCell.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,39 +29,44 @@ namespace iText.Layout.Renderer {
internal class GridCell {
private readonly IRenderer value;

private readonly GridCell.IntRectangle gridArea;
private int gridX;

private Rectangle layoutArea = new Rectangle(0.0f, 0.0f, 0.0f, 0.0f);
private int gridY;

private bool isValueFitOnCellArea = true;
private readonly int spanColumn;

private readonly int spanRow;

private readonly Rectangle layoutArea = new Rectangle(0.0f, 0.0f, 0.0f, 0.0f);

/// <summary>Create a grid cell and init value renderer position on a grid based on its properties.</summary>
/// <param name="value">item renderer</param>
internal GridCell(IRenderer value) {
this.value = value;
int[] rowValues = InitRowColumnsValues(value.GetProperty<int?>(Property.GRID_ROW_START), value.GetProperty
<int?>(Property.GRID_ROW_END));
int height = rowValues[0] == 0 ? 1 : rowValues[1] - rowValues[0];
int[] columnValues = InitRowColumnsValues(value.GetProperty<int?>(Property.GRID_COLUMN_START), value.GetProperty
<int?>(Property.GRID_COLUMN_END));
int width = columnValues[0] == 0 ? 1 : columnValues[1] - columnValues[0];
gridArea = new GridCell.IntRectangle(columnValues[0] - 1, rowValues[0] - 1, width, height);
int[] rowPlacement = InitAxisPlacement(value.GetProperty<int?>(Property.GRID_ROW_START), value.GetProperty
<int?>(Property.GRID_ROW_END), value.GetProperty<int?>(Property.GRID_ROW_SPAN));
gridY = rowPlacement[0];
spanRow = rowPlacement[1];
int[] columnPlacement = InitAxisPlacement(value.GetProperty<int?>(Property.GRID_COLUMN_START), value.GetProperty
<int?>(Property.GRID_COLUMN_END), value.GetProperty<int?>(Property.GRID_COLUMN_SPAN));
gridX = columnPlacement[0];
spanColumn = columnPlacement[1];
}

internal virtual int GetColumnStart() {
return gridArea.GetLeft();
return gridX;
}

internal virtual int GetColumnEnd() {
return gridArea.GetRight();
return gridX + spanColumn;
}

internal virtual int GetRowStart() {
return gridArea.GetBottom();
return gridY;
}

internal virtual int GetRowEnd() {
return gridArea.GetTop();
return gridY + spanRow;
}

internal virtual int GetStart(Grid.GridOrder order) {
Expand All @@ -83,11 +88,11 @@ internal virtual int GetEnd(Grid.GridOrder order) {
}

internal virtual int GetGridHeight() {
return gridArea.GetHeight();
return spanRow;
}

internal virtual int GetGridWidth() {
return gridArea.GetWidth();
return spanColumn;
}

internal virtual int GetGridSpan(Grid.GridOrder order) {
Expand All @@ -103,128 +108,68 @@ internal virtual IRenderer GetValue() {
return value;
}

internal virtual bool IsValueFitOnCellArea() {
return isValueFitOnCellArea;
}

internal virtual Rectangle GetLayoutArea() {
return layoutArea;
}

internal virtual GridCell.IntRectangle GetGridArea() {
return gridArea;
}

internal virtual void SetLayoutArea(Rectangle layoutArea) {
this.layoutArea = layoutArea;
}

internal virtual void SetValueFitOnCellArea(bool valueFitOnCellArea) {
isValueFitOnCellArea = valueFitOnCellArea;
}

internal virtual void SetPos(int y, int x) {
this.gridArea.SetY(y);
this.gridArea.SetX(x);
this.gridY = y;
this.gridX = x;
}

/// <summary>
/// init row/column start/end value
/// Init axis placement values
/// if start &gt; end values are swapped
/// if only start or end are specified - other value is initialized so cell would have height/width = 1
/// </summary>
/// <param name="start">x/y pos of cell on a grid</param>
/// <param name="end">x/y + width/height pos of cell on a grid</param>
/// <returns>row/column start/end values as a pair, where first value is start, second is end</returns>
private int[] InitRowColumnsValues(int? start, int? end) {
int[] result = new int[] { 0, 0 };
/// <param name="span">vertical or horizontal span of the cell on a grid</param>
/// <returns>row/column start + vertical/horizontal span values as a pair, where first value is start, second is span
/// </returns>
private int[] InitAxisPlacement(int? start, int? end, int? span) {
int[] result = new int[] { 0, 1 };
if (start != null && end != null) {
result[0] = (int)start;
result[1] = (int)end;
if (start > end) {
result[0] = (int)end;
result[1] = (int)start;
int intStart = (int)start;
int intEnd = (int)end;
if (intStart < intEnd) {
result[0] = intStart;
result[1] = intEnd - intStart;
}
else {
result[0] = intEnd;
result[1] = intStart - intEnd;
}
}
else {
if (start != null) {
result[0] = (int)start;
result[1] = (int)start + 1;
if (span != null) {
result[1] = (int)span;
}
}
else {
// span default value 1 was set up on the result array initialization
if (end != null) {
result[0] = end <= 1 ? 1 : ((int)end) - 1;
result[1] = end <= 1 ? 2 : (int)end;
int intEnd = (int)end;
if (span == null) {
result[0] = end <= 1 ? 1 : ((int)end) - 1;
}
else {
// span default value 1 was set up on the result array initialization
int intSpan = (int)span;
result[1] = intSpan;
result[0] = Math.Max(intEnd - intSpan, 1);
}
}
else {
if (span != null) {
result[1] = (int)span;
}
}
}
}
result[0] -= 1;
return result;
}

/// <summary>This class represents an integer rectangle.</summary>
/// <remarks>
/// This class represents an integer rectangle.
/// x,y - represents a bottom left corner of this rectangle.
/// </remarks>
internal class IntRectangle {
private int x;

private int y;

private int width;

private int height;

public IntRectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}

public virtual int GetLeft() {
return x;
}

public virtual int GetRight() {
return x + width;
}

public virtual int GetTop() {
return y + height;
}

public virtual int GetBottom() {
return y;
}

public virtual int GetWidth() {
return width;
}

public virtual int GetHeight() {
return height;
}

public virtual void SetX(int x) {
this.x = x;
}

public virtual void SetY(int y) {
this.y = y;
}

public virtual void SetWidth(int width) {
this.width = width;
}

public virtual void SetHeight(int height) {
this.height = height;
}

public override String ToString() {
return "Rectangle: start(" + x + ',' + y + ") ," + width + 'x' + height;
}
}
}
}
1 change: 0 additions & 1 deletion itext/itext.layout/itext/layout/renderer/GridTrackSizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,6 @@ private static float CalculateMaxContribution(GridCell cell, Grid.GridOrder grid
LayoutResult inifiniteHeighLayoutResult = cell.GetValue().Layout(layoutContext);
if (inifiniteHeighLayoutResult.GetStatus() == LayoutResult.NOTHING || inifiniteHeighLayoutResult.GetStatus
() == LayoutResult.PARTIAL) {
cell.SetValueFitOnCellArea(false);
return 0;
}
return inifiniteHeighLayoutResult.GetOccupiedArea().GetBBox().GetHeight();
Expand Down
2 changes: 1 addition & 1 deletion port-hash
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1102018db850e02522787c9bae2c4a7fda657cc5
3193c19508fb694f46fa19844f6bec2281f2f69c

0 comments on commit 1056b3d

Please sign in to comment.