| Index: third_party/WebKit/Source/platform/transforms/RotateTransformOperation.cpp
|
| diff --git a/third_party/WebKit/Source/platform/transforms/RotateTransformOperation.cpp b/third_party/WebKit/Source/platform/transforms/RotateTransformOperation.cpp
|
| index d92fa5bc5c2ab5905913d4561ef451122eec27f5..263cdeafa2d5d78df368b0444181ec79cb812250 100644
|
| --- a/third_party/WebKit/Source/platform/transforms/RotateTransformOperation.cpp
|
| +++ b/third_party/WebKit/Source/platform/transforms/RotateTransformOperation.cpp
|
| @@ -78,4 +78,61 @@ bool RotateTransformOperation::canBlendWith(
|
| return other.isSameType(*this);
|
| }
|
|
|
| +RotateAroundOriginTransformOperation::RotateAroundOriginTransformOperation(
|
| + double angle,
|
| + double originX,
|
| + double originY)
|
| + : RotateTransformOperation(Rotation(FloatPoint3D(0, 0, 1), angle),
|
| + RotateAroundOrigin),
|
| + m_originX(originX),
|
| + m_originY(originY) {}
|
| +
|
| +void RotateAroundOriginTransformOperation::apply(
|
| + TransformationMatrix& transform,
|
| + const FloatSize& boxSize) const {
|
| + transform.translate(m_originX, m_originY);
|
| + RotateTransformOperation::apply(transform, boxSize);
|
| + transform.translate(-m_originX, -m_originY);
|
| +}
|
| +
|
| +bool RotateAroundOriginTransformOperation::operator==(
|
| + const TransformOperation& other) const {
|
| + if (!isSameType(other))
|
| + return false;
|
| + const RotateAroundOriginTransformOperation& otherRotate =
|
| + toRotateAroundOriginTransformOperation(other);
|
| + const Rotation& otherRotation = otherRotate.m_rotation;
|
| + return m_rotation.axis == otherRotation.axis &&
|
| + m_rotation.angle == otherRotation.angle &&
|
| + m_originX == otherRotate.m_originX &&
|
| + m_originY == otherRotate.m_originY;
|
| +}
|
| +
|
| +PassRefPtr<TransformOperation> RotateAroundOriginTransformOperation::blend(
|
| + const TransformOperation* from,
|
| + double progress,
|
| + bool blendToIdentity) {
|
| + if (from && !from->isSameType(*this))
|
| + return this;
|
| + if (blendToIdentity) {
|
| + return RotateAroundOriginTransformOperation::create(
|
| + angle() * (1 - progress), m_originX, m_originY);
|
| + }
|
| + if (!from) {
|
| + return RotateAroundOriginTransformOperation::create(angle() * progress,
|
| + m_originX, m_originY);
|
| + }
|
| + const RotateAroundOriginTransformOperation& fromRotate =
|
| + toRotateAroundOriginTransformOperation(*from);
|
| + return RotateAroundOriginTransformOperation::create(
|
| + blink::blend(fromRotate.angle(), angle(), progress),
|
| + blink::blend(fromRotate.m_originX, m_originX, progress),
|
| + blink::blend(fromRotate.m_originY, m_originY, progress));
|
| +}
|
| +
|
| +PassRefPtr<TransformOperation> RotateAroundOriginTransformOperation::zoom(
|
| + double factor) {
|
| + return create(angle(), m_originX * factor, m_originY * factor);
|
| +}
|
| +
|
| } // namespace blink
|
|
|