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

Unified Diff: Source/core/animation/CompositorAnimations.cpp

Issue 225183014: Handle direction control in compositor Animations (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: same patch with a manual test added Created 6 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
« no previous file with comments | « Source/core/animation/CompositorAnimations.h ('k') | Source/core/animation/CompositorAnimationsImpl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/CompositorAnimations.cpp
diff --git a/Source/core/animation/CompositorAnimations.cpp b/Source/core/animation/CompositorAnimations.cpp
index 3e92bf38f1fe20967ff24d1392fba55f1e8dca9a..68290000b2c8eb7e340b71f63765017a09801633 100644
--- a/Source/core/animation/CompositorAnimations.cpp
+++ b/Source/core/animation/CompositorAnimations.cpp
@@ -59,71 +59,17 @@ namespace blink {
namespace {
-void getKeyframeValuesForProperty(const KeyframeEffectModelBase* effect, CSSPropertyID id, double scale, bool reverse, PropertySpecificKeyframeVector& values)
+void getKeyframeValuesForProperty(const KeyframeEffectModelBase* effect, CSSPropertyID id, double scale, PropertySpecificKeyframeVector& values)
{
ASSERT(values.isEmpty());
const PropertySpecificKeyframeVector& group = effect->getPropertySpecificKeyframes(id);
- if (reverse) {
- for (size_t i = group.size(); i--;) {
- double offset = (1 - group[i]->offset()) * scale;
- values.append(group[i]->cloneWithOffset(offset));
- }
- } else {
- for (size_t i = 0; i < group.size(); ++i) {
- double offset = group[i]->offset() * scale;
- values.append(group[i]->cloneWithOffset(offset));
- }
- }
-}
-
-}
-
-// -----------------------------------------------------------------------
-// TimingFunctionReverser methods
-// -----------------------------------------------------------------------
-
-PassRefPtr<TimingFunction> CompositorAnimationsTimingFunctionReverser::reverse(const LinearTimingFunction& timefunc)
-{
- return const_cast<LinearTimingFunction*>(&timefunc);
-}
-
-PassRefPtr<TimingFunction> CompositorAnimationsTimingFunctionReverser::reverse(const CubicBezierTimingFunction& timefunc)
-{
- switch (timefunc.subType()) {
- case CubicBezierTimingFunction::EaseIn:
- return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseOut);
- case CubicBezierTimingFunction::EaseOut:
- return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseIn);
- case CubicBezierTimingFunction::EaseInOut:
- return const_cast<CubicBezierTimingFunction*>(&timefunc);
- case CubicBezierTimingFunction::Ease: // Ease is not symmetrical
- case CubicBezierTimingFunction::Custom:
- return CubicBezierTimingFunction::create(1 - timefunc.x2(), 1 - timefunc.y2(), 1 - timefunc.x1(), 1 - timefunc.y1());
- default:
- ASSERT_NOT_REACHED();
- return PassRefPtr<TimingFunction>();
+ for (size_t i = 0; i < group.size(); ++i) {
+ double offset = group[i]->offset() * scale;
+ values.append(group[i]->cloneWithOffset(offset));
}
}
-PassRefPtr<TimingFunction> CompositorAnimationsTimingFunctionReverser::reverse(const TimingFunction& timefunc)
-{
- switch (timefunc.type()) {
- case TimingFunction::LinearFunction: {
- const LinearTimingFunction& linear = toLinearTimingFunction(timefunc);
- return reverse(linear);
- }
- case TimingFunction::CubicBezierFunction: {
- const CubicBezierTimingFunction& cubic = toCubicBezierTimingFunction(timefunc);
- return reverse(cubic);
- }
-
- // Steps function can not be reversed.
- case TimingFunction::StepsFunction:
- default:
- ASSERT_NOT_REACHED();
- return PassRefPtr<TimingFunction>();
- }
}
bool CompositorAnimations::getAnimatedBoundingBox(FloatBox& box, const AnimationEffect& effect, double minValue, double maxValue) const
@@ -340,10 +286,7 @@ bool CompositorAnimationsImpl::convertTimingForCompositor(const Timing& timing,
if (scaledStartDelay > 0 && scaledStartDelay > out.scaledDuration * timing.iterationCount)
return false;
- out.reverse = (timing.direction == Timing::PlaybackDirectionReverse
- || timing.direction == Timing::PlaybackDirectionAlternateReverse);
- out.alternate = (timing.direction == Timing::PlaybackDirectionAlternate
- || timing.direction == Timing::PlaybackDirectionAlternateReverse);
+ out.direction = timing.direction;
if (!std::isfinite(timing.iterationCount)) {
out.adjustedIterationCount = -1;
@@ -415,26 +358,15 @@ void addKeyframeWithTimingFunction(PlatformAnimationCurveType& curve, const Plat
} // namespace anoymous
-void CompositorAnimationsImpl::addKeyframesToCurve(WebCompositorAnimationCurve& curve, const PropertySpecificKeyframeVector& keyframes, const Timing& timing, bool reverse)
+void CompositorAnimationsImpl::addKeyframesToCurve(WebCompositorAnimationCurve& curve, const PropertySpecificKeyframeVector& keyframes, const Timing& timing)
{
for (size_t i = 0; i < keyframes.size(); i++) {
- RefPtr<TimingFunction> reversedTimingFunction;
const TimingFunction* keyframeTimingFunction = 0;
if (i < keyframes.size() - 1) { // Ignore timing function of last frame.
if (keyframes.size() == 2 && keyframes[0]->easing().type() == TimingFunction::LinearFunction) {
- if (reverse) {
- reversedTimingFunction = CompositorAnimationsTimingFunctionReverser::reverse(*timing.timingFunction.get());
- keyframeTimingFunction = reversedTimingFunction.get();
- } else {
- keyframeTimingFunction = timing.timingFunction.get();
- }
+ keyframeTimingFunction = timing.timingFunction.get();
} else {
- if (reverse) {
- reversedTimingFunction = CompositorAnimationsTimingFunctionReverser::reverse(keyframes[i + 1]->easing());
- keyframeTimingFunction = reversedTimingFunction.get();
- } else {
- keyframeTimingFunction = &keyframes[i]->easing();
- }
+ keyframeTimingFunction = &keyframes[i]->easing();
}
}
@@ -486,7 +418,7 @@ void CompositorAnimationsImpl::getAnimationOnCompositor(const Timing& timing, do
for (PropertySet::iterator it = properties.begin(); it != properties.end(); ++it) {
PropertySpecificKeyframeVector values;
- getKeyframeValuesForProperty(&effect, *it, compositorTiming.scaledDuration, compositorTiming.reverse, values);
+ getKeyframeValuesForProperty(&effect, *it, compositorTiming.scaledDuration, values);
WebCompositorAnimation::TargetProperty targetProperty;
OwnPtr<WebCompositorAnimationCurve> curve;
@@ -495,21 +427,21 @@ void CompositorAnimationsImpl::getAnimationOnCompositor(const Timing& timing, do
targetProperty = WebCompositorAnimation::TargetPropertyOpacity;
WebFloatAnimationCurve* floatCurve = Platform::current()->compositorSupport()->createFloatAnimationCurve();
- addKeyframesToCurve(*floatCurve, values, timing, compositorTiming.reverse);
+ addKeyframesToCurve(*floatCurve, values, timing);
curve = adoptPtr(floatCurve);
break;
}
case CSSPropertyWebkitFilter: {
targetProperty = WebCompositorAnimation::TargetPropertyFilter;
WebFilterAnimationCurve* filterCurve = Platform::current()->compositorSupport()->createFilterAnimationCurve();
- addKeyframesToCurve(*filterCurve, values, timing, compositorTiming.reverse);
+ addKeyframesToCurve(*filterCurve, values, timing);
curve = adoptPtr(filterCurve);
break;
}
case CSSPropertyTransform: {
targetProperty = WebCompositorAnimation::TargetPropertyTransform;
WebTransformAnimationCurve* transformCurve = Platform::current()->compositorSupport()->createTransformAnimationCurve();
- addKeyframesToCurve(*transformCurve, values, timing, compositorTiming.reverse);
+ addKeyframesToCurve(*transformCurve, values, timing);
curve = adoptPtr(transformCurve);
break;
}
@@ -526,7 +458,23 @@ void CompositorAnimationsImpl::getAnimationOnCompositor(const Timing& timing, do
animation->setIterations(compositorTiming.adjustedIterationCount);
animation->setTimeOffset(compositorTiming.scaledTimeOffset);
- animation->setAlternatesDirection(compositorTiming.alternate);
+
+ switch (compositorTiming.direction) {
+ case Timing::PlaybackDirectionNormal:
+ animation->setDirection(blink::WebCompositorAnimation::DirectionNormal);
+ break;
+ case Timing::PlaybackDirectionReverse:
+ animation->setDirection(blink::WebCompositorAnimation::DirectionReverse);
+ break;
+ case Timing::PlaybackDirectionAlternate:
+ animation->setDirection(blink::WebCompositorAnimation::DirectionAlternate);
+ break;
+ case Timing::PlaybackDirectionAlternateReverse:
+ animation->setDirection(blink::WebCompositorAnimation::DirectionAlternateReverse);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
animations.append(animation.release());
}
« no previous file with comments | « Source/core/animation/CompositorAnimations.h ('k') | Source/core/animation/CompositorAnimationsImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698