|
1 |
|
2 /* |
|
3 * Copyright 2006 The Android Open Source Project |
|
4 * |
|
5 * Use of this source code is governed by a BSD-style license that can be |
|
6 * found in the LICENSE file. |
|
7 */ |
|
8 |
|
9 |
|
10 #ifndef SkOperandInterpolator_DEFINED |
|
11 #define SkOperandInterpolator_DEFINED |
|
12 |
|
13 #include "SkDisplayType.h" |
|
14 #include "SkInterpolator.h" |
|
15 #include "SkOperand.h" |
|
16 |
|
17 class SkOperandInterpolator : public SkInterpolatorBase { |
|
18 public: |
|
19 SkOperandInterpolator(); |
|
20 SkOperandInterpolator(int elemCount, int frameCount, SkDisplayTypes type); |
|
21 SkOperand* getValues() { return fValues; } |
|
22 int getValuesCount() { return fFrameCount * fElemCount; } |
|
23 void reset(int elemCount, int frameCount, SkDisplayTypes type); |
|
24 |
|
25 /** Add or replace a key frame, copying the values[] data into the interpolator. |
|
26 @param index The index of this frame (frames must be ordered by time) |
|
27 @param time The millisecond time for this frame |
|
28 @param values The array of values [elemCount] for this frame. The data is copied |
|
29 into the interpolator. |
|
30 @param blend A positive scalar specifying how to blend between this and the next key frame. |
|
31 [0...1) is a cubic lag/log/lag blend (slow to change at the beginning and end) |
|
32 1 is a linear blend (default) |
|
33 (1...inf) is a cubic log/lag/log blend (fast to change at the beginning and end) |
|
34 */ |
|
35 bool setKeyFrame(int index, SkMSec time, const SkOperand values[], SkScalar blend = SK_Scalar1); |
|
36 Result timeToValues(SkMSec time, SkOperand values[]) const; |
|
37 SkDEBUGCODE(static void UnitTest();) |
|
38 private: |
|
39 SkDisplayTypes fType; |
|
40 SkOperand* fValues; // pointer into fStorage |
|
41 #ifdef SK_DEBUG |
|
42 SkOperand(* fValuesArray)[10]; |
|
43 #endif |
|
44 typedef SkInterpolatorBase INHERITED; |
|
45 }; |
|
46 |
|
47 #endif // SkOperandInterpolator_DEFINED |