Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(860)

Unified Diff: ui/gfx/transform_util.cc

Issue 692593003: More robust matrix decomposition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/transform_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/transform_util.cc
diff --git a/ui/gfx/transform_util.cc b/ui/gfx/transform_util.cc
index 655ce57f2bb2b799cbf7da1b69164d97e5a42dd0..98e0ab477cffc75bd472f0af7ad4abfcb99310e9 100644
--- a/ui/gfx/transform_util.cc
+++ b/ui/gfx/transform_util.cc
@@ -24,11 +24,6 @@ SkMScalar Length3(SkMScalar v[3]) {
std::sqrt(vd[0] * vd[0] + vd[1] * vd[1] + vd[2] * vd[2]));
}
-void Scale3(SkMScalar v[3], SkMScalar scale) {
- for (int i = 0; i < 3; ++i)
- v[i] *= scale;
-}
-
template <int n>
SkMScalar Dot(const SkMScalar* a, const SkMScalar* b) {
double total = 0.0;
@@ -372,8 +367,11 @@ bool DecomposeTransform(DecomposedTransform* decomp,
// Compute X scale factor and normalize first row.
decomp->scale[0] = Length3(row[0]);
- if (decomp->scale[0] != 0.0)
- Scale3(row[0], 1.0 / decomp->scale[0]);
+ if (decomp->scale[0] != 0.0) {
+ row[0][0] /= decomp->scale[0];
+ row[0][1] /= decomp->scale[0];
+ row[0][2] /= decomp->scale[0];
+ }
// Compute XY shear factor and make 2nd row orthogonal to 1st.
decomp->skew[0] = Dot<3>(row[0], row[1]);
@@ -381,8 +379,11 @@ bool DecomposeTransform(DecomposedTransform* decomp,
// Now, compute Y scale and normalize 2nd row.
decomp->scale[1] = Length3(row[1]);
- if (decomp->scale[1] != 0.0)
- Scale3(row[1], 1.0 / decomp->scale[1]);
+ if (decomp->scale[1] != 0.0) {
+ row[1][0] /= decomp->scale[1];
+ row[1][1] /= decomp->scale[1];
+ row[1][2] /= decomp->scale[1];
+ }
decomp->skew[0] /= decomp->scale[1];
@@ -394,8 +395,11 @@ bool DecomposeTransform(DecomposedTransform* decomp,
// Next, get Z scale and normalize 3rd row.
decomp->scale[2] = Length3(row[2]);
- if (decomp->scale[2] != 0.0)
- Scale3(row[2], 1.0 / decomp->scale[2]);
+ if (decomp->scale[2] != 0.0) {
+ row[2][0] /= decomp->scale[2];
+ row[2][1] /= decomp->scale[2];
+ row[2][2] /= decomp->scale[2];
+ }
decomp->skew[1] /= decomp->scale[2];
decomp->skew[2] /= decomp->scale[2];
« no previous file with comments | « ui/gfx/transform_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698