diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-08-15 22:21:16 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-08-15 22:21:16 +0000 |
commit | 3e360453cded5f2f435195923ede0935f6847194 (patch) | |
tree | 3859e6c723af6fd87f4a9afb420bc9706365d7f8 /core/fxcrt/fx_coordinates.cpp | |
parent | b6e3d231ef2c28df1e5149cb16ad7046ebb0714e (diff) | |
download | pdfium-3e360453cded5f2f435195923ede0935f6847194.tar.xz |
Remove optional prepend argument from matrix transformations.
Callers always want one form or the other, so split into separate
methods. This may save some branching.
Remove forms that are not used.
Put more helpful helper function in .cpp file.
Change-Id: I4e025de7f69ce3f323cd290a5dc8202dd4f8ca07
Reviewed-on: https://pdfium-review.googlesource.com/40270
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fxcrt/fx_coordinates.cpp')
-rw-r--r-- | core/fxcrt/fx_coordinates.cpp | 82 |
1 files changed, 33 insertions, 49 deletions
diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp index 13c6f1b6bc..12bf8b6c38 100644 --- a/core/fxcrt/fx_coordinates.cpp +++ b/core/fxcrt/fx_coordinates.cpp @@ -43,6 +43,15 @@ static_assert(sizeof(FX_RECT::bottom) == sizeof(RECT::bottom), "FX_RECT vs. RECT mismatch"); #endif +inline CFX_Matrix ConcatInternal(const CFX_Matrix& left, + const CFX_Matrix& right) { + return CFX_Matrix( + left.a * right.a + left.b * right.c, left.a * right.b + left.b * right.d, + left.c * right.a + left.d * right.c, left.c * right.b + left.d * right.d, + left.e * right.a + left.f * right.c + right.e, + left.e * right.b + left.f * right.d + right.f); +} + } // namespace void FX_RECT::Normalize() { @@ -248,12 +257,20 @@ CFX_Matrix CFX_Matrix::GetInverse() const { return inverse; } -void CFX_Matrix::Concat(const CFX_Matrix& m, bool bPrepended) { - ConcatInternal(m, bPrepended); +void CFX_Matrix::Concat(const CFX_Matrix& m) { + *this = ConcatInternal(*this, m); +} + +void CFX_Matrix::ConcatPrepend(const CFX_Matrix& m) { + *this = ConcatInternal(m, *this); +} + +void CFX_Matrix::ConcatInverse(const CFX_Matrix& src) { + Concat(src.GetInverse()); } -void CFX_Matrix::ConcatInverse(const CFX_Matrix& src, bool bPrepended) { - Concat(src.GetInverse(), bPrepended); +void CFX_Matrix::ConcatInversePrepend(const CFX_Matrix& src) { + ConcatPrepend(src.GetInverse()); } bool CFX_Matrix::Is90Rotated() const { @@ -264,47 +281,33 @@ bool CFX_Matrix::IsScaled() const { return fabs(b * 1000) < fabs(a) && fabs(c * 1000) < fabs(d); } -void CFX_Matrix::Translate(float x, float y, bool bPrepended) { - if (bPrepended) { - e += x * a + y * c; - f += y * d + x * b; - return; - } +void CFX_Matrix::Translate(float x, float y) { e += x; f += y; } -void CFX_Matrix::Scale(float sx, float sy, bool bPrepended) { - a *= sx; - d *= sy; - if (bPrepended) { - b *= sx; - c *= sy; - return; - } +void CFX_Matrix::TranslatePrepend(float x, float y) { + e += x * a + y * c; + f += y * d + x * b; +} +void CFX_Matrix::Scale(float sx, float sy) { + a *= sx; b *= sy; c *= sx; + d *= sy; e *= sx; f *= sy; } -void CFX_Matrix::Rotate(float fRadian, bool bPrepended) { +void CFX_Matrix::Rotate(float fRadian) { float cosValue = cos(fRadian); float sinValue = sin(fRadian); - ConcatInternal(CFX_Matrix(cosValue, sinValue, -sinValue, cosValue, 0, 0), - bPrepended); -} - -void CFX_Matrix::RotateAt(float fRadian, float x, float y, bool bPrepended) { - Translate(-x, -y, bPrepended); - Rotate(fRadian, bPrepended); - Translate(x, y, bPrepended); + Concat(CFX_Matrix(cosValue, sinValue, -sinValue, cosValue, 0, 0)); } -void CFX_Matrix::Shear(float fAlphaRadian, float fBetaRadian, bool bPrepended) { - ConcatInternal(CFX_Matrix(1, tan(fAlphaRadian), tan(fBetaRadian), 1, 0, 0), - bPrepended); +void CFX_Matrix::Shear(float fAlphaRadian, float fBetaRadian) { + Concat(CFX_Matrix(1, tan(fAlphaRadian), tan(fBetaRadian), 1, 0, 0)); } void CFX_Matrix::MatchRect(const CFX_FloatRect& dest, @@ -396,22 +399,3 @@ CFX_FloatRect CFX_Matrix::TransformRect(const CFX_FloatRect& rect) const { TransformRect(rect.left, rect.right, rect.top, rect.bottom); return CFX_FloatRect(left, bottom, right, top); } - -void CFX_Matrix::ConcatInternal(const CFX_Matrix& other, bool prepend) { - CFX_Matrix left; - CFX_Matrix right; - if (prepend) { - left = other; - right = *this; - } else { - left = *this; - right = other; - } - - a = left.a * right.a + left.b * right.c; - b = left.a * right.b + left.b * right.d; - c = left.c * right.a + left.d * right.c; - d = left.c * right.b + left.d * right.d; - e = left.e * right.a + left.f * right.c + right.e; - f = left.e * right.b + left.f * right.d + right.f; -} |