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

Unified Diff: ui/gfx/transform_util.cc

Issue 649203003: Type conversion fixes, ui/gfx/ edition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test 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
« ui/gfx/transform.cc ('K') | « ui/gfx/transform.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..055ec0d514a83b66a848b7f248cd24019952f8d8 100644
--- a/ui/gfx/transform_util.cc
+++ b/ui/gfx/transform_util.cc
@@ -107,7 +107,7 @@ bool Normalize(SkMatrix44& m) {
// Cannot normalize.
return false;
- SkMScalar scale = 1.0 / m.get(3, 3);
+ SkMScalar scale = SK_MScalar1 / m.get(3, 3);
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
m.set(i, j, m.get(i, j) * scale);
@@ -140,23 +140,24 @@ SkMatrix44 BuildSnappedTranslationMatrix(DecomposedTransform decomp) {
}
SkMatrix44 BuildRotationMatrix(const DecomposedTransform& decomp) {
- double x = decomp.quaternion[0];
- double y = decomp.quaternion[1];
- double z = decomp.quaternion[2];
- double w = decomp.quaternion[3];
+ SkMScalar x = decomp.quaternion[0];
+ SkMScalar y = decomp.quaternion[1];
+ SkMScalar z = decomp.quaternion[2];
+ SkMScalar w = decomp.quaternion[3];
+ SkMScalar two = SkFloatToMScalar(2.0f);
SkMatrix44 matrix(SkMatrix44::kUninitialized_Constructor);
// Implicitly calls matrix.setIdentity()
- matrix.set3x3(1.0 - 2.0 * (y * y + z * z),
- 2.0 * (x * y + z * w),
- 2.0 * (x * z - y * w),
- 2.0 * (x * y - z * w),
- 1.0 - 2.0 * (x * x + z * z),
- 2.0 * (y * z + x * w),
- 2.0 * (x * z + y * w),
- 2.0 * (y * z - x * w),
- 1.0 - 2.0 * (x * x + y * y));
+ matrix.set3x3(SK_MScalar1 - two * (y * y + z * z),
danakj 2014/10/18 18:40:06 i think you should downcast to float after the com
Peter Kasting 2014/10/20 23:38:56 Done. It might be nice to have a test that would
danakj 2014/10/23 15:35:44 I agree, tho I'm not sure either :) +awoloszyn FYI
+ two * (x * y + z * w),
+ two * (x * z - y * w),
+ two * (x * y - z * w),
+ SK_MScalar1 - two * (x * x + z * z),
+ two * (y * z + x * w),
+ two * (x * z + y * w),
+ two * (y * z - x * w),
+ SK_MScalar1 - two * (x * x + y * y));
return matrix;
}
@@ -373,7 +374,7 @@ 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]);
+ Scale3(row[0], SK_MScalar1 / decomp->scale[0]);
// Compute XY shear factor and make 2nd row orthogonal to 1st.
decomp->skew[0] = Dot<3>(row[0], row[1]);
@@ -382,7 +383,7 @@ 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]);
+ Scale3(row[1], SK_MScalar1 / decomp->scale[1]);
decomp->skew[0] /= decomp->scale[1];
@@ -395,7 +396,7 @@ 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]);
+ Scale3(row[2], SK_MScalar1 / decomp->scale[2]);
decomp->skew[1] /= decomp->scale[2];
decomp->skew[2] /= decomp->scale[2];
@@ -413,14 +414,18 @@ bool DecomposeTransform(DecomposedTransform* decomp,
}
}
- decomp->quaternion[0] =
- 0.5 * std::sqrt(std::max(1.0 + row[0][0] - row[1][1] - row[2][2], 0.0));
- decomp->quaternion[1] =
- 0.5 * std::sqrt(std::max(1.0 - row[0][0] + row[1][1] - row[2][2], 0.0));
- decomp->quaternion[2] =
- 0.5 * std::sqrt(std::max(1.0 - row[0][0] - row[1][1] + row[2][2], 0.0));
- decomp->quaternion[3] =
- 0.5 * std::sqrt(std::max(1.0 + row[0][0] + row[1][1] + row[2][2], 0.0));
+ SkMScalar half = SkFloatToMScalar(0.5f);
+ double row00 = SkMScalarToDouble(row[0][0]);
+ double row11 = SkMScalarToDouble(row[1][1]);
+ double row22 = SkMScalarToDouble(row[2][2]);
+ decomp->quaternion[0] = half *
+ std::sqrt(SkDoubleToMScalar(std::max(1.0 + row00 - row11 - row22, 0.0)));
danakj 2014/10/18 18:40:06 do the double to mscalar after taking the sqrt
Peter Kasting 2014/10/20 23:38:56 Done.
+ decomp->quaternion[1] = half *
+ std::sqrt(SkDoubleToMScalar(std::max(1.0 - row00 + row11 - row22, 0.0)));
+ decomp->quaternion[2] = half *
+ std::sqrt(SkDoubleToMScalar(std::max(1.0 - row00 - row11 + row22, 0.0)));
+ decomp->quaternion[3] = half *
+ std::sqrt(SkDoubleToMScalar(std::max(1.0 + row00 + row11 + row22, 0.0)));
if (row[2][1] > row[1][2])
decomp->quaternion[0] = -decomp->quaternion[0];
« ui/gfx/transform.cc ('K') | « ui/gfx/transform.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698