Skip to content

Commit 3ef3056

Browse files
committed
Support %-unit for transform:translate()
DEVSIX-1310 Autoported commit. Original commit hash: [ee1d5a031]
1 parent c19c59f commit 3ef3056

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +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(Property.TRANSFORM) != null) {
694+
if (FloatingHelper.IsRendererFloating(child) || child.GetProperty<String[]>(Property.TRANSFORM) != null) {
695695
RootRenderer rootRenderer = GetRootRenderer();
696696
if (rootRenderer != null && !rootRenderer.waitingDrawingElements.Contains(child)) {
697697
rootRenderer.waitingDrawingElements.Add(child);
@@ -1509,7 +1509,7 @@ protected internal virtual Rectangle CalculateAbsolutePdfBBox() {
15091509
TransformPoints(contentBoxPoints, rotationTransform);
15101510
}
15111511
}
1512-
float[] transform = renderer.GetProperty<float[]>(Property.TRANSFORM);
1512+
String[] transform = renderer.GetProperty<String[]>(Property.TRANSFORM);
15131513
if (transform != null) {
15141514
if (renderer is BlockRenderer) {
15151515
BlockRenderer blockRenderer = (BlockRenderer)renderer;
@@ -1846,24 +1846,45 @@ protected internal virtual AffineTransform CreateTransformationInsideOccupiedAre
18461846
float width = backgroundArea.GetWidth();
18471847
AffineTransform transform = AffineTransform.GetTranslateInstance(-1 * (x + width / 2), -1 * (y + height /
18481848
2));
1849-
transform.PreConcatenate((new AffineTransform((float[])this.GetProperty(Property.TRANSFORM))));
1849+
transform.PreConcatenate(new AffineTransform(this.GetCssTransformMatrix(width, height)));
18501850
transform.PreConcatenate(AffineTransform.GetTranslateInstance(x + width / 2, y + height / 2));
18511851
return transform;
18521852
}
18531853

18541854
protected internal virtual void BeginTranformationIfApplied(PdfCanvas canvas) {
1855-
if (this.GetProperty(Property.TRANSFORM) != null) {
1855+
if (this.GetProperty<String[]>(Property.TRANSFORM) != null) {
18561856
AffineTransform transform = CreateTransformationInsideOccupiedArea();
18571857
canvas.SaveState().ConcatMatrix(transform);
18581858
}
18591859
}
18601860

18611861
protected internal virtual void EndTranformationIfApplied(PdfCanvas canvas) {
1862-
if (this.GetProperty(Property.TRANSFORM) != null) {
1862+
if (this.GetProperty<String[]>(Property.TRANSFORM) != null) {
18631863
canvas.RestoreState();
18641864
}
18651865
}
18661866

1867+
private float[] GetCssTransformMatrix(float width, float height) {
1868+
String[] strings = this.GetProperty<String[]>(Property.TRANSFORM);
1869+
float[] floats = new float[6];
1870+
for (int i = 0; i < 6; i++) {
1871+
if (i == 4 || i == 5) {
1872+
int indexOfPercent = strings[i].IndexOf('%');
1873+
if (indexOfPercent > 0) {
1874+
floats[i] = float.Parse(strings[i].JSubstring(0, indexOfPercent), System.Globalization.CultureInfo.InvariantCulture
1875+
) / 100 * (i == 4 ? width : height);
1876+
}
1877+
else {
1878+
floats[i] = float.Parse(strings[i], System.Globalization.CultureInfo.InvariantCulture);
1879+
}
1880+
}
1881+
else {
1882+
floats[i] = float.Parse(strings[i], System.Globalization.CultureInfo.InvariantCulture);
1883+
}
1884+
}
1885+
return floats;
1886+
}
1887+
18671888
public abstract IRenderer GetNextRenderer();
18681889

18691890
public abstract LayoutResult Layout(LayoutContext arg1);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ source product.
4141
For more information, please contact iText Software Corp. at this
4242
4343
*/
44+
using System;
4445
using iText.IO.Log;
4546
using iText.Kernel.Pdf.Tagutils;
4647
using iText.Layout;
@@ -99,7 +100,7 @@ public override void AddChild(IRenderer renderer) {
99100
/// <summary><inheritDoc/></summary>
100101
protected internal override void FlushSingleRenderer(IRenderer resultRenderer) {
101102
if (!waitingDrawingElements.Contains(resultRenderer) && (FloatingHelper.IsRendererFloating(resultRenderer)
102-
|| resultRenderer.GetProperty(Property.TRANSFORM) != null)) {
103+
|| resultRenderer.GetProperty<String[]>(Property.TRANSFORM) != null)) {
103104
waitingDrawingElements.Add(resultRenderer);
104105
return;
105106
}

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(Property.TRANSFORM) != null)) {
110+
|| resultRenderer.GetProperty<String[]>(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-
25659fb3d9ab9b283297715d4fb9c1f40f48cd83
1+
ee1d5a031e514f0988847742a9c1172a5631af3b

0 commit comments

Comments
 (0)