OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "core/animation/CompositorAnimationsImpl.h" | 35 #include "core/animation/CompositorAnimationsImpl.h" |
36 #include "core/animation/ElementAnimations.h" | 36 #include "core/animation/ElementAnimations.h" |
37 #include "core/animation/animatable/AnimatableDouble.h" | 37 #include "core/animation/animatable/AnimatableDouble.h" |
38 #include "core/animation/animatable/AnimatableFilterOperations.h" | 38 #include "core/animation/animatable/AnimatableFilterOperations.h" |
39 #include "core/animation/animatable/AnimatableTransform.h" | 39 #include "core/animation/animatable/AnimatableTransform.h" |
40 #include "core/animation/animatable/AnimatableValue.h" | 40 #include "core/animation/animatable/AnimatableValue.h" |
41 #include "core/layout/LayoutBoxModelObject.h" | 41 #include "core/layout/LayoutBoxModelObject.h" |
42 #include "core/layout/LayoutObject.h" | 42 #include "core/layout/LayoutObject.h" |
43 #include "core/layout/compositing/CompositedLayerMapping.h" | 43 #include "core/layout/compositing/CompositedLayerMapping.h" |
44 #include "core/paint/PaintLayer.h" | 44 #include "core/paint/PaintLayer.h" |
| 45 #include "platform/CompositorFactory.h" |
45 #include "platform/RuntimeEnabledFeatures.h" | 46 #include "platform/RuntimeEnabledFeatures.h" |
| 47 #include "platform/animation/WebCompositorAnimation.h" |
| 48 #include "platform/animation/WebCompositorAnimationPlayer.h" |
| 49 #include "platform/animation/WebFilterAnimationCurve.h" |
| 50 #include "platform/animation/WebFilterKeyframe.h" |
| 51 #include "platform/animation/WebFloatAnimationCurve.h" |
| 52 #include "platform/animation/WebFloatKeyframe.h" |
| 53 #include "platform/animation/WebTransformAnimationCurve.h" |
| 54 #include "platform/animation/WebTransformKeyframe.h" |
46 #include "platform/geometry/FloatBox.h" | 55 #include "platform/geometry/FloatBox.h" |
47 #include "public/platform/Platform.h" | 56 #include "public/platform/Platform.h" |
48 #include "public/platform/WebCompositorAnimation.h" | |
49 #include "public/platform/WebCompositorAnimationPlayer.h" | |
50 #include "public/platform/WebCompositorSupport.h" | 57 #include "public/platform/WebCompositorSupport.h" |
51 #include "public/platform/WebFilterAnimationCurve.h" | |
52 #include "public/platform/WebFilterKeyframe.h" | |
53 #include "public/platform/WebFloatAnimationCurve.h" | |
54 #include "public/platform/WebFloatKeyframe.h" | |
55 #include "public/platform/WebTransformAnimationCurve.h" | |
56 #include "public/platform/WebTransformKeyframe.h" | |
57 | 58 |
58 #include <algorithm> | 59 #include <algorithm> |
59 #include <cmath> | 60 #include <cmath> |
60 | 61 |
61 namespace blink { | 62 namespace blink { |
62 | 63 |
63 namespace { | 64 namespace { |
64 | 65 |
65 void getKeyframeValuesForProperty(const KeyframeEffectModelBase* effect, Propert
yHandle property, double scale, PropertySpecificKeyframeVector& values) | 66 void getKeyframeValuesForProperty(const KeyframeEffectModelBase* effect, Propert
yHandle property, double scale, PropertySpecificKeyframeVector& values) |
66 { | 67 { |
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 keyframeTimingFunction = &keyframe->easing(); | 629 keyframeTimingFunction = &keyframe->easing(); |
629 } | 630 } |
630 | 631 |
631 // FIXME: This relies on StringKeyframes being eagerly evaluated, which
will | 632 // FIXME: This relies on StringKeyframes being eagerly evaluated, which
will |
632 // not happen eventually. Instead we should extract the CSSValue here | 633 // not happen eventually. Instead we should extract the CSSValue here |
633 // and convert using another set of toAnimatableXXXOperations functions. | 634 // and convert using another set of toAnimatableXXXOperations functions. |
634 const AnimatableValue* value = keyframe->getAnimatableValue().get(); | 635 const AnimatableValue* value = keyframe->getAnimatableValue().get(); |
635 | 636 |
636 switch (curve.type()) { | 637 switch (curve.type()) { |
637 case WebCompositorAnimationCurve::AnimationCurveTypeFilter: { | 638 case WebCompositorAnimationCurve::AnimationCurveTypeFilter: { |
638 OwnPtr<WebFilterOperations> ops = adoptPtr(Platform::current()->comp
ositorSupport()->createFilterOperations()); | 639 OwnPtr<WebFilterOperations> ops = adoptPtr(CompositorFactory::curren
t().createFilterOperations()); |
639 toWebFilterOperations(toAnimatableFilterOperations(value)->operation
s(), ops.get()); | 640 toWebFilterOperations(toAnimatableFilterOperations(value)->operation
s(), ops.get()); |
640 | 641 |
641 WebFilterKeyframe filterKeyframe(keyframe->offset(), ops.release()); | 642 WebFilterKeyframe filterKeyframe(keyframe->offset(), ops.release()); |
642 WebFilterAnimationCurve* filterCurve = static_cast<WebFilterAnimatio
nCurve*>(&curve); | 643 WebFilterAnimationCurve* filterCurve = static_cast<WebFilterAnimatio
nCurve*>(&curve); |
643 addKeyframeWithTimingFunction(*filterCurve, filterKeyframe, keyframe
TimingFunction); | 644 addKeyframeWithTimingFunction(*filterCurve, filterKeyframe, keyframe
TimingFunction); |
644 break; | 645 break; |
645 } | 646 } |
646 case WebCompositorAnimationCurve::AnimationCurveTypeFloat: { | 647 case WebCompositorAnimationCurve::AnimationCurveTypeFloat: { |
647 WebFloatKeyframe floatKeyframe(keyframe->offset(), toAnimatableDoubl
e(value)->toDouble()); | 648 WebFloatKeyframe floatKeyframe(keyframe->offset(), toAnimatableDoubl
e(value)->toDouble()); |
648 WebFloatAnimationCurve* floatCurve = static_cast<WebFloatAnimationCu
rve*>(&curve); | 649 WebFloatAnimationCurve* floatCurve = static_cast<WebFloatAnimationCu
rve*>(&curve); |
649 addKeyframeWithTimingFunction(*floatCurve, floatKeyframe, keyframeTi
mingFunction); | 650 addKeyframeWithTimingFunction(*floatCurve, floatKeyframe, keyframeTi
mingFunction); |
650 break; | 651 break; |
651 } | 652 } |
652 case WebCompositorAnimationCurve::AnimationCurveTypeTransform: { | 653 case WebCompositorAnimationCurve::AnimationCurveTypeTransform: { |
653 OwnPtr<WebTransformOperations> ops = adoptPtr(Platform::current()->c
ompositorSupport()->createTransformOperations()); | 654 OwnPtr<WebTransformOperations> ops = adoptPtr(CompositorFactory::cur
rent().createTransformOperations()); |
654 toWebTransformOperations(toAnimatableTransform(value)->transformOper
ations(), ops.get()); | 655 toWebTransformOperations(toAnimatableTransform(value)->transformOper
ations(), ops.get()); |
655 | 656 |
656 WebTransformKeyframe transformKeyframe(keyframe->offset(), ops.relea
se()); | 657 WebTransformKeyframe transformKeyframe(keyframe->offset(), ops.relea
se()); |
657 WebTransformAnimationCurve* transformCurve = static_cast<WebTransfor
mAnimationCurve*>(&curve); | 658 WebTransformAnimationCurve* transformCurve = static_cast<WebTransfor
mAnimationCurve*>(&curve); |
658 addKeyframeWithTimingFunction(*transformCurve, transformKeyframe, ke
yframeTimingFunction); | 659 addKeyframeWithTimingFunction(*transformCurve, transformKeyframe, ke
yframeTimingFunction); |
659 break; | 660 break; |
660 } | 661 } |
661 default: | 662 default: |
662 ASSERT_NOT_REACHED(); | 663 ASSERT_NOT_REACHED(); |
663 } | 664 } |
(...skipping 12 matching lines...) Expand all Loading... |
676 for (const auto& property : properties) { | 677 for (const auto& property : properties) { |
677 PropertySpecificKeyframeVector values; | 678 PropertySpecificKeyframeVector values; |
678 getKeyframeValuesForProperty(&effect, property, compositorTiming.scaledD
uration, values); | 679 getKeyframeValuesForProperty(&effect, property, compositorTiming.scaledD
uration, values); |
679 | 680 |
680 WebCompositorAnimation::TargetProperty targetProperty; | 681 WebCompositorAnimation::TargetProperty targetProperty; |
681 OwnPtr<WebCompositorAnimationCurve> curve; | 682 OwnPtr<WebCompositorAnimationCurve> curve; |
682 switch (property.cssProperty()) { | 683 switch (property.cssProperty()) { |
683 case CSSPropertyOpacity: { | 684 case CSSPropertyOpacity: { |
684 targetProperty = WebCompositorAnimation::TargetPropertyOpacity; | 685 targetProperty = WebCompositorAnimation::TargetPropertyOpacity; |
685 | 686 |
686 WebFloatAnimationCurve* floatCurve = Platform::current()->compositor
Support()->createFloatAnimationCurve(); | 687 WebFloatAnimationCurve* floatCurve = CompositorFactory::current().cr
eateFloatAnimationCurve(); |
687 addKeyframesToCurve(*floatCurve, values, timing); | 688 addKeyframesToCurve(*floatCurve, values, timing); |
688 setTimingFunctionOnCurve(*floatCurve, timing.timingFunction.get()); | 689 setTimingFunctionOnCurve(*floatCurve, timing.timingFunction.get()); |
689 curve = adoptPtr(floatCurve); | 690 curve = adoptPtr(floatCurve); |
690 break; | 691 break; |
691 } | 692 } |
692 case CSSPropertyWebkitFilter: | 693 case CSSPropertyWebkitFilter: |
693 case CSSPropertyBackdropFilter: { | 694 case CSSPropertyBackdropFilter: { |
694 targetProperty = WebCompositorAnimation::TargetPropertyFilter; | 695 targetProperty = WebCompositorAnimation::TargetPropertyFilter; |
695 WebFilterAnimationCurve* filterCurve = Platform::current()->composit
orSupport()->createFilterAnimationCurve(); | 696 WebFilterAnimationCurve* filterCurve = CompositorFactory::current().
createFilterAnimationCurve(); |
696 addKeyframesToCurve(*filterCurve, values, timing); | 697 addKeyframesToCurve(*filterCurve, values, timing); |
697 setTimingFunctionOnCurve(*filterCurve, timing.timingFunction.get()); | 698 setTimingFunctionOnCurve(*filterCurve, timing.timingFunction.get()); |
698 curve = adoptPtr(filterCurve); | 699 curve = adoptPtr(filterCurve); |
699 break; | 700 break; |
700 } | 701 } |
701 case CSSPropertyRotate: | 702 case CSSPropertyRotate: |
702 case CSSPropertyScale: | 703 case CSSPropertyScale: |
703 case CSSPropertyTranslate: | 704 case CSSPropertyTranslate: |
704 case CSSPropertyTransform: { | 705 case CSSPropertyTransform: { |
705 targetProperty = WebCompositorAnimation::TargetPropertyTransform; | 706 targetProperty = WebCompositorAnimation::TargetPropertyTransform; |
706 WebTransformAnimationCurve* transformCurve = Platform::current()->co
mpositorSupport()->createTransformAnimationCurve(); | 707 WebTransformAnimationCurve* transformCurve = CompositorFactory::curr
ent().createTransformAnimationCurve(); |
707 addKeyframesToCurve(*transformCurve, values, timing); | 708 addKeyframesToCurve(*transformCurve, values, timing); |
708 setTimingFunctionOnCurve(*transformCurve, timing.timingFunction.get(
)); | 709 setTimingFunctionOnCurve(*transformCurve, timing.timingFunction.get(
)); |
709 curve = adoptPtr(transformCurve); | 710 curve = adoptPtr(transformCurve); |
710 break; | 711 break; |
711 } | 712 } |
712 default: | 713 default: |
713 ASSERT_NOT_REACHED(); | 714 ASSERT_NOT_REACHED(); |
714 continue; | 715 continue; |
715 } | 716 } |
716 ASSERT(curve.get()); | 717 ASSERT(curve.get()); |
717 | 718 |
718 OwnPtr<WebCompositorAnimation> animation = adoptPtr(Platform::current()-
>compositorSupport()->createAnimation(*curve, targetProperty, group, 0)); | 719 OwnPtr<WebCompositorAnimation> animation = adoptPtr(CompositorFactory::c
urrent().createAnimation(*curve, targetProperty, group, 0)); |
719 | 720 |
720 if (!std::isnan(startTime)) | 721 if (!std::isnan(startTime)) |
721 animation->setStartTime(startTime); | 722 animation->setStartTime(startTime); |
722 | 723 |
723 animation->setIterations(compositorTiming.adjustedIterationCount); | 724 animation->setIterations(compositorTiming.adjustedIterationCount); |
724 animation->setIterationStart(compositorTiming.iterationStart); | 725 animation->setIterationStart(compositorTiming.iterationStart); |
725 animation->setTimeOffset(compositorTiming.scaledTimeOffset); | 726 animation->setTimeOffset(compositorTiming.scaledTimeOffset); |
726 | 727 |
727 switch (compositorTiming.direction) { | 728 switch (compositorTiming.direction) { |
728 case Timing::PlaybackDirectionNormal: | 729 case Timing::PlaybackDirectionNormal: |
(...skipping 28 matching lines...) Expand all Loading... |
757 break; | 758 break; |
758 default: | 759 default: |
759 ASSERT_NOT_REACHED(); | 760 ASSERT_NOT_REACHED(); |
760 } | 761 } |
761 animations.append(animation.release()); | 762 animations.append(animation.release()); |
762 } | 763 } |
763 ASSERT(!animations.isEmpty()); | 764 ASSERT(!animations.isEmpty()); |
764 } | 765 } |
765 | 766 |
766 } // namespace blink | 767 } // namespace blink |
OLD | NEW |