00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import <Foundation/CPObject.j>
00024 @import <Foundation/CPDictionary.j>
00025 @import <Foundation/CPString.j>
00026
00027
00028 kCAMediaTimingFunctionLinear = @"kCAMediaTimingFunctionLinear";
00029 kCAMediaTimingFunctionEaseIn = @"kCAMediaTimingFunctionEaseIn";
00030 kCAMediaTimingFunctionEaseOut = @"kCAMediaTimingFunctionEaseOut";
00031 kCAMediaTimingFunctionEaseInEaseOut = @"kCAMediaTimingFunctionEaseInEaseOut";
00032
00033 var CAMediaNamedTimingFunctions = nil;
00034
00035 @implementation CAMediaTimingFunction : CPObject
00036 {
00037 float _c1x;
00038 float _c1y;
00039 float _c2x;
00040 float _c2y;
00041 }
00042
00043 + (id)functionWithName:(CPString)aName
00044 {
00045 if (!CAMediaNamedTimingFunctions)
00046 {
00047 CAMediaNamedTimingFunctions = [CPDictionary dictionary];
00048
00049 [CAMediaNamedTimingFunctions setObject:[CAMediaTimingFunction functionWithControlPoints:0.0 :0.0 :1.0 :1.0] forKey:kCAMediaTimingFunctionLinear];
00050 [CAMediaNamedTimingFunctions setObject:[CAMediaTimingFunction functionWithControlPoints:0.42 :0.0 :1.0 :1.0] forKey:kCAMediaTimingFunctionEaseIn];
00051 [CAMediaNamedTimingFunctions setObject:[CAMediaTimingFunction functionWithControlPoints:0.0 :0.0 :0.58 :1.0] forKey:kCAMediaTimingFunctionEaseOut];
00052 [CAMediaNamedTimingFunctions setObject:[CAMediaTimingFunction functionWithControlPoints:0.42 :0.0 :0.58 :1.0] forKey:kCAMediaTimingFunctionEaseInEaseOut];
00053 }
00054
00055 return [CAMediaNamedTimingFunctions objectForKey:aName];
00056 }
00057
00058 + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y
00059 {
00060 return [[self alloc] initWithControlPoints:c1x :c1y :c2x :c2y];
00061 }
00062
00063 - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y
00064 {
00065 self = [super init];
00066
00067 if (self)
00068 {
00069 _c1x = c1x;
00070 _c1y = c1y;
00071 _c2x = c2x;
00072 _c2y = c2y;
00073 }
00074
00075 return self;
00076 }
00077
00078 - (void)getControlPointAtIndex:(unsigned)anIndex values:(float[2])reference
00079 {
00080 if (anIndex == 0)
00081 {
00082 reference[0] = 0;
00083 reference[1] = 0;
00084 }
00085 else if (anIndex == 1)
00086 {
00087 reference[0] = _c1x;
00088 reference[1] = _c1y;
00089 }
00090 else if (anIndex == 2)
00091 {
00092 reference[0] = _c2x;
00093 reference[1] = _c2y;
00094 }
00095 else
00096 {
00097 reference[0] = 1.0;
00098 reference[1] = 1.0;
00099 }
00100 }
00101
00102 @end