Remove CFX_Matrix::ConcatPrepend(), ConcatInverse(), SetIdentity().
These are more clearly expressed using assignment operators.
Move Concat() to header for inlining.
Remove some identity multiplies and other no-op code.
Kill some needless initializations of matrix/rects encountered.
Change-Id: I849af42eaa6249471938266914f06a0b19b1f52d
Reviewed-on: https://pdfium-review.googlesource.com/c/47510
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 50ef3ad..2dfec54 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -1485,10 +1485,8 @@
m_pObjectHolder->AppendPageObject(std::move(pPathObj));
}
if (PathClipType) {
- if (!matrix.IsIdentity()) {
+ if (!matrix.IsIdentity())
Path.Transform(&matrix);
- matrix.SetIdentity();
- }
m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, true);
}
}
diff --git a/core/fpdfapi/render/cpdf_rendercontext.cpp b/core/fpdfapi/render/cpdf_rendercontext.cpp
index ed684a4..37197da 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.cpp
+++ b/core/fpdfapi/render/cpdf_rendercontext.cpp
@@ -50,8 +50,6 @@
m_Layers.back().m_pObjectHolder = pObjectHolder;
if (pObject2Device)
m_Layers.back().m_Matrix = *pObject2Device;
- else
- m_Layers.back().m_Matrix.SetIdentity();
}
void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice,
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index ce0fa48..5164862 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1754,7 +1754,7 @@
const float* pCTM = textobj->m_TextState.GetCTM();
if (pCTM[0] != 1.0f || pCTM[3] != 1.0f) {
CFX_Matrix ctm(pCTM[0], pCTM[1], pCTM[2], pCTM[3], 0, 0);
- text_matrix.ConcatInverse(ctm);
+ text_matrix *= ctm.GetInverse();
device_matrix = ctm;
device_matrix.Concat(mtObj2Device);
pDeviceMatrix = &device_matrix;
diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp
index 2771992..2c92b3a 100644
--- a/core/fxcrt/fx_coordinates.cpp
+++ b/core/fxcrt/fx_coordinates.cpp
@@ -312,22 +312,6 @@
return inverse;
}
-void CFX_Matrix::Concat(const CFX_Matrix& m) {
- *this *= m;
-}
-
-void CFX_Matrix::ConcatPrepend(const CFX_Matrix& m) {
- *this = m * (*this);
-}
-
-void CFX_Matrix::ConcatInverse(const CFX_Matrix& src) {
- Concat(src.GetInverse());
-}
-
-void CFX_Matrix::ConcatInversePrepend(const CFX_Matrix& src) {
- ConcatPrepend(src.GetInverse());
-}
-
bool CFX_Matrix::Is90Rotated() const {
return fabs(a * 1000) < fabs(b) && fabs(d * 1000) < fabs(c);
}
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index 16facf3..3aa50ac 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -552,20 +552,14 @@
return *this;
}
- void SetIdentity() { *this = CFX_Matrix(); }
bool IsIdentity() const { return *this == CFX_Matrix(); }
-
CFX_Matrix GetInverse() const;
- void Concat(const CFX_Matrix& right);
- void ConcatPrepend(const CFX_Matrix& left);
- void ConcatInverse(const CFX_Matrix& m);
- void ConcatInversePrepend(const CFX_Matrix& m);
-
bool Is90Rotated() const;
bool IsScaled() const;
bool WillScale() const { return a != 1.0f || b != 0 || c != 0 || d != 1.0f; }
+ void Concat(const CFX_Matrix& right) { *this *= right; }
void Translate(float x, float y);
void TranslatePrepend(float x, float y);
void Translate(int32_t x, int32_t y) {
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index ded4d45..104bce3 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -229,9 +229,7 @@
#endif // NDEBUG
TEST(CFX_Matrix, ReverseIdentity) {
- CFX_Matrix m;
- m.SetIdentity();
- CFX_Matrix rev = m.GetInverse();
+ CFX_Matrix rev = CFX_Matrix().GetInverse();
EXPECT_FLOAT_EQ(1.0, rev.a);
EXPECT_FLOAT_EQ(0.0, rev.b);
@@ -241,7 +239,7 @@
EXPECT_FLOAT_EQ(0.0, rev.f);
CFX_PointF expected(2, 3);
- CFX_PointF result = rev.Transform(m.Transform(CFX_PointF(2, 3)));
+ CFX_PointF result = rev.Transform(CFX_Matrix().Transform(CFX_PointF(2, 3)));
EXPECT_FLOAT_EQ(expected.x, result.x);
EXPECT_FLOAT_EQ(expected.y, result.y);
}
@@ -259,7 +257,7 @@
m.a = -1;
EXPECT_FALSE(m.IsIdentity());
- m.SetIdentity();
+ m = CFX_Matrix();
EXPECT_FLOAT_EQ(1.0f, m.a);
EXPECT_FLOAT_EQ(0.0f, m.b);
EXPECT_FLOAT_EQ(0.0f, m.c);
@@ -447,10 +445,10 @@
EXPECT_FLOAT_EQ(273.0f, p_10_20_transformed.y);
// Now compose all transforms prepending.
- m.SetIdentity();
- m.ConcatPrepend(rotate_90);
- m.ConcatPrepend(translate_23_11);
- m.ConcatPrepend(scale_5_13);
+ m = CFX_Matrix();
+ m = rotate_90 * m;
+ m = translate_23_11 * m;
+ m = scale_5_13 * m;
EXPECT_NEAR_FIVE_PLACES(0.0f, m.a);
EXPECT_NEAR_FIVE_PLACES(5.0f, m.b);
EXPECT_NEAR_FIVE_PLACES(-13.0f, m.c);
diff --git a/xfa/fwl/cfwl_picturebox.cpp b/xfa/fwl/cfwl_picturebox.cpp
index 637de94..6e90765 100644
--- a/xfa/fwl/cfwl_picturebox.cpp
+++ b/xfa/fwl/cfwl_picturebox.cpp
@@ -12,9 +12,6 @@
CFWL_PictureBox::CFWL_PictureBox(const CFWL_App* app)
: CFWL_Widget(app, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr) {
- m_rtClient.Reset();
- m_rtImage.Reset();
- m_matrix.SetIdentity();
}
CFWL_PictureBox::~CFWL_PictureBox() {}
diff --git a/xfa/fwl/cfwl_themepart.cpp b/xfa/fwl/cfwl_themepart.cpp
index 25592f3..44251ad 100644
--- a/xfa/fwl/cfwl_themepart.cpp
+++ b/xfa/fwl/cfwl_themepart.cpp
@@ -13,6 +13,4 @@
m_bMaximize(false),
m_bStaticBackground(false),
m_pData(nullptr) {
- m_rtPart.Reset();
- m_matrix.SetIdentity();
}
diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp
index ae42469..9a6b2a5 100644
--- a/xfa/fwl/cfwl_widget.cpp
+++ b/xfa/fwl/cfwl_widget.cpp
@@ -182,21 +182,10 @@
}
CFX_Matrix matrix;
- CFX_Matrix ctmOnParent;
- CFX_RectF rect;
- int32_t count = pdfium::CollectionSize<int32_t>(parents);
- for (int32_t i = count - 2; i >= 0; i--) {
- parent = parents[i];
- if (parent->m_pProperties)
- ctmOnParent.SetIdentity();
- rect = parent->GetWidgetRect();
- matrix.ConcatPrepend(ctmOnParent);
+ for (size_t i = parents.size(); i >= 2; i--) {
+ CFX_RectF rect = parents[i - 2]->GetWidgetRect();
matrix.TranslatePrepend(rect.left, rect.top);
}
- CFX_Matrix m;
- m.SetIdentity();
- matrix.ConcatPrepend(m);
- parents.clear();
return matrix;
}
@@ -365,7 +354,7 @@
param.m_iPart = iPartBk;
param.m_pGraphics = pGraphics;
if (pMatrix)
- param.m_matrix.ConcatPrepend(*pMatrix);
+ param.m_matrix = *pMatrix;
param.m_rtPart = GetRelativeRect();
pTheme->DrawBackground(¶m);
}
@@ -378,7 +367,7 @@
param.m_pWidget = this;
param.m_iPart = iPartBorder;
param.m_pGraphics = pGraphics;
- param.m_matrix.ConcatPrepend(matrix);
+ param.m_matrix = matrix;
param.m_rtPart = GetRelativeRect();
pTheme->DrawBackground(¶m);
}
diff --git a/xfa/fxgraphics/cxfa_gepattern.cpp b/xfa/fxgraphics/cxfa_gepattern.cpp
index 2a6a0e4..0cd41b4 100644
--- a/xfa/fxgraphics/cxfa_gepattern.cpp
+++ b/xfa/fxgraphics/cxfa_gepattern.cpp
@@ -13,8 +13,6 @@
: m_hatchStyle(hatchStyle), m_foreArgb(foreArgb), m_backArgb(backArgb) {
if (matrix)
m_matrix = *matrix;
- else
- m_matrix.SetIdentity();
}
CXFA_GEPattern::~CXFA_GEPattern() {}