WinTabDesign Concepts

デザインコンセプト

このインタフェース設計は幾つかの基本的なコンセプトに基づいています。 デバイスやカーソル形状は、物理的ハードウェアの設定を示します。 このインタフェースは、読み取り専用の情報を一つの情報インタフェースを通して公開します。 アプリケーションはタブレットコンテクストを設定したり、イベントパケットを使用するインタフェースを使い対話します。 アプリケーションは、インタフェースやハードウェア制御機能が相応しいタブレットマネジャによってもたらされると仮定しています。 このインタフェースは将来の拡張を明示的に提供します。

デバイス規約

インタフェースは、ひとつ、またはそれ以上の位置入を生成する力デバイスへのアクセスを提供します。 このインタフェースに適応したデバイスには、いくつかの共通した特徴があります。 これらのデバイスは必ず、少なくとも 2次元以上の座標データを返す事のできる絶対座標空間または相対座標空間を定義します。 デバイスは必ず、現在の位置を示すカーソルと呼ばれる座標指定装置や、スタイラスや指で触るタッチパッドのような方法を持ちます。 カーソルは少なくとも、ボタンやデジタイザ表面に触れたといった、追加の 1ビット情報を返す事ができます。

デバイスは、異なる物理的設定やボタンの数、筆圧情報のような追加の情報を持つ複数のカーソル型を使用します。 カーソル型はさらに、別の追加ハードウェア設定を公開するかもしれません。

インタフェースはデバイス固有の座標系のため、標準の向きを定義します。 ユーザがデバイスを通常の位置で見ている時、座標系の原点はデバイスの左下になります。 これは右手座標系となり、正の x 軸は左から右を差し、正の y 軸は同様に上かユーザから遠くを指します。 x 軸がサポートされている場合、同じくユーザの方向か上を指します。 テーブル上に平らに置かれるデバイスの場合、x-y 平面は水平、z 軸は上向きとなります。 タッチスクリーンや会議ディスプレイのような垂直に置かれるデバイスでは、x-y 平面は垂直になり、z 軸はユーザに向きます。

 

デバイス情報

プログラムは WTInfo() 関数を使用して、タブレットに関する説明情報を取得できます。 このインタフェースは必ず利用できる情報を厳密に定義しますが、新しい実装が新しい型の情報を追加する事もできます。 基本的な情報には、デバイス識別子、バージョン番号、そして全体的な性能があります。

この情報要素は分類と序数で体系化されます。 分類と序数の組み合わせは、スカラ値、文字列、構造体や配列として単一の情報要素を表します。 アプリケーションは単一の要素やすべての分類を一度に検索できます。

いくつかの分類は多重化しています。 単一の分類符号は、序数化された分類を区別する集合の、似通ったオブジェクト群のそれぞれ先頭の一つを示します。 多重化された分類はデバイスやカーソル型を含みます。 定義された分類符号を追加する事で、0から始まるデバイスやカーソルの識別番号のために、分類番号が作成されます。

この情報は通常のタブレットアプリケーションには読み取り専用です。 いくつかの情報要素は Windows セッションの実行中に変更される事があり、タブレットアプリケーションはタブレット情報に変更があった事を通知するメッセージを受け取ります。

タブレットコンテクスト

タブレットコンテクストは、アプリケーションがタブレットの用途を指定するための情報の中心的な役割を担うオブジェクトです。 コンテクストには、アプリケーションが利用可能なタブレットの物理的領域だけでなく、型や内容、タブレットイベントの伝達方法や他の情報も含まれます。 タブレットコンテクストは GDI インタフェースモデルのディスプレイコンテクストに似ており、アプリケーションのタブレット利用方針に関する状態情報を格納します。

アプリケーションは 1つ以上のコンテクストを開く事ができますが、ほとんどは 1つで充分です。 アプリケーションはそのコンテクストを変更でき、また、常に利用可能なデフォルトのコンテクスト仕様を使うコンテクストを開けます。 WTInfo() 関数は、デフォルトのコンテクスト仕様へのアクセスを提供します。

コンテクストを開くには、ウィンドウハンドルが必要です。 このウィンドウハンドルはコンテクストのオーナーになり、コンテクストに関連付けられているウィンドウメッセージを受け取ります。

コンテクストは、物理的にオーバラップが可能な場合のスクリーンウィンドウの遠隔操作に似ています。 タブレットインタフェースは、コンテクストオーバラップオーダーの組み合わせや、プロセスイベントが決定するコンテクスト属性を使用します。 入力コンテクストのオーバラップオーダーの最上位コンテクストは、イベント・どのイベントマスクが選択されているか、イベントの処理方法といった情報で構成されます。 (Note: オーバーラップオーダーの概念は、物理的なZ次元の概念から分離されます。) タブレットマネジャ(後述を参照)は、コンテクストの変更やオーバラップの方法を提供します。

