| Index: cc/animation/transform_operation.cc
|
| diff --git a/cc/animation/transform_operation.cc b/cc/animation/transform_operation.cc
|
| index ea3b0b2fc3a56e21c29919464cc95ae98122f944..93f40f37f1aadeffea4d16afda92580cd00ebb91 100644
|
| --- a/cc/animation/transform_operation.cc
|
| +++ b/cc/animation/transform_operation.cc
|
| @@ -12,7 +12,7 @@
|
| #include "ui/gfx/vector3d_f.h"
|
|
|
| namespace {
|
| -const double kAngleEpsilon = 1e-4;
|
| +const SkMScalar kAngleEpsilon = 1e-4;
|
| }
|
|
|
| namespace cc {
|
| @@ -27,10 +27,10 @@ static bool IsOperationIdentity(const TransformOperation* operation) {
|
|
|
| static bool ShareSameAxis(const TransformOperation* from,
|
| const TransformOperation* to,
|
| - double* axis_x,
|
| - double* axis_y,
|
| - double* axis_z,
|
| - double* angle_from) {
|
| + SkMScalar* axis_x,
|
| + SkMScalar* axis_y,
|
| + SkMScalar* axis_z,
|
| + SkMScalar* angle_from) {
|
| if (IsOperationIdentity(from) && IsOperationIdentity(to))
|
| return false;
|
|
|
| @@ -50,20 +50,21 @@ static bool ShareSameAxis(const TransformOperation* from,
|
| return true;
|
| }
|
|
|
| - double length_2 = from->rotate.axis.x * from->rotate.axis.x +
|
| - from->rotate.axis.y * from->rotate.axis.y +
|
| - from->rotate.axis.z * from->rotate.axis.z;
|
| - double other_length_2 = to->rotate.axis.x * to->rotate.axis.x +
|
| - to->rotate.axis.y * to->rotate.axis.y +
|
| - to->rotate.axis.z * to->rotate.axis.z;
|
| + SkMScalar length_2 = from->rotate.axis.x * from->rotate.axis.x +
|
| + from->rotate.axis.y * from->rotate.axis.y +
|
| + from->rotate.axis.z * from->rotate.axis.z;
|
| + SkMScalar other_length_2 = to->rotate.axis.x * to->rotate.axis.x +
|
| + to->rotate.axis.y * to->rotate.axis.y +
|
| + to->rotate.axis.z * to->rotate.axis.z;
|
|
|
| if (length_2 <= kAngleEpsilon || other_length_2 <= kAngleEpsilon)
|
| return false;
|
|
|
| - double dot = to->rotate.axis.x * from->rotate.axis.x +
|
| - to->rotate.axis.y * from->rotate.axis.y +
|
| - to->rotate.axis.z * from->rotate.axis.z;
|
| - double error = std::abs(1.0 - (dot * dot) / (length_2 * other_length_2));
|
| + SkMScalar dot = to->rotate.axis.x * from->rotate.axis.x +
|
| + to->rotate.axis.y * from->rotate.axis.y +
|
| + to->rotate.axis.z * from->rotate.axis.z;
|
| + SkMScalar error =
|
| + std::abs(SK_MScalar1 - (dot * dot) / (length_2 * other_length_2));
|
| bool result = error < kAngleEpsilon;
|
| if (result) {
|
| *axis_x = to->rotate.axis.x;
|
| @@ -76,14 +77,16 @@ static bool ShareSameAxis(const TransformOperation* from,
|
| return result;
|
| }
|
|
|
| -static double BlendDoubles(double from, double to, double progress) {
|
| +static SkMScalar BlendSkMScalars(SkMScalar from,
|
| + SkMScalar to,
|
| + SkMScalar progress) {
|
| return from * (1 - progress) + to * progress;
|
| }
|
|
|
| bool TransformOperation::BlendTransformOperations(
|
| const TransformOperation* from,
|
| const TransformOperation* to,
|
| - double progress,
|
| + SkMScalar progress,
|
| gfx::Transform* result) {
|
| if (IsOperationIdentity(from) && IsOperationIdentity(to))
|
| return true;
|
| @@ -97,26 +100,26 @@ bool TransformOperation::BlendTransformOperations(
|
|
|
| switch (interpolation_type) {
|
| case TransformOperation::TransformOperationTranslate: {
|
| - double from_x = IsOperationIdentity(from) ? 0 : from->translate.x;
|
| - double from_y = IsOperationIdentity(from) ? 0 : from->translate.y;
|
| - double from_z = IsOperationIdentity(from) ? 0 : from->translate.z;
|
| - double to_x = IsOperationIdentity(to) ? 0 : to->translate.x;
|
| - double to_y = IsOperationIdentity(to) ? 0 : to->translate.y;
|
| - double to_z = IsOperationIdentity(to) ? 0 : to->translate.z;
|
| - result->Translate3d(BlendDoubles(from_x, to_x, progress),
|
| - BlendDoubles(from_y, to_y, progress),
|
| - BlendDoubles(from_z, to_z, progress));
|
| + SkMScalar from_x = IsOperationIdentity(from) ? 0 : from->translate.x;
|
| + SkMScalar from_y = IsOperationIdentity(from) ? 0 : from->translate.y;
|
| + SkMScalar from_z = IsOperationIdentity(from) ? 0 : from->translate.z;
|
| + SkMScalar to_x = IsOperationIdentity(to) ? 0 : to->translate.x;
|
| + SkMScalar to_y = IsOperationIdentity(to) ? 0 : to->translate.y;
|
| + SkMScalar to_z = IsOperationIdentity(to) ? 0 : to->translate.z;
|
| + result->Translate3d(BlendSkMScalars(from_x, to_x, progress),
|
| + BlendSkMScalars(from_y, to_y, progress),
|
| + BlendSkMScalars(from_z, to_z, progress));
|
| break;
|
| }
|
| case TransformOperation::TransformOperationRotate: {
|
| - double axis_x = 0;
|
| - double axis_y = 0;
|
| - double axis_z = 1;
|
| - double from_angle = 0;
|
| - double to_angle = IsOperationIdentity(to) ? 0 : to->rotate.angle;
|
| + SkMScalar axis_x = 0;
|
| + SkMScalar axis_y = 0;
|
| + SkMScalar axis_z = 1;
|
| + SkMScalar from_angle = 0;
|
| + SkMScalar to_angle = IsOperationIdentity(to) ? 0 : to->rotate.angle;
|
| if (ShareSameAxis(from, to, &axis_x, &axis_y, &axis_z, &from_angle)) {
|
| result->RotateAbout(gfx::Vector3dF(axis_x, axis_y, axis_z),
|
| - BlendDoubles(from_angle, to_angle, progress));
|
| + BlendSkMScalars(from_angle, to_angle, progress));
|
| } else {
|
| gfx::Transform to_matrix;
|
| if (!IsOperationIdentity(to))
|
| @@ -131,33 +134,35 @@ bool TransformOperation::BlendTransformOperations(
|
| break;
|
| }
|
| case TransformOperation::TransformOperationScale: {
|
| - double from_x = IsOperationIdentity(from) ? 1 : from->scale.x;
|
| - double from_y = IsOperationIdentity(from) ? 1 : from->scale.y;
|
| - double from_z = IsOperationIdentity(from) ? 1 : from->scale.z;
|
| - double to_x = IsOperationIdentity(to) ? 1 : to->scale.x;
|
| - double to_y = IsOperationIdentity(to) ? 1 : to->scale.y;
|
| - double to_z = IsOperationIdentity(to) ? 1 : to->scale.z;
|
| - result->Scale3d(BlendDoubles(from_x, to_x, progress),
|
| - BlendDoubles(from_y, to_y, progress),
|
| - BlendDoubles(from_z, to_z, progress));
|
| + SkMScalar from_x = IsOperationIdentity(from) ? 1 : from->scale.x;
|
| + SkMScalar from_y = IsOperationIdentity(from) ? 1 : from->scale.y;
|
| + SkMScalar from_z = IsOperationIdentity(from) ? 1 : from->scale.z;
|
| + SkMScalar to_x = IsOperationIdentity(to) ? 1 : to->scale.x;
|
| + SkMScalar to_y = IsOperationIdentity(to) ? 1 : to->scale.y;
|
| + SkMScalar to_z = IsOperationIdentity(to) ? 1 : to->scale.z;
|
| + result->Scale3d(BlendSkMScalars(from_x, to_x, progress),
|
| + BlendSkMScalars(from_y, to_y, progress),
|
| + BlendSkMScalars(from_z, to_z, progress));
|
| break;
|
| }
|
| case TransformOperation::TransformOperationSkew: {
|
| - double from_x = IsOperationIdentity(from) ? 0 : from->skew.x;
|
| - double from_y = IsOperationIdentity(from) ? 0 : from->skew.y;
|
| - double to_x = IsOperationIdentity(to) ? 0 : to->skew.x;
|
| - double to_y = IsOperationIdentity(to) ? 0 : to->skew.y;
|
| - result->SkewX(BlendDoubles(from_x, to_x, progress));
|
| - result->SkewY(BlendDoubles(from_y, to_y, progress));
|
| + SkMScalar from_x = IsOperationIdentity(from) ? 0 : from->skew.x;
|
| + SkMScalar from_y = IsOperationIdentity(from) ? 0 : from->skew.y;
|
| + SkMScalar to_x = IsOperationIdentity(to) ? 0 : to->skew.x;
|
| + SkMScalar to_y = IsOperationIdentity(to) ? 0 : to->skew.y;
|
| + result->SkewX(BlendSkMScalars(from_x, to_x, progress));
|
| + result->SkewY(BlendSkMScalars(from_y, to_y, progress));
|
| break;
|
| }
|
| case TransformOperation::TransformOperationPerspective: {
|
| - double from_perspective_depth = IsOperationIdentity(from) ?
|
| - std::numeric_limits<double>::max() : from->perspective_depth;
|
| - double to_perspective_depth = IsOperationIdentity(to) ?
|
| - std::numeric_limits<double>::max() : to->perspective_depth;
|
| - result->ApplyPerspectiveDepth(
|
| - BlendDoubles(from_perspective_depth, to_perspective_depth, progress));
|
| + SkMScalar from_perspective_depth =
|
| + IsOperationIdentity(from) ? std::numeric_limits<SkMScalar>::max()
|
| + : from->perspective_depth;
|
| + SkMScalar to_perspective_depth = IsOperationIdentity(to)
|
| + ? std::numeric_limits<SkMScalar>::max()
|
| + : to->perspective_depth;
|
| + result->ApplyPerspectiveDepth(BlendSkMScalars(
|
| + from_perspective_depth, to_perspective_depth, progress));
|
| break;
|
| }
|
| case TransformOperation::TransformOperationMatrix: {
|
| @@ -207,8 +212,8 @@ static void UnionBoxWithZeroScale(gfx::BoxF* box) {
|
| bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
| const TransformOperation* from,
|
| const TransformOperation* to,
|
| - double min_progress,
|
| - double max_progress,
|
| + SkMScalar min_progress,
|
| + SkMScalar max_progress,
|
| gfx::BoxF* bounds) {
|
| bool is_identity_from = IsOperationIdentity(from);
|
| bool is_identity_to = IsOperationIdentity(to);
|
| @@ -226,7 +231,7 @@ bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
|
|
| switch (interpolation_type) {
|
| case TransformOperation::TransformOperationTranslate: {
|
| - double from_x, from_y, from_z;
|
| + SkMScalar from_x, from_y, from_z;
|
| if (is_identity_from) {
|
| from_x = from_y = from_z = 0.0;
|
| } else {
|
| @@ -234,7 +239,7 @@ bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
| from_y = from->translate.y;
|
| from_z = from->translate.z;
|
| }
|
| - double to_x, to_y, to_z;
|
| + SkMScalar to_x, to_y, to_z;
|
| if (is_identity_to) {
|
| to_x = to_y = to_z = 0.0;
|
| } else {
|
| @@ -243,18 +248,18 @@ bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
| to_z = to->translate.z;
|
| }
|
| *bounds = box;
|
| - *bounds += gfx::Vector3dF(BlendDoubles(from_x, to_x, min_progress),
|
| - BlendDoubles(from_y, to_y, min_progress),
|
| - BlendDoubles(from_z, to_z, min_progress));
|
| + *bounds += gfx::Vector3dF(BlendSkMScalars(from_x, to_x, min_progress),
|
| + BlendSkMScalars(from_y, to_y, min_progress),
|
| + BlendSkMScalars(from_z, to_z, min_progress));
|
| gfx::BoxF bounds_max = box;
|
| - bounds_max += gfx::Vector3dF(BlendDoubles(from_x, to_x, max_progress),
|
| - BlendDoubles(from_y, to_y, max_progress),
|
| - BlendDoubles(from_z, to_z, max_progress));
|
| + bounds_max += gfx::Vector3dF(BlendSkMScalars(from_x, to_x, max_progress),
|
| + BlendSkMScalars(from_y, to_y, max_progress),
|
| + BlendSkMScalars(from_z, to_z, max_progress));
|
| bounds->Union(bounds_max);
|
| return true;
|
| }
|
| case TransformOperation::TransformOperationScale: {
|
| - double from_x, from_y, from_z;
|
| + SkMScalar from_x, from_y, from_z;
|
| if (is_identity_from) {
|
| from_x = from_y = from_z = 1.0;
|
| } else {
|
| @@ -262,7 +267,7 @@ bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
| from_y = from->scale.y;
|
| from_z = from->scale.z;
|
| }
|
| - double to_x, to_y, to_z;
|
| + SkMScalar to_x, to_y, to_z;
|
| if (is_identity_to) {
|
| to_x = to_y = to_z = 1.0;
|
| } else {
|
| @@ -271,15 +276,17 @@ bool TransformOperation::BlendedBoundsForBox(const gfx::BoxF& box,
|
| to_z = to->scale.z;
|
| }
|
| *bounds = box;
|
| - ApplyScaleToBox(BlendDoubles(from_x, to_x, min_progress),
|
| - BlendDoubles(from_y, to_y, min_progress),
|
| - BlendDoubles(from_z, to_z, min_progress),
|
| - bounds);
|
| + ApplyScaleToBox(
|
| + SkMScalarToFloat(BlendSkMScalars(from_x, to_x, min_progress)),
|
| + SkMScalarToFloat(BlendSkMScalars(from_y, to_y, min_progress)),
|
| + SkMScalarToFloat(BlendSkMScalars(from_z, to_z, min_progress)),
|
| + bounds);
|
| gfx::BoxF bounds_max = box;
|
| - ApplyScaleToBox(BlendDoubles(from_x, to_x, max_progress),
|
| - BlendDoubles(from_y, to_y, max_progress),
|
| - BlendDoubles(from_z, to_z, max_progress),
|
| - &bounds_max);
|
| + ApplyScaleToBox(
|
| + SkMScalarToFloat(BlendSkMScalars(from_x, to_x, max_progress)),
|
| + SkMScalarToFloat(BlendSkMScalars(from_y, to_y, max_progress)),
|
| + SkMScalarToFloat(BlendSkMScalars(from_z, to_z, max_progress)),
|
| + &bounds_max);
|
| if (!bounds->IsEmpty() && !bounds_max.IsEmpty()) {
|
| bounds->Union(bounds_max);
|
| } else if (!bounds->IsEmpty()) {
|
|
|