Skip to content

Commit 181fa9d

Browse files
PsykerUdotBobLd
authored andcommitted
make transform stack consistent
1 parent 6ce6986 commit 181fa9d

File tree

5 files changed

+14
-13
lines changed

5 files changed

+14
-13
lines changed

src/UglyToad.PdfPig.Tests/Graphics/TestOperationContext.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,10 @@ public void SetWordSpacing(double spacing)
270270
GetCurrentState().FontState.WordSpacing = spacing;
271271
}
272272

273-
public void ModifyCurrentTransformationMatrix(double[] value)
273+
public void ModifyCurrentTransformationMatrix(TransformationMatrix value)
274274
{
275-
var ctm = GetCurrentState().CurrentTransformationMatrix;
276-
GetCurrentState().CurrentTransformationMatrix = TransformationMatrix.FromArray(value).Multiply(ctm);
275+
var state = GetCurrentState();
276+
state.CurrentTransformationMatrix = value.Multiply(state.CurrentTransformationMatrix);
277277
}
278278

279279
public void SetCharacterSpacing(double spacing)

src/UglyToad.PdfPig/Graphics/BaseStreamProcessor.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,8 @@ protected virtual void ProcessFormXObject(StreamToken formStream, NameToken xObj
563563
.ToArray());
564564
}
565565

566-
// 2. Update current transformation matrix.
567-
startState.CurrentTransformationMatrix = formMatrix.Multiply(startState.CurrentTransformationMatrix);
566+
// 2. Update current transformation matrix.
567+
ModifyCurrentTransformationMatrix(formMatrix);
568568

569569
var contentStream = formStream.Decode(FilterProvider, PdfScanner);
570570

@@ -576,9 +576,8 @@ protected virtual void ProcessFormXObject(StreamToken formStream, NameToken xObj
576576
if (formStream.StreamDictionary.TryGet<ArrayToken>(NameToken.Bbox, PdfScanner, out var bboxToken))
577577
{
578578
var points = bboxToken.Data.OfType<NumericToken>().Select(x => x.Double).ToArray();
579-
PdfRectangle bbox = new PdfRectangle(points[0], points[1], points[2], points[3]);
580-
PdfRectangle transformedBox = startState.CurrentTransformationMatrix.Transform(bbox).Normalise();
581-
ClipToRectangle(transformedBox, FillingRule.EvenOdd); // TODO - Check that Even Odd is valid
579+
PdfRectangle bbox = new PdfRectangle(points[0], points[1], points[2], points[3]).Normalise();
580+
ClipToRectangle(bbox, FillingRule.EvenOdd); // TODO - Check that Even Odd is valid
582581
}
583582

584583
// 4. Paint the objects.
@@ -958,10 +957,10 @@ public virtual void SetWordSpacing(double spacing)
958957
}
959958

960959
/// <inheritdoc/>
961-
public virtual void ModifyCurrentTransformationMatrix(double[] value)
960+
public virtual void ModifyCurrentTransformationMatrix(TransformationMatrix value)
962961
{
963-
var ctm = GetCurrentState().CurrentTransformationMatrix;
964-
GetCurrentState().CurrentTransformationMatrix = TransformationMatrix.FromArray(value).Multiply(ctm);
962+
var state = GetCurrentState();
963+
state.CurrentTransformationMatrix = value.Multiply(state.CurrentTransformationMatrix);
965964
}
966965

967966
/// <inheritdoc/>

src/UglyToad.PdfPig/Graphics/ContentStreamProcessor.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ protected override void ClipToRectangle(PdfRectangle rectangle, FillingRule clip
452452
{
453453
// https://github.com/apache/pdfbox/blob/f4bfe47de37f6fe69e8f98b164c3546facfd5e91/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java#L611
454454
var graphicsState = GetCurrentState();
455+
rectangle = graphicsState.CurrentTransformationMatrix.Transform(rectangle).Normalise();
455456
var clip = rectangle.ToPdfPath();
456457
clip.SetClipping(clippingRule);
457458

src/UglyToad.PdfPig/Graphics/IOperationContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public interface IOperationContext
243243
/// <summary>
244244
/// Modify the current transformation matrix by concatenating the specified matrix.
245245
/// </summary>
246-
void ModifyCurrentTransformationMatrix(double[] value);
246+
void ModifyCurrentTransformationMatrix(TransformationMatrix value);
247247

248248
/// <summary>
249249
/// Set the character spacing to a number expressed in unscaled text space units.

src/UglyToad.PdfPig/Graphics/Operations/SpecialGraphicsState/ModifyCurrentTransformationMatrix.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.IO;
5+
using PdfPig.Core;
56

67
/// <inheritdoc />
78
/// <summary>
@@ -43,7 +44,7 @@ public ModifyCurrentTransformationMatrix(double[] value)
4344
/// <inheritdoc />
4445
public void Run(IOperationContext operationContext)
4546
{
46-
operationContext.ModifyCurrentTransformationMatrix(Value);
47+
operationContext.ModifyCurrentTransformationMatrix(TransformationMatrix.FromArray(Value));
4748
}
4849

4950
/// <inheritdoc />

0 commit comments

Comments
 (0)