summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp')
-rw-r--r--Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp283
1 files changed, 0 insertions, 283 deletions
diff --git a/Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp b/Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp
deleted file mode 100644
index 1ee8ea053..000000000
--- a/Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "AnimationTranslationUtil.h"
-
-#include "FloatSize.h"
-#include "GraphicsLayer.h"
-#include "IdentityTransformOperation.h"
-#include "Length.h"
-#include "LengthFunctions.h"
-#include "Matrix3DTransformOperation.h"
-#include "MatrixTransformOperation.h"
-#include "PerspectiveTransformOperation.h"
-#include "RotateTransformOperation.h"
-#include "ScaleTransformOperation.h"
-#include "SkewTransformOperation.h"
-#include "TransformOperations.h"
-#include "TranslateTransformOperation.h"
-
-#include <public/Platform.h>
-#include <public/WebAnimation.h>
-#include <public/WebAnimationCurve.h>
-#include <public/WebCompositorSupport.h>
-#include <public/WebFloatAnimationCurve.h>
-#include <public/WebTransformAnimationCurve.h>
-#include <public/WebTransformOperations.h>
-#include <public/WebTransformationMatrix.h>
-
-#include <wtf/OwnPtr.h>
-#include <wtf/text/CString.h>
-
-using namespace std;
-using namespace WebKit;
-
-namespace WebCore {
-
-WebTransformOperations toWebTransformOperations(const TransformOperations& transformOperations, const FloatSize& boxSize)
-{
- // We need to do a deep copy the transformOperations may contain ref pointers to TransformOperation objects.
- WebTransformOperations webTransformOperations;
- for (size_t j = 0; j < transformOperations.size(); ++j) {
- TransformOperation::OperationType operationType = transformOperations.operations()[j]->getOperationType();
- switch (operationType) {
- case TransformOperation::SCALE_X:
- case TransformOperation::SCALE_Y:
- case TransformOperation::SCALE_Z:
- case TransformOperation::SCALE_3D:
- case TransformOperation::SCALE: {
- ScaleTransformOperation* transform = static_cast<ScaleTransformOperation*>(transformOperations.operations()[j].get());
- webTransformOperations.appendScale(transform->x(), transform->y(), transform->z());
- break;
- }
- case TransformOperation::TRANSLATE_X:
- case TransformOperation::TRANSLATE_Y:
- case TransformOperation::TRANSLATE_Z:
- case TransformOperation::TRANSLATE_3D:
- case TransformOperation::TRANSLATE: {
- TranslateTransformOperation* transform = static_cast<TranslateTransformOperation*>(transformOperations.operations()[j].get());
- webTransformOperations.appendTranslate(floatValueForLength(transform->x(), boxSize.width()), floatValueForLength(transform->y(), boxSize.height()), floatValueForLength(transform->z(), 1));
- break;
- }
- case TransformOperation::ROTATE_X:
- case TransformOperation::ROTATE_Y:
- case TransformOperation::ROTATE_3D:
- case TransformOperation::ROTATE: {
- RotateTransformOperation* transform = static_cast<RotateTransformOperation*>(transformOperations.operations()[j].get());
- webTransformOperations.appendRotate(transform->x(), transform->y(), transform->z(), transform->angle());
- break;
- }
- case TransformOperation::SKEW_X:
- case TransformOperation::SKEW_Y:
- case TransformOperation::SKEW: {
- SkewTransformOperation* transform = static_cast<SkewTransformOperation*>(transformOperations.operations()[j].get());
- webTransformOperations.appendSkew(transform->angleX(), transform->angleY());
- break;
- }
- case TransformOperation::MATRIX: {
- MatrixTransformOperation* transform = static_cast<MatrixTransformOperation*>(transformOperations.operations()[j].get());
- TransformationMatrix m = transform->matrix();
- webTransformOperations.appendMatrix(WebTransformationMatrix(m));
- break;
- }
- case TransformOperation::MATRIX_3D: {
- Matrix3DTransformOperation* transform = static_cast<Matrix3DTransformOperation*>(transformOperations.operations()[j].get());
- TransformationMatrix m = transform->matrix();
- webTransformOperations.appendMatrix(WebTransformationMatrix(m));
- break;
- }
- case TransformOperation::PERSPECTIVE: {
- PerspectiveTransformOperation* transform = static_cast<PerspectiveTransformOperation*>(transformOperations.operations()[j].get());
- webTransformOperations.appendPerspective(floatValueForLength(transform->perspective(), 0));
- break;
- }
- case TransformOperation::IDENTITY:
- webTransformOperations.appendIdentity();
- break;
- case TransformOperation::NONE:
- // Do nothing.
- break;
- } // switch
- } // for each operation
-
- return webTransformOperations;
-}
-
-template <class Value, class Keyframe, class Curve>
-bool appendKeyframeWithStandardTimingFunction(Curve* curve, double keyTime, const Value* value, const Value* lastValue, WebKit::WebAnimationCurve::TimingFunctionType timingFunctionType, const FloatSize&)
-{
- curve->add(Keyframe(keyTime, value->value()), timingFunctionType);
- return true;
-}
-
-template <class Value, class Keyframe, class Curve>
-bool appendKeyframeWithCustomBezierTimingFunction(Curve* curve, double keyTime, const Value* value, const Value* lastValue, double x1, double y1, double x2, double y2, const FloatSize&)
-{
- curve->add(Keyframe(keyTime, value->value()), x1, y1, x2, y2);
- return true;
-}
-
-bool isRotationType(TransformOperation::OperationType transformType)
-{
- return transformType == TransformOperation::ROTATE
- || transformType == TransformOperation::ROTATE_X
- || transformType == TransformOperation::ROTATE_Y
- || transformType == TransformOperation::ROTATE_Z
- || transformType == TransformOperation::ROTATE_3D;
-}
-
-template <>
-bool appendKeyframeWithStandardTimingFunction<TransformAnimationValue, WebTransformKeyframe, WebTransformAnimationCurve>(WebTransformAnimationCurve* curve, double keyTime, const TransformAnimationValue* value, const TransformAnimationValue* lastValue, WebKit::WebAnimationCurve::TimingFunctionType timingFunctionType, const FloatSize& boxSize)
-{
- bool canBlend = !lastValue;
- WebTransformOperations operations = toWebTransformOperations(*value->value(), boxSize);
- if (!canBlend) {
- WebTransformOperations lastOperations = toWebTransformOperations(*lastValue->value(), boxSize);
- canBlend = lastOperations.canBlendWith(operations);
- }
- if (canBlend) {
- curve->add(WebTransformKeyframe(keyTime, operations), timingFunctionType);
- return true;
- }
- return false;
-}
-
-template <>
-bool appendKeyframeWithCustomBezierTimingFunction<TransformAnimationValue, WebTransformKeyframe, WebTransformAnimationCurve>(WebTransformAnimationCurve* curve, double keyTime, const TransformAnimationValue* value, const TransformAnimationValue* lastValue, double x1, double y1, double x2, double y2, const FloatSize& boxSize)
-{
- bool canBlend = !lastValue;
- WebTransformOperations operations = toWebTransformOperations(*value->value(), boxSize);
- if (!canBlend) {
- WebTransformOperations lastOperations = toWebTransformOperations(*lastValue->value(), boxSize);
- canBlend = lastOperations.canBlendWith(operations);
- }
- if (canBlend) {
- curve->add(WebTransformKeyframe(keyTime, operations), x1, y1, x2, y2);
- return true;
- }
- return false;
-}
-
-template <class Value, class Keyframe, class Curve>
-PassOwnPtr<WebKit::WebAnimation> createWebAnimation(const KeyframeValueList& valueList, const Animation* animation, int animationId, double timeOffset, Curve* curve, WebKit::WebAnimation::TargetProperty targetProperty, const FloatSize& boxSize)
-{
- bool alternate = false;
- bool reverse = false;
- if (animation && animation->isDirectionSet()) {
- Animation::AnimationDirection direction = animation->direction();
- if (direction == Animation::AnimationDirectionAlternate || direction == Animation::AnimationDirectionAlternateReverse)
- alternate = true;
- if (direction == Animation::AnimationDirectionReverse || direction == Animation::AnimationDirectionAlternateReverse)
- reverse = true;
- }
-
- for (size_t i = 0; i < valueList.size(); i++) {
- size_t index = reverse ? valueList.size() - i - 1 : i;
- const Value* originalValue = static_cast<const Value*>(valueList.at(index));
- const Value* lastOriginalValue = 0;
- if (valueList.size() > 1 && ((reverse && index + 1 < valueList.size()) || (!reverse && index > 0)))
- lastOriginalValue = static_cast<const Value*>(valueList.at(reverse ? index + 1 : index - 1));
-
- const TimingFunction* originalTimingFunction = originalValue->timingFunction();
-
- // If there hasn't been a timing function associated with this keyframe, use the
- // animation's timing function, if we have one.
- if (!originalTimingFunction && animation->isTimingFunctionSet())
- originalTimingFunction = animation->timingFunction().get();
-
- // Ease is the default timing function.
- WebKit::WebAnimationCurve::TimingFunctionType timingFunctionType = WebKit::WebAnimationCurve::TimingFunctionTypeEase;
-
- bool isUsingCustomBezierTimingFunction = false;
- double x1 = 0;
- double y1 = 0;
- double x2 = 1;
- double y2 = 1;
-
- if (originalTimingFunction) {
- switch (originalTimingFunction->type()) {
- case TimingFunction::StepsFunction:
- // FIXME: add support for steps timing function.
- return nullptr;
- case TimingFunction::LinearFunction:
- timingFunctionType = WebKit::WebAnimationCurve::TimingFunctionTypeLinear;
- break;
- case TimingFunction::CubicBezierFunction:
- const CubicBezierTimingFunction* originalBezierTimingFunction = static_cast<const CubicBezierTimingFunction*>(originalTimingFunction);
- isUsingCustomBezierTimingFunction = true;
- x1 = originalBezierTimingFunction->x1();
- y1 = originalBezierTimingFunction->y1();
- x2 = originalBezierTimingFunction->x2();
- y2 = originalBezierTimingFunction->y2();
- break;
- } // switch
- }
-
- double duration = (animation && animation->isDurationSet()) ? animation->duration() : 1;
- double keyTime = originalValue->keyTime() * duration;
-
- if (reverse)
- keyTime = duration - keyTime;
-
- bool addedKeyframe = false;
- if (isUsingCustomBezierTimingFunction)
- addedKeyframe = appendKeyframeWithCustomBezierTimingFunction<Value, Keyframe, Curve>(curve, keyTime, originalValue, lastOriginalValue, x1, y1, x2, y2, boxSize);
- else
- addedKeyframe = appendKeyframeWithStandardTimingFunction<Value, Keyframe, Curve>(curve, keyTime, originalValue, lastOriginalValue, timingFunctionType, boxSize);
- if (!addedKeyframe)
- return nullptr;
- }
-
- OwnPtr<WebKit::WebAnimation> webAnimation = adoptPtr(Platform::current()->compositorSupport()->createAnimation(*curve, targetProperty, animationId));
-
- int iterations = (animation && animation->isIterationCountSet()) ? animation->iterationCount() : 1;
- webAnimation->setIterations(iterations);
- webAnimation->setAlternatesDirection(alternate);
-
- // If timeOffset > 0, then the animation has started in the past.
- webAnimation->setTimeOffset(timeOffset);
-
- return webAnimation.release();
-}
-
-PassOwnPtr<WebKit::WebAnimation> createWebAnimation(const KeyframeValueList& values, const Animation* animation, int animationId, double timeOffset, const FloatSize& boxSize)
-{
-
-
- if (values.property() == AnimatedPropertyWebkitTransform) {
- OwnPtr<WebTransformAnimationCurve> curve = adoptPtr(Platform::current()->compositorSupport()->createTransformAnimationCurve());
- return createWebAnimation<TransformAnimationValue, WebTransformKeyframe, WebTransformAnimationCurve>(values, animation, animationId, timeOffset, curve.get(), WebKit::WebAnimation::TargetPropertyTransform, FloatSize(boxSize));
- }
-
- if (values.property() == AnimatedPropertyOpacity) {
- OwnPtr<WebFloatAnimationCurve> curve = adoptPtr(Platform::current()->compositorSupport()->createFloatAnimationCurve());
- return createWebAnimation<FloatAnimationValue, WebFloatKeyframe, WebFloatAnimationCurve>(values, animation, animationId, timeOffset, curve.get(), WebKit::WebAnimation::TargetPropertyOpacity, FloatSize());
- }
-
- return nullptr;
-}
-
-} // namespace WebCore