/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkOperandInterpolator_DEFINED #define SkOperandInterpolator_DEFINED #include "SkDisplayType.h" #include "SkInterpolator.h" #include "SkOperand.h" class SkOperandInterpolator : public SkInterpolatorBase { public: SkOperandInterpolator(); SkOperandInterpolator(int elemCount, int frameCount, SkDisplayTypes type); SkOperand* getValues() { return fValues; } int getValuesCount() { return fFrameCount * fElemCount; } void reset(int elemCount, int frameCount, SkDisplayTypes type); /** Add or replace a key frame, copying the values[] data into the interpolator. @param index The index of this frame (frames must be ordered by time) @param time The millisecond time for this frame @param values The array of values [elemCount] for this frame. The data is copied into the interpolator. @param blend A positive scalar specifying how to blend between this and the next key frame. [0...1) is a cubic lag/log/lag blend (slow to change at the beginning and end) 1 is a linear blend (default) (1...inf) is a cubic log/lag/log blend (fast to change at the beginning and end) */ bool setKeyFrame(int index, SkMSec time, const SkOperand values[], SkScalar blend = SK_Scalar1); Result timeToValues(SkMSec time, SkOperand values[]) const; SkDEBUGCODE(static void UnitTest();) private: SkDisplayTypes fType; SkOperand* fValues; // pointer into fStorage #ifdef SK_DEBUG SkOperand(* fValuesArray)[10]; #endif typedef SkInterpolatorBase INHERITED; }; #endif // SkOperandInterpolator_DEFINED