1/* 2 * Copyright (C) 2014 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef PlatformCAAnimationMac_h 27#define PlatformCAAnimationMac_h 28 29#include "PlatformCAAnimation.h" 30 31#include <wtf/RetainPtr.h> 32 33OBJC_CLASS CAMediaTimingFunction; 34OBJC_CLASS CAAnimation; 35OBJC_CLASS CAPropertyAnimation; 36OBJC_CLASS NSString; 37 38typedef CAPropertyAnimation* PlatformAnimationRef; 39 40namespace WebCore { 41 42NSString* toCAFillModeType(PlatformCAAnimation::FillModeType); 43NSString* toCAValueFunctionType(PlatformCAAnimation::ValueFunctionType); 44CAMediaTimingFunction* toCAMediaTimingFunction(const TimingFunction*, bool reverse); 45 46bool hasExplicitBeginTime(CAAnimation *); 47void setHasExplicitBeginTime(CAAnimation *, bool); 48 49class PlatformCAAnimationMac final : public PlatformCAAnimation { 50public: 51 static PassRefPtr<PlatformCAAnimation> create(AnimationType, const String& keyPath); 52 static PassRefPtr<PlatformCAAnimation> create(PlatformAnimationRef); 53 54 virtual ~PlatformCAAnimationMac(); 55 56 virtual bool isPlatformCAAnimationMac() const override { return true; } 57 58 virtual PassRefPtr<PlatformCAAnimation> copy() const override; 59 60 PlatformAnimationRef platformAnimation() const; 61 62 virtual String keyPath() const override; 63 64 virtual CFTimeInterval beginTime() const override; 65 virtual void setBeginTime(CFTimeInterval) override; 66 67 virtual CFTimeInterval duration() const override; 68 virtual void setDuration(CFTimeInterval) override; 69 70 virtual float speed() const override; 71 virtual void setSpeed(float) override; 72 73 virtual CFTimeInterval timeOffset() const override; 74 virtual void setTimeOffset(CFTimeInterval) override; 75 76 virtual float repeatCount() const override; 77 virtual void setRepeatCount(float) override; 78 79 virtual bool autoreverses() const override; 80 virtual void setAutoreverses(bool) override; 81 82 virtual FillModeType fillMode() const override; 83 virtual void setFillMode(FillModeType) override; 84 85 virtual void setTimingFunction(const TimingFunction*, bool reverse = false) override; 86 void copyTimingFunctionFrom(const PlatformCAAnimation*) override; 87 88 virtual bool isRemovedOnCompletion() const override; 89 virtual void setRemovedOnCompletion(bool) override; 90 91 virtual bool isAdditive() const override; 92 virtual void setAdditive(bool) override; 93 94 virtual ValueFunctionType valueFunction() const override; 95 virtual void setValueFunction(ValueFunctionType) override; 96 97 // Basic-animation properties. 98 virtual void setFromValue(float) override; 99 virtual void setFromValue(const WebCore::TransformationMatrix&) override; 100 virtual void setFromValue(const FloatPoint3D&) override; 101 virtual void setFromValue(const WebCore::Color&) override; 102#if ENABLE(CSS_FILTERS) 103 virtual void setFromValue(const FilterOperation*, int internalFilterPropertyIndex) override; 104#endif 105 virtual void copyFromValueFrom(const PlatformCAAnimation*) override; 106 107 virtual void setToValue(float) override; 108 virtual void setToValue(const WebCore::TransformationMatrix&) override; 109 virtual void setToValue(const FloatPoint3D&) override; 110 virtual void setToValue(const WebCore::Color&) override; 111#if ENABLE(CSS_FILTERS) 112 virtual void setToValue(const FilterOperation*, int internalFilterPropertyIndex) override; 113#endif 114 virtual void copyToValueFrom(const PlatformCAAnimation*) override; 115 116 // Keyframe-animation properties. 117 virtual void setValues(const Vector<float>&) override; 118 virtual void setValues(const Vector<WebCore::TransformationMatrix>&) override; 119 virtual void setValues(const Vector<FloatPoint3D>&) override; 120 virtual void setValues(const Vector<WebCore::Color>&) override; 121#if ENABLE(CSS_FILTERS) 122 virtual void setValues(const Vector<RefPtr<FilterOperation>>&, int internalFilterPropertyIndex) override; 123#endif 124 virtual void copyValuesFrom(const PlatformCAAnimation*) override; 125 126 virtual void setKeyTimes(const Vector<float>&) override; 127 virtual void copyKeyTimesFrom(const PlatformCAAnimation*) override; 128 129 virtual void setTimingFunctions(const Vector<const TimingFunction*>&, bool reverse = false) override; 130 virtual void copyTimingFunctionsFrom(const PlatformCAAnimation*) override; 131 132protected: 133 PlatformCAAnimationMac(AnimationType, const String& keyPath); 134 PlatformCAAnimationMac(PlatformAnimationRef); 135 136private: 137 RetainPtr<CAPropertyAnimation> m_animation; 138}; 139 140PLATFORM_CAANIMATION_TYPE_CASTS(PlatformCAAnimationMac, isPlatformCAAnimationMac()) 141 142} 143 144#endif // PlatformCAAnimationMac_h 145