イベントパケット

タブレットコンテクストが生成され、イベントパケットによってタブレット動作が報告されます。 アプリケーションは、受信するイベントやイベントに含まれている情報の受信方法をコントロールすることができます。

アプリケーションはポーリングによるイベントまたはウィンドウズメッセージによるイベントを受信することができます。

ポーリング
コンテクストが開かれたアプリケーションは、WTPacketsGet 関数をコールして、タブレットの next state を取得することができます。
ウィンドウメッセージ
メッセージをリクエストするアプリケーションは、コンテクストに何か起こったときに WT_PACKET メッセージ(後述を参照)を受信することで、多くの情報を参照することができます。

アプリケーションはイベントマークを利用することで、受信イベントをコントロールすることが可能です。 例えば、ボタンが押されたかどうかという情報のみを取得したい場合や、カーソルの移動についての情報が必要な場合などがあげられます。 タブレットコンテクストのイベントマークは、コントロールの型として実装されます。

アプリケーションは、受信するイベントパケットの内容をコントロールすることが可能です。 タブレットには多くのアプリケーションが必要ではないデータを返すことが可能なものがあります。 ボタンの筆圧や次元の位置、角度情報などです。 コンテクストオブジェクトは、アプリケーションが必要なデータアイテムを指定する方法を提供します。 このようにして、パケット中のアプリケーションに必要なわずかなアイテムのみを送信することで、ドライバはアプリケーションに対しての送信パケットの効率を改善することができます。

コンテクストが抽出し構築したパケットは、明示的な関数呼び出しによってキューされ取得されます。 このインタフェースは、パケットのピークや取得の方法・キューのパケットサイズの取得・キューのリサイズを提供します。

タブレットマネージャ

このインタフェースは、タブレットのマネジメントのための関数を提供します。 アプリケーションは、タブレットマネジャハンドルを開くことによって、タブレットを操作することができるようになります。 このハンドルは、マネジャに特別な関数へのアクセスを許可します。 これらのマネジメント関数は、変更・オーバラップ・タブレットコンテクストの修正をアプリケーションに許可します。 マネジャにはそれ以外の関数もあります。 アプリケーションに使用されるデフォルト値の変更や、ergonomic(人間工学?) の変更、ユーザ設定 や コンフィグ設定、タブレットを使用しないアプリケーション上でのタブレットビヘイビアのコントロール、ダイアログを使用した変更や、タブレットパケットの記録や再生などです。 マネジャハンドルをオープンするには、ウィンドウハンドルが必要です。 このウィンドウは、マネージャウィンドウとなり、インタフェースとコンテクストについてのウィンドウメッセージを受信します。

拡張

このインタフェースにはエクステンションと呼ばれる追加フィーチャの実装が含まれています。 エクステンションによって、既存のアプリケーションを変更することなしに、新しいアプリケーションとして利用することができます。 エクステンションは、情報カテゴリや、柔軟なパケット定義,特別なコンテクストやマネジャ機能によってサポートされます。

エクステンションのデザインは、意味の定義とエクステンションパケットの動作や、または preference data 、充実した情報カテゴリ、特別な機能によるエクステンションのインタフェース、可能ならエクステンションがサポートする追加関数の定義などを含みます。 どのエクステンションも識別するためのユニークなタグを割り当てられます。 全ての実装が全てのエクステンションをサポートしているわけではありません。

複合された情報カテゴリは、エクステンションについてのデータの記述を含みます。 Note: アプリケーションは、カテゴリとマッチングタグを通じて列挙を繰り返すことによってエクステンションを見つけなればなりません。 全ての実装を通じて、タグが固定されている場合、カテゴリ番号は実装ごとに異なります。

インタフェースフィーチャの持続的なバインディング (1.1)

インタフェースは、多くの方法でセッション間での連続性を保障されていない数値インデックスへのアクセスを提供します。 しかし、デバイス、カーソル、エクステンションのインタフェースへのユニークな識別子の作成によって十分な情報が提供されます。 デバイスは、コンテンツの名前文字列によって個別に識別されるべきです。 もし、複数の個別のデバイスが存在する場合、実装の提供者は、可能な範囲内でユニークかつ永続的なID文字列を提供すべきです。 個別のデバイスは、個別のシリアル番号を返すことが理想的です。 ハードウェアがサポートしている場合、カーソルもまた物理的なカーソルIDをもち、永続的かつ安定した方法で個別に識別できるでしょう。 インタフェースエクステンションは、そのタグによって個別に識別されます。