タブレット対応アプリケーション開発者用ノート

LINEで送る

対象者

このドキュメントの主な目的は、タブレット対応アプリケーションを既に持っており、新機能をアプリケーションに追加したいと考えている開発者を支援することです。現状で既にタブレットデータと機能を利用できることを前提とします。タブレット機能を初めて追加する開発者は、「概要」セクションをまず参照し、サンプルコードを確認する必要があります。
このドキュメントやWacom製品のWintabの仕様に関する質問は、WDNのご意見・ご要望のメールフォームでお送りください。

概要

アプリケーションは、Wintab Application Programmersインターフェースタブレット固有のデータを受信します(Wintab 1.4マニュアルを参照してください。このマニュアルは、WDNサイト http://wdnet.jp/windows/ から閲覧できます)。Wintabは、ポインティングデバイスのインターフェースに関する業界標準です。元のWintab 1.0インターフェースのすべての機能がサポートされているわけではありません。各機能をサポートしているポインティングデバイスもあれば、そうでないデバイスもあります。
開発者のSDKを含むWintabに関する情報をWindowsサンプルコード( http://wdnet.jp/windows/ )から取得できます。この開発者ガイドに含まれる傾きテストプログラムは、Wintabを使用してタブレットデータを取得する方法として最適なサンプルです。
Wintabの仕様に加え、役に立つFAQドキュメント、Wacom Windows 開発者 FAQが同じWebサイトにあります。これには、多くのプログラミング例が含まれています。

更新履歴

一部の例外を除き、LCS/Telegraphicsで公開されている通り、WacomドライバはWintab仕様バージョン1.1を実装しています。Wacomドライバで返される仕様バージョンは1.4です。この仕様『Wintab Specification Level 1.4』は、WDNサイト( http://wdnet.jp/windows/ )にあります。
// Wintabバージョンを次の方法で確認します
WORD thisVersion;
WTInfo(WTI_INTERFACE, IFC_SPECVERSION, &thisVersion);

バージョン1.2では、Unique IDの情報を取得するために必要なCSR_TYPEを追加しました。
バージョン1.3では、ファンクションキーのために将来のサポートが保証されない不完全な拡張を追加しています(WTX_EXPKEYSはサポートされておらず、WTX_EXPKEYS2に置き換えられています)。
バージョン1.4では、ファンクションキーの更新された拡張に加え、トラックパッドとタッチホイールの拡張を追加しています(WTX_EXPKEYS2、WTX_TOUCHSTRIP、WTX_TOUCHRING)。
現在サポートしている機能をサポートするために、コードを変更する必要はなく、新しい機能をサポートするためのコードを追加するだけです。1.3の将来のサポートが保証されないファンクションキー実装は未サポートのものを返しません。
最新のヘッダーファイル(WINTAB.HとPKTDEF.H)はWindowsサンプルコード( http://wdnet.jp/windows/ )に含まれています。これらのファイルは、データ構造を仕様1.4に更新し、1.2の機能(CSR_TYPE)を追加します。

一般的なプログラミングノート

アプリケーションには、タブレットをサポートするために変更を加えるポイントが主に2つあります。

初期化

初期化の際に、下記のことを実行する必要があります。

  1. Wintabインターフェースを検索し、タブレットが接続されているかどうかを判別します。Wintab関数WTInfo(0, 0, NULL)を呼び出して、Wintabが存在しているかどうかを確認します。
  2. WTInfo()を使用して、タブレットに関する静的情報(タブレットのサイズ、読取分解能、傾きの有無、筆圧範囲、エアブラシのホイールなどの機能)を取得します。
  3. アプリケーション用に少なくとも1つのWintabコンテキストを作成します。WTInfo()でデフォルトコンテキストを取得し、それをテンプレートとして独自のタブレットコンテキストを作成します。アプリケーションに適切なコンテキストを設定します。アプリケーションは、システムコンテキストと数値化コンテキストという2種類のコンテキストを開くことができます。
    Wintabはシステムコンテキストのアプリケーションの代わりにシステムカーソルを移動する一方、アプリケーションは数値化コンテキスト用にシステムカーソルを自動的に移動する必要があります。大半のアプリケーションはシステムコンテキストを使用します。ユーザは、ナビゲーションを簡単にするためにシステムコンテキストの領域を変更できます。数値化コンテキストは通常、タブレット全体をカバーします。数値化コンテキストを使用して、数値化またはタブレットメニューの定義を行います。コンテキストを設定する際には、どのデータ項目をパケットに含めるかを判定します。ドキュメントの説明では、タブレットでサポートされていないパケットに項目を含めることはできないと記載されていますが、これは正しくないようです。サポートされていない項目も含めることができ、ゼロに設定されます。その上で、WTOpen()を呼び出し、コンテキストを作成して、パケットデータの処理を開始できるようにします。
  4. Wintabは、座標、筆圧、傾きなどのタブレットポイントのデータをWintabパケットとしてアプリケーションに渡します。デフォルトでは、コンテキストのパケットキューは非常に小さいので、簡単にオーバーフローします。アプリケーションは、WTQueueSizeSet()でコンテキストのキューサイズを増やし、キューのオーバーフローを防ぐ必要があります。

メッセージの処理

デバイスを操作している間、タブレットからデータを取得します。このデータは、線のレンダリングやナビゲーションに使用されます。場合によっては、使用中のタブレットデバイスに関する追加情報を検索する必要もあります。このデバイス情報は、たとえばペンの消しゴムが使用中の場合や、デバイスIDに基づいてツールが変更された場合など、ツールまたは画面カーソルを変更するために使用できます。
次のWindowsメッセージを処理する必要があります。

  1. WM_LBUTTONDOWN / WM_LBUTTONUP メッセージ(デバイスのボタンやスイッチ用)
    WM_LBUTTONDOWNで、WTPacketsGet()などを使用して、タブレットキュー内のパケットをフラッシュする必要があります(古いため)。厳密に処理する場合は、ボタンを押した状態のパケットまでのすべてのパケットをフラッシュし、残りを描画用に使用しても構いません。
    パケットイベントを処理して描画する必要があることを示すフラグを設定します。WM_LBUTTONUPで、フラグを消去し、パケットの処理を停止します。
    ここでも厳密に処理する場合は、WM_LBUTTONUPイベントで、ボタンを押した状態に対応するキュー内のパケットを処理します。
  2. WT_PACKETメッセージ(通常はボタンを押している間)
    (通常は、WM_LBUTTONDOWNとWM_LBUTTONUPの間で連続的に実行される)描画ループで、タブレットデータはパケットから読み取られ、描画中の線のレンダリングの変更に使用されます。
    現在の筆圧、傾き、ホイール値などのデータは、不透過度、ブラシ方向、線の太さなどのレンダリングパラメータを変更するために使用されます。
    Wintabは、コンテキストを開いたアプリケーションがWTPacket()などのWintab関数を使用してパケットデータを要求するまで、コンテキスト固有のパケットキューにパケットを格納します。
    アプリケーションは、コンテキストを開くと、Wintabにウィンドウハンドルを渡します。アプリケーションがコンテキストのCXO_MESSAGESオプションを設定した場合、ウィンドウは、パケットがWT_PACKETメッセージを介してキューに追加されたという通知を受信します。このイベントは、イベントを生成したパケットのシリアル番号を含んでいます。イベント受信時に、メッセージに含まれているシリアル番号でWTPacket()を呼び出します。
    注意! キューがオーバーフローすると、Wintabは、パケットがキューに入れられたというアプリケーションへの通知を停止し、キューが空くまで、受信したパケットを破棄します。WT_PACKETメッセージが発行されている間にキューを空け、オーバーフローを必ず防いでください。
  3. WT_CSRCHANGE(および/またはWT_PROXIMITY)メッセージ
    ポインティングデバイスがコンテキストに入るか、コンテキストから離れると、コンテキストを開いたアプリケーションは、WT_PROXIMITYメッセージによる通知を受信します。
    異なるポインティングデバイスがコンテキストの近くに来た場合、アプリケーションはWT_CSRCHANGEメッセージによる通知を受信します(コンテキストの作成時にアプリケーションがこのメッセージを要求した場合)。
    アプリケーションは、WT_PROXIMITYメッセージやWT_CSRCHANGEメッセージを受信すると、WTInfo()を呼び出して、ポインティングデバイスに関する情報(デバイス上のボタンの数、どちら側のデバイスが使用中か、デバイスの物理IDなど)を取得できます。
    このメッセージは、描画ツールを変更する際に便利です。選択したツール(および/または画面カーソル)は、描画が始まるときではなく、ポインティングデバイスが最初に使用中になるときに変更されます。そのため、この時点で消しゴムに対するヒントを確認し、Unique IDを確認することをお勧めします。
  4. WT_PACKETメッセージ(ボタンを押していない場合)
    ペンの傾きでオブジェクトを回転させるなど、ナビゲーション目的でデバイス情報を確認することも可能です。そのためには、ボタンが押されていないときでも、WT_PACKETイベントに応答してタブレットパケットを常に読み取ります。たとえば、ナビゲーション用に4Dマウスを使用している場合、現在のデバイス情報を基に、オブジェクトの位置やユーザの視点を変更できます。

コンテキストに関するメモ

Wintabは、すべてのアプリケーションに対して開かれている全コンテキストを、タブレットごとに1つ用意されている重複コンテナに保持します。
重複順序を基に、どのコンテキストが各タブレットパケットを処理するかを判定します。
各パケットは、1つのコンテキストのパケットキューに入れられます。
通常、重複順序でコンテキストAがコンテキストBの上にある場合、コンテキストBではなく、コンテキストAがタブレットパケットを受信します。
アプリケーションは、WTOverlap()を呼び出して、重複順序の一番上か下にコンテキストを送ります。
多くのアプリケーションは、コンテキストの順序を適切に処理できません。
これにより、Wintabアプリケーションが同時に実行され、動作が中断したり、予期しない動作が起こったりします。
アプリケーションは、WM_ACTIVATEメッセージを受信すると、コンテキストを重複順序の一番下(アプリケーションが非アクティブ化されている場合)または一番上(アクティブ化されている場合)に送ります。アプリケーションは、最小化されたときにコンテキストを無効化する必要もあります。
WintabのWacom実装は、アプリケーションのコンテキスト順序を管理します。つまり、アプリケーションにキーボードフォーカスがある場合にのみ、そのアプリケーションはデータを取得します。このように実装した理由は、コンテキストを適切に処理できないアプリケーションが多すぎるためです。アプリケーションがコンテキストを適切に管理できるように実装し、将来的にはこのコードを削除できるようにしてください。
2つ以上のアンドゥーバッファか、目的の数よりも1つ多い数を用意することをお勧めします。描画を始めるときにボタンを押した状態でアンドゥーバッファをフラッシュしないでください。処理に時間がかかりすぎます。ボタンを離したときにバッファをフラッシュしてください。これにより、ストロークの開始が改善されます。


機能のアップデート

実装済みが前提の機能

消しゴムまたは傾きは以前からある機能です。タブレットの大規模なインストールベースは、これらの機能をサポートしています。まだ対応していない場合は、これらの機能を実装することでアプリケーションの機能とパフォーマンスを向上させることができます。詳細については、『Wintab 1.4 マニュアル』を参照してください。

実装されたの新機能

Intuosシリーズタブレットで導入された新機能には、次のものがあります。

  • Unique ID – 固有の番号をスタイラスデバイスに割り当てることができる機能
  • Airbrush Fingerwheel – エアブラシのホイールデータをレポートできる機能
  • 4D Mouse Rotation – 4Dマウスから回転データを取得できる機能
  • 4D Mouse Thumbwheel – データの追加Z次元を4Dマウスのホイールから取得できる機能

アプリケーションがWintabを既にサポートしている場合は、これらの機能は簡単に追加できます。現在、完全にサポートされている古い機能はDual Trackです。これらの機能の詳細については、『Wintab 1.4 マニュアル』を参照してください。

新しい拡張のサポート

Wintab 1.4によってサポートされている拡張には次のものがあります。

  • Out of Bounds Tracking Extensions – アクティブなタブレットコンテキストでカバーされていないエリアでカーソルトラッキングを有効にします
  • Cursor Mask Extensions – コンテキストがカーソルタイプに基づいて入力を選択できるようにします
  • Extended Button Masks Extensions – コンテキストが最大256個のボタンの入力を完全に選択できるようにします(多くのボタン数を持つロケータデバイスをサポートします)
  • ファンクションキー Extensions – アプリケーションがファンクションキーのイベント通知を受信し、ファンクションキーの通常のシステム全体の動作をオーバーライドできるようにします
  • トラックパッドExtensions – トラックパッドをサポートしているIntuosタブレットで、アプリケーションがトラックパッドイベント通知を受信し、トラックパッドの通常のシステム全体の動作をオーバーライドできるようにします
  • タッチホイール Extensions -タッチホイールをサポートしているIntuosタブレットで、アプリケーションがタッチホイールイベント通知を受信し、タッチホイールの通常のシステム全体の動作をオーバーライドできるようにします

これらの拡張の詳細については、『Wintab 1.4 マニュアル』を参照してください。

Top