IUIAnimationInterpolator
COM公式ドキュメント
カスタム補間器を作成するためのメソッドを定義します。
解説(Remarks)
クライアントアプリケーションは、IUIAnimationTransitionLibrary やサードパーティ製ライブラリが提供する遷移(トランジション)を使用できます。ただし、独自の動作が必要な場合は、IUIAnimationInterpolator インターフェイスを実装して独自の遷移を作成できます。
Windows Animation がカスタム補間器を使用できるようにするには、IUIAnimationTransitionFactory::CreateTransition メソッドを呼び出してカスタム補間器を渡し、IUIAnimationTransition を実装するオブジェクトでラップする必要があります。ラップされた後は、クライアントアプリケーションは IUIAnimationTransition インターフェイスを介して補間器とやり取りします。
カスタム補間器は複数のアプリケーション間で再利用できますが、IUIAnimationTransition インターフェイスを返すファクトリインターフェイスを通じて公開することを推奨します。
例
例については、Custom Interpolator Sample を参照してください。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
遷移の開始時における初期値と初速度を設定します。
| initialValue | DOUBLE | in | 初期値。 |
| initialVelocity | DOUBLE | in | 初速度。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は、さまざまなオフセットで IUIAnimationInterpolator の他のメソッドを呼び出す前に、必ず SetInitialValueAndVelocity を呼び出します。ただし、異なるパラメーターで複数回呼び出されることがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後のメソッド呼び出しの結果が更新後の状態を反映するようにしなければなりません。
遷移の継続時間を設定します。
| duration | DOUBLE | in | 遷移の継続時間。 |
戻り値
メソッドが成功した場合は 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 は、SetInitialValueAndVelocity と SetDuration を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の SetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
遷移の継続時間を取得します。
| duration | DOUBLE* | out | 遷移の継続時間。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は GetDuration を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の GetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
遷移の終了時における最終値を取得します。
| value | DOUBLE* | out | 最終値。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。 エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は GetFinalValue を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の GetFinalValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定したオフセットにおけるアニメーション変数の値を補間します。
| offset | DOUBLE | in | 遷移の開始からのオフセット。 このパラメーターは常に0以上、かつ遷移の継続時間未満です。遷移の継続時間が0の場合、このメソッドは呼び出されません。 |
| value | DOUBLE* | out | 補間された値。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は InterpolateValue を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の InterpolateValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定したオフセットにおける速度(変化率)を補間します。
| offset | DOUBLE | in | 遷移の開始からのオフセット。 オフセットは常に0以上、かつ遷移の継続時間以下です。遷移の継続時間が0の場合、このメソッドは呼び出されません。 |
| velocity | DOUBLE* | out | 補間された速度。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は InterpolateVelocity を呼び出す前に必ず SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定するため、カスタム補間器は初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、その後の InterpolateVelocity 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
SetInitialValueAndVelocity に渡される初期値や初速度、または SetDuration に渡される継続時間に依存する、補間器の各側面を取得します。
| initialValueDependencies | UI_ANIMATION_DEPENDENCIES* | out | SetInitialValueAndVelocity に渡される初期値に依存する補間器の側面。 |
| initialVelocityDependencies | UI_ANIMATION_DEPENDENCIES* | out | SetInitialValueAndVelocity に渡される初速度に依存する補間器の側面。 |
| durationDependencies | UI_ANIMATION_DEPENDENCIES* | out | SetDuration に渡される継続時間に依存する補間器の側面。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドは、カスタム補間器のどの側面が値・速度・継続時間という入力の影響を受けるかを特定するために呼び出されます。これらの各入力について、補間器は次のいずれかを返します。
- 該当する UI_ANIMATION_DEPENDENCIES のメンバーのビットごとの OR。
- その入力に依存するものが何もない場合は UI_ANIMATION_DEPENDENCY_NONE。
補間器が正しいフラグのセットを返すことは重要です。ある出力にフラグが含まれていない場合、Windows Animation は対応するパラメーターがその補間器の結果の当該側面に影響しないと想定します。たとえば、カスタム補間器が initialVelocityDependencies に UI_ANIMATION_DEPENDENCY_FINAL_VALUE を含めない場合、Windows Animation は任意の velocity パラメーターで SetInitialValueAndVelocity を呼び出した後、GetFinalValue を呼び出して最終値を判定することがあります。この場合、補間器は遷移の最終値が初速度に依存しないと宣言しているため、GetFinalValue の実装は SetInitialValueAndVelocity にどのような velocity パラメーターが渡されても同じ結果を返さなければなりません。
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 方式にも切替可。#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 sptr #comfunc global IUIAnimationInterpolator_GetFinalValue 6 sptr #comfunc global IUIAnimationInterpolator_InterpolateValue 7 double,sptr #comfunc global IUIAnimationInterpolator_InterpolateVelocity 8 double,sptr #comfunc global IUIAnimationInterpolator_GetDependencies 9 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。