Win32 API 日本語リファレンス
ホームUI.Animation › IUIAnimationInterpolator

IUIAnimationInterpolator

COM
IID7815cbba-ddf7-478c-a46c-7b6c738b7978継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

カスタム補間器を作成するためのメソッドを定義します。

解説(Remarks)

クライアントアプリケーションは、IUIAnimationTransitionLibrary やサードパーティ製ライブラリが提供する遷移(トランジション)を使用できます。ただし、独自の動作が必要な場合は、IUIAnimationInterpolator インターフェイスを実装して独自の遷移を作成できます。

Windows Animation がカスタム補間器を使用できるようにするには、IUIAnimationTransitionFactory::CreateTransition メソッドを呼び出してカスタム補間器を渡し、IUIAnimationTransition を実装するオブジェクトでラップする必要があります。ラップされた後は、クライアントアプリケーションは IUIAnimationTransition インターフェイスを介して補間器とやり取りします。

カスタム補間器は複数のアプリケーション間で再利用できますが、IUIAnimationTransition インターフェイスを返すファクトリインターフェイスを通じて公開することを推奨します。

例については、Custom Interpolator Sample を参照してください。

メソッド 7

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetInitialValueAndVelocity(DOUBLE initialValue, DOUBLE initialVelocity)

遷移の開始時における初期値と初速度を設定します。

initialValueDOUBLEin初期値。
initialVelocityDOUBLEin初速度。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation は、さまざまなオフセットで IUIAnimationInterpolator の他のメソッドを呼び出す前に、必ず SetInitialValueAndVelocity を呼び出します。ただし、異なるパラメーターで複数回呼び出されることがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後のメソッド呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 4 HRESULT SetDuration(DOUBLE duration)

遷移の継続時間を設定します。

durationDOUBLEin遷移の継続時間。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation がこのメソッドを呼び出すのは、GetDependencies メソッドを呼び出した後で、かつその呼び出しが durationDependencies フラグの1つとして UI_ANIMATION_DEPENDENCY_DURATION を返した場合のみです。

通常、継続時間への依存を持つ補間器は、IUIAnimationTransitionFactory の対応する作成メソッドに duration パラメーターを持ちます。補間器は最初の初期化時に継続時間を保存し、SetDuration が呼び出されたときにそれを上書きする必要があります。

Windows Animation は SetDuration を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。

Windows Animation は、SetInitialValueAndVelocitySetDuration を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の SetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 5 HRESULT GetDuration(DOUBLE* duration)

遷移の継続時間を取得します。

durationDOUBLE*out遷移の継続時間。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation は GetDuration を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。

Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の GetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 6 HRESULT GetFinalValue(DOUBLE* value)

遷移の終了時における最終値を取得します。

valueDOUBLE*out最終値。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。 エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation は GetFinalValue を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。

Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の GetFinalValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 7 HRESULT InterpolateValue(DOUBLE offset, DOUBLE* value)

指定したオフセットにおけるアニメーション変数の値を補間します。

offsetDOUBLEin

遷移の開始からのオフセット。

このパラメーターは常に0以上、かつ遷移の継続時間未満です。遷移の継続時間が0の場合、このメソッドは呼び出されません。

valueDOUBLE*out補間された値。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation は InterpolateValue を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。

Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の InterpolateValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 8 HRESULT InterpolateVelocity(DOUBLE offset, DOUBLE* velocity)

指定したオフセットにおける速度(変化率)を補間します。

offsetDOUBLEin

遷移の開始からのオフセット。

オフセットは常に0以上、かつ遷移の継続時間以下です。遷移の継続時間が0の場合、このメソッドは呼び出されません。

velocityDOUBLE*out補間された速度。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

Windows Animation は InterpolateVelocity を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。

Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の InterpolateVelocity 呼び出しの結果が更新後の状態を反映するようにしなければなりません。

vtbl 9 HRESULT GetDependencies(UI_ANIMATION_DEPENDENCIES* initialValueDependencies, UI_ANIMATION_DEPENDENCIES* initialVelocityDependencies, UI_ANIMATION_DEPENDENCIES* durationDependencies)

SetInitialValueAndVelocity に渡される初期値や初速度、または SetDuration に渡される継続時間に依存する、補間器の各側面を取得します。

initialValueDependenciesUI_ANIMATION_DEPENDENCIES*outSetInitialValueAndVelocity に渡される初期値に依存する補間器の側面。
initialVelocityDependenciesUI_ANIMATION_DEPENDENCIES*outSetInitialValueAndVelocity に渡される初速度に依存する補間器の側面。
durationDependenciesUI_ANIMATION_DEPENDENCIES*outSetDuration に渡される継続時間に依存する補間器の側面。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。

解説(Remarks)

このメソッドは、カスタム補間器のどの側面が値・速度・継続時間という入力の影響を受けるかを特定するために呼び出されます。これらの各入力について、補間器は次のいずれかを返します。

例として、(1) 最終値をパラメーターとして受け取り、(2) 常にその最終値で緩やかに停止し、(3) 継続時間が最終値と初期値の差によって決まる補間器を考えます。この補間器は initialValueDependencies に対して UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES|UI_ANIMATION_DURATION を返すべきです。最終値は補間器の作成時に設定され、初期値の影響を受けないため、UI_ANIMATION_DEPENDENCY_FINAL_VALUE を返すべきではありません。同様に、曲線の傾きは最終値に達したとき常に0になるよう定義されているため、UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY も返すべきではありません。

補間器が正しいフラグのセットを返すことは重要です。ある出力にフラグが含まれていない場合、Windows Animation は対応するパラメーターがその補間器の結果の当該側面に影響しないと想定します。たとえば、カスタム補間器が initialVelocityDependenciesUI_ANIMATION_DEPENDENCY_FINAL_VALUE を含めない場合、Windows Animation は任意の velocity パラメーターで SetInitialValueAndVelocity を呼び出した後、GetFinalValue を呼び出して最終値を判定することがあります。この場合、補間器は遷移の最終値が初速度に依存しないと宣言しているため、GetFinalValue の実装は SetInitialValueAndVelocity にどのような velocity パラメーターが渡されても同じ結果を返さなければなりません。

メモ durationDependencies に対して返されるフラグに UI_ANIMATION_DEPENDENCY_DURATION が含まれていない場合、その補間器に対して SetDuration が呼び出されることはありません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IUIAnimationInterpolator "{7815CBBA-DDF7-478C-A46C-7B6C738B7978}"
#usecom global IUIAnimationInterpolator IID_IUIAnimationInterpolator "{}"
#comfunc global IUIAnimationInterpolator_SetInitialValueAndVelocity  3 double,double
#comfunc global IUIAnimationInterpolator_SetDuration                 4 double
#comfunc global IUIAnimationInterpolator_GetDuration                 5 var
#comfunc global IUIAnimationInterpolator_GetFinalValue               6 var
#comfunc global IUIAnimationInterpolator_InterpolateValue            7 double,var
#comfunc global IUIAnimationInterpolator_InterpolateVelocity         8 double,var
#comfunc global IUIAnimationInterpolator_GetDependencies             9 var,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。