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

Unified Diff: ui/gfx/transform.cc

Issue 23043011: cc: Use SkMScalar instead of doubles everywhere in cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Finalize test changes Created 7 years, 3 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
Index: ui/gfx/transform.cc
diff --git a/ui/gfx/transform.cc b/ui/gfx/transform.cc
index 3e94f44e21cb37c012d201c3ec0d58b40ca44b60..bfd1b66f6f6202cdb221078f6366b34bfe647608 100644
--- a/ui/gfx/transform.cc
+++ b/ui/gfx/transform.cc
@@ -24,61 +24,72 @@ namespace gfx {
namespace {
// Taken from SkMatrix44.
-const double kEpsilon = 1e-8;
+const SkMScalar kEpsilon = 1e-8;
-double TanDegrees(double degrees) {
- double radians = degrees * M_PI / 180;
+SkMScalar TanDegrees(double degrees) {
+ SkMScalar radians = degrees * M_PI / 180;
return std::tan(radians);
}
} // namespace
-Transform::Transform(
- double col1row1, double col2row1, double col3row1, double col4row1,
- double col1row2, double col2row2, double col3row2, double col4row2,
- double col1row3, double col2row3, double col3row3, double col4row3,
- double col1row4, double col2row4, double col3row4, double col4row4)
- : matrix_(SkMatrix44::kUninitialized_Constructor)
-{
- matrix_.setDouble(0, 0, col1row1);
- matrix_.setDouble(1, 0, col1row2);
- matrix_.setDouble(2, 0, col1row3);
- matrix_.setDouble(3, 0, col1row4);
-
- matrix_.setDouble(0, 1, col2row1);
- matrix_.setDouble(1, 1, col2row2);
- matrix_.setDouble(2, 1, col2row3);
- matrix_.setDouble(3, 1, col2row4);
-
- matrix_.setDouble(0, 2, col3row1);
- matrix_.setDouble(1, 2, col3row2);
- matrix_.setDouble(2, 2, col3row3);
- matrix_.setDouble(3, 2, col3row4);
-
- matrix_.setDouble(0, 3, col4row1);
- matrix_.setDouble(1, 3, col4row2);
- matrix_.setDouble(2, 3, col4row3);
- matrix_.setDouble(3, 3, col4row4);
-}
-
-Transform::Transform(
- double col1row1, double col2row1,
- double col1row2, double col2row2,
- double x_translation, double y_translation)
- : matrix_(SkMatrix44::kIdentity_Constructor)
-{
- matrix_.setDouble(0, 0, col1row1);
- matrix_.setDouble(1, 0, col1row2);
- matrix_.setDouble(0, 1, col2row1);
- matrix_.setDouble(1, 1, col2row2);
- matrix_.setDouble(0, 3, x_translation);
- matrix_.setDouble(1, 3, y_translation);
+Transform::Transform(SkMScalar col1row1,
+ SkMScalar col2row1,
+ SkMScalar col3row1,
+ SkMScalar col4row1,
+ SkMScalar col1row2,
+ SkMScalar col2row2,
+ SkMScalar col3row2,
+ SkMScalar col4row2,
+ SkMScalar col1row3,
+ SkMScalar col2row3,
+ SkMScalar col3row3,
+ SkMScalar col4row3,
+ SkMScalar col1row4,
+ SkMScalar col2row4,
+ SkMScalar col3row4,
+ SkMScalar col4row4)
+ : matrix_(SkMatrix44::kUninitialized_Constructor) {
+ matrix_.set(0, 0, col1row1);
+ matrix_.set(1, 0, col1row2);
+ matrix_.set(2, 0, col1row3);
+ matrix_.set(3, 0, col1row4);
+
+ matrix_.set(0, 1, col2row1);
+ matrix_.set(1, 1, col2row2);
+ matrix_.set(2, 1, col2row3);
+ matrix_.set(3, 1, col2row4);
+
+ matrix_.set(0, 2, col3row1);
+ matrix_.set(1, 2, col3row2);
+ matrix_.set(2, 2, col3row3);
+ matrix_.set(3, 2, col3row4);
+
+ matrix_.set(0, 3, col4row1);
+ matrix_.set(1, 3, col4row2);
+ matrix_.set(2, 3, col4row3);
+ matrix_.set(3, 3, col4row4);
+}
+
+Transform::Transform(SkMScalar col1row1,
+ SkMScalar col2row1,
+ SkMScalar col1row2,
+ SkMScalar col2row2,
+ SkMScalar x_translation,
+ SkMScalar y_translation)
+ : matrix_(SkMatrix44::kIdentity_Constructor) {
+ matrix_.set(0, 0, col1row1);
+ matrix_.set(1, 0, col1row2);
+ matrix_.set(0, 1, col2row1);
+ matrix_.set(1, 1, col2row2);
+ matrix_.set(0, 3, x_translation);
+ matrix_.set(1, 3, y_translation);
}
void Transform::RotateAboutXAxis(double degrees) {
double radians = degrees * M_PI / 180;
- double cosTheta = std::cos(radians);
- double sinTheta = std::sin(radians);
+ SkMScalar cosTheta = SkDoubleToMScalar(std::cos(radians));
+ SkMScalar sinTheta = SkDoubleToMScalar(std::sin(radians));
if (matrix_.isIdentity()) {
matrix_.set3x3(1, 0, 0,
0, cosTheta, sinTheta,
@@ -94,8 +105,8 @@ void Transform::RotateAboutXAxis(double degrees) {
void Transform::RotateAboutYAxis(double degrees) {
double radians = degrees * M_PI / 180;
- double cosTheta = std::cos(radians);
- double sinTheta = std::sin(radians);
+ SkMScalar cosTheta = SkDoubleToMScalar(std::cos(radians));
+ SkMScalar sinTheta = SkDoubleToMScalar(std::sin(radians));
if (matrix_.isIdentity()) {
// Note carefully the placement of the -sinTheta for rotation about
// y-axis is different than rotation about x-axis or z-axis.
@@ -112,9 +123,9 @@ void Transform::RotateAboutYAxis(double degrees) {
}
void Transform::RotateAboutZAxis(double degrees) {
- double radians = degrees * M_PI / 180;
- double cosTheta = std::cos(radians);
- double sinTheta = std::sin(radians);
+ double radians = (degrees / 180.0) * M_PI;
enne (OOO) 2013/09/07 00:01:45 This needed to stay a double for precision when ro
+ SkMScalar cosTheta = SkDoubleToScalar(std::cos(radians));
+ SkMScalar sinTheta = SkDoubleToScalar(std::sin(radians));
if (matrix_.isIdentity()) {
matrix_.set3x3(cosTheta, sinTheta, 0,
-sinTheta, cosTheta, 0,
@@ -130,68 +141,62 @@ void Transform::RotateAboutZAxis(double degrees) {
void Transform::RotateAbout(const Vector3dF& axis, double degrees) {
if (matrix_.isIdentity()) {
- matrix_.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
- SkDoubleToMScalar(axis.y()),
- SkDoubleToMScalar(axis.z()),
- SkDoubleToMScalar(degrees));
+ matrix_.setRotateDegreesAbout(SkFloatToMScalar(axis.x()),
+ SkFloatToMScalar(axis.y()),
+ SkFloatToMScalar(axis.z()),
+ degrees);
} else {
SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
- rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
- SkDoubleToMScalar(axis.y()),
- SkDoubleToMScalar(axis.z()),
- SkDoubleToMScalar(degrees));
+ rot.setRotateDegreesAbout(SkFloatToMScalar(axis.x()),
+ SkFloatToMScalar(axis.y()),
+ SkFloatToMScalar(axis.z()),
+ degrees);
matrix_.preConcat(rot);
}
}
-void Transform::Scale(double x, double y) {
- matrix_.preScale(SkDoubleToMScalar(x), SkDoubleToMScalar(y), 1);
-}
+void Transform::Scale(SkMScalar x, SkMScalar y) { matrix_.preScale(x, y, 1); }
-void Transform::Scale3d(double x, double y, double z) {
- matrix_.preScale(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
+void Transform::Scale3d(SkMScalar x, SkMScalar y, SkMScalar z) {
+ matrix_.preScale(x, y, z);
}
-void Transform::Translate(double x, double y) {
- matrix_.preTranslate(SkDoubleToMScalar(x), SkDoubleToMScalar(y), 0);
+void Transform::Translate(SkMScalar x, SkMScalar y) {
+ matrix_.preTranslate(x, y, 0);
}
-void Transform::Translate3d(double x, double y, double z) {
- matrix_.preTranslate(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
+void Transform::Translate3d(SkMScalar x, SkMScalar y, SkMScalar z) {
+ matrix_.preTranslate(x, y, z);
}
-void Transform::SkewX(double angle_x) {
+void Transform::SkewX(SkMScalar angle_x) {
if (matrix_.isIdentity())
- matrix_.setDouble(0, 1, TanDegrees(angle_x));
+ matrix_.set(0, 1, TanDegrees(angle_x));
else {
SkMatrix44 skew(SkMatrix44::kIdentity_Constructor);
- skew.setDouble(0, 1, TanDegrees(angle_x));
+ skew.set(0, 1, TanDegrees(angle_x));
matrix_.preConcat(skew);
}
}
-void Transform::SkewY(double angle_y) {
+void Transform::SkewY(SkMScalar angle_y) {
if (matrix_.isIdentity())
- matrix_.setDouble(1, 0, TanDegrees(angle_y));
+ matrix_.set(1, 0, TanDegrees(angle_y));
else {
SkMatrix44 skew(SkMatrix44::kIdentity_Constructor);
- skew.setDouble(1, 0, TanDegrees(angle_y));
+ skew.set(1, 0, TanDegrees(angle_y));
matrix_.preConcat(skew);
}
}
-void Transform::ApplyPerspectiveDepth(double depth) {
+void Transform::ApplyPerspectiveDepth(SkMScalar depth) {
if (depth == 0)
return;
if (matrix_.isIdentity())
- matrix_.setDouble(3, 2, -1.0 / depth);
+ matrix_.set(3, 2, -1.0 / depth);
else {
SkMatrix44 m(SkMatrix44::kIdentity_Constructor);
- m.setDouble(3, 2, -1.0 / depth);
+ m.set(3, 2, -1.0 / depth);
matrix_.preConcat(m);
}
}
@@ -209,9 +214,9 @@ bool Transform::IsIdentityOrIntegerTranslation() const {
return false;
bool no_fractional_translation =
- static_cast<int>(matrix_.getDouble(0, 3)) == matrix_.getDouble(0, 3) &&
- static_cast<int>(matrix_.getDouble(1, 3)) == matrix_.getDouble(1, 3) &&
- static_cast<int>(matrix_.getDouble(2, 3)) == matrix_.getDouble(2, 3);
+ static_cast<int>(matrix_.get(0, 3)) == matrix_.get(0, 3) &&
+ static_cast<int>(matrix_.get(1, 3)) == matrix_.get(1, 3) &&
+ static_cast<int>(matrix_.get(2, 3)) == matrix_.get(2, 3);
return no_fractional_translation;
}
@@ -244,34 +249,22 @@ bool Transform::IsBackFaceVisible() const {
// Compute the cofactor of the 3rd row, 3rd column.
double cofactor_part_1 =
- matrix_.getDouble(0, 0) *
- matrix_.getDouble(1, 1) *
- matrix_.getDouble(3, 3);
+ matrix_.get(0, 0) * matrix_.get(1, 1) * matrix_.get(3, 3);
double cofactor_part_2 =
- matrix_.getDouble(0, 1) *
- matrix_.getDouble(1, 3) *
- matrix_.getDouble(3, 0);
+ matrix_.get(0, 1) * matrix_.get(1, 3) * matrix_.get(3, 0);
double cofactor_part_3 =
- matrix_.getDouble(0, 3) *
- matrix_.getDouble(1, 0) *
- matrix_.getDouble(3, 1);
+ matrix_.get(0, 3) * matrix_.get(1, 0) * matrix_.get(3, 1);
double cofactor_part_4 =
- matrix_.getDouble(0, 0) *
- matrix_.getDouble(1, 3) *
- matrix_.getDouble(3, 1);
+ matrix_.get(0, 0) * matrix_.get(1, 3) * matrix_.get(3, 1);
double cofactor_part_5 =
- matrix_.getDouble(0, 1) *
- matrix_.getDouble(1, 0) *
- matrix_.getDouble(3, 3);
+ matrix_.get(0, 1) * matrix_.get(1, 0) * matrix_.get(3, 3);
double cofactor_part_6 =
- matrix_.getDouble(0, 3) *
- matrix_.getDouble(1, 1) *
- matrix_.getDouble(3, 0);
+ matrix_.get(0, 3) * matrix_.get(1, 1) * matrix_.get(3, 0);
double cofactor33 =
cofactor_part_1 +
@@ -317,30 +310,30 @@ bool Transform::Preserves2dAxisAlignment() const {
// values: The current implementation conservatively assumes that axis
// alignment is not preserved.
- bool has_x_or_y_perspective = matrix_.getDouble(3, 0) != 0 ||
- matrix_.getDouble(3, 1) != 0;
+ bool has_x_or_y_perspective =
+ matrix_.get(3, 0) != 0 || matrix_.get(3, 1) != 0;
int num_non_zero_in_row_0 = 0;
int num_non_zero_in_row_1 = 0;
int num_non_zero_in_col_0 = 0;
int num_non_zero_in_col_1 = 0;
- if (std::abs(matrix_.getDouble(0, 0)) > kEpsilon) {
+ if (std::abs(matrix_.get(0, 0)) > kEpsilon) {
num_non_zero_in_row_0++;
num_non_zero_in_col_0++;
}
- if (std::abs(matrix_.getDouble(0, 1)) > kEpsilon) {
+ if (std::abs(matrix_.get(0, 1)) > kEpsilon) {
num_non_zero_in_row_0++;
num_non_zero_in_col_1++;
}
- if (std::abs(matrix_.getDouble(1, 0)) > kEpsilon) {
+ if (std::abs(matrix_.get(1, 0)) > kEpsilon) {
num_non_zero_in_row_1++;
num_non_zero_in_col_0++;
}
- if (std::abs(matrix_.getDouble(1, 1)) > kEpsilon) {
+ if (std::abs(matrix_.get(1, 1)) > kEpsilon) {
num_non_zero_in_row_1++;
num_non_zero_in_col_1++;
}
@@ -358,21 +351,21 @@ void Transform::Transpose() {
}
void Transform::FlattenTo2d() {
- matrix_.setDouble(2, 0, 0.0);
- matrix_.setDouble(2, 1, 0.0);
- matrix_.setDouble(0, 2, 0.0);
- matrix_.setDouble(1, 2, 0.0);
- matrix_.setDouble(2, 2, 1.0);
- matrix_.setDouble(3, 2, 0.0);
- matrix_.setDouble(2, 3, 0.0);
+ matrix_.set(2, 0, 0.0);
+ matrix_.set(2, 1, 0.0);
+ matrix_.set(0, 2, 0.0);
+ matrix_.set(1, 2, 0.0);
+ matrix_.set(2, 2, 1.0);
+ matrix_.set(3, 2, 0.0);
+ matrix_.set(2, 3, 0.0);
}
Vector2dF Transform::To2dTranslation() const {
DCHECK(IsIdentityOrTranslation());
// Ensure that this translation is truly 2d.
- const double translate_z = matrix_.getDouble(2, 3);
+ const double translate_z = matrix_.get(2, 3);
DCHECK_EQ(0.0, translate_z);
- return gfx::Vector2dF(matrix_.getDouble(0, 3), matrix_.getDouble(1, 3));
+ return gfx::Vector2dF(matrix_.get(0, 3), matrix_.get(1, 3));
}
void Transform::TransformPoint(Point& point) const {
@@ -428,7 +421,7 @@ bool Transform::TransformRectReverse(RectF* rect) const {
return true;
}
-bool Transform::Blend(const Transform& from, double progress) {
+bool Transform::Blend(const Transform& from, SkMScalar progress) {
DecomposedTransform to_decomp;
DecomposedTransform from_decomp;
if (!DecomposeTransform(&to_decomp, *this) ||
@@ -447,12 +440,8 @@ void Transform::TransformPointInternal(const SkMatrix44& xform,
if (xform.isIdentity())
return;
- SkMScalar p[4] = {
- SkDoubleToMScalar(point.x()),
- SkDoubleToMScalar(point.y()),
- SkDoubleToMScalar(point.z()),
- SkDoubleToMScalar(1)
- };
+ SkMScalar p[4] = {SkFloatToMScalar(point.x()), SkFloatToMScalar(point.y()),
+ SkFloatToMScalar(point.z()), 1};
xform.mapMScalars(p);
@@ -468,12 +457,8 @@ void Transform::TransformPointInternal(const SkMatrix44& xform,
if (xform.isIdentity())
return;
- SkMScalar p[4] = {
- SkDoubleToMScalar(point.x()),
- SkDoubleToMScalar(point.y()),
- SkDoubleToMScalar(0),
- SkDoubleToMScalar(1)
- };
+ SkMScalar p[4] = {SkFloatToMScalar(point.x()), SkFloatToMScalar(point.y()), 0,
+ 1};
xform.mapMScalars(p);
@@ -486,22 +471,22 @@ std::string Transform::ToString() const {
" %+0.4f %+0.4f %+0.4f %+0.4f \n"
" %+0.4f %+0.4f %+0.4f %+0.4f \n"
" %+0.4f %+0.4f %+0.4f %+0.4f ]\n",
- matrix_.getDouble(0, 0),
- matrix_.getDouble(0, 1),
- matrix_.getDouble(0, 2),
- matrix_.getDouble(0, 3),
- matrix_.getDouble(1, 0),
- matrix_.getDouble(1, 1),
- matrix_.getDouble(1, 2),
- matrix_.getDouble(1, 3),
- matrix_.getDouble(2, 0),
- matrix_.getDouble(2, 1),
- matrix_.getDouble(2, 2),
- matrix_.getDouble(2, 3),
- matrix_.getDouble(3, 0),
- matrix_.getDouble(3, 1),
- matrix_.getDouble(3, 2),
- matrix_.getDouble(3, 3));
+ matrix_.get(0, 0),
+ matrix_.get(0, 1),
+ matrix_.get(0, 2),
+ matrix_.get(0, 3),
+ matrix_.get(1, 0),
+ matrix_.get(1, 1),
+ matrix_.get(1, 2),
+ matrix_.get(1, 3),
+ matrix_.get(2, 0),
+ matrix_.get(2, 1),
+ matrix_.get(2, 2),
+ matrix_.get(2, 3),
+ matrix_.get(3, 0),
+ matrix_.get(3, 1),
+ matrix_.get(3, 2),
+ matrix_.get(3, 3));
}
} // namespace gfx

Powered by Google App Engine
This is Rietveld 408576698