Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/9-6
9-6 ペン入力マネージャの互換性
ペン入力マネージャのバージョン 1.1 は、Palm OS Garnet のバージョン 5.3SC から導入されました。ペン入力マネージャのバージョン 1.0 と 1.1 にはいくつかの違いがあります。
ペン入力マネージャのバージョンは、以下の FtrGet コールの version パラメータに返されます。
err = FtrGet(pinCreator, pinFtrAPIVersion, &version);
アプリケーションの作成においては、ペン入力マネージャの全てのバージョンとの互換性を保つようにすることを推奨します。この章の以下のガイドラインに従うことで互換性を保つことができます。
訳注:上の段落の「この章の」という部分は、 原著では「この本の」になっていました。 これは、この章全体が独立した別のドキュ メントだった頃の名残りと思われます。
このセクションでは、バージョン 1.1において変更された点について詳細に理解できるように説明します。以下のトピックがあります。
- sysFtrNumInputAreaFlags の新規サポート
- winDisplayChangedEvent の追加
- 入力トリガー状態のレストア
- 入力エリアの状態として pinInputAreaUser を追加
- 新しい Stat〜 系関数
- ディスプレイの表示方向の変更を新しくサポート
sysFtrNumInputAreaFlags の新規サポート
ペン入力マネージャのバージョン 1.1 が存在しても、それがデバイスの機能を保証するわけではありません。バージョン 1.0 では、デバイスは以下のセクションで説明する全ての(すぐ上のリストに一覧した)機能をサポートし、フラグは実装されていませんでした。
バージョン 1.1 では、別のフィーチャである sysFtrNumInputAreaFlags をチェックしなければなりません。このチェックにより、デバイスがダイナミックインプットエリアやライブインク、あるいはクローズ可能なダイナミックインプットエリアをサポートしているかどうかを知ることができます。
err = FtrGet(sysFtrCreator, sysFtrNumInputAreaFlags, &flags)
OS がダイナミックインプットエリアをサポートしているかどうかを確認するためのセレクタが利用できます。grfFtrInputAreaFlagDynamic フラグに 0 が設定されるか、FtrGet がエラーを返せば、ダイナミックインプットエリアはサポートされません。同様に、grfFtrInputAreaFlagCollapsible フラグに 0 が設定されるか、FtrGet がエラーを返せば、クローズ可能なダイナミックインプットエリアはサポートされません。
flags 引数は Graffiti.h で定義されるビットを使用して初期化します。
#define grfFtrInputAreaFlagDynamic 0x00000001 #define grfFtrInputAreaFlagLiveInk 0x00000002 #define grfFtrInputAreaFlagCollapsible 0x00000004
winDisplayChangedEvent の追加
ペン入力マネージャのバージョン 1.1 では、入力エリアやコントロールバーの開閉をアプリケーションに通知するための新しい仕組みを使用しています。バージョン 1.0 では sysNotifyDisplayResizedEvent ノティフィケーションを送信していましたが、バージョン 1.1ではこのノティフィケーションに加えて winDisplayChangedEvent も送信します。
両方のバージョンに互換性を持たせるには、sysNotifyDisplayResizedEvent の受信に対し、アプリケーション側で winDisplayChangedEvent を(EvtAddUniqueEventToQueueを使って)ポストしなければなりません。リスト 9.3 にこの様子を示します。
入力トリガー状態のレストア
バージョン 1.1 のペン入力マネージャでは、入力エリアのポリシーに frmDIAPolicyCustom を設定した場合でも、トリガーを有効または無効にするために PINSetInputTriggerState をコールしたり、入力エリアを開閉するために PINSetInputAreaState をコールする必要はなく、ユーザーが最後に選択した入力エリアとトリガーの状態をシステムが自動的にレストアします(バージョン 1.0 ではこの処理は行なわれません)。しかし、PINSetInputAreaState と(または)PINSetInputTriggerState がアプリケーションからコールされると、FrmDrawForm や WinEnterEvent によってフォームが更新される際にフォームの状態がレストアされます。
ペン入力マネージャのバージョン 1.0 では、フォーム毎に入力トリガーを有効化しなければなりません。なぜなら、システムダイアログがそれを無効化する可能性があるためです。システムダイアログはアプリケーションフォームよりも上に表示され、レガシーアプリケーションと同じポリシーを使用します。つまり、入力エリアは表示され、ユーザーがそれを閉じることはできません。システムダイアログが閉じられてアプリケーションに制御が戻っても、入力トリガーは無効化されたままになります。フォームは既にロードされて開いているため、frmLoadEvent や frmOpenEvent を受け取ることはできません。そのかわり、winEnterEvent を受け取ることができます。そのため、アプリケーションがアクティブな間ユーザーが入力エリアを開閉できる状態にしておくには、システムダイアログが表示された後に受け取る winEnterEvent に応答して入力トリガーを有効にする必要があります。
入力エリアの状態として pinInputAreaUser を追加
ペン入力マネージャのバージョン 1.1 では、新しい入力エリアの状態として pinInputAreaUser が実装されています。とはいえ、この状態はバージョン 1.0 と 1.1 の両方向けにデザインされたアプリケーションでも使用することができます。なぜなら、1.0 では単純にこの状態が無視されるからです。
新しい Stat〜 系関数
以下の新しい関数はペン入力マネージャのバージョン 1.1 でのみ実装されています。バージョン 1.0 では使用できません。
- StatGetAttribute
- StatHide
- StatShow
バージョン 1.0 のペン入力マネージャで動作しているデバイスとの互換性のため、これらの関数は使用しないのがベストです。
ディスプレイの表示方向の変更を新しくサポート
ペン入力マネージャのバージョン 1.1 では、ディスプレイの表示方向をポートレイトからランドスケープに、あるいはその逆に変更する機能をサポートしています。これにより、ディスプレイを4方向に回転させることができます。
この機能は、以下の関数によってサポートされます。
- SysGetOrientation
- SysSetOrientation
- SysGetOrientationTriggerState
- SysSetOrientationTriggerState
全てのデバイスが表示方向の変更をサポートするわけではありません。表示方向の変更をサポートしないデバイスでは、正当な表示方向はポートレイトのみになります。
- NOTE
- 表示方向のサポートは、Palm OS Garnet バージョン 5.3 以降のペン入力マネージャ 1.1 でのみ実装されています。ペン入力マネージャ 1.1 はそれよりも前のバージョンの OS でも利用できますが、ライセンシーのサポートに依存し、機能として含まれる場合もあれば含まれない場合もあります。Palm OS 5.3よりも前のペン入力マネージャ 1.1 にこの機能が実装されているかどうかをチェックするには、SysGlueTrapExists を使用する必要があります。