IUIAnimationInterpolator2
COM公式ドキュメント
カスタム補間器を作成するためのメソッドを定義する IUIAnimationInterpolator インターフェイスを拡張します。IUIAnimationInterpolator2 は、指定された次元での補間をサポートします。
解説(Remarks)
クライアントアプリケーションは、IUIAnimationTransitionLibrary または IUIAnimationTransitionLibrary2 インターフェイスが提供する遷移(トランジション)や、サードパーティ提供のライブラリの遷移を使用できます。ただし、IUIAnimationInterpolator または IUIAnimationInterpolator2 インターフェイスを実装することで、カスタム遷移を作成することもできます。
Windows Animation でカスタム補間器を使用するには、その前に、IUIAnimationTransition インターフェイスを実装するオブジェクト(IUIAnimationTransitionFactory::CreateTransition の呼び出しによる)、または IUIAnimationTransition2 インターフェイスを実装するオブジェクト(IUIAnimationTransitionFactory2::CreateTransition の呼び出しによる)にカスタム補間器を渡してラップする必要があります。補間器のラッパーが作成された後は、クライアントアプリケーションは IUIAnimationTransition または IUIAnimationTransition2 インターフェイスを介して補間器とやり取りします。
カスタム補間器はアプリケーション間で再利用できますが、IUIAnimationTransition インターフェイスまたは IUIAnimationTransition2 インターフェイスを返すファクトリインターフェイスを使用して公開することをお勧めします。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
補間が必要な次元の数を取得します。
| dimension | DWORD* | out | 次元の数。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
指定された次元における遷移の初期値と初速度を設定します。
| initialValue | DOUBLE* | in | 初期値。 |
| initialVelocity | DOUBLE* | in | 初速度。 |
| cDimension | DWORD | in | 遷移の初期値または初速度を設定する次元。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は、さまざまなオフセットで IUIAnimationInterpolator2 の他のメソッドを呼び出す前に、必ず SetInitialValueAndVelocity を呼び出します。ただし、SetInitialValueAndVelocity は異なるパラメーターで複数回呼び出されることがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降のこれらのメソッド呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定された次元における遷移の継続時間を設定します。
| duration | DOUBLE | in | 遷移の継続時間。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation がこのメソッドを呼び出すのは、IUIAnimationInterpolator2::GetDependencies メソッドを呼び出した後で、かつその呼び出しが durationDependencies フラグの 1 つとして UI_ANIMATION_DEPENDENCY_DURATION を返した場合のみです。
通常、継続時間への依存関係を持つ補間器は、その補間器に関連付けられた IUIAnimationTransitionFactory または IUIAnimationTransitionFactory2 の作成メソッドに継続時間パラメーターを持ちます。補間器は最初に初期化されるときに継続時間を保存し、SetDuration が呼び出されたときにその継続時間を上書きする必要があります。
Windows Animation は SetDuration を呼び出す前に、必ず IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定します。したがって、カスタム補間器が初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は、SetInitialValueAndVelocity と SetDuration を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降の SetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定された次元における遷移の継続時間を取得します。
| duration | DOUBLE* | out | 遷移の継続時間。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は GetDuration を呼び出す前に、必ず IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定します。したがって、カスタム補間器が初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は、SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降の GetDuration 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定された次元における遷移終了時の最終値を取得します。
| value | DOUBLE* | out | 最終値。 |
| cDimension | DWORD | in | 最終値を取得する次元。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は GetFinalValue を呼び出す前に、必ず IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定します。したがって、カスタム補間器が初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は、SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降の GetFinalValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定されたオフセットおよび指定された次元における、アニメーション変数の値を補間します。
| offset | DOUBLE | in | 遷移の開始からのオフセット。 このパラメーターは常に 0 以上かつ遷移の継続時間未満です。遷移の継続時間が 0 の場合、このメソッドは呼び出されません。 |
| value | DOUBLE* | out | 補間された値。 |
| cDimension | DWORD | in | 値を補間する次元。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は InterpolateValue を呼び出す前に、必ず IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定します。したがって、カスタム補間器が初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は、SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降の InterpolateValue 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定されたオフセットおよび指定された次元における速度(変化率)を補間します。
| offset | DOUBLE | in | 遷移の開始からのオフセット。 オフセットは常に 0 以上かつ遷移の継続時間以下です。遷移の継続時間が 0 の場合、このメソッドは呼び出されません。 |
| velocity | DOUBLE* | out | 補間された速度。 |
| cDimension | DWORD | in | 速度を補間する次元。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
Windows Animation は InterpolateVelocity を呼び出す前に、必ず IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドを呼び出して初期値と初速度を設定します。したがって、カスタム補間器が初期値と初速度が設定済みかどうかを確認する必要はありません。
Windows Animation は、SetInitialValueAndVelocity を異なるパラメーターで複数回呼び出すことがあります。補間器はパフォーマンス向上のために内部状態をキャッシュできますが、SetInitialValueAndVelocity が呼び出されるたびにキャッシュした状態を更新し、以降の InterpolateVelocity 呼び出しの結果が更新後の状態を反映するようにしなければなりません。
指定されたアニメーションカーブのプリミティブ補間を生成します。
| interpolation | IUIAnimationPrimitiveInterpolation* | in | カスタムアニメーションカーブの情報を定義するオブジェクト。 |
| cDimension | DWORD | in | 新しいセグメントを適用する次元。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
指定された次元について、GetDependencies は、IUIAnimationInterpolator2::SetInitialValueAndVelocity メソッドに渡される初期値や初速度、または IUIAnimationInterpolator2::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 は任意の速度パラメーターで SetInitialValueAndVelocity を呼び出した後、GetFinalValue を呼び出して最終値を判定する場合があります。この補間器は遷移の最終値が初速度に依存しないと宣言しているため、その GetFinalValue の実装は、SetInitialValueAndVelocity にどの速度パラメーターが渡されたかに関係なく、同じ結果を返さなければなりません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAnimationInterpolator2 "{EA76AFF8-EA22-4A23-A0EF-A6A966703518}" #usecom global IUIAnimationInterpolator2 IID_IUIAnimationInterpolator2 "{}" #comfunc global IUIAnimationInterpolator2_GetDimension 3 var #comfunc global IUIAnimationInterpolator2_SetInitialValueAndVelocity 4 var,var,int #comfunc global IUIAnimationInterpolator2_SetDuration 5 double #comfunc global IUIAnimationInterpolator2_GetDuration 6 var #comfunc global IUIAnimationInterpolator2_GetFinalValue 7 var,int #comfunc global IUIAnimationInterpolator2_InterpolateValue 8 double,var,int #comfunc global IUIAnimationInterpolator2_InterpolateVelocity 9 double,var,int #comfunc global IUIAnimationInterpolator2_GetPrimitiveInterpolation 10 sptr,int #comfunc global IUIAnimationInterpolator2_GetDependencies 11 var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAnimationInterpolator2 "{EA76AFF8-EA22-4A23-A0EF-A6A966703518}" #usecom global IUIAnimationInterpolator2 IID_IUIAnimationInterpolator2 "{}" #comfunc global IUIAnimationInterpolator2_GetDimension 3 sptr #comfunc global IUIAnimationInterpolator2_SetInitialValueAndVelocity 4 sptr,sptr,int #comfunc global IUIAnimationInterpolator2_SetDuration 5 double #comfunc global IUIAnimationInterpolator2_GetDuration 6 sptr #comfunc global IUIAnimationInterpolator2_GetFinalValue 7 sptr,int #comfunc global IUIAnimationInterpolator2_InterpolateValue 8 double,sptr,int #comfunc global IUIAnimationInterpolator2_InterpolateVelocity 9 double,sptr,int #comfunc global IUIAnimationInterpolator2_GetPrimitiveInterpolation 10 sptr,int #comfunc global IUIAnimationInterpolator2_GetDependencies 11 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。