1f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch/* 2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 3f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 4f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Redistribution and use in source and binary forms, with or without 5f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * modification, are permitted provided that the following conditions 6f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * are met: 7f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 1. Redistributions of source code must retain the above copyright 8f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * notice, this list of conditions and the following disclaimer. 9f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright 10f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * notice, this list of conditions and the following disclaimer in the 11f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * documentation and/or other materials provided with the distribution. 12f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * 13f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch */ 25f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "config.h" 27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if USE(ACCELERATED_COMPOSITING) 29f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import "PlatformCAAnimation.h" 31f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import "FloatConversion.h" 33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import "PlatformString.h" 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import "TimingFunction.h" 35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import <QuartzCore/QuartzCore.h> 36f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import <wtf/UnusedParam.h> 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#define HAVE_MODERN_QUARTZCORE (!defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)) 39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochusing namespace WebCore; 41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch// This value must be the same as in PlatformCALayerMac.mm 43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic NSString * const WKNonZeroBeginTimeFlag = @"WKPlatformCAAnimationNonZeroBeginTimeFlag"; 44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic bool hasNonZeroBeginTimeFlag(const PlatformCAAnimation* animation) 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [[animation->platformAnimation() valueForKey:WKNonZeroBeginTimeFlag] boolValue]; 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic void setNonZeroBeginTimeFlag(PlatformCAAnimation* animation, bool value) 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [animation->platformAnimation() setValue:[NSNumber numberWithBool:value] forKey:WKNonZeroBeginTimeFlag]; 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic NSString* toCAFillModeType(PlatformCAAnimation::FillModeType type) 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch switch (type) { 58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::NoFillMode: 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::Forwards: return kCAFillModeForwards; 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::Backwards: return kCAFillModeBackwards; 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::Both: return kCAFillModeBoth; 62f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return @""; 64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic PlatformCAAnimation::FillModeType fromCAFillModeType(NSString* string) 67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAFillModeBackwards]) 69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::Backwards; 70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAFillModeBoth]) 72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::Both; 73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::Forwards; 75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if HAVE_MODERN_QUARTZCORE 78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic NSString* toCAValueFunctionType(PlatformCAAnimation::ValueFunctionType type) 79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch switch (type) { 81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::NoValueFunction: return @""; 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::RotateX: return kCAValueFunctionRotateX; 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::RotateY: return kCAValueFunctionRotateY; 84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::RotateZ: return kCAValueFunctionRotateZ; 85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::ScaleX: return kCAValueFunctionScaleX; 86f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::ScaleY: return kCAValueFunctionScaleY; 87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::ScaleZ: return kCAValueFunctionScaleZ; 88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::Scale: return kCAValueFunctionScale; 89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::TranslateX: return kCAValueFunctionTranslateX; 90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::TranslateY: return kCAValueFunctionTranslateY; 91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::TranslateZ: return kCAValueFunctionTranslateZ; 92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch case PlatformCAAnimation::Translate: return kCAValueFunctionTranslate; 93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return @""; 95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic PlatformCAAnimation::ValueFunctionType fromCAValueFunctionType(NSString* string) 98f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 99f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionRotateX]) 100f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::RotateX; 101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 102f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionRotateY]) 103f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::RotateY; 104f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 105f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionRotateZ]) 106f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::RotateZ; 107f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 108f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionScaleX]) 109f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::ScaleX; 110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionScaleY]) 112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::ScaleY; 113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 114f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionScaleZ]) 115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::ScaleZ; 116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionScale]) 118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::Scale; 119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 120f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionTranslateX]) 121f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::TranslateX; 122f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionTranslateY]) 124f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::TranslateY; 125f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 126f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionTranslateZ]) 127f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::TranslateZ; 128f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([string isEqualToString:kCAValueFunctionTranslate]) 130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::Translate; 131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 132f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return PlatformCAAnimation::NoValueFunction; 133f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic CAMediaTimingFunction* toCAMediaTimingFunction(const TimingFunction* timingFunction) 137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 13881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(timingFunction); 139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (timingFunction->isCubicBezierTimingFunction()) { 140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch const CubicBezierTimingFunction* ctf = static_cast<const CubicBezierTimingFunction*>(timingFunction); 141f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [CAMediaTimingFunction functionWithControlPoints:static_cast<float>(ctf->x1()) :static_cast<float>(ctf->y1()) 142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch :static_cast<float>(ctf->x2()) :static_cast<float>(ctf->y2())]; 143f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 145f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 148f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(AnimationType type, const String& keyPath) 149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return adoptRef(new PlatformCAAnimation(type, keyPath)); 151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 153f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPassRefPtr<PlatformCAAnimation> PlatformCAAnimation::create(PlatformAnimationRef animation) 154f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 155f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return adoptRef(new PlatformCAAnimation(animation)); 156f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 157f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 158f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformCAAnimation::PlatformCAAnimation(AnimationType type, const String& keyPath) 159f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : m_type(type) 160f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (type == Basic) 162f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_animation.adoptNS([[CABasicAnimation animationWithKeyPath:keyPath] retain]); 163f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else 164f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_animation.adoptNS([[CAKeyframeAnimation animationWithKeyPath:keyPath] retain]); 165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 167f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformCAAnimation::PlatformCAAnimation(PlatformAnimationRef animation) 168f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 169f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CABasicAnimation class]]) 170f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_type = Basic; 171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else if ([static_cast<CAAnimation*>(animation) isKindOfClass:[CAKeyframeAnimation class]]) 172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_type = Keyframe; 173f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch else { 174f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ASSERT(0); 175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 176f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 177f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 178f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_animation = static_cast<CAPropertyAnimation*>(animation); 179f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 180f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1812fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<PlatformCAAnimation> PlatformCAAnimation::copy() const 182f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<PlatformCAAnimation> animation = create(animationType(), keyPath()); 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setBeginTime(beginTime()); 1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setDuration(duration()); 1872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setSpeed(speed()); 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setTimeOffset(timeOffset()); 1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setRepeatCount(repeatCount()); 1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setAutoreverses(autoreverses()); 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setFillMode(fillMode()); 1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setRemovedOnCompletion(isRemovedOnCompletion()); 1932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setAdditive(isAdditive()); 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyTimingFunctionFrom(this); 1952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->setValueFunction(valueFunction()); 1962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block setNonZeroBeginTimeFlag(animation.get(), hasNonZeroBeginTimeFlag(this)); 198f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 199f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Copy the specific Basic or Keyframe values 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (animationType() == Keyframe) { 2012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyValuesFrom(this); 2022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyKeyTimesFrom(this); 2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyTimingFunctionsFrom(this); 204f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else { 2052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyFromValueFrom(this); 2062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block animation->copyToValueFrom(this); 207f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return animation; 210f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 211f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformCAAnimation::~PlatformCAAnimation() 212f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 213f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 215f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool PlatformCAAnimation::supportsValueFunction() 216f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 217f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static bool sHaveValueFunction = [CAPropertyAnimation instancesRespondToSelector:@selector(setValueFunction:)]; 218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return sHaveValueFunction; 219f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 220f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 221f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformAnimationRef PlatformCAAnimation::platformAnimation() const 222f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 223f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return m_animation.get(); 224f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 225f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 226f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochString PlatformCAAnimation::keyPath() const 227f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 228f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() keyPath]; 229f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 230f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 231f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochCFTimeInterval PlatformCAAnimation::beginTime() const 232f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 233f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() beginTime]; 234f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 235f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 236f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setBeginTime(CFTimeInterval value) 237f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 238f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setBeginTime:value]; 239f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 240f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Also set a flag to tell us if we've passed in a 0 value. 241f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // The flag is needed because later beginTime will get changed 242f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // to the time at which it fired and we need to know whether 243f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // or not it was 0 to begin with. 244f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (value) 245f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch setNonZeroBeginTimeFlag(this, true); 246f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 247f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 248f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochCFTimeInterval PlatformCAAnimation::duration() const 249f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 250f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() duration]; 251f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 252f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 253f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setDuration(CFTimeInterval value) 254f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 255f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setDuration:value]; 256f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 257f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 258f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfloat PlatformCAAnimation::speed() const 259f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 260f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() speed]; 261f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 262f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 263f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setSpeed(float value) 264f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 265f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setSpeed:value]; 266f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 267f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 268f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochCFTimeInterval PlatformCAAnimation::timeOffset() const 269f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 270f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() timeOffset]; 271f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 272f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 273f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setTimeOffset(CFTimeInterval value) 274f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 275f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setTimeOffset:value]; 276f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 277f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 278f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfloat PlatformCAAnimation::repeatCount() const 279f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 280f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() repeatCount]; 281f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 282f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 283f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setRepeatCount(float value) 284f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 285f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setRepeatCount:value]; 286f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 287f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 288f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool PlatformCAAnimation::autoreverses() const 289f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 290f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() autoreverses]; 291f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 292f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 293f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setAutoreverses(bool value) 294f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 295f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setAutoreverses:value]; 296f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 297f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 298f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformCAAnimation::FillModeType PlatformCAAnimation::fillMode() const 299f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 300f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return fromCAFillModeType([m_animation.get() fillMode]); 301f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 302f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 303f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setFillMode(FillModeType value) 304f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 305f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setFillMode:toCAFillModeType(value)]; 306f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 307f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 308f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setTimingFunction(const TimingFunction* value) 309f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 310f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setTimingFunction:toCAMediaTimingFunction(value)]; 311f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 312f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 313f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyTimingFunctionFrom(const PlatformCAAnimation* value) 314f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 315f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setTimingFunction:[value->m_animation.get() timingFunction]]; 316f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 317f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 318f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool PlatformCAAnimation::isRemovedOnCompletion() const 319f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 320f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() isRemovedOnCompletion]; 321f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 322f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 323f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setRemovedOnCompletion(bool value) 324f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 325f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setRemovedOnCompletion:value]; 326f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 327f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 328f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool PlatformCAAnimation::isAdditive() const 329f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 330f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [m_animation.get() isAdditive]; 331f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 332f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 333f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setAdditive(bool value) 334f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 335f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setAdditive:value]; 336f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 337f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 338f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochPlatformCAAnimation::ValueFunctionType PlatformCAAnimation::valueFunction() const 339f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 340f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if HAVE_MODERN_QUARTZCORE 341f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CAValueFunction* vf = [m_animation.get() valueFunction]; 342f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return fromCAValueFunctionType([vf name]); 343f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#else 344f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return NoValueFunction; 345f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 346f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 347f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 348f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setValueFunction(ValueFunctionType value) 349f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 350f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if HAVE_MODERN_QUARTZCORE 351f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [m_animation.get() setValueFunction:[CAValueFunction functionWithName:toCAValueFunctionType(value)]]; 352f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#else 353f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch UNUSED_PARAM(value); 354f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 355f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 356f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 357f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setFromValue(float value) 358f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 359f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 360f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 361f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[NSNumber numberWithDouble:value]]; 362f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 363f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 364f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setFromValue(const WebCore::TransformationMatrix& value) 365f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 366f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 367f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 368f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 369f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[NSValue valueWithCATransform3D:value]]; 370f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 371f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 372f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setFromValue(const FloatPoint3D& value) 373f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 374f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 375f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 376f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 377f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* array = [NSArray arrayWithObjects: 378f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.x()], 379f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.y()], 380f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.z()], 381f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 382f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:array]; 383f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 384f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 385f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setFromValue(const WebCore::Color& value) 386f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 387f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 388f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 389f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 390f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* array = [NSArray arrayWithObjects: 391f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.red()], 392f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.green()], 393f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.blue()], 394f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.alpha()], 395f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 396f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:array]; 397f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 398f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 399f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyFromValueFrom(const PlatformCAAnimation* value) 400f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 401f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic || value->animationType() != Basic) 402f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 403f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 404f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CABasicAnimation* otherAnimation = static_cast<CABasicAnimation*>(value->m_animation.get()); 405f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setFromValue:[otherAnimation fromValue]]; 406f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 407f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 408f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setToValue(float value) 409f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 410f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 411f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 412f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[NSNumber numberWithDouble:value]]; 413f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 414f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 415f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setToValue(const WebCore::TransformationMatrix& value) 416f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 417f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 418f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 419f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 420f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[NSValue valueWithCATransform3D:value]]; 421f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 422f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 423f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setToValue(const FloatPoint3D& value) 424f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 425f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 426f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 427f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 428f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* array = [NSArray arrayWithObjects: 429f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.x()], 430f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.y()], 431f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.z()], 432f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 433f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:array]; 434f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 435f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 436f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setToValue(const WebCore::Color& value) 437f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 438f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic) 439f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 440f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 441f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* array = [NSArray arrayWithObjects: 442f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.red()], 443f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.green()], 444f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.blue()], 445f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value.alpha()], 446f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 447f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:array]; 448f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 449f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 450f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyToValueFrom(const PlatformCAAnimation* value) 451f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 452f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Basic || value->animationType() != Basic) 453f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 454f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 455f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CABasicAnimation* otherAnimation = static_cast<CABasicAnimation*>(value->m_animation.get()); 456f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CABasicAnimation*>(m_animation.get()) setToValue:[otherAnimation toValue]]; 457f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 458f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 459f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 460f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch// Keyframe-animation properties. 461f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setValues(const Vector<float>& value) 462f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 463f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Keyframe) 464f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 465f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 466f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 467f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) 468f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:[NSNumber numberWithDouble:value[i]]]; 469f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setValues:array]; 470f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 471f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 472f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setValues(const Vector<WebCore::TransformationMatrix>& value) 473f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 474f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Keyframe) 475f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 476f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 477f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 478f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 479f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) 480f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:[NSValue valueWithCATransform3D:value[i]]]; 481f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 482f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setValues:array]; 483f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 484f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 485f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setValues(const Vector<FloatPoint3D>& value) 486f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 487f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Keyframe) 488f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 489f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 490f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 491f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 492f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) { 493f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* object = [NSArray arrayWithObjects: 494f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].x()], 495f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].y()], 496f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].z()], 497f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 498f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:object]; 499f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 500f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setValues:array]; 501f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 502f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 503f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setValues(const Vector<WebCore::Color>& value) 504f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 505f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Keyframe) 506f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 507f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 508f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 509f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 510f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) { 511f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* object = [NSArray arrayWithObjects: 512f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].red()], 513f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].green()], 514f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].blue()], 515f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [NSNumber numberWithDouble:value[i].alpha()], 516f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch nil]; 517f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:object]; 518f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 519f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setValues:array]; 520f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 521f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 522f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyValuesFrom(const PlatformCAAnimation* value) 523f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 524f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (animationType() != Keyframe || value->animationType() != Keyframe) 525f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 527f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CAKeyframeAnimation* otherAnimation = static_cast<CAKeyframeAnimation*>(value->m_animation.get()); 528f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setValues:[otherAnimation values]]; 529f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 530f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 531f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setKeyTimes(const Vector<float>& value) 532f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 533f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 534f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 535f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) 536f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:[NSNumber numberWithFloat:value[i]]]; 537f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 538f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setKeyTimes:array]; 539f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 540f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 541f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyKeyTimesFrom(const PlatformCAAnimation* value) 542f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 543f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CAKeyframeAnimation* other = static_cast<CAKeyframeAnimation*>(value->m_animation.get()); 544f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setKeyTimes:[other keyTimes]]; 545f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 546f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 547f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::setTimingFunctions(const Vector<const TimingFunction*>& value) 548f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 549f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSMutableArray* array = [NSMutableArray array]; 550f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 551f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (size_t i = 0; i < value.size(); ++i) 552f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [array addObject:toCAMediaTimingFunction(value[i])]; 553f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 554f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setTimingFunctions:array]; 555f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 556f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 557f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid PlatformCAAnimation::copyTimingFunctionsFrom(const PlatformCAAnimation* value) 558f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 559f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch CAKeyframeAnimation* other = static_cast<CAKeyframeAnimation*>(value->m_animation.get()); 560f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [static_cast<CAKeyframeAnimation*>(m_animation.get()) setTimingFunctions:[other timingFunctions]]; 561f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 562f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 563f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // USE(ACCELERATED_COMPOSITING) 564