Skip to content

Commit 02bdf9a

Browse files
committed
Add Transform class to be used instead of List<String[]> as propety value
DEVSIX-1310 Autoported commit. Original commit hash: [9375cf00a]
1 parent ef8c9b5 commit 02bdf9a

File tree

5 files changed

+88
-37
lines changed

5 files changed

+88
-37
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System.Collections.Generic;
2+
using iText.Kernel.Geom;
3+
4+
namespace iText.Layout.Properties {
5+
public class Transform {
6+
private IList<Transform.SingleTransform> multipleTransform;
7+
8+
public Transform(int length) {
9+
multipleTransform = new List<Transform.SingleTransform>(length);
10+
}
11+
12+
public virtual void AddSingleTransform(Transform.SingleTransform singleTransform) {
13+
multipleTransform.Add(singleTransform);
14+
}
15+
16+
private IList<Transform.SingleTransform> GetMultipleTransform() {
17+
return multipleTransform;
18+
}
19+
20+
public static AffineTransform GetAffineTransform(iText.Layout.Properties.Transform t, float width, float height
21+
) {
22+
IList<Transform.SingleTransform> multipleTransform = t.GetMultipleTransform();
23+
AffineTransform affineTransform = new AffineTransform();
24+
for (int k = multipleTransform.Count - 1; k >= 0; k--) {
25+
Transform.SingleTransform transform = multipleTransform[k];
26+
float[] floats = new float[6];
27+
for (int i = 0; i < 4; i++) {
28+
floats[i] = transform.GetFloats()[i];
29+
}
30+
for (int i = 4; i < 6; i++) {
31+
floats[i] = transform.GetUnitValues()[i - 4].GetUnitType() == UnitValue.POINT ? transform.GetUnitValues()[
32+
i - 4].GetValue() : transform.GetUnitValues()[i - 4].GetValue() / 100 * (i == 4 ? width : height);
33+
}
34+
affineTransform.PreConcatenate(new AffineTransform(floats));
35+
}
36+
return affineTransform;
37+
}
38+
39+
public class SingleTransform {
40+
private float a;
41+
42+
private float b;
43+
44+
private float c;
45+
46+
private float d;
47+
48+
private UnitValue tx;
49+
50+
private UnitValue ty;
51+
52+
public SingleTransform() {
53+
this.a = 1;
54+
this.b = 0;
55+
this.c = 0;
56+
this.d = 1;
57+
this.tx = new UnitValue(UnitValue.POINT, 0);
58+
this.ty = new UnitValue(UnitValue.POINT, 0);
59+
}
60+
61+
public SingleTransform(float a, float b, float c, float d, UnitValue tx, UnitValue ty) {
62+
this.a = a;
63+
this.b = b;
64+
this.c = c;
65+
this.d = d;
66+
this.tx = tx;
67+
this.ty = ty;
68+
}
69+
70+
private float[] GetFloats() {
71+
return new float[] { a, b, c, d };
72+
}
73+
74+
private UnitValue[] GetUnitValues() {
75+
return new UnitValue[] { tx, ty };
76+
}
77+
}
78+
}
79+
}

itext/itext.layout/itext/layout/renderer/AbstractRenderer.cs

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -691,8 +691,7 @@ protected internal virtual bool ClipBackgroundArea(DrawContext drawContext, Rect
691691
public virtual void DrawChildren(DrawContext drawContext) {
692692
IList<IRenderer> waitingRenderers = new List<IRenderer>();
693693
foreach (IRenderer child in childRenderers) {
694-
if (FloatingHelper.IsRendererFloating(child) || child.GetProperty<IList<String[]>>(Property.TRANSFORM) !=
695-
null) {
694+
if (FloatingHelper.IsRendererFloating(child) || child.GetProperty<Transform>(Property.TRANSFORM) != null) {
696695
RootRenderer rootRenderer = GetRootRenderer();
697696
if (rootRenderer != null && !rootRenderer.waitingDrawingElements.Contains(child)) {
698697
rootRenderer.waitingDrawingElements.Add(child);
@@ -1510,7 +1509,7 @@ protected internal virtual Rectangle CalculateAbsolutePdfBBox() {
15101509
TransformPoints(contentBoxPoints, rotationTransform);
15111510
}
15121511
}
1513-
if (renderer.GetProperty<IList<String[]>>(Property.TRANSFORM) != null) {
1512+
if (renderer.GetProperty<Transform>(Property.TRANSFORM) != null) {
15141513
if (renderer is BlockRenderer || renderer is ImageRenderer || renderer is TableRenderer) {
15151514
AffineTransform rotationTransform = renderer.CreateTransformationInsideOccupiedArea();
15161515
TransformPoints(contentBoxPoints, rotationTransform);
@@ -1831,50 +1830,25 @@ private AffineTransform CreateTransformationInsideOccupiedArea() {
18311830
float width = backgroundArea.GetWidth();
18321831
AffineTransform transform = AffineTransform.GetTranslateInstance(-1 * (x + width / 2), -1 * (y + height /
18331832
2));
1834-
transform.PreConcatenate(new AffineTransform(this.GetTransformMatrix(width, height)));
1833+
transform.PreConcatenate(Transform.GetAffineTransform(this.GetProperty<Transform>(Property.TRANSFORM), width
1834+
, height));
18351835
transform.PreConcatenate(AffineTransform.GetTranslateInstance(x + width / 2, y + height / 2));
18361836
return transform;
18371837
}
18381838

18391839
protected internal virtual void BeginTranformationIfApplied(PdfCanvas canvas) {
1840-
if (this.GetProperty<IList<String[]>>(Property.TRANSFORM) != null) {
1840+
if (this.GetProperty<Transform>(Property.TRANSFORM) != null) {
18411841
AffineTransform transform = CreateTransformationInsideOccupiedArea();
18421842
canvas.SaveState().ConcatMatrix(transform);
18431843
}
18441844
}
18451845

18461846
protected internal virtual void EndTranformationIfApplied(PdfCanvas canvas) {
1847-
if (this.GetProperty<IList<String[]>>(Property.TRANSFORM) != null) {
1847+
if (this.GetProperty<Transform>(Property.TRANSFORM) != null) {
18481848
canvas.RestoreState();
18491849
}
18501850
}
18511851

1852-
private AffineTransform GetTransformMatrix(float width, float height) {
1853-
IList<String[]> multipleTransform = this.GetProperty<IList<String[]>>(Property.TRANSFORM);
1854-
AffineTransform affineTransform = new AffineTransform();
1855-
for (int k = multipleTransform.Count - 1; k >= 0; k--) {
1856-
String[] transform = multipleTransform[k];
1857-
float[] floats = new float[6];
1858-
for (int i = 0; i < 6; i++) {
1859-
if (i == 4 || i == 5) {
1860-
int indexOfPercent = transform[i].IndexOf('%');
1861-
if (indexOfPercent > 0) {
1862-
floats[i] = float.Parse(transform[i].JSubstring(0, indexOfPercent), System.Globalization.CultureInfo.InvariantCulture
1863-
) / 100 * (i == 4 ? width : height);
1864-
}
1865-
else {
1866-
floats[i] = float.Parse(transform[i], System.Globalization.CultureInfo.InvariantCulture);
1867-
}
1868-
}
1869-
else {
1870-
floats[i] = float.Parse(transform[i], System.Globalization.CultureInfo.InvariantCulture);
1871-
}
1872-
}
1873-
affineTransform.PreConcatenate(new AffineTransform(floats));
1874-
}
1875-
return affineTransform;
1876-
}
1877-
18781852
public abstract IRenderer GetNextRenderer();
18791853

18801854
public abstract LayoutResult Layout(LayoutContext arg1);

itext/itext.layout/itext/layout/renderer/CanvasRenderer.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ source product.
4141
For more information, please contact iText Software Corp. at this
4242
4343
*/
44-
using System;
45-
using System.Collections.Generic;
4644
using iText.IO.Log;
4745
using iText.Kernel.Pdf.Tagutils;
4846
using iText.Layout;
@@ -101,7 +99,7 @@ public override void AddChild(IRenderer renderer) {
10199
/// <summary><inheritDoc/></summary>
102100
protected internal override void FlushSingleRenderer(IRenderer resultRenderer) {
103101
if (!waitingDrawingElements.Contains(resultRenderer) && (FloatingHelper.IsRendererFloating(resultRenderer)
104-
|| resultRenderer.GetProperty<IList<String[]>>(Property.TRANSFORM) != null)) {
102+
|| resultRenderer.GetProperty<Transform>(Property.TRANSFORM) != null)) {
105103
waitingDrawingElements.Add(resultRenderer);
106104
return;
107105
}

itext/itext.layout/itext/layout/renderer/DocumentRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ protected internal override LayoutArea UpdateCurrentArea(LayoutResult overflowRe
107107

108108
protected internal override void FlushSingleRenderer(IRenderer resultRenderer) {
109109
if (!waitingDrawingElements.Contains(resultRenderer) && (FloatingHelper.IsRendererFloating(resultRenderer)
110-
|| resultRenderer.GetProperty<IList<String[]>>(Property.TRANSFORM) != null)) {
110+
|| resultRenderer.GetProperty<Transform>(Property.TRANSFORM) != null)) {
111111
waitingDrawingElements.Add(resultRenderer);
112112
return;
113113
}

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
e5f8c0b9d66274cc8153a84a66ba4f9451bf7c9e
1+
9375cf00add9878e2c86c266092e9a9b9ea7a06a

0 commit comments

Comments
 (0)