(57)【要約】  電子インクのスムースな流れを確保するためのシステムおよびプロセスについて説明する。動的描写は、他のイベントハンドラに比べて優先される。優先事項としては、イベントが生じたときに１つまたは複数のキューを順次使用し、他の工程に先立って動的描写を実施することを挙げることができる。
2007509413.tif 000002
【特許請求の範囲】
【請求項１】
インクを描写するための描写体オブジェクトであって、
どのようにしてインクをオブジェクトによって処理するかを調整する構成要素に前記オブジェクトを接続するためのインターフェースを備えることを特徴とする描写体オブジェクト。
【請求項２】
前記構成要素は、同期および非同期インターフェースを含むことを特徴とする請求項１に記載の描写体オブジェクト。
【請求項３】
前記描写体オブジェクトは、前記構成要素の前記同期インターフェースに接続されることを特徴とする請求項２に記載の描写体オブジェクト。
【請求項４】
前記構成要素は、２つの構成要素の１つで、
前記描写体オブジェクトは、前記２つの構成要素の前記第１の構成要素の同期インターフェース上にあり、
前記第２の構成要素は、それに対応づけられた少なくとも１つの追加的なオブジェクトを有することを特徴とする請求項１に記載の描写体オブジェクト。
【請求項５】
描写されたデータを一次的に記憶するためのキャッシュをさらに備えることを特徴とする請求項１に記載の描写体オブジェクト。
【請求項６】
前記構成要素は、入力および出力キューを含むことを特徴とする請求項１に記載の描写体オブジェクト。
【請求項７】
前記構成要素は、同期インターフェースに対応づけられた追加的なキューであったことを特徴とする請求項６に記載の描写体オブジェクト。
【請求項８】
前記描写体オブジェクトは、同期プラグイン集合の一部であることを特徴とする請求項１に記載の描写体オブジェクト。
【請求項９】
前記描写体オブジェクトは、同期プラグインチェーンであることを特徴とする請求項１に記載の描写体オブジェクト。
【請求項１０】
前記データは、タブレットで作成されたことを特徴とする請求項１に記載の描写体オブジェクト。
【請求項１１】
前記描写体オブジェクトは、前記描写体オブジェクトを他のオブジェクトと連鎖させることを可能にするインターフェースを含むことを特徴とする請求項１に記載の描写体オブジェクト。
【請求項１２】
記憶機構と、
前記記憶機構のデータを転送するプロセッサであって、インクを描写するための描写体オブジェクトをホストするプロセッサとを備え、
前記描写体オブジェクトは、どのようにしてインクをオブジェクトによって処理するかを調整する構成要素に前記オブジェクトを接続するためのインターフェースを備えることを特徴とするコンピューティングシステム。
【請求項１３】
インターフェースを有する描写オブジェクトを使用してインクを動的に描写する方法であって、
どのようにしてデータを処理するかを指示する構成要素からインクを受け取る工程であって、前記インクは、前記構成要素上の同期インターフェースに接続される前記インターフェースを介して受け取られる工程と、
前記インクを描写する工程とを含むことを特徴とする方法。
【請求項１４】
前記描写インクを一時的に貯蔵する工程をさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
通知を受け取る工程と、
前記通知に応答して、前記描写インクの前記キャッシュをクリアする工程とをさらに含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記描写工程は、スタイラスから流れる連続的なインクの概観をユーザに提示することを特徴とする請求項１３に記載の方法。
【請求項１７】
前記描写オブジェクトは、前記構成要素に接続された８０同期プラグイン集合の一部であることを特徴とする請求項１３に記載の方法。
【請求項１８】
前記描写オブジェクトに接続された他のオブジェクトにデータを送る工程をさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１９】
プログラムが記憶されたコンピュータ読取り可能媒体であって、前記プログラムは、描写オブジェクトを使用して動的にインクを描写し、前記描写オブジェクトは、インターフェースを有し、前記プログラムは、
どのようにしてデータを処理するかを指示する構成要素からインクを受け取る工程であって、前記インクは、前記構成要素上の同期インターフェースに接続される前記インターフェースを介して受け取られる工程と、
前記インクを描写する工程とを含むことを特徴とするコンピュータ読取り可能媒体。
【請求項２０】
前記プログラムは、前記描写インクを一時的に貯蔵する工程をさらに含むことを特徴とする請求項１９に記載のコンピュータ読取り可能媒体。
【請求項２１】
前記プログラムは、
通知を受け取る工程と、
前記通知に応答して、前記描写インクの前記キャッシュをクリアする工程とをさらに含むことを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２２】
前記描写工程は、スタイラスから流れる連続的なインクの概観をユーザに提示することを特徴とする請求項１９に記載のコンピュータ読取り可能媒体。
【請求項２３】
前記描写オブジェクトは、前記構成要素に接続された同期プラグイン集合の一部であることを特徴とする請求項１９に記載のコンピュータ読取り可能媒体。
【請求項２４】
前記描写オブジェクトに接続された他のオブジェクトにデータを送る工程をさらに含むことを特徴とする請求項１９に記載のコンピュータ読取り可能媒体。
【請求項２５】
描写体オブジェクトに関するプログラムを有するコンピュータ読取り可能媒体であって、前記描写体オブジェクトは、
受け取ったデータを描写するための機能コードと、
前記描写体オブジェクトを、前記データの処理を編成する構成要素に接続するためのインターフェースとを備え、
前記描写体オブジェクトは、２つ以上の描写体オブジェクトから選択され、同期インターフェースに置いて前記構成要素に接続されることを特徴とするコンピュータ読取り可能媒体。
【請求項２６】
前記描写体オブジェクトは、インクが半透明の水系塗料に見えるように前記インクを描写することを特徴とする請求項２５に記載のコンピュータ読取り可能媒体。
【請求項２７】
前記描写体オブジェクトは、インクが木炭スタイラスによって作成されたように見えるように前記インクを描写することを特徴とする請求項２５に記載のコンピュータ読取り可能媒体。
【請求項２８】
前記描写体オブジェクトは、インクが移動するインクに見えるように前記インクを描写することを特徴とする請求項２５に記載のコンピュータ読取り可能媒体。
【請求項２９】
プラグインオブジェクトを接続するための少なくとも２つのインターフェースを有する構成要素にカスタム描写体を接続する方法であって、
カスタム描写体を設ける工程と、
前記カスタム描写体を前記構成要素の同期インターフェースに接続する工程であって、前記構成要素は、インクに関連するデータの処理を指示する工程とを含むことを特徴とする方法。
【請求項３０】
前記カスタム描写体を含む集合において他のオブジェクトを前記構成要素に接続する工程をさらに含むことを特徴とする請求項２９に記載の方法。
【請求項３１】
前記カスタム描写体によって処理されたデータが、次に他のオブジェクトに送られるように、前記他のオブジェクトを前記カスタム描写体に連鎖させる工程をさらに含むことを特徴とする請求項２９に記載の方法。
【請求項３２】
前記構成要素は、システム提供の動的描写体への接続機構を含み、前記方法は、前記システム提供の動的描写体を前記構成要素から取り外す工程をさらに含むことを特徴とする請求項２９に記載の方法。
【請求項３３】
前記構成要素は、システム提供の動的描写体への接続機構を含み、前記方法は、前記システム提供の動的描写体を前記構成要素の前記同期インターフェースに接続する工程をさらに含むことを特徴とする請求項２９に記載の方法。
【請求項３４】
同期インターフェースおよび非同期インターフェースを有する構成要素にオブジェクトを接続するための方法であって、
プラグインオブジェクトを、受け取った入力と同期して処理する必要があるかどうか、または前記プラグインオブジェクトを後で処理することが可能であるかどうかを判断する工程と、
前記判断工程に基づいて、前記プラグインを同期インターフェースまたは非同期インターフェースの一方に接続する工程とを含むことを特徴とする方法。
【請求項３５】
前記構成要素を動作させるコンピュータの処理速度を決定する工程をさらに含み、
前記接続工程も、前記処理速度を決定する工程に基づいて行われることを特徴とする請求項３４に記載の方法。
【請求項３６】
少なくとも１つのプラグインオブジェクトを前記同期インターフェースに接続することを特徴とする請求項３４に記載の方法。
【請求項３７】
時間制約プラグインオブジェクトを前記同期インターフェースに接続し、非時間制約プラグインオブジェクトを前記非同期インターフェースに接続することを特徴とする請求項３４に記載の方法。
【請求項３８】
同期インターフェースおよび非同期インターフェースを有する構成要素にオブジェクトを接続するためのシステムであって、
プラグインオブジェクトを、受け取った入力と同期して処理する必要があるかどうか、または前記プラグインオブジェクトを後で処理することが可能であるかどうかを判断する手段と、
前記判断工程に基づいて、前記プラグインを同期インターフェースまたは非同期インターフェースの一方に接続する手段とを備えることを特徴とするシステム。
【請求項３９】
前記構成要素を動作させるコンピュータの処理速度を決定することをさらに含み、
前記接続工程も、前記処理速度を決定する工程に基づいて行われることを特徴とする請求項３８に記載のシステム。
【請求項４０】
少なくとも１つのプラグインオブジェクトを前記同期インターフェースに接続することを特徴とする請求項３８に記載の方法。
【請求項４１】
時間制約プラグインオブジェクトを前記同期インターフェースに接続し、非時間制約プラグインオブジェクトを前記非同期インターフェースに接続することを特徴とする請求項３８に記載の方法。
【請求項４２】
情報を描写するためのシステムであって、
インク情報を受け取る構成要素をホストするプロセッサと、前記受け取られたインク情報を描写する動的描写体であって、一時的な記憶機構を含む動的描写体と、前記受け取られたインク情報を描写する静的描写体であって、前記受け取られたインク情報に関する前記一時的記憶機構を解除するように前記動的描写体に通知する静的描写体とを備えることを特徴とするシステム。
【請求項４３】
前記インク方法は、スタイラスによって生成されることを特徴とする請求項４２に記載のシステム。
【請求項４４】
情報を描写するための方法であって、
インク情報を受け取る工程と、
前記受け取られたインク情報を動的描写体オブジェクトに描写する工程と、
前記動的描写体オブジェクトに対応づけられた一時的記憶機構に前記受け取られたインク情報を記憶する工程と、
前記受け取られたインク情報を静的描写体オブジェクトに描写する工程と、
前記一時的記憶機構における前記受け取られたインク情報を消去するように前記動的描写体オブジェクトに通知する工程とを含むことを特徴とする方法。
【請求項４５】
情報を処理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換し、構成要素をホストするプロセッサであって、前記構成要素は、
前記構成要素によって受け取られた情報を、前記構成要素による前記情報の受取りと同期して処理する第１のプラグインオブジェクトが接続される同期インターフェースと、
前記構成要素によって受け取られた情報を、前記構成要素による前記情報の受取りと非同期で処理する第２のプラグインオブジェクトが接続される非同期インターフェースとを備えるプロセッサとを備えることを特徴とするシステム。
【請求項４６】
前記第２のプラグインオブジェクトによって処理された前記情報は、前記第２のプラグインオブジェクトによって処理された同一の情報であることを特徴とする請求項４５に記載のシステム。
【請求項４７】
前記第２のプラグインオブジェクトによって処理された前記情報は、前記第１のプラグインオブジェクトによって処理された前記情報と異なり、前記第１のプラグインオブジェクトは、前記情報を、前記第２のプラグインオブジェクトによって後に処理されるように修正したことを特徴とする請求項４５に記載のシステム。
【請求項４８】
前記構成要素は出力キューをさらの含み、前記出力キューは、前記第１のプラグインオブジェクトによって処理された情報を受け取ることを特徴とする請求項４５に記載のシステム。
【請求項４９】
前記構成要素は入力キューをさらに含み、前記入力キューは、前記第１のプラグインオブジェクトによって生成されて、前記第１のプラグインオブジェクトによって処理される情報を受け取ることを特徴とする請求項４５に記載のシステム。
【請求項５０】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたリストの一部を形成することを特徴とする請求項４５に記載のシステム。
【請求項５１】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたチェーンの一部を形成することを特徴とする請求項４５に記載のシステム。
【請求項５２】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、ジェスチャレコグナイザオブジェクトであることを特徴とする請求項４５に記載のシステム。
【請求項５３】
前記第２のプラグインオブジェクトは、インクを収集・描写するインク収集体オブジェクトであることを特徴とする請求項４５に記載のシステム。
【請求項５４】
前記第１のプラグインオブジェクトとしての動的描写体であって、前記構成要素によって受け取られたインク筆画を一時的に記憶するための記憶機構を含む動的描写体をさらに備えることを特徴とする請求項４５に記載のシステム。
【請求項５５】
一時的に記憶された前記インクは、前記第２のプラグインオブジェクトから命令を受け取った後に削除されることを特徴とする請求項５４に記載のシステム。
【請求項５６】
一時的に記憶された前記インクは、前記第２のプラグインオブジェクトから命令を受け取り、前記第２のプラグインオブジェクトが前記インクを描写した後に削除されることを特徴とする請求項５４に記載のシステム。
【請求項５７】
情報を処理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換し、構成要素をホストするプロセッサであって、前記構成要素は、
前記構成要素によって受け取られた情報を、前記構成要素による前記情報の受取りと同期して処理する第１のプラグインオブジェクトが接続される第１のインターフェースと、
前記第１のプラグインオブジェクトによって処理された情報を処理する第２のプラグインオブジェクトが接続される第２のインターフェースと、
前記第２のプラグインオブジェクトによって処理された情報を処理する第３のプラグインオブジェクトが接続される第３のインターフェースとを備えるプロセッサとを備えることを特徴とするシステム。
【請求項５８】
前記第２のプラグインオブジェクトおよび前記第３のプラグインオブジェクトは、前記構成要素によって受け取られた情報に関して同期的に情報を処理することを特徴とする請求項５７に記載のシステム。
【請求項５９】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたリストの一部を形成することを特徴とする請求項５７に記載のシステム。
【請求項６０】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたチェーンの一部を形成することを特徴とする請求項５７に記載のシステム。
【請求項６１】
情報を処理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換し、第１の構成要素および第２の構成要素をホストするプロセッサであって、
前記第１の構成要素は、
前記第１の構成要素によって受け取られた情報を、前記前記構成要素による前記情報の受取りと同期して処理する第１のプラグインオブジェクトが接続される同期インターフェースと、
前記第２の構成要素が接続される非同期インターフェースとを備え、
前記第２の構成要素は、第２のプラグインオブジェクトが接続される同期インターフェースと、第３のプラグインオブジェクトが接続される非同期インターフェースとを含むプロセッサとを備えることを特徴とするシステム。
【請求項６２】
前記第１のプラグインオブジェクトは、動的描写体オブジェクトであることを特徴とする請求項６１に記載のシステム。
【請求項６３】
前記第３のプラグインオブジェクトは、インク集合オブジェクトであることを特徴とする請求項６１に記載のシステム。
【請求項６４】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたリストの一部を形成することを特徴とする請求項６１に記載のシステム。
【請求項６５】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたチェーンの一部を形成することを特徴とする請求項６１に記載のシステム。
【請求項６６】
構成要素とプラグインオブジェクトの間で通信する方法であって、
前記構成要素でデータパケットを受け取る工程と、
前記データパケットをある場所に配置する工程と、
プラグインオブジェクトのリストに前記データパケットの存在を通知する工程と、
プラグインオブジェクトの前記リストを通じて前記データパケットを処理する工程とを含むことを特徴とする方法。
【請求項６７】
プラグインオブジェクトを構成要素に関連づける方法であって、
プラグインオブジェクトの参照を含むことができるリストを形成する工程と、
前記リストを前記構成要素に接続する工程と、
少なくとも１つのプラグインオブジェクトを参照して前記リストを生成する工程とを含み、
前記リストにおける前記プラグインオブジェクトの順序に従って、データを前記プラグインオブジェクトによって処理することができることを特徴とする方法。
【請求項６８】
プラグインオブジェクトを構成要素に関連づける方法であって、
第１のプラグインオブジェクトを前記構成要素上のインターフェースに接続する工程と、
第２のプラグインオブジェクトを前記第１のプラグインオブジェクト上のインターフェースに接続して、前記構成要素と、前記第１のプラグインオブジェクトと、前記第２のプラグインオブジェクトをつなぐチェーンを形成する工程とを含み、
前記チェーンにおける前記プラグインオブジェクトの順序に従って、データを前記プラグインオブジェクトによって処理することができることを特徴とする方法。
【請求項６９】
情報を描写するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換し、構成要素をホストするプロセッサであって、前記構成要素は、
前記情報を描写する描写システムと、
前記構成要素によって描写された情報を受け取り、一時的に記憶する第１のキューであって、前記第１のキューは、前記一時的に記憶された情報を検索するために他の構成要素にアクセスされ、前記一時的に記憶された情報を前記他の構成要素によって後に処理することができる第１のキューとを備えるプロセッサとを備えることを特徴とするシステム。
【請求項７０】
前記情報は、電子インクを含むことを特徴とする請求項６９に記載のシステム。
【請求項７１】
前記情報、電子インクの改造を含むことを特徴とする請求項６９に記載のシステム。
【請求項７２】
前記描写システムは、前記構成要素に着脱可能に接続されるプラグインオブジェクトであることを特徴とする請求項６９に記載のシステム。
【請求項７３】
前記情報は、第１の時刻に受け取られた第１のパケットと、後の時刻に受け取られた第２のパケットとを含み、前記プロセッサは、前記キュー内の前記第２のパケットの前方に前記第１のパケットを配置して、前記第１のパケットおよび前記第２のパケットの処理の適正な同期を維持することを特徴とする請求項６９に記載のシステム。
【請求項７４】
前記情報は、第１の時刻に受け取られた第１のパケットと、後の時刻に受け取られた第２のパケットとを含み、前記プロセッサは、前記キュー内の前記第２のパケットの後方に前記第１のパケットを配置して、前記第１のパケットおよび前記第２のパケットの処理の適正な同期を維持することを特徴とする請求項６９に記載のシステム。
【請求項７５】
情報を描写するための方法であって、
受け取られた情報を描写する工程と、
前記描写された情報を第１のキューに一時的に記憶する工程と、
前記第１のキューにアクセスして、前記一時的に記憶された情報を検索する工程と、
前記一時的に記憶された情報を処理する工程とを含むことを特徴とする方法。
【請求項７６】
前記描写工程は、第１の構成要素によって実施されることを特徴とする請求項７５に記載の方法。
【請求項７７】
前記処理工程は、第２の構成要素によって実施されることを特徴とする請求項７５に記載の方法。
【請求項７８】
前記受け取られた情報は、第１の時刻に受け取られた第１のパケットと、後の時刻に受け取られた第２のパケットとを含み、前記一時的に記憶する工程は、
前記キュー内の前記第２のパケットの前方に前記第１のパケットを配置して、前記第１のパケットおよび前記第２のパケットの処理の適正な同期を維持する工程をさらに含むことを特徴とする請求項７５に記載の方法。
【請求項７９】
前記受け取られた情報は、第１の時刻に受け取られた第１のパケットと、後の時刻に受け取られた第２のパケットとを含み、前記一時的に記憶する工程は、
前記キュー内の前記第２のパケットの後方に前記第１のパケットを配置して、前記第１のパケットおよび前記第２のパケットの処理の適正な同期を維持する工程をさらに含むことを特徴とする請求項７５に記載の方法。
【請求項８０】
第１の描写体オブジェクトおよび第２の描写体オブジェクトによって描写される表示可能情報に対する表示属性を改良するための方法であって、
構成要素で表示属性改良情報を受け取る工程と、
前記表示属性改良情報を処理する工程と、
前記表示属性改良情報を適用する工程とを含むことを特徴とする方法。
【請求項８１】
前記表示属性改良情報は、前記表示可能情報が前記第１の描写体オブジェクトによって描写されてから、前記表示可能情報が前記第２の描写体オブジェクトによって描写されるまでの間に受け取られ、
前記適用工程は、前記表示属性改良情報に関連する表示属性改良を前記表示可能情報に適用することを特徴とする請求項８０に記載の方法。
【請求項８２】
前記表示属性改良情報は、前記表示可能情報が前記第１の描写体オブジェクトによって描写されてから、前記表示可能情報が前記第２の描写体オブジェクトによって描写されるまでの間に受け取られ、
前記適用工程は、前記表示属性改良情報に関連する表示属性改良の適用を、前記表示可能情報が前記第２の描写体オブジェクトによって描写された後まで遅らせることを特徴とする請求項８０に記載の方法。
【請求項８３】
新たなペンまたはカーソルダウンイベントが前記構成要素で受け取られるまで前記適用工程を遅らせる工程をさらに含むことを特徴とする請求項８０に記載の方法。
【請求項８４】
表示可能情報に対する表示属性を改良するためのコンピューティングシステムであって、
構成要素、第１の描写体オブジェクトおよび第２の描写体オブジェクトをホストするプロセッサを備え、前記プロセッサは、表示属性改良情報を受け取り、前記表示属性改良情報を処理し、前記表示属性改良情報を、前記第２の描写体オブジェクトによって描写された前記表示可能情報に適用することを特徴とするコンピューティングシステム。
【請求項８５】
前記表示属性改良情報は、前記表示可能情報が前記第１の描写体オブジェクトによって描写されてから、前記表示可能情報が前記第２の描写体オブジェクトによって描写されるまでの間に受け取られ、
前記適用工程は、前記表示属性改良情報に関連する表示属性改良を前記表示可能情報に適用することを特徴とする請求項８４に記載のコンピューティングシステム。
【請求項８６】
前記表示属性改良情報は、前記表示可能情報が前記第１の描写体オブジェクトによって描写されてから、前記表示可能情報が前記第２の描写体オブジェクトによって描写されるまでの間に受け取られ、
前記適用工程は、前記表示属性改良情報に関連する表示属性改良の適用を、前記表示可能情報が前記第２の描写体オブジェクトによって描写された後まで遅らせることを特徴とする請求項８４に記載のコンピューティングシステム。
【請求項８７】
前記プロセッサは、新たなペンまたはカーソルダウンイベントが前記構成要素で受け取られるまで前記表示属性改良情報の適用を遅らせる工程をさらに含むことを特徴とする請求項８４に記載のコンピューティングシステム。
【請求項８８】
情報を処理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換し、第１の構成要素および第２の構成要素をホストするプロセッサであって、
前記第１の構成要素は、
前記第１の構成要素によって受け取られた情報を、前記前記構成要素による前記情報の受取りと同期して処理する第１のプラグインオブジェクトが接続される同期インターフェースと、
前記第１の構成要素から情報を受け取る出力キューと、
前記出力キューにおける情報にアクセスする前記第２の構成要素が接続される非同期インターフェースとを備え、
前記第２の構成要素は、第２のプラグインオブジェクトが接続される同期インターフェースと、第３のプラグインオブジェクトが接続される非同期インターフェースとを含むプロセッサとを備えることを特徴とするシステム。
【請求項８９】
前記第１のプラグインオブジェクトは、ダイナミック描写体オブジェクトであることを特徴とする請求項８８に記載のシステム。
【請求項９０】
前記第３のプラグインオブジェクトは、インク集合オブジェクトであることを特徴とする請求項８８に記載のシステム。
【請求項９１】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたリストの一部を形成することを特徴とする請求項８８に記載のシステム。
【請求項９２】
前記第１のプラグインオブジェクトおよび前記第２のプラグインオブジェクトの少なくとも一方は、前記構成要素に接続されたチェーンの一部を形成することを特徴とする請求項８８に記載のシステム。
【請求項９３】
第２の構成要素の前記同期インターフェースは、前記第２のプラグインオブジェクトが、前記出力キューにおける情報にアクセスすることを可能にすることを特徴とする請求項８８に記載のシステム。
【請求項９４】
前記構成要素は、
前記第１の構成要素から前記同期インターフェースを介して受け取られた情報を一時的に記憶する入力キューであって、前記第２の構成要素の前記同期インターフェースによってアクセスされる入力キューをさらに備えることを特徴とする請求項８８に記載のシステム。
【請求項９５】
キーボード、マウスおよびスタイラスからイベントを指示するコンピューティングシステムであって、
記憶機構と、
前記記憶機構と情報を交換するプロセッサであって、前記プロセッサは、ペンサービス構成要素をホストし、前記ペンサービスは、前記マウスおよび前記スタイラスから情報を受け取り、前記情報を指示し、電子インクに関連する情報をペン入力マネージャに送るプロセッサとを備えることを特徴とするコンピューティングシステム。
【請求項９６】
前記ペン入力マネージャは、非管理部および管理部を含むことを特徴とする請求項９５に記載のコンピューティングシステム。
【請求項９７】
電子インクを処理することが可能なメモリを管理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換するプロセッサであって、前記プロセッサは、電子インクを処理するための構成要素を含み、前記構成要素は、非管理部および管理コード部を有し、前記非管理部および前記管理部は共通のメモリを共用するプロセッサとを備えることを特徴とするシステム。
【請求項９８】
電子インクを処理することが可能なメモリを管理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換するプロセッサであって、前記プロセッサは、プラグインオブジェクトをホストし、前記プラグインオブジェクトは、管理および非管理コードを有し、前記管理コードと前記非管理コードの間で共通のメモリを共用するプロセッサとを備えることを特徴とするシステム。
【請求項９９】
エラー通知を処理するためのシステムであって、
記憶機構と、
前記記憶機構と情報を交換するプロセッサであって、プラグインオブジェクトを有する構成要素をホストするプロセッサとを備え、
前記プラグインオブジェクトによる情報の処理における例外が生じたときに、前記プラグインオブジェクトは、他のプラグインオブジェクトに送られてそれらに前記例外を知らせるデータパケットを作成することを特徴とするシステム。
【請求項１００】
前記データパケットは、後に同期スレッドおよび非同期スレッドの少なくとも一方で前記プラグインオブジェクトにアクセスされる入力キューに送られることを特徴とする請求項９９に記載のシステム。
【請求項１０１】
前記データパケットは、後に非同期スレッドで前記プラグインオブジェクトにアクセスされる出力キューに送られることを特徴とする請求項９９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の態様は、画像処理および情報処理に関する。より詳細には、本発明の態様は、電子インク情報を受け取って、処理することに関する。
【背景技術】
【０００２】
本出願は、その内容が参照により本明細書に明確に組み込まれている、２００３年１０月２４日に出願された「Tablet Platform Controls and APIs」という名称の米国出願第６０／５１３，５９１号の優先権を主張するものである。
【０００３】
典型的なコンピュータシステム、特にマイクロソフトＷｉｎｄｏｗｓ（登録商標）の如きグラフィカルユーザインターフェース（ＧＵＩ）システムを使用するコンピュータシステムは、テキストを入力するためのキーボードの如き１つまたは複数の個別的な入力デバイス、およびユーザインターフェースを駆動するための１つまたは複数のボタンを備えたマウスの如きポインティングデバイスからユーザ入力を受けつけるように最適化される。汎用的なキーボードおよびマウスインターフェースは、文書、スプレッドシート、データベースフィールド、図および写真等の高速作成および修正に対応する。しかし、コンピュータを使用しない（すなわち標準の）ペンおよび紙に比べると、キーボードおよびマウスインターフェースが与える柔軟性に大きなギャップがある。標準のペンおよび紙では、ユーザは、文書を編集し、縁に注釈を書き、絵および他の形状等を描く。場合によっては、ユーザは、キーボードおよびマウスインターフェースの範囲外で自由に注釈を加えることができるという理由から、画面上で文書を見直すより、ペンを使用して、文書にマーク付けするのを好むこともある。
【０００４】
ユーザは、ペンで書くときは、ペン先端からインクが流れるのを期待する。電子インクの領域でも、同様の目標が存在する。電子インクがペンまたはスタイラスから流れるのを妨げる１つの問題は、電子インクの扱い方である。
【０００５】
従来のアプローチは、インキングのすべての側面を同時に扱うことを意図していた。従来のアプローチは、インク情報が存在すれば、インクを描写し、ジェスチャを追跡し、インク情報を他のインク情報と組み合わせ、インクを認識し、インクの外観を滑らかにする等の処理を行うことを意図していた。これらの処理は、ユーザに対してインクを表示するのを遅らせることによって、より多くのインクを導入、より重要なことは、電子スタイラスの先端からインクが流れるという幻想を低減または排除するのにユーザを待たせるものであった。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の態様は、上述の問題の１つまたは複数の問題に対処することにより、スタイラスからのインクの流れを提供する。
【課題を解決するための手段】
【０００７】
動的描写オブジェクトをプロセス流れで移動させて、ユーザの動きと電子インクの表示との間の遅れを低減することができる。
【０００８】
これらの態様および他の態様を、図面および関連説明に関連づけながら述べる。
【発明を実施するための最良の形態】
【０００９】
本発明の態様は、スタイラスイベントを効率的に処理して、電子インクをユーザに対して迅速に描写することに関する。
【００１０】
本文献は、読者に役立つようにいくつかのセクションに分割されている。これらのセクションは、インクの特性、用語定義、汎用的コンピューティング環境、リアルタイムインキングの概観、オブジェクトモデル、動的描写および湿式インク、ジェスチャ認識、同期および非同期プロセス、カスケーディング、動的プラグイン集合改良、誤差伝搬、管理／非管理実例、データ集合および流れ、データ同期、およびアプリケーションプログラミングインターフェースを含む。
【００１１】
インクの特性
インクペンを使用するユーザに知られているように、物理的インク（インク溜を備えたペンを使用して紙上に書き込まれる種類）は、線分によって接続された一連の座標より多くの情報を伝達できる。例えば、物理的インクは、ペン圧（インクの濃さによる）、ペン角度（直線または曲線分の形状、および個別点付近のインクの挙動による）、およびペンの尖端の速度（真直性、線幅、および直線または曲線のコースに対する線幅変化による）を反映することができる。さらなる例は、インクが付着する紙または他の表面の繊維にインクが吸収される様式を含む。これらの些細な特性も、上記の特性を付与するに役立つ。これらの追加的な特性により、転換の均一な線幅を用いるより、情緒、個性および強調等をより即時的に付与することが可能である。
【００１２】
電子インク（またはインク）は、ユーザがスタイラスをベースとした入力デバイスを使用するときに取り込まれる電子情報の取込みおよび表示に関する。電子インクは、筆画の配列または任意の集合を指し、各筆画は、点の配列で構成される。筆画は、同時に描画または収集されるか、または個別的な時刻および箇所、および個別的な理由で描画または収集されうる。デカルト座標（Ｘ、Ｙ）、極座標（ｒ、Θ）、および当該技術分野で知られている他の技術を含む、知られている様々技術を用いて、それぞれの点を表現することができる。電子インクは、圧力、角度、速度、色、スタイラスサイズおよびインク透明性を含む実際のインクの特性の表示を含むことができる。電子インクは、ページにインクが付着された秩序（たいていの西洋言語では、左から右へ、そして下に続けるラスタパターン）、タイムスタンプ（インクが付着されたときを示す）、インクの作者の指標、および発祥デバイス（インクが引き出された機械の指標、またはインクを付着させるのに使用されたペンの指標）等の情報をさらに含むことができる。
【００１３】
用語定義
【００１４】
【表１−１】
2007509413.tif 000003
【００１５】
【表１−２】
2007509413.tif 000004
【００１６】
【表１−３】
2007509413.tif 000005
【００１７】
【表１−４】
2007509413.tif 000006
【００１８】
【表１−５】
2007509413.tif 000007
【００１９】
【表１−６】
2007509413.tif 000008
【００２０】
汎用コンピューティング環境
図１Ａは、本発明を実施できる好適なコンピューティングシステム環境１００の例を示す図である。コンピューティングシステム環境１００は、好適なコンピューティング環境の一例にすぎず、本発明の用途または機能の範囲に関して何らかの制限を示唆することを意図するものではない。コンピューティングシステム環境１００は、例示的なコンピューティングシステム環境１００に示されている任意の１つの構成要素またはその組合せに関
する何らかの依存性または要件を有するものとして解釈されるべきではない。
【００２１】
本発明は、他の多くの汎用または特殊用途のコンピューティングシステム環境または構成で動作可能である。本発明への使用に好適でありうるよく知られているコンピューティングシステム、環境および構成の例としては、パーソナルコンピュータ、サーバコンピュータ、スマートフォン、スマートウォッチおよびパーソナルデータアシスタントを含むハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサをベースとしたシステム、セットトップボックス、プログラム可能大衆消費電子製品、ネットワークＰＣ、ミニコンピュータ、大型コンピュータ、および上記システムまたはデバイスのいずれかを含む分散コンピューティング環境等が挙げられるが、それらに限定されない。
【００２２】
コンピュータによって実行されるプログラムモジュールの如きコンピュータ実行可能命令の全体的な脈絡で本発明を説明することができる。一般には、プログラムモジュールは、特定の作業を実施するか、または特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素およびデータ構造等を含む。通信ネットワークを通じて互いにリンクされる遠隔処理デバイスによってタスクが実施される分散コンピューティング環境で本発明を実施することもできる。分散コンピューティング環境では、メモリ記憶デバイスを含むローカルおよび遠隔コンピュータ記憶媒体にプログラムモジュールを配置することができる。
【００２３】
図１Ａを参照すると、本発明を実施するための例示的なシステムは、コンピュータ１１０の形の汎用コンピューティングデバイスを含む。コンピュータ１１０の構成要素としては、処理装置１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステム構成要素を処理装置１２０に結合するシステムバス１２１を挙げることができるが、それらに限定されない。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用したローカルバスを含むいくつかのバス構造体のいずれかであってもよい。限定ではなく、例として、当該アーキテクチャは、工業規格アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られている周辺装置相互接続（ＰＣＩ）を含む。
【００２４】
コンピュータ１１０は、典型的には、様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ１１０によってアクセスすることが可能である任意の利用可能な媒体で、揮発性媒体、不揮発性媒体、取外し可能な媒体および取外し不可能な媒体を含む。限定ではなく、例として、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュールまたは他のデータの如き情報を記憶するための任意の方法または技術で実装される揮発性媒体、不揮発性媒体、取外し可能な媒体および取外し不可能な媒体を含む。コンピュータ記憶媒体としては、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電子的消去書込可能読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルビデオディスク（ＤＶＤ）または他の光ディスク記憶機構、磁気カセット、磁気テープ、磁気ディスク記憶機構または他の磁気記憶デバイス、あるいは所望の情報を記憶するのに使用でき、コンピュータ１１０によってアクセスできる任意の他の媒体が挙げられるが、それらに限定されない。通信媒体は、典型的には、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または搬送波の如き変調データ信号もしくは他の伝送機構内の他のデータを具現化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、その１つまたは複数の特性が信号内の情報をコード化するように設定または変化された信号を意味する。限定ではなく、例として、通信媒体は、有線ネットワークまたは直線有線接続の如き有線媒体、ならびに音響、ＲＦ、赤外および他の無線媒体の如き無線媒体を含む。上記のいずれかの組合せもコンピュータ読取り可能媒体の範囲に含まれるものとする。
【００２５】
システムメモリ１３０は、ＲＯＭ１３１およびＲＡＭ１３２の如き揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の要素間で情報を伝達するのに役立つ基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）は、典型的にはＲＯＭ１３１に記憶される。ＲＡＭ１３２は、典型的には、すぐにアクセス可能で、かつ／または処理装置１２０によって現在動作されているデータおよび／またはプログラムモジュールを含む。限定ではなく、例として、図１Ａは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を示す図である。
【００２６】
コンピュータ１１０は、他の取外し可能／取外し不可能、および揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。例示のみを目的とし、図１Ａは、取外し不可能で不揮発性の磁気媒体に対して読取りまたは書込を行うハードディスクドライブ１４１、取外し可能で不揮発性の磁気ディスク１５２に対して読取りまたは書込みを行う磁気ディスクドライブ１５１、およびＣＤ  ＲＯＭ、または他の光媒体の如き取外し可能で不揮発性の光ディスク１５６に対して読取りまたは書込みを行う光ディスクドライブ１５５を示す図である。例示的な動作環境で使用できる他の取外し可能／取外し不可能および揮発性／不揮発性コンピュータ記憶媒体としては、磁気テープカセット、フラッシュメモリカード、デジタルビデオディスク、デジタルビデオテープ、固体ＲＡＭおよび固体ＲＯＭ等が挙げられるが、それらに限定されない。ハードディスクドライブ１４１は、典型的には、インターフェース１４０の如き取外し不可能なメモリインターフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、典型的には、インターフェース１５０の如き取外し可能なメモリインターフェースによってシステムバス１２１に接続される。
【００２７】
上記に説明し、図１Ａに示したドライブ、およびそれらに伴うコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびコンピュータ１１０のための他のデータの記憶機構を提供する。図１Ａにおいて、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を記憶するものとして示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７と同じであっても異なっていてもよい。ここでは、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７にそれぞれ異なる番号を割り当てて、最低限、それらが異なるコピーであることを示す。ユーザは、デジタルカメラ１６３、キーボード１６２、および一般的にマウスまたはタッチパッドと称するポインティングデバイス１６１の如き入力デバイスを通じて、コンピュータ１１０に指令および情報を入力することができる。他の入力デバイス（不図示）としては、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュまたはスキャナ等を挙げることができる。これらの入力デバイスおよび他の入力デバイスは、システムバス１２１に結合されるユーザ入力インターフェース１６０を通じて処理装置１２０にしばしば接続されるが、並列ポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）によって接続されうる。モニタ１９１または他のタイプの表示デバイスも、ビデオインターフェース１９０の如きインターフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、出力周辺インターフェース１９５を通じて接続できるスピーカ１９７およびプリンタ１９６の如き他の周辺出力デバイスを含むこともできる。
【００２８】
コンピュータ１１０は、遠隔コンピュータ１８０の如き１つまたは複数の遠隔コンピュータＥの論理接続を用いたネットワーク化環境で動作できる。遠隔コンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、同位デバイスまたは他の共通ネットワークノードであってもよく、コンピュータ１１０に対して上述した要素の多くまたは全てを含むが、図１Ａにはメモリ記憶デバイス１８１のみを示した。図１Ａに示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。当該ネットワーキング環境は、オフィス、企業内コンピュータネットワーク、イントラネットおよびインターネットに普及している。
【００２９】
コンピュータ１１０は、ＬＡＮネットワーキング環境で使用されるときは、ネットワークインターフェースまたはアダプタ１７０を通じてＬＡＮ１７１に接続される。コンピュータ１１０は、ＷＡＮネットワーキング環境で使用されるときは、典型的には、モデム１７２、またはインターネットの如きＷＡＮ１７３に通信を確立するための他の手段を含む。内部または外部モデムであってもよいモデム１７２は、ユーザ入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続されうる。ネットワーク化環境では、コンピュータ１１０またはその部分に対して示されているプログラムモジュールを遠隔メモリ記憶デバイスに記憶することができる。限定ではなく、例として、図１Ａは、メモリデバイス１８１上に存在する遠隔アプリケーションプログラム１８５を示す図である。示されているネットワーク接続は、例示的なものであり、コンピュータの間に通信リンクを確立する他の手段を使用できることが理解されるであろう。
【００３０】
示されているネットワーク接続は、例示的なものであり、コンピュータの間に通信リンクを確立する他の手段を使用することが可能であることが理解されるであろう。ＴＣＰ／ＩＰ、イーサネット（登録商標）、ＦＴＰおよびＨＴＴＰ等のよく知られている様々なプロトコルのいずれかの存在が想定され、システムをクライアントサーバ構成で動作させて、ユーザがウェブをベースとしたサーバからウェブページを検索することを可能にすることができる。様々な従来のウェブブラウザのいずれかを使用して、ウェブページ上にデータを表示・操作することが可能である。
【００３１】
プログラミングインターフェース（または、より簡潔にはインターフェース）を、コードの１つまたは複数のセグメントが、コードの１つまたは複数の他のセグメントによって提供される機能と通信するか、またはそれにアクセスすることを可能にするための任意の機構、プロセス、プロトコルと見なすことができる。あるいは、プログラミングインターフェースを、他の構成要素の１つまたは複数の機構、方法、機能、呼出およびモジュール等と通信結合することが可能なシステムの構成要素の１つまたは複数の機構、方法、機能、呼出およびモジュール等と見なすことができる。先述の文における「コードのセグメント」という用語は、コードの１つまたは複数の命令またはラインを含むことを意図し、例えば適用される用語、あるいはコードセグメントが個別に編集されるかどうか、あるいはコードセグメントが原コードとして提供されるか、中間コードとして提供されるか、または目的コードとして提供される、あるいはコードセグメントがルーチンシステムまたはプロセスで利用されるか、あるいはそれらが同じまたは異なる機械に配置されるか、または複数の機械に分配されるか、あるいはコードのセグメントによって表される機能が全てソフトウェアで実施されるか、全てハードウェアで実施されるか、ハードウェアとソフトウェアの組合せで実施されるかにかかわらず、例えばコードモジュール、オブジェクト、サブルーチンおよび機能等を含む。
【００３２】
概念的には、図１Ｂまたは図１Ｃに示されるように、プログラミングインターフェースを包括的に捉えることができる。図１Ｂは、第１および第２のコードセグメントが、それを通じて通信する導管としてのインターフェース、すなわちインターフェース１を示す図である。図１Ｃは、システムの第１および第２のコードセグメントが、媒体Ｍを介して通信することを可能にする、（第１および第２のコードセグメントの一部であってもなくてもよい）インターフェースオブジェクトＩ１およびＩ２を備えるインターフェースを示す図である。図１Ｃを見ると、インターフェースオブジェクトＩ１およびＩ２を同一システムの個別的なインターフェースと見なすことができとともに、オブジェクトＩ１およびＩ２＋媒体Ｍはインターフェースを備えると考えることができる。図１Ｂおよび１Ｃは、双方向の流れと、流れの各々の側のインターフェースとを示しているが、特定の実装形態は、一方向にのみ情報の流れを有することができ（または、以下に示すように情報の流れを有さなくてもよく）、あるいは一方の側にのみインターフェースを有することができる。限定ではなく、例として、アプリケーションプログラミングインターフェース（ＡＰＩ）、入口点、方法、機能、サブルーチン、遠隔手順呼出および構成要素オブジェクトモデル（ＣＯＭ）インターフェースのような用語は、プログラミングインターフェースの定義に包括される。
【００３３】
当該プログラミングインターフェースの態様は、第１のコードセグメントが、情報（ただし、「情報」は最も広い意味で用いられ、データ、指令および要求等を含む）を第２のコードセグメントに伝送する方法と、第２のコードセグメントが情報を受け取る方法と、情報の構造、配列、シンタックス、構成、スキーム、タイミングおよび内容とを含むことができる。この点で、基礎を成す伝達媒体そのものは、情報がインターフェースによって定められるように伝達される限り、媒体が有線であっても、無線であっても、両者の組合せであっても、インターフェースの動作にとって重要ではないといえる。一定の状況において、情報伝達が他の機構を介するものであっても（例えば、コードセグメントの間の情報の流れから分離された緩衝域、ファイル等に搭載された情報）、１つのコードセグメントが第２のコードセグメントによって果たされる機能に単にアクセスするとき等は存在しなくてもよいため、情報が、従来の意味で一方向または双方向に送られないこともある。これらの態様のいずれかまたは全ては、所定の状況において、例えばコードセグメントが疎結合構成または緊密結合構成のシステムの一部であるかどうかに応じて重要でありうるため、このリストは例示的で、非制限的である。
【００３４】
このプログラミングインターフェースの概念は、当業者に知られており、本発明の先述の詳細な説明から明らかである。しかし、プログラミングインターフェースを実装するための他の方法も存在し、明らかに排除されるものでなければ、これらも、本明細書の前に記載されている請求項に包括されるものとする。そのような他の方法は、図１Ｂおよび１Ｃの簡潔な図に比べて、より精巧または複雑に見えることもあるが、それでも同様の機能を果たして、同じ包括的結果を達成する。次に、プログラミングインターフェースのいくつかの例示的な代替的な実装形態を簡単に説明する。
【００３５】
Ａ．ファクタリング
通信を多数の個別的な通信に分割することによって、１つのコードセグメントから他のコードセグメントへの通信を間接的に達成できる。これは、図１Ｄおよび１Ｅに概略的に示されている。ここに示されるように、分割可能な機能の集合体という観点でいくつかのインターフェースを説明することが可能である。したがって、ちょうど数学的に２４、または２×２×３×２を与えることができるように、図１Ｂおよび１Ｃのインターフェース機能をファクタリングして、同じ結果を達成することができる。よって、図１Ｄに示されるように、インターフェース、すなわちインターフェース１によって提供される機能を細分割して、インターフェースの通信を多数のインターフェース、すなわちインターフェース１Ａ、インターフェース１Ｂ、インターフェース１Ｃ等に変換しながら、同じ結果を達成することができる。図１Ｅに示されるように、インターフェースＩ１によって提供される機能を多数のインターフェースＩ１ａ、Ｉ１ｂ、Ｉ１ｃ等に細分割しながら、同じ結果を達成することができる。同様に、第１のコードセグメントから情報を受け取る第２のコードセグメントのインターフェースＩ２を多数のインターフェースＩ２ａ、Ｉ２ｂ、Ｉ２ｃ等にファクタリングすることができる。ファクタリングするときは、第１のコードセグメントに含まれるインターフェースの数が、第２のコードセグメントに含まれるインターフェースの数と一致する必要はない。図１Ｄおよび１Ｅの場合のいずれも、インターフェース、すなわちインターフェース１およびインターフェースＩ１の機能的意味は、それぞれ図１Ｂおよび１Ｃの場合と同じである。インターフェースのファクタリングは、ファクタリングの認識が困難になりうるように、結合特性、交換特性および他の数学的特性を追従することもある。例えば、動作の順序は重要でなく、その結果、インターフェースによって実施される昨日は、コードまたはインターフェースの他の部分によって、インターフェースに到達する前に十分に実施されるか、またはシステムの個別的な構成要素によって実施されうる。さらに、同じ結果を達成する異なる機能呼出の様々な方法が存在することを、プログラミング技術分野の当業者なら理解できる。
【００３６】
Ｂ．再定義
場合によっては、プログラミングインターフェースの一定の態様（例えばパラメータ）を無視、追加または再定義しながら、目的とする結果を遂行することが可能である。これは、図１Ｆおよび１Ｇに示されている。例えば、インターフェース、すなわち図１のインターフェース１は、機能呼出平方（入力、精度、出力）、すなわち入力、精度および出力の３つのパラメータを含み、第１のコードセグメントから第２のコードセグメントに発せられる呼出を含むものと仮定する。中央のパラメータである精度が、所定のシナリオに関係ない場合は、図１Ｆに示されるように、無視するか、または（この状況において）無意味なパラメータと交換することも可能である。関係のないさらなるパラメータを追加することもできる。いずれの場合も、入力が第２のコードセグメントによって平方された後に出力が戻されるのであれば、平方の機能を達成することが可能である。精度は、コンピューティングシステムの下流または他の部分にとって十分に意味のあるパラメータでありうるが、精度が、平方を計算するという狭い目的に必要ないと認識されれば、交換または無視することができる。例えば、有効な精度値を通す代わりに、結果に悪影響を与えることなく誕生日のような無意味な値を通すことが可能である。同様に、図１Ｇに示されるように、インターフェースＩ１を、パラメータを無視するか、またはインターフェースに追加するように再定義されたインターフェースＩ１’と交換する。インターフェースＩ２は、同様に、不要なパラメータ、または他の場所で処理できるパラメータを無視するように再定義されたインターフェースＩ２’として再定義されうる。ここでのポイントは、いくつかの場合において、プログラミングインターフェースは、ある目的に必要とされないパラメータの如き態様を含むことができるため、無視または再定義されるか、あるいは他の目的のために他の場所で処理されうることである。
【００３７】
Ｃ．インラインコード化
２つの個別的なコードモジュールの機能の一部または全てを、それらの間の「インターフェース」が形を変えるように結合することも実現可能である。例えば、図１Ｂおよび１Ｃの機能をそれぞれ図１Ｈおよび１Ｉに変換できる。図１Ｈにおいて、図１Ｂの先の第１および第２のコードセグメントを結合して、その両方を含むモジュールにする。この場合、コードセグメントは、まだ互いに通信しているが、単一モジュールにより好適な形に適合されうる。したがって、例えば、フォーマット呼出および復帰命令はもう必要ではないが、インターフェース、すなわちインターフェース１に準拠する処理または応答はまだ有効でありうる。同様に、図１Ｉに示されるように、図１ＣによるインターフェースＩ２の一部（または全て）をインターフェースＩ１にインラインで書き込んで、インターフェースＩ１’’を形成することができる。示されるように、インターフェースＩ２は、Ｉ２ａとＩ２ｂに分割され、インターフェースＩ２ａは、インターフェースＩ１によりインラインでコード化されて、インターフェースＩ１’’を形成する。具体的な例としては、第２のコードセグメントによって（入力の平方を計算するために）入力とともに通された値を処理した後で、平方結果を出力とともに戻すインターフェースＩ２によって受け取られる機能呼出平方（入力、出力）を実施する図１のインターフェイスＩ１を考える。そのような場合は、（入力を平方する）第２のコードセグメントによって実施された処理を、インターフェースに対する呼出を伴わずに第１のコードセグメントによって実施することができる。
【００３８】
Ｄ．分離
１つのコードセグメントから他のコードセグメントへの通信は、通信を多数の個別的な通信に分割することによって間接的に達成されうる。これは、図１Ｊおよび１Ｋに概略的に示されている。図１Ｊに示されるように、コードの１つまたは複数の部分（機能および・またはインターフェース機能を本来のインターフェースから分離するため分離インターフェースである）は、第１のインターフェース、すなわちインターフェース１上の通信を変換して、それらを異なるインターフェース、この場合はインターフェース、すなわちインターフェース２Ａ、インターフェース２Ｂおよびインターフェース２Ｃに適合させるように設けられる。これは、例えばインターフェース１プロトコルに従って所謂オペレーティングシステムと通信するように設計されたアプリケーションのベースがインストールされているが、その後オペレーティングシステムが、異なるインターフェース、この場合はインターフェース、すなわちインターフェース２Ａ、インターフェース２Ｂおよびインターフェース２Ｃを使用するように変化される場合に実施されうる。ポイントは、第２のコードセグメントによって使用される本来のインターフェースが、第１のコードセグメントによって使用されるインターフェースと適合できなくなるように変化されるため、仲介物を使用して、古いインターフェースと新しいインターフェースを適合可能にすることである。同様に、図１Ｋに示されるように、第３のコードセグメントを分離インターフェースＤＩ１とともに導入して、インターフェースＩ１からの通信を受け、分離インターフェースＤＩ２とともに導入して、インターフェース機能を、例えば、ＤＩ２と協働するが、同じ機能結果を提供するように再設計されたインターフェースＩ２ａおよびＩ２ｂに送信することが可能である。同様に、ＤＩ１およびＤＩ２は協働して、図１ＣのインターフェースＩ１およびＩ２の機能を新たなオペレーティングシステムに合わせて翻訳しながら、同一または同様の機能的結果を提供することができる。
【００３９】
Ｅ．書換え
さらに他の可能な変形は、コードを動的に書き換えて、インターフェース機能を他の機能と交換するものであるが、それも同じ包括的結果を達成する。例えば、中間言語（例えばマイクロソフトＩＬ、Ｊａｖａ（登録商標）ＢｙｔｅＣｏｄｅ等）が、実行環境（．ＮＥＴフレームワークによって提供される環境、Ｊａｖａ（登録商標）ルーチン環境、他の同様のルーチン型環境等）におけるジャストインタイム（ＪＩＴ）コンパイラまたはインタプリタに提供される。第１のコードセグメントから第２のコードセグメントへの通信を動的に変換させ、すなわち第２のコードセグメント（本来の第２のコードセグメントまたは異なる第２のコードセグメント）が必要としうる異なるインターフェースにそれらを適合させるように、ＪＩＴコンパイラを書き込むことができる。これは、図１Ｌおよび１Ｍに示されている。図１Ｌに見られるように、このアプローチは上記の分離シナリオに類似している。それは、例えば、インストールされたアプリケーションのベースが、インターフェース１のプロトコルに従ってオペレーティングシステムと通信するように設計されるが、後に異なるインターフェースを使用するようにオペレーティングシステムが変化される場合に実施されうる。ＪＩＴコンパイラを使用して、インストールされたベースアプリケーションからの実行中の通信をオペレーティングシステムの新たなインターフェースに適合させることが可能である。図１Ｍに示されるように、動的にインターフェースを書き換えるこのアプローチを適用して、インターフェースを動的にファクタライズするか、あるいはインターフェースを変えることもできる。
【００４０】
代替的な実施形態を介してインターフェースとして同一または同様の結果を達成するための上記シナリオを様々な様式で、縦列および／または並列に、または他の介在コードで組み合わせることができるという点にも注目される。したがって、上述の代替的な実施形態は、相互に排他的なものではなく、それらを混合し、整合し、組み合わせて、図１Ｂおよび１Ｃに示される一般的なシナリオと同一または同等のシナリオを生成することができる。たいていのプログラミング構造と同様に、ここに記載することができないが、それでも本発明の主旨および範囲によって表される同一または同様のインターフェースの機能を達成する他の同様の方法が存在するという点にも注目される。すなわち、それは、少なくとも部分的に、インターフェースの値の基礎を成すインターフェースによって表される機能、およびそれによって可能になる有利な結果であるという点に注目される。
【００４１】
図２は、本発明の様々な態様に従って使用することが可能であるタブレットＰＣ２０１を示す図である。図１のシステムにおける特徴、サブシステムおよび機能のいずれかまたは全てを図２のコンピュータに含めることができる。タブレットＰＣ２０１は、複数のウィンドウ２０３が表示される大きな表示面２０２、例えばデジタル化フラットパネルディスプレイ、好ましくは液晶表示（ＬＣＤ）画面を含む。ユーザは、スタイラス２０４を使用して、デジタル化表示面２０２上で選択、強調および／または書込みを行うことができる。好適なデジタル化表示面２０２の例としては、ＭｕｔｏｈまたはＷａｃｏｍペンデジタイザの如き磁気ペンデジタイザが挙げられる。他のタイプのペンデジタイザ、例えば光デジタイザを使用することもできる。タブレットＰＣ２０１は、データを処理し、テキストを入力し、図を作成し、かつ／またはスプレッドシートおよびワードプロセッシングプログラム等の従来のコンピュータアプリケーション作業を実行するために、スタイラス２０４を使用してジェスチャを翻訳する。
【００４２】
スタイラス２０４には、その選択機能を拡大するために、１つまたは複数のボタンまたは他の特徴を装備することができる。一実施形態において、一端が執筆部を構成し、他端が「消しゴム」端を構成し、ディスプレイを移動するときに、ディスプレイの部分が消去されることを示す「鉛筆」または「ペン」としてスタイラス２０４を実装することが可能である。マウスまたはトラックボール等の他のタイプの入力デバイスを使用することが可能である。また、ユーザ自身の指をスタイラス２０４とし、接触式または近接式ディスプレイ上の表示画像の部分を選択または指示するのに使用することも可能である。これにより、本明細書で用いられている「ユーザ入力デバイス」という用語は、広い定義を有することを意図しており、スタイラス２０４の如きよく知られている入力デバイスに対する多くの変形を包括する。領域２０５は、スタイラス２０４が表示面２０２のどこに接触したかをユーザが判断することを可能にするフィードバック領域または接触領域を示す。
【００４３】
様々な実施形態において、そのシステムは、インクを取り込み、処理し、保管するのにアプリケーションが使用できるＣＯＭ（構成要素オブジェクトモデル）サービスの集合としてインクプラットフォームを提供する。１つのサービスは、アプリケーションが、開示されたインクの表現を用いてインクの読取りおよび書込みを行うことを可能にする。インクプラットフォームは、拡張可能マーク付け言語（ＸＭＬ）のような言語を含むマーク付け言語を含むこともできる。さらに、システムは、他の実装形態としてＤＣＯＭを使用できる。マイクロソフトコーポレーションによるＷｉｎ３２プログラミングモデルおよびＮｅｔプログラミングモデルを含むさらなる実装形態を使用することができる。
【００４４】
リアルタイムインキングの概要
ユーザは、スタイラスまたはペンを使用して、電子インクを作成する。インクは、さらなるプロセスが完了するまで待つのではなく、ユーザがインクを作成する時刻により近い時刻にインクを表示することを可能にするシステムによって処理される。
【００４５】
図３は、本発明の態様による電子インクを処理するための例示的なシステムを示す図である。入力マネージャは、入力マネージャ３０１においてインクを受け取る。ペンおよびデジタル化タブレット、およびＷａｃｏｍタブレット等を含む様々な入力マネージャが当該技術分野に存在する。インクデータの存在は、スタイラス入力イベント３０２と呼ばれる。次に、スタイラス入力イベント３０２は、インク収集器３０３によって処理される。インク集合オブジェクト３０３は、入力マネージャ１３０からの情報の最初の処理を実施する。次いで、システムは、ディスプレイ３０５上に出力用インク３０４を動的に描写する。他の構成要素は、インクのより複雑な処理を行うことができる。例えば、筆画を既存のインクオブジェクト３０６に加え（またはインク筆画を含む新たなインクオブジェクトを作製し）、受け取ったインク（データと称する）を１つまたは複数の特性と関連づけることができる。これは、インクオブジェクト特性を有する構成要素３０７によって示される。次いで、ディスプレイ３０５上の表示のために、インクオブジェクトの細描写（スムーシングが望まれる場合）３０８を行うことができる。
【００４６】
図４は、図３のアプローチの代替的なアプローチを示す図である。図４は、入力内部スタイラス入力源４０１、入力マネージャ４０２（入力キューを有しても有さなくてもよい）、インク集合オブジェクト４０３、インクオブジェクト特性を有する要素４０５、リアルタイムインキングオブジェクト４０４およびディスプレイ４０６を含む。
【００４７】
２つのタイプの入力の集合、すなわちスタイラスとデジタイザの間の接触に起因するデータと、デジタイザ上の移動に起因するデータとを処理することができる。デジタイザに接触しないデジタイザ上の移動は、「空間スタイラス」入力と呼ばれる。内部スタイラス入力源は、２つの入力の集合を分離し、それに応じてそれらを追跡する。図４に示される様々な活動を以下に列記する。
Ａ）空中スタイラス入力イベントを入力マネージャ４０２の入力キューに追加する。
Ｂ）入力マネージャ４０２は、空中スタイラス入力をインク集合４０３に送る。
Ｃ）入力マネージャ４０２は、焦点変化が生じたかどうかを判断するための処理に向けて空中スタイラス入力を出力する。リアルタイムインキングオブジェクト４０４（リアルタイムスタイラスコントロールとも称する）にも通知される。リアルタイムインキングオブジェクト４０４は、何らかの必要なデータ（インク色等）を要求することができる。
Ｄ）空中スタイラスイベントは、通常の処理を続行し、インクオブジェクト特性を有する要素４０５に続く。
Ｅ）スタイラス「ダウン」イベントを受け取って、リアルタイムインキングオブジェクト４０５に送る。
Ｆ）リアルタイムインキングオブジェクト４０５は、点を受け取りながら描画する。これを動的描写と呼ぶことができる。
Ｇ）リアルタイムインキングオブジェクト４０５は、描画したイベントを入力マネージャ４０２に送って、ユーザインターフェーススレッドが利用可能になる後の時刻に送らせる。
Ｈ）筆画を集め、次いでインクプロジェクトに追加する。
Ｉ）該要素は、リアルタイムインキングオブジェクト４０５に、動的に描画された筆画を除去するように通知し、次いで新たな筆画を再描画する。この動作は、筆画毎に行ってもよいし、いくつかのインク筆画に対して適用してもよい。
Ｊ）全てのインキングが完了した後にインクを描写する。
【００４８】
図４に示される上記アプローチは、インクラグが「スタイラスダウン」イベントに対してのみ致命的であるという利点を提供する。インクラグは、スタイラスが活動的に描画している間のみ認知可能である。マイナスのユーザ影響を与えることなく、他の全てのスタイラスイベントを遅らせることが可能である。
【００４９】
図４のアプローチは、マルチスレッド感知を入力マネージャキューおよびＲＴＩオブジェクトにおいて局在化させる。また、焦点が確立されると、ラグまたは遅れが生じないことを保証する。
【００５０】
オブジェクトモデル
図５は、様々な度合いで組み合わせることができる５つの部分を含む本発明の態様と併用することができる様々なオブジェクトを示す図である。以下の説明に用いられる様々な用語を以下に列記する。
【００５１】
第１の部分は、電子インクの収集をサポートするペンサービスアプリケーション５０１である。例としては、マイクロソフトコーポレーションから提供され、Ｗｉｎｄｏｗｓ（登録商標）ＸＰタブレットエディションで使用されるｗｉｓｐｔｉｓ．ｅｘｅがある。
【００５２】
第２に、リアルタイムスタイラスサービス５０３（プロセス１  ５０２と対応づけて示されている）は、スタイラスデータをペンサービス５０１から適切な収集用ウィンドウに送るアプリケーションである。リアルタイムスタイラスサービス５０３は、無数のオブジェクトを処理することができ、または過使用を最小限にするために制限されうる。例えば、制限される場合は、スレッド毎のオブジェクトの例示的な数を１６、３２、６４および１２８等とすることができる。勿論、他の値を適用することもできる。
【００５３】
第３に、リアルタイムスタイラス５０４および５０５をプロセス１に示す。リアルタイムスタイラス５０４および５０５は、スタイラスデータをリアルタイムスタイラスサービス５０３から受け取ることができる。各リアルタイムスタイラスオブジェクトは、ウィンドウの所定の部分または（対応付けられたウィンドウに基づく）領域またはそのリアルタイムスタイラスオブジェクトに対するスタイラスデータを受け取ることができる。
【００５４】
多数のプロセスを以下にして同時に実施できるかを示すために、プロセス２  ５０６も示す。リアルタイムスタイラスサービス５０７は、また、ペンサービス５０１からスタイラスデータを受け取ることができ、この情報をリアルタイムスタイラス５０８および５０９に送る。
【００５５】
リアルタイムスタイラスオブジェクト５０４、５０５、５０８および５０９を、図６により詳細に示す。ペンサービス構成要素６０１は、データ流Ａにおいて、データをリアルタイムスタイラスサービス６０２に送る。次に、リアルタイムスタイラスサービス６０２は、データ流Ｂにおいて、スタイラスデータを１つまたは複数のリアルタイムスタイラス構成要素６０３に送る。あるいは、点線で示されるリアルタイムスタイラスサービス６０２によって示されるように、このサービスを省略し、スタイラスデータをリアルタイムスタイラス構成要素６０３に直接流すことができる。
【００５６】
リアルタイムスタイラス構成要素６０３で受け取られたスタイラスデータをプラグ可能構成要素６０６〜６０８に直接供給することができる。あるいは、受け取ったスタイラスデータを、順序処理に向けてその入力キュー６０４に供給することもできる。次に、リアルタイムスタイラス構成要素６０３は、スタイラスデータを１つまたは複数のプラグ可能構成要素に送る。これらの構成要素６０６〜６０８は、現在描写されているスタイラスデータを記憶する視覚的記憶機構を有する動的描写体６０８を含むことができる。データ流は、データ流ＣおよびＤを含む。
【００５７】
動的描写体６０８は、１つまたは複数の筆画のパケットデータを蓄積し、視覚的記憶機構６０９に記憶することができる。これは、例えば、筆画がエッジの上に伸び、次いでスタイラスがまだダウンしている間にインク可能領域に再度入るときに有利である。ペンがダウンしている間に表示ウィンドウが再塗装要求を受け取ると、記憶機構６０９は、そのウィンドウを迅速に再塗装するためにその情報を提供する。動的描写体が記憶機構６０９にスタイラスデータを記憶しなかった場合は、システムは、データがそれを出力キューから出して、インク集合オブジェクト６１１に入れるまで、ウィンドウを再塗装し、最も新しい１つまたは複数の筆画を描写するのを待たなければならないことになる。
【００５８】
プラグ可能構成要素６０６〜６０８は、インターフェースを通じて一定の呼出に応答して、スタイラスデータを処理できるクラスオブジェクトである。使用できるインターフェースの一例としては、ＩＳｔｙｌｕｓＳｙｎｃｐｌｕｇｉｎが挙げられる。プラグ可能構成要素６０６〜６０８の組合せは、デベロッパが、プラグイン内のパケット流からのデータを完全に制御し、修正し、そしてさらに消去することを可能にする。次いで、データ流Ｂからの修正されたパケット流を出力キュー６０５に記憶する。
【００５９】
出力キュー６０５の出力は、データ流ＦおよびＧを通じて、プラグ可能構成要素６１０および６１１の他の集合に流れる。これらの構成要素は、ジェスチャレコグナイザ６１０と、インク収蔵庫６１２を有するインク集合オブジェクト６１１とを含むことができる。様々な追加的プラグインオブジェクトをデータ流ＦおよびＧによって引き出すことができる。
【００６０】
プラグ可能構成要素６０６〜６０８をプラグ可能構成要素６１０および６１１から分離するための決定を様々な基準に基づいて行うことができる。例えば、構成要素６０６〜６０８を同期プラグインとし、構成要素６１０および６１１を非同期プラグインとすることができる。あるいは、スタイラスデータ処理時間がより短いプラグインをデータ流Ｃ／Ｄで処理することができ、より長いデータ処理時間はデータ流Ｆ／Ｇによって対処することができる。１つのスレッドＣ／Ｄからの構成要素をスレッドＦ／Ｇの構成要素と交換することができる。
【００６１】
プラグ可能構成要素６０６〜６０８と６１０〜６１１の２つの集合を分離する利点は、プラグ可能構成要素が異なるスレッドによって処理されることである。ここで、同期プラグインと非同期プラグインの違いは、それらが実行されるスレッド、および呼出順序にある（リアルタイムスタイラス６０３が実行されるスレッドによって同期プラグインを呼び出すことができ、非同期プラグインは、パケット流が同期プラグインによって処理され、出力キュー６０５に記憶された後で、通常はユーザインターフェースアプリケーションスレッドによって呼び出される）。
【００６２】
ある場合は、リアルタイムスタイラス構成要素６０３からペンサービス６０１またはリアルタイムスタイラスサービス６０２に戻る公共通信が存在しうる。他の場合は、リアルタイムスタイラス構成要素６０３からペンサービス６０１またはリアルタイムスタイラスサービス６０２に戻る公共通信が存在しない。通信を防止することで、これらの構成要素からのデータの流れを容易にすることができる。
【００６３】
ある状況において、リアルタイムスタイラス構成要素６０３は、所定の順序で呼出をプラグインに送ることによってデータを検索するときをプラグインに通知することができる。これらの通知を検索するプラグインの順序およびタイプは、デベロッパによって制御されうる。イベントにおけるパケットデータをこれらのプラグイン６０６〜６０８ならびに６１０〜６１１によって監視することができる。
【００６４】
本発明の態様は、ペンサービスからのパケットデータ、ディスプレイ、タブレットおよびペン等に関する変化の通知、ならびにリアルタイムスタイラスによって処理できる他のデータ集合を含む様々なデータタイプを扱う。以下の説明は、ペンサービスからのパケットデータの使用について記載しているが、これは、リアルタイムスタイラス６０３に使用できる多くのデータのタイプの１つにすぎない。以下の説明では、パケットデータは、ＲＴＳによって処理されるデータタイプについての説明例として用いられているが、ＲＴＳによって処理できるより一般的なデータを示すものとして理解されるべきである。
【００６５】
リアルタイムスタイラス構成要素６０３は、キュー６０４および６０５を含むこともできる。出力キュー６０５は、時間スタイラス構成要素６０３が処理するパケットデータの全てを維持する。パケットデータがプラグインから戻されると、パケットデータはデータ流Ｅからの出力キュー６０５に追加される。次いで、出力キュー６０５は、プラグイン（例えば、非同期で、一般にインク集合オブジェクト６１１を含む）によって使用されうる。これは、データを（データ流Ｆから）抽出し、データ流Ｇにおける出力キュー６０５内に保持されたデータからインクオブジェクトを構築することによって行うことができる。
【００６６】
出力キュー６０５のサイズは一定であってもなくてもよい。一定であれば、キュー６０５が満たされた後に、続いて受け取られるデータパケットが失われることがある。一定でなければ、キュー６０５のサイズが拡大して、追加的なデータパケットを受け取ることができる。一定サイズのキューを維持する利点は、データのバックログを合理的な時間で処理できるバックログに限定することである。例えば、エンドユーザがシステムと相互作用し、システムが応答しなくなった場合は、エンドユーザは、システムが再び応答するまで休止することによって、キューがデータを失うことなくバックログを処理することを可能にするのが一般的である。また、何らかの理由で、大容量のスタイラスデータが作成された場合は、キュー６０５は、一定サイズを有することによってデータの一部を除去するのに役立つことができる。
【００６７】
データを順次受け取る際に出力キュー６０５を固定することができる。あるいは、以下に記載するように、データを順不同で出力キュー６０５に配置して、リアルタイム描写との同期を維持することができる。
【００６８】
入力キュー６０４は、データ流Ｂ（または、リアルタイムスタイラスサービス６０２が存在しない場合は、データ流Ａ）における情報を受け取る。入力キューは、データをプラグイン６０６〜６０８に入力するプロセスを提供する。あるいは、スタイラスデータは、プラグイン６０６〜６０８に直接流れることができる。データ流ＢとＣの間の仲介物（ここではデータ流Ｚ）として入力キュー６０４を有することに対する利点は、作成されたスタイラスデータを何も存在しないところに挿入できることである。
【００６９】
高レベル制御の流れを以下に記載する。
ａ．リアルタイムスタイラス６０３は、プラグイン６０６〜６０８に通されたパケットデータの処理を終了する。
ｂ．リアルタイムスタイラス６０３は、処理したデータを出力キュー６０５に記憶する。
ｃ．リアルタイムスタイラス６０３は、入力キュー６０４に保留中のパケットデータが存在するかどうかを調べる。データが存在すれば、入力キューからのそのパケットを取り出し、上記の工程ａで処理する。
ｄ．リアルタイムスタイラス６０３は、ペンサービス６０１に保留中のパケットデータが存在するかどうかを調べる。存在すれば、ペンサービス６０１からのそのパケットデータを取り出し、上記の工程ａで処理する。
ｅ．このプロセスは、工程ｃで繰り返される。
【００７０】
リアルタイムスタイラスオブジェクトが以下にしてタブレットペンデータを処理できるかに対する代替的なアプローチを以下に記載する。図８、１１および１３に対する小さな改造によって以下のことを適用することができ、その改造は、同期スレッド上のプラグインの配列（デージチェーンされた各プラグインからリアルタイムスタイラスオブジェクトによって個別的に呼び出された各プラグインまで）であることが理解される。
ａ．リアルタイムスタイラスオブジェクト６０３は、まずその入力キュー６０４のプラグインデータオブジェクトを、次いでペンデータ流Ｂからのプラグインデータオブジェクトを調べる。
ｂ．リアルタイムスタイラスオブジェクト６０３は、Ｃの１つのプラグインデータオブジェクトをその同期プラグイン集合におけるオブジェクト６０６〜６０８に送る。各同期プラグイン６０６〜６０８は、入力キュー６０４または出力キュー６０５にデータを追加することが可能である。
ｃ．プラグインデータオブジェクトが同期プラグイン集合の全てのメンバーに送られると、プラグインデータオブジェクトをリアルタイムスタイラスオブジェクトの出力キュー６０５に配置する。
ｄ．次いで、リアルタイムスタイラスオブジェクト６０３は、（入力キュー６０４またはデータ流Ｂからの）処理する次のプラグインデータオブジェクトを調べる。
ｅ．リアルタイムスタイラスオブジェクトの出力キュー６０５がデータを含んでいうる間に、リアルタイムスタイラスオブジェクト６０３は、１つのプラグインデータオブジェクトを出力キュー６０５からその非同期プラグイン集合６１０〜６１１におけるオブジェクトに送る。各非同期プラグイン６１０〜６１１は、入力キュー６０４または出力キュー６０５にデータを追加することができる。しかし、非同期プラグインはＵＩスレッド上で実行できるため、キュー６０４／６０５に追加されたデータは、タブレットペンデータ流Ｂにおけるデータの残り、またはリアルタイムスタイラスオブジェクトの入力６０４および出力キュー６０５に対して、設定された関係を有さない。
【００７１】
第４に、システムは、非同期プラグイン６１１（ここではインク集合オブジェクトとして示される）を含む。ここで、インク集合オブジェクトは、１つまたは複数のプラグインオブジェクトを表すことができる。インク収集および保存は、ＵＩまたは非同期スレッドで行われる様々な活動の１つでありうる。パケットデータ（または修正パケットデータ）は、同期プラグイン６０６〜６０８から戻ると、リアルタイムスタイラス６０３の出力キュー６０５に配置される。次いで、リアルタイムスタイラス６０３は、データを出力キュー６０５に配置する。次いで、データは、次のプラグイン６１０〜６１１の集合（集合またはチェーン）に送られる。これは、非同期スレッド上の様々なプラグインによって指定されるようにデータを破壊／削除／再循環／解放できるインク収集オブジェクト６１１にデータを送ることを含むことができる。
【００７２】
第５に、システムは、基本的な機能をシステムに提供する（同期または非同期スレッドのいずれかまたは両方のスレッド上で動作するように設計されうる）標準的なプラグインを含むことができる。標準的なプラグインは、動的描写体６０８と、ジェスチャレコグナイザ６１０とを含むことができる。勿論、要望に応じて、標準的なプラグインを他のプラグインと交換することができる。さらに、本発明の態様のいくつかの実装形態において、リアルタイムスタイラスには、最初から標準的なプラグインを含めなくてもよい。むしろ、デベロッパは、第３の供給者から選定し、かつ／または必要に応じて独自のプラグインを作成するのがよい。
【００７３】
図７および８は、図６の構造の代替的なバージョンを提示している。図７は、スタイラスデータをリアルタイムスタイラス７０２に提供するペンサービス７０１を示す図である。入力キュー７０３（使用してもしなくてもよい）は、スタイラスデータを同期プラグイン８０１〜８０５に提供する。ここで、各プラグインは、プラグイン集合の一部である。あるいは、プラグインは、プラグインのチェーンの一部であってもよい。最後の同期プラグイン（リアルタイムスタイラス同期プラグインＮ８０５）の後に、スタイラスデータ（または修正スタイラスデータ）は、出力キュー７０９に配置され、次いで後続のリアルタイムスタイラスイベント非同期プラグイン７１０および８０８によって処理される。
【００７４】
図６および７のデータに関しては、ＲＴＳを通じて送信されるデータ集合は、単一データ集合であってもよいし、デジタイザは非常に高速でサンプリングするために効率性を目的として束ねられたデータ集合の束であってもよい。これらのデータ集合は、様々なイベントの通知を提供し、ＲＴＳを通じて新たな情報を送る。ある状況では、データ集合を削除することができる。データ集合がデータ集合の束である他の状況では、その束における単一のデータ集合を削除しながら、他のデータ集合を保持することができる。実際には、データ集合の束が修正される。次いで、リアルタイムスタイラス７０２は、私的なメッセージを、それが添付されるウィンドウに通知し、入力キューにおける次のデータ集合に進むことができる（存在しない場合は、ペンクライアントインターフェース上のペンサービス７０１によって呼び出される機能から戻る）。
【００７５】
図８Ａおよび８Ｂは、様々な動作のデータ流を示す図である。図８Ａは、ペンサービス７０１で受け取られている色変化を示す図である。リアルタイムスタイラス７０２は、同期プラグイン集合８０９および非同期プラグイン集合８１０を含む。同期プラグイン集合は、同期プラグイン１  ８０１、動的描写体８０４および同期プラグイン３  ８０５を含む。同期プラグイン集合８０９からの出力は、出力キュー７０９に送られる。非同期プラグイン集合８１０は、出力キュー７０９からデータ集合を受け取り、非同期プラグイン１〜３  ８１１、８１２および８１３で処理する。
【００７６】
図８Ａおよび８Ｂについての以下の説明では、データパケットが使用される。しかし、情報を伝達するのに他のデータ集合も使用できることが理解される。データパケットは、使用できるデータ集合のタイプの一例にすぎない。ここで、リアルタイムスタイラス７０２は、出力キュー７０９に２つのデータパケットＡおよびＢを有する。データパケットＣは、色変化ＣＣがペンサービス７０１によって受け取られるときに、動的描写体８０４によって処理されている。色変化ＣＣをすぐに非同期プラグインの１つに送り、それによって処理することができる。しかし、そのようにすると、データパケットＡ、ＢおよびＣが色変化の前に作成される当惑的状況が発生しうる。よって、非同期プラグイン集合８１０によるデータパケットＡ、ＢおよびＣの最終的な処理および最終的な描写の後でのみ色変化を処理することが望まれることもある。
【００７７】
色変化ＣＣの処理を遅らせるために、プラグイン集合８０９における同期プラグインの１つは、データオブジェクトＣＣ１を作成し、入力キュー７０３に押し込むことができる。次に、そのデータオブジェクトを入力キューによってオンラインで処理することができ、その結果は、色変化が出力キュー７０９においてＣＣ２で表される。このアプローチを用いて、筆画の色を変える命令を既に受け取られたデータパケットで適性に指示することができる。
【００７８】
図８Ａは、リアルタイムスタイラス構成要素７０２によって処理されている色変化の例を示す図である。しかし、入力キューまたは出力キューによる処理のためのオブジェクトを作成するこのアプローチは、他のイベントを処理するのに役立つ。
【００７９】
いくつかのプラグイン（動的描写体を含むが、それに限定されない）は、２つの範疇の特性、すなわち、変化が即時効果を示す特性と、次のスタイラスダウン（筆画開始）から効果を示す特性とを有することができる。それら２値の範疇の間の区別は、技術的要素、およびユーザの経験およびユーザの予想についての問題等を含む様々な理由によって発生しうる。例えば、筆画およびイベントがユーザの観点から発生した指示を保持するように、筆画の色変化を遅らせることができる。
【００８０】
図８Ｂは、データパケットを処理し、同時にジェスチャ認識オブジェクトを処理するリアルタイムスタイラス構成要素７０２を示す図である。出力キュー７０９は、スタイラスダウンイベント（ＳＤ）、データパケット（Ｐ）およびスタイラスアップイベント（ＳＵ）を含むいくつかのデータオブジェクトを含む。スタイラスアップイベントＳＵが同期プラグイン集合８０９でペンサービス７０１から受け取られると、ジェスチャレコグナイザは、１つまたは複数の前のデータパケットＰからジェスチャを認識しようと試みる。データパケットが、ジェスチャとして認識された場合は、ジェスチャレコグナイザ８１４は、ジェスチャ認識オブジェクトＧＲを生成し、入力キュー７０３に配置する。次いで、オブジェクトのジェスチャ認識ＧＲは、同期プラグインを通って、出力キュー７０９に送られる。出力キュー７０９から、ジェスチャ認識オブジェクトＧＲは、同期プラグインを通って、次いで破壊／消去／再循環／解放される。ジェスチャ認識オブジェクトを作成し、入力プラグイン集合８０９を通じて戻す利点は、その処理により、受け取られたジェスチャ認識オブジェクト出力キュー７０９に送る前に、修正し、かつ／または消去することが可能になることである。さらに、ジェスチャ認識オブジェクトＧＲを同期プラグイン集合８０９および非同期プラグイン集合８１０によって処理させることによって、スタイラスダウンイベントとスタイラスアップイベントの間のデータパケットは、ジェスチャオブジェクトＧＲの存在に取って代わられるため、それらを除去することができる。あるいは、ジェスチャが対応するデータのイベントを無視してよいが、それは下流の他のプラグインに関係することもある。概して、システムは、挙動がデベロッパの所望の結果と符合するように、すなわち、無視されているデータが、データ構造に配置された後にそこから実際に除去されるように、ジェスチャレコグナイザが存在するときにどのプラグインが存在するかを管理する。
【００８１】
例えば、（パケットのテーブルを構築することができ、次いでＳＵにインク筆画を作成する）インク収集オブジェクトプラグインは、ＧＲがそこに達する時までに既に筆画を作成することができる。そのため、ＧＲを受け取ると、インク収集オブジェクトは、前に作成された筆画を単に消去することができる。次いで、他のプラグインは、ＧＲ上の適切な活動をトリガする役割を担うことができる。
【００８２】
同期および非同期プラグイン集合内のデータの処理は、データに対する様々な処理技術に対応する。あるデータがいくつかのプラグインにのみ関係していた場合は、他のプラグインはそのデータを必要に応じて、無視するか、または送ることができる。例えば、第１のプラグインは、データパケットがディスプレイのインク不可能領域に関連していることを判断することができる。第２のプラグインは、以下の方法を含む様々な方法でデータパケットを処理することができる。
ａ．第１のパケットからの通知を無視する。
ｂ．データパケットが後続のプラグインに送られないように通知を吸収し、破棄する。
または、
ｃ．（例えば、第２のプラグインがこれらのタイプのパケットに持つ関心の程度を示す特性を設定することによって）それが通知に関心がないことを明記する。ここで、それが、データパケットに関心がないことを明示すると、リアルタイムスタイラス構成要素は、第２のプラグインを省く。
【００８３】
この第３のアプローチＣは、機能呼出のオーバヘッドを、必要とされないときに除去することによって、性能便益を提供する。
【００８４】
「カスタムスタイラスデータをキューへ追加」法を呼び出すことによってカスタムスタイラスデータをリアルタイムスタイラスオブジェクトに追加することが可能である。「カスタムスタイラスデータをキューへ追加」法の呼出が、その「Ｉスタイラス同期プラグイン」法の１つの呼出に応答して同期プラグインからなされる場合は、カスタムスタイラスデータを確定的にタブレットペンデータ流に追加する。さもなければ、非確定的に追加する。「カスタムスタイラスデータをキューへ追加」法は、「リアルタイムスタイラス」オブジェクトが使用不可の場合は、例外をもたらす。
【００８５】
３つの場合のいずれかにおいて、カスタムスタイラスデータをリアルタイムスタイラスオブジェクトのキューに追加することができる。
ａ．キューパラメータが「入力」に設定されるときは、タブレットペンデータ流からの新たなデータの前に、カスタムデータをリアルタイムスタイラスオブジェクトの入力キューに追加し、同期プラグイン集合に送る。
ｂ．キューパラメータが「出力」に設定されるときは、同期プラグイン集合によって現在処理されているデータの後に、カスタムデータをリアルタイムスタイラスオブジェクトの出力キューに追加する。
ｃ．キューパラメータが「即時出力」に設定されるときは、同期プラグイン集合によって現在処理されているデータの前に、カスタムデータをリアルタイムスタイラスオブジェクトの出力キューに追加する。
【００８６】
上記の各々の場合において、同期プラグイン集合における後続のプラグインによって追加されたデータは、直前のプラグインによって追加されたデータの後に追加される。
【００８７】
カスタムスタイラスデータは、カスタムスタイラスデータオブジェクトとしてキューに追加され、プラグインは、「Ｉスタイラス同期プラグイン．カスタムスタイラスデータ追加」または「Ｉスタイラス非同期プラグイン．カスタムスタイラスデータ追加」法を通じてこのデータを受け取る。
【００８８】
動的描写体およびジェスチャレコグナイザオブジェクトは、カスタムスタイラスデータをキューに追加することができる。
【００８９】
リアルタイムスタイラスオブジェクトは、それが、その「カスタムスタイラスデータをキューへ追加」法の呼出を受ける元となるスレッド上で、「Ｉスタイラス同期プラグイン．カスタムスタイラスデータ追加」法を呼び出す。
【００９０】
リアルタイムスタイラスオブジェクトは、インクを収集するように構成されていても、いなくてもよい。それがインクを収集する場合は、リアルタイムスタイラスを使用して、インクデータをインク集合オブジェクトに送ることが可能である。インク集合オブジェクトは、リアルタイムスタイラスの出力に差し込むインク集合プラグインの形をとることができる。
【００９１】
インク分析または手書き認識は、リアルタイムスタイラスオブジェクトの機能ではない。インク集合プラグインがインクを収集・作成すると、またはインクを認識したいときは、インクを「レコグナイザコンテキスト」または「ディバイダ」オブジェクトにコピーすることが可能である。
【００９２】
上述したように、インクを複数回表示することができる。最初は、インクを動的描写体で表示することができる。二度目は、インクがインク集合オブジェクトに収集された後で、インクを静的描写体で表示することができる。これにより、他のタイプの描写体を使用して、インクがインク集合オブジェクトから受け取られたときにインクを描写することが可能になる。例えば、多色インクを静的描写体の一部として有することができる。この効果の集合を動的描写体に押しつけることは、同期スレッドには負担が大きすぎることもある。そこで、描写体を作成し、それを非同期スレッドに接続することができる。あるいは、デフォルトの動的描写体を無視し、独自の動的描写体を作成し、それを同期スレッドに差し込むこともできる。オブジェクト指向のアプローチで用いられるように、多型、凝集または封込めを通じて標準的な動的描写体を内部的に再使用する動的描写体を作成することもできる。
【００９３】
非同期スレッド上のこの新しい描写体を静的描写体として再使用してもよいし、この目的に合わせて新しい描写体を作成してもよい。例えば、インクを、木炭または他の先端で描画されているかのように描写したいことがある。さらに、物理的インクが乾燥する様子を表現するために、インクが（急速または徐々に）経時的に絶えず変化しているかのようにインクを表示する描写体を作成することができる。さらに、インクを強調表示するために、（虹のような）循環色でインクを表示する描写体を作成することができる。具体的には、スタイラスダウン、パケットおよびスタイラスアップ通知に従う同期プラグインを作成することによって、動的描写体プラグインを作成することができる。次いで、プラグインは、筆画を描かれているように描写することができる。新しい描写体は、インキングならびに様々な選択機構を処理することができる。
【００９４】
動的描写体プラグインは、タブレットペンデータがリアルタイムスタイラスオブジェクトによって処理されているときに、それをリアルタイムで表示するオブジェクトである。後に、フォーム再生のようなイベントに対して、動的描写体プラグインまたはインク集合プラグインは、インクを再描画することができる。
【００９５】
動的描写体オブジェクトは、「Ｉスタイラス同期プラグイン」インターフェースを実装する。動的描写体は、また、非同期インターフェースを実装することもできる。動的描写体オブジェクトは、インクを描画されているようにリアルタイムで描写する。特に指定がなければ、再生法が呼び出されると、動的描写体オブジェクトは、（「動的描写体のキャッシュドデータ」に対応する）既に収集された任意の他の筆画とともに、現在収集されている筆画を再描画する。例えば、インクが所定の形状の外に描写されないように、クリッピング領域によって描画の挙動を拘束するためのパラメータを含む再生挙動の他のオーバーロードが可能である。
【００９６】
これは、（動的描写体が一時的にインクデータを保存することができる）様々な図に示されている。動的描写体オブジェクトは、その「Ｉスタイラス同期プラグイン．スタイラスアップ」法の呼出を受け取ると、筆画データを保存し、その筆画に対する「スタイラスアップデータ」オブジェクトに応答してカスタムスタイラスデータを入力キューに追加する。「カスタムスタイラスデータ」オブジェクトの「カスタムデータＩｄ」特性は、「ダイナミック描写体キャッシュドデータＧｕｉｄ」値に設定され、「カスタムスタイラスデータ」オブジェクトのデータ特性は、「ダイナミック描写体キャッシュドデータ」オブジェクトを含む。次いで、インクが下流で描写されると、対応づけられたデータの動的描写体のキャッシュをクリアすることができる。あるいは、インク筆画は、まだインク収集オブジェクトを通って、それによって記憶されていないため、インクを再生する（原稿の筆画および「キャッシュドデータ」に記憶されたデータを再描画する）と、必ずインク筆画の動的描写体のキャッシュをクリアされるわけではない。
【００９７】
図９および１０は、本システムの態様を確立するためのプロセスを示す図である。図９では、工程９０１において、リアルタイムスタイラス構成要素をインスタンス化する。工程９０２において、同期および非同期プラグインをインスタンス化する。これは、動的描写体および／またはジェスチャレコグナイザ９０３を含んでいてもいなくてもよい。工程９０４において、プラグインをプラグイン集合に追加する。工程９０５において、リアルタイムスタイラスを使用可能にする。工程９０６において、リアルタイムスタイラスを通じてペンデータを受け取る。
【００９８】
図１０は、リアルタイムスタイラスを使用するためのプロセスを示す図である。工程１００１において、ＲＴＳによってパケットを受け取る。これは、入力キューの動作を含んでいてもいなくてもよい。入力キューは、任意のデータの挿入を、それが同期集合を通るように何時でもサポートする。本例では、ＲＴＳのペンクライアントインターフェースの実装に対する機能を呼び出す結果として、データを入力キューに挿入する唯一の構成要素は、ペンサービスである。
【００９９】
工程１００２において、パケットは、同期プラグイン集合に入る。図８のシステムのようなシステムに対しては、この工程は、パケットをプラグインの第１のプラグインに送ることを意味することになる。リアルタイムスタイラスは、集合（またはチェーンが存在する場合はチェーン）における第１のプラグインにおける特定のパケットデータに適した機能を呼び出す。多くの場合、この構成要素は、データを修正するか、またはそのままにしておくかの選択肢を有する。構成要素は、その動作を終了すると、次のプラグインオブジェクトについて同じ機能を呼び出す等である。
【０１００】
工程１００３において、パケットは、同期プラグイン集合（またはチェーン）を進む。これは、工程１００４に示されるように、パケットをジェスチャレコグナイザまたは動的描写体に送ることを含んでいてもいなくてもよい。動的描写体を使用する場合は、カーソルダウンイベント（ペンダウンイベントとも称する）のデータを記憶機構に蓄積し、それらを画面に描写すること（動的描写体の動作）を開始することができる。カーソルアップイベント（またはペンアップイベント）において、動的描写体は、次のカーソルダウンイベントのためにその記憶機構をクリアすることができる。
【０１０１】
ジェスチャレコグナイザを使用する場合は、ジェスチャレコグナイザは、カーソルダウンイベントを検出し、それ自体の記憶機構（例えば記憶機構８０７）へのデータの蓄積を開始することができる。筆画が蓄積するにつれて、ジェスチャレコグナイザは、筆画をレコグナイザに導き、筆画が所望のパターン（またはジェスチャ）に対応する場合は、ａ）ジェスチャデータを出力キューに追加し、ｂ）記憶機構を空にし、次のカーソルダウンイベントをキューに通して蓄積を再び開始する。ここで、ジェスチャは、１つまたは複数の筆画を含むことができることを注記しておく。以下により詳細に説明する図１４は、図１０のプロセスに関して、多数の筆画ジェスチャをどのように処理できるかを示す図である。
【０１０２】
プラグインがどの程度前の筆画を把握すべきか、または把握できるかは、プラグインの目的に左右される。
ａ．１つの例示的なシナリオにおいて、ジェスチャを検出しているプラグインは、ジェスチャに応答して活動を行う役割を担うことができる。それは、筆画に関して何かを把握する必要はない。例えば、ウィンドウ内の「サークル」ジェスチャが、そのアプリケーションに対する「削除」を意味する場合は、ジェスチャを受け取るプラグインは、単にそのウィンドウに「削除」キー入力を送ることになる。この例示的なシナリオでは、インクがウィンドウに収集されないことがある。それは、テキストを含むウィンドウであってもよく、この場合、筆画データが単に通過して回収されないように、ＲＴＳ枠組を構成することができる。したがって、プラグインは、筆画を保存する必要はない。
ｉ．代替的な場合において、上記の「インタープレタ」プラグインは、ジェスチャが翻訳されたため、その筆画を持続しないことを下流のプラグインが把握するように、独自の通知を生成することができる。
ｂ．他の例示的なシナリオにおいて、プラグインは、インク収集を行い、動作を編集することができる。この規範的な例は、全ての筆画が潜在的にジェスチャであり、それらがジェスチャとして扱われる場合は、筆画が実質的に削除されるインクコレクタオブジェクトのモード（インクおよびジェスチャモード）である。したがって、プラグインは、筆画がジェスチャとして翻訳されてしまった場合に、筆画を見つけて削除できるようにするために、筆画を保存する。
【０１０３】
これらの例示的なシナリオのいずれにおいても、実際には、単一の筆画ジェスチャと多数の筆画ジェスチャとの違いは問題ではない。アプリケーションシナリオは、多数の筆画ジェスチャ（例えば矢印）を必要とすることがあり、その場合は、上記の例示的なプラグインのいずれもが不要な多数の筆画ジェスチャを認識することになる。
【０１０４】
次に、工程１００５において、パケットは、同期プラグインの集合によって処理された後に出力キューに入る。先述したように、プラグインの集合は、そこに送られたオブジェクトの各々を処理するのに際して、データパケットを修正、削除、かつ／または交換することができる。同期プラグインのいずれもがパケットを削除しなかったとすると、工程１００５を実行する。
【０１０５】
工程１００６において、パケットは、非同期プラグイン集合を進む。
【０１０６】
動的描写および湿式インク
システムは、スタイラスデータを迅速かつ効率的に処理する能力を提供する。電子インクを真のインクのように挙動させるために、電子インクは、スタイラスの先端から、真のインクと同じくらい容易に流れるように見えることが必要である。インクの流れにおける小さな破損および遅れは、電子インク体験にとって有害である。電子インクが、スタイラスからスムースに流れるように見えるようにするための様々なアプローチを以下に記載する。「湿式」インクは、動的描写体が、インク収集後に、静的描写をどのくらい長く保持するかを制御する機能と見なされる。インクの寿命の管理を扱いやすくするために、通知（ここでは動的描写体キャッシュドデータと称する）を利用して、インク収集プラグインが、キャッシュド（または湿式）インクを動的描写体から解放することを可能にする。
【０１０７】
様々な異なるタイプの動的描写体を作成することができる。例えば、動的描写は、微尖端またはチゼル尖端ペンによって生成されたようなインクを描写する代わりに、半透明水性塗料（「水性色」とも称する）によって生成されたようなインクを描写することができる。また、木炭スタイラスによって生成されたようなインクを描写する動的描写体を作成することができる。さらに、動的描写体は、インクが固定されずに、定期的に色を変化させ、かつ／または移動するようにインクを描写することができる。例えば、合体して所望のインク形態になるインクまたはダストの小滴、究極的に移動して所望のインクを形成する小さなウォーム、または色および形状を変化させるインクのように見えるインクを描写することができる。
【０１０８】
動的描写体は、ＲＴＳの非同期スレッドに対応づけられたオブジェクトによって後に描写されるのと同じ形態でインクを表示することができる。あるいは、動的描写体によって描写されたインクと、ＲＴＳの非同期スレッドに対応づけられたインクの最終的な表示との間に関係が存在していてもよい。例えば、動的描写体は、非同期スレッド上のプラグインによって後に第２の色調または形状に修正されることになる第１の色調または形状でインクを示すことができる。これは、ユーザにとっては、スタイラスから流れているインクまたは塗料が乾燥するように見えることがある。
【０１０９】
動的描写および湿式インクについての以下の説明を図６および７に適用することができる。説明を目的として、図６を参照する。図７の構成も同様に適用可能で、以下の説明は、図７をも包括するのが望ましい。
【０１１０】
図６を参照すると、デジタイザ入力は、ペンサービス６０１から進入し、リアルタイムスタイラス６０３に到達する。リアルタイムスタイラスは、デジタイザ入力を複数の同期プラグインオブジェクト６０６〜６０８に通し、その結果を出力キュー６０５に記憶する。オブジェクト６０６〜６０８は、オブジェクト６０６〜６０８の間にリンクを描くインターフェース、例えば「Ｉスタイラス同期プラグイン」を通じて接続されうる。次いで、オブジェクト６１０および６１１の非同期プラグイン集合は、出力キュー６０５から出力を受け取り、その処理を開始する。例えば、インク収集オブジェクト６１１は、出力キューからデジタイザ入力を抽出し、それをインクとして記憶することができる。デジタイザ入力の動的描写は、リアルタイムスタイラス構成要素６０３が、デジタイザ入力（修正または未修正）を動的描写体６０８に通すときに行われる。デジタイザ入力（修正または未修正）の静的描写は、デジタイザ入力がインク収集オブジェクト６１１の内側のインク記憶機構に記憶されているときに行われる。
【０１１１】
動的描写６０８の後で、デジタイザ入力がインク収集オブジェクト６１１の内側に記憶される前にインキング表面が無効になる場合に１つの問題が発生しうる。得られるユーザ体験は、デジタイザ入力がインク収集オブジェクト６１１に到達するまで表示インクが消失することになる。ユーザは、インクを再度作成する必要があるものと考え、そうすることに時間を費やすため、結果的には重複したインクが記憶される。この視覚的問題は、インクがすぐにユーザに示されないこと、または遅れの後に示されることに起因する。
【０１１２】
このインク消失シナリオを回避するために、動的描写体６０８とインク収集オブジェクト６１１の間に通信プロトコルを確立することができる。動的描写体６０８は、（例えば、デジタイザ入力がインク記憶機構６１２に記憶されたときに）インク収集オブジェクト６１１によりデジタイザ入力を解除できることを指示されるまで、デジタイザ入力を視覚的記憶機構６０９に継続して蓄積することができる。
【０１１３】
ここでの目的に応じて、動的描写体６０８におけるデジタイザ入力の一時的キャッシュ６０９を現行ではキャッシュデータと呼ぶ。湿式インクは、システムが、デジタイザ入力をインク集合オブジェクト６１１に記憶する前にインクを描写するための機能である。
【０１１４】
図１１は、どのようにしてインク集合オブジェクトが、そのキャッシュドデータを解放するように動的描写体に警告するかを示す図である。動的描写体１２０１は、視覚的記憶機構１２０２を含む。インク収集オブジェクトは、インク記憶機構１２０４を含む。動的描写体１２０１は、スタイラスデータを視覚的記憶機構１２０２に記憶すると、オブジェクトを入力キュー１２０５に出力する。リアルタイムスタイラス（例えば７０２）は、ペンサービス７０１を検索する前に処理する次のデータのために入力キューを探査する。ここでの目的に応じて、入力キューに挿入されたオブジェクトを「ダイナミック描写体キャッシュドデータ」と呼ぶ。次いで、オブジェクトをリアルタイムスタイラスによって取り出し（追加的な処理を伴う、または伴わない）、それを出力キュー１２０６に出力する。その間、インク収集オブジェクト１２０３は、出力キュー１２０６に現れる順番に、受け取られたスタイラス入力パケットを処理する。インク収集オブジェクト１２０３は、動的描写体１２０１からのオブジェクト（ここでは「動的描写体キャッシュドデータオブジェクト」）、以下のことを実施する。
ａ．動的描写体によって描写された筆画と一致する適正な相関筆画を作成する。
ｂ．動的描写体筆画上に存在する描画属性を、描写される比較に適用する。
ｃ．動的描写体１２０１に解除通知を送る。この通知は、動的描写体に関する方法を実行し、パラメータを通すことを含むことができる。
【０１１５】
上記の工程Ｂは、全ての筆画が出力キューから外に移動される前に、描画属性改良の同期がとられたか否かに適正に基づいて、実施してもしなくてもよい。図８Ａは、描画属性の変化を先に受け取られたデータパケットと同期させるためのプロセスに関する。
【０１１６】
描画属性をデベロッパの要望に従ってシステムに設定してもよいし、他のアプローチでは、インク収集オブジェクト１２０３に送られるオブジェクトに設けてもよい。解除通知は、動的描写体１２０１によって提供されるインターフェースに対する呼出であってもよい。ここでは、通知は、リリースキャッシュドデータであってもよい。
【０１１７】
図１２は、湿式インクを処理する代替的なアプローチを示す図である。図１２は、スタイラスデータをリアルタイムスタイラス７０２に送るペンサービス入力７０１を含む。入力キュー７０３は、リアルタイムスタイラスイベントシンクを出力キュー７０９に配置した結果を伴う入力を処理し、待ち行列に入れることができる。図１２は、追加的なキュー１１０１を含む。このキューは、他のリアルタイムスタイラスイベントシンクＡ１１０３およびＢ１１０４から分離された動的描写体１１０２からの結果を処理する。ここで、このアプローチは、リアルタイムスタイラスイベントシンクＡ１１０３および／またはＢ１１０４がスタイラスから流れるインクの出現を遅らせるという、発生しうる問題に対処する。図１２のシステムは、他のイベントシンクＡ１１０３およびＢ１１０４を処理する前にスタイラスデータの動的描写を処理する。イベントシンクＡ１１０３およびＢ１１０４が、スタイラスデータがインク集合オブジェクト１１０５に送られる過程でその処理を遅らせたとしても、動的描写１１０２イベントシンクは、スタイラスデータが受け取られているときにその処理を続けることができる。スタイラスデータが動的描写体１１０２によって受け取られるや否や、出力が追加的なキュー１１０１に送られ、そこでリアルタイムイベントシンクＡ１１０３およびＢ１１０４によってアクセスされる。リアルタイムイベントシンクＡ１１０３およびＢ１１０４がどのようにアクセスされるか（一方が他方を呼び出すか、または両方が追加的なキュー１１０１によって呼び出される）についてのプロセスは、いずれかのアプローチを通じて実施されうることに留意されたい。
【０１１８】
図１３は、湿式インクがスタイラスから流れることをどのようにして保証するかに関するさらに他の態様を示す図である。ここで、個別的なスレッドに二次的なリアルタイムスタイラスオブジェクトが存在する。ペンサービス７０１は、スタイラスデータをリアルタイムスタイラス構成要素１３０１に出力する。入力キュー１３０２は、スタイラスデータを動的描写体１３０３に提供する。他の同期プラグインをリアルタイムスタイラス構成要素１３０１に対応づけても、対応づけなくてもよい。オプションの同期プラグインは、ジェスチャレコグナイザ１３０４および他の同期プラグイン１３０５を含む。これらの同期プラグインからの出力は、出力キュー１３０６に送られる。ここで、リアルタイムスタイラス構成要素１３０７は、リアルタイムスタイラス構成要素１３０１からの出力キュー１３０６に接続される。リアルタイムスタイラス構成要素１３０７、ならびにそれに対応づけられた同期プラグイン１３０９〜１３１１および非同期プラグイン１３１２〜１３１３は、リアルタイムスタイラス構成要素１３０１の観点から、非同期プラグインとして働く。データパケット（ただし、リアルタイムスタイラス構成要素１３０１の同期プラグインによって修正されている）は、リアルタイムスタイラス構成要素１３０７に対する同期プラグイン集合に送られる。例えば、リアルタイムスタイラス構成要素１３０７に対する同期プラグイン集合は、同期プラグインＡ１３０９、同期プラグイン構成要素Ｂ、１３１０、および（既に使用されていない場合は）ジェスチャレコグナイザ１３１３を含む。ジェスチャレコグナイザ１３１３は、任意のリアルタイムスタイラス構成要素に対する同期スレッドまたは非同期スレッドに対応づけることができるタイプのプラグインであることが理解される。ジェスチャレコグナイザ１３１３をリアルタイムスタイラス構成要素１３０７に対する同期プラグイン集合に対応づけることは、例示のみを目的としている。
【０１１９】
リアルタイムスタイラス構成要素１３０７の同期プラグイン集合の出力は、出力キュー１３１１に送られる。次いで、非同期プラグインオブジェクト１３１２および１３１３は、出力キュー１３１３におけるデータパケットを処理することができる。ここでも、インクは動的に描写され、アプリケーションが中断されてもペンからスムースに流れる。
【０１２０】
参照のため、様々なプラグイン構成要素を、プラグイン集合において順次送るのではなく、互いに連鎖させることができることを注記しておく。ここで、同期プラグイン構成要素Ａ１３０９をプラグイン構成要素Ｂ１３１０に連鎖した例を図１３に示す。勿論、本発明の態様に従ってプラグイン構成要素を扱うために、プラグイン構成要素を互いに連鎖させ、またはそれらを集合に収集するアプローチを互いに代替的または追加的に用いることができる。
【０１２１】
ジェスチャ認識
ジェスチャ認識は、ジェスチャが作られ、それが適切に処理されているかどうかを判断することを目的とする。例えば、ジェスチャレコグナイザ６１０は、デジタイザ入力を検出し、ジェスチャ認識結果を動的描写体６０８と同様の入力キューに挿入する役割を担う。図８Ｂは、同期および非同期プラグイン集合でジェスチャ認識をどのように実施できるかを説明する図である。その説明は、ジェスチャ認識オブジェクトの動作に対応している。
【０１２２】
ジェスチャレコグナイザ６１０は、アルゴリズムを使用することができる。ここで、ジェスチャレコグナイザは、交換アルゴリズムを使用して、多筆画ジェスチャを認識することができる。例えば、最大数の筆画に関する特性が設定されると、ジェスチャレコグナイザは、多くの筆画をふり返る。例えば、その特性が２に設定された場合は、ジェスチャレコグナイザは、最近の２つの筆画をふり返って、それらをジェスチャとして認識しようとする。これは、多数の認識呼出をもたらすことがある。しかし、このアプローチは、ジェスチャレコグナイザが、最後の筆画の後で処理を開始するのを待つための一定の遅れを排除する。
【０１２３】
図１４は、ジェスチャレコグナイザが、ジェスチャの部分を得るために、どのくらい後までふり返るかについての例を示す図である。結果を（ここでは、例えば「ジェスチャ認識データ」と名付けられる）オブジェクトに記憶することができる。その結果をリアルタイムスタイラス入力キューに挿入することができる。
【０１２４】
インク収集オブジェクト６１１は、ジェスチャオブジェクト（ここでは「ジェスチャ認識データ」）を受け取ると、インク記憶機構６１２からそのジェスチャに対する筆画を除去し、そのジェスチャに応じて適切な活動を実施する。
【０１２５】
上述したように、ジェスチャ認識を実施するために、システムは、タップジェスチャに対する「スタイラスアップデータ」オブジェクトの如き、ジェスチャを完成するデータに応じて「システムジェスチャデータ」オブジェクトを入力キューに追加することができる。
【０１２６】
ジェスチャレコグナイザを様々なインターフェースによるオブジェクトとして実装することができる。例えば、ジェスチャレコグナイザオブジェクトは、「Ｉスタイラス同期プラグイン」および「Ｉスタイラス非同期プラグイン」インターフェースを実装することができる。
【０１２７】
ジェスチャレコグナイザオブジェクトは、ジェスチャを認識すると、筆画に対する「スタイラスアップデータ」オブジェクトに応じて、カスタムスタイラスデータを入力キューに追加する。「カスタムスタイラスデータ」オブジェクトの「カスタムデータＩｄ」特性が「ジェスチャ認識データＧｕｉｄ」値に設定され、「カスタムスタイラスデータ」オブジェクトのデータ特性は、「ジェスチャ認識データ」オブジェクトを含む。
【０１２８】
特に指定がなければ、ジェスチャレコグナイザオブジェクトは、単一筆画ジェスチャを認識するにすぎない。ジェスチャレコグナイザオブジェクトは、多筆画ジェスチャを認識するように設定されうる（例えば図１４を参照）。多筆画ジェスチャについては、「カスタムスタイラスデータ」オブジェクトが、ジェスチャの最終筆画に対する「スタイラスアップデータ」オブジェクトに応じて、入力キューに追加される。多筆画ジェスチャを認識すると、重複する筆画の集合に対する通知を受け取ることができる。例えば、第１および第２の筆画をともに１つのジェスチャとして認識することができ、第２の筆画そのものをジェスチャとして認識することができ、第２および第３の筆画をともに他のジェスチャとして認識することができる。
【０１２９】
多筆画ジェスチャ認識のためにジェスチャレコグナイザオブジェクトを使用している場合は、リアルタイムスレッドでの遅れを低減しながらも、ジェスチャ認識がユーザインターフェースでの遅れの影響を受けるのを防ぐために、縦続リアルタイムスタイラスモデルを使用し、ジェスチャレコグナイザオブジェクトを二次的なリアルタイムスタイラスオブジェクトに接続することができる。
【０１３０】
さらに、筆跡、ジェスチャまたは他のオブジェクトを以下の３つの方法で認識するカスタムジェスチャレコグナイザプラグインを作成することができる。
ａ．筆画情報を既存のレコグナイザオブジェクトに送り、「カスタムスタイラスデータをキューへ追加」法を用いて、その結果をペンデータ流に追加する。
ｂ．カスタムプラグイン内で認識を行い、「カスタムスタイラスデータをキューへ追加」法を用いて、その結果をペンデータ流に追加する。
ｃ．標準的なジェスチャレコグナイザプラグインを、デージチェーン様式で、その標準的なプラグインを呼び出すカスタムプラグインに重ねる。このように、デベロッパは、インエアパケットをパケットに、「カーソルインレンジ」を「スタイラスダウン」に、「カーソルアウトオブレンジ」を「スタイラスアップ」に翻訳することによって、インエアジェスチャ認識を実施することができる。
【０１３１】
リアルタイムスタイラスオブジェクトは、システムジェスチャがシステムによって認識されているときに、それらに関するデータを受け取る。以下のテーブルは、「スタイラスジェスチャデータ」オブジェクトがペンデータ流のどこで発生するかを、他のペンデータに関連して説明するものである。以下のリストは、例示的なものであって、網羅的なものではない。本発明の範囲を逸脱することなく、他のジェスチャを本発明の態様と併用することができる。
【０１３２】
【表２】
2007509413.tif 000009
【０１３３】
同期および非同期プロセス
リアルタイムスタイラスインスタンスがインスタンス化されると、実行スレッドをインスタンス化することができる。実行スレッドを同期オブジェクトと非同期オブジェクトに分離することができる。同期オブジェクトは、一般には、ペンサービス構成要素から発するパケットと同期して動作する。非同期オブジェクトは、一般には、インク筆画、および／またはペンサービス構成要素から発する他のデータパケットと常に同期して実行されなくてもよいオブジェクトに分類される。これら２つのスレッドの分離は、動的描写体オブジェクトが、データパケットの受取りと同期してデータパケットを迅速に処理することを可能にし、まだ重要である間に、オリジナルデータパケットを受け取ってからわずかな遅れで正確に処理することができる他のプラグインオブジェクトを可能にする。
【０１３４】
同期プラグインの収集は、リアルタイムスタイラスインスタンスに対してインスタンス化されたこの新しいスレッド上で実行される。非同期プラグインの収集は、ユーザインターフェーススレッドで実行されうる。
【０１３５】
リアルタイムスタイラススレッドは、インキング（パケットキューイングおよび動的描写）が全体的に反応的でスムースになるように、計算的に軽い活動を目的とするものであってもよい。したがって、一般には、同期プラグインに対するスレッドには、計算的に軽い処理のみを実施すべきである。
【０１３６】
（通常は出力キューの出力に対応づけられる）ユーザインターフェーススレッドは、通常は、計算的に重い活動を必要とする非同期プラグインによって使用される。そのために、リアルタイムスタイラススレッドとユーザインターフェーススレッドの間にキューアーキテクチャを設けて、ユーザインターフェース（ＵＩ）スレッドにおける一時的な妨害に対して強くする。ＵＩスレッドは、パケット、およびリアルタイムスタイラススレッドに収集された他のデータの最終的な宛先であってもなくてもよい。代替的なアーキテクチャも計算的に重い活動をより良好に処理できることにより、ペンスレッドの妨害とユーザインターフェーススレッドの妨害との間でデベロッパに容易に妥協させないことを注記しておく。例えば、ここに記載されている縦続設計は、スレッドの分離によって異なる活動をより良好に処理することを可能にする。
【０１３７】
ジェスチャレコグナイザを同期スレッド上に実装してもよいし、ジェスチャレコグナイザが、見込まれる重いジェスチャ認識活動（例えば、筆画が比較されることになる多数の容認ジェスチャ）から弱まるものと判断または想定される場合は、非同期スレッド上に実装してもよい。ジェスチャレコグナイザオブジェクトは、同期プラグインインターフェースと非同期プラグインインターフェースの両方を有することで、いずれかまたは両方のスレッドからのオブジェクトを利用する柔軟性をデベロッパに与えることができる。この機能は、ジェスチャレコグナイザに限定されない。動的描写体または任意の他のプラグインも、場合によっては、いずれかまたは両方のキューにおける使用をサポートすることができる。デベロッパがプラグインの良好な位置をどこであると想定するかに応じて、プラグインがサポートする場合は、デベロッパがプラグインを同期集合または非同期集合またはその両方に配置することを可能にするために、全てのプラグインが、同期インターフェース、非同期インターフェース、またはその両方を有していてもいなくてもよい。
【０１３８】
リアルタイムスタイラスオブジェクトは、タブレットペンデータ流へのリアルタイムのアクセスを提供し、それ自体のスレッド上で動作することができる。同期プラグインは、一般には、リアルタイムスタイラスオブジェクトのスレッド上で動作してもしなくてもよく、非同期プラグインは、一般には、アプリケーションのユーザインターフェース（ＵＩ）スレッド上で動作してもしなくてもよい。動的描写の如き、データ流へのリアルタイムのアクセスを必要とし、計算的に軽い作業のためのプラグインを同期スレッド上に配置することによって、同期スレッドを非同期スレッドから分離することができる。インク収集の如き、データ流へのリアルタイムのアクセスを必要としない作業のためのプラグインを同期スレッド上に配置することができる。
【０１３９】
特定の作業は、計算的に重い作業であっても、多筆画ジェスチャ認識のように、タブレットペンデータ流へのリアルタイムアクセスに近づくことを必要とすることもある。これらのタスクを扱うためのプラグインを一方または他方のスレッド上で分類してもよいし、図１２および１３に示されているように、縦続リアルタイムスタイラスオブジェクトの一部とすることができる。
【０１４０】
縦続
リアルタイムスタイラスインスタンスは、多くの面で、拡張性および方策を包含するスレッドホストである。図１３は、どのようにして多数の同期スレッドがともに機能できるかの例を示す図である。ジェスチャレコグナイザを位置１３０４の同期スレッド上に配置してもよいし、位置１３１３の同期スレッド上に配置してもよい。
【０１４１】
デベロッパが多重糸状に接続したい多機能が存在していれば、デベロッパは、多数のリアルタイムスタイラスインスタンスを縦続し、それらの機能を同期プラグインとして挿入することが可能である。
【０１４２】
この特徴を示唆する具体的なシナリオは、「完全無中断」インキングを実現することである。ジェスチャレコグナイザは、デベロッパが多筆画ジェスチャに特に関心があるときに、認識結果を得るために時々著しい待ち時間をもたらすことがある。したがって、ジェスチャレコグナイザは、動的描写体を妨害する可能性を有するため、動的描写体が配置されるリアルタイムスタイラスの同期集合上に存在しないことがある。ジェスチャレコグナイザは、非同期プラグインを有するインク集合オブジェクトとともに配置されることもある。
【０１４３】
図１３に示されるシステムは、計算的に重い動作をジェスチャレコグナイザ、またはデータベースへのアクセス、ウェブサーバへの書込み、および画面の再生等を含む動作のための他のスレッドから分離したい場合に有益である。ジェスチャ認識が、「完全非遮断」体験の不可欠の部分である場合は、ジェスチャレコグナイザを独自のスレッド、すなわち第２のリアルタイムスタイラススレッド上で動作させることができる。
【０１４４】
リアルタイムスタイラスは、非同期インターフェースを実装して、単なる非同期プラグインインスタンスとして挙動することを可能にすることによって、この使用をサポートすることができる。どのようにしてリアルタイムスタイラスを他のリアルタイムスタイラスに追加できるかを以下に説明する。実施してもしなくてもよいいくつかのオプションを以下に提示する。
１．リアルタイムスタイラスを非同期プラグインの集合に追加するときは、システムは、他の非同期プラグインインターフェースを追加できるように関係を制限することができる。
２．様々な数のリアルタイムスタイラスオブジェクトを多次元に沿って縦続できる。例えば、多数の「リアルタイムスタイラス」オブジェクトを単一の「親」リアルタイムスタイラスに直接接続するか、あるいは多数の「リアルタイムスタイラス」を、各々が隣に縦続するように直列に接続するか。あるいは「リアルタイムスタイラス」オブジェクトを上記の構成の組合せで接続することが可能である。実行者は、簡潔性または信頼性に応じてこれらの組合せを限定するように選択することが可能である。
３．同一のリアルタイムスタイラスを多数の親リアルタイムスタイラスから多数の非同期プラグインの集合体に追加するときは、縦続リアルタイムスタイラスは、通常通り機能できる。あるいは、縦続（子）リアルタイムスタイラスインスタンスは、機能を停止し、「エラーデータ」オブジェクトをキューに挿入することができる。「エラーデータ」オブジェクトは、データにエラーがあるか、または前のプラグインが、データを処理している間にエラーに遭遇したことを下流のオブジェクトに示す指標でありうる。勿論、これは、エラーを処理する１つのアプローチにすぎない。他のアプローチを用いてもよい。
【０１４５】
一実装形態は、縦続のための集合点として非同期プラグイン集合を再使用できるのに対して、他の実装形態は、縦続ＲＴＳを接続するための専用接続点を有することによって、縦続の各ＲＴＳが、同期および非同期プラグインの独自の独立集合を有することを可能にできることを注記しておく。
【０１４６】
「エラーデータ」オブジェクトの存在は、縦続から独立していてもよいことが理解される。そのため、単一のリアルタイムスタイラス構成要素、ならびに縦続リアルタイムスタイラス構成要素に対して、「エラーデータ」オブジェクトが生成されうる。
【０１４７】
ダイナミックプラグイン集合の修正
性能便益のために、リアルタイムスタイラスを使用不可とし、次いで再度使用可能とすることなしに、リアルタイムスタイラス上の同期および非同期集合を修正できる。したがって、リアルタイムスタイラスの範囲で実施される「使用可能」または「使用不可」動作が存在する保証はない。
【０１４８】
プラグインが初期化＆浄化できるタイミングを確保するために、「人工的な」（使用可能＆使用不可に対する真のクライアントコード呼出に起因しないことを意味する）「リアルタイムスタイラスイネーブルド」＆「リアルタイムスタイラスディスエーブルド」呼出を、プラグイン集合に動的に挿入され、またはそこから除去されるプラグインに対して行うことができる。
【０１４９】
プラグインを追加または除去するときに起こりうる挙動のいくつかを以下に記載する。
・プラグインを使用可能リアルタイムスタイラスインスタンスに追加するときは、人工的な「リアルタイムスタイラスイネーブルド」呼出をこのプラグインに対して行うことができる。
・プラグインを使用不可リアルタイムスタイラスインスタンスに追加するときは、何も行われない。
・プラグインを使用可能リアルタイムスタイラスインスタンスから除去するときは、人工的な「リアルタイムスタイラスディスエーブルド」呼出をこのプラグインに対して行うことができる。
・プラグインを使用不可リアルタイムスタイラスインスタンスから除去するときは、何も行われない。
【０１５０】
これらの関係を維持する方法は、リアルタイムスタイラス使用可能呼出を受ける毎にカウンタをインクリメントすることを含んでも含まなくてもよい。このカウンタは、リアルタイムスタイラス使用不可呼出を受ける毎に、デクリメントされる。カウンタが1のときは、このプラグインは機能する。カウンタが１より大きくなると、このプラグインは例外を生じ、その機能を抑制する。カウンタが１に戻っても、このプラグインは使用不可状態を維持する。カウンタが再び０に戻らなければ、プラグインは、再度使用可能にならない。他のアプローチを用いることもできる。
【０１５１】
エラー伝搬
設計時
開発環境にある間は（例えばマイクロソフトコーポレーションによるＶｉｓｕａｌ  Ｓｔｕｄｉｏ．ＮＥＴ）、デベロッパは、トライキャッチでキャッチされるか否かにかかわらず生じる任意の例外で中断することがある。したがって、エラー報告は、「リアルタイムスタイラス」枠組の無効な構成を検出することを目的として、端的なものとなる。
【０１５２】
実行時
エラー報告／伝搬の問題は、リアルタイムスタイラスおよび同期プラグインが、ＵＩスレッド（アプリケーションスレッド）と異なるリアルタイムスタイラススレッド（インクスレッド）上で実行されているため、実行時エラーの場合は困難になる。同期プラグインが例外を生じるのであれば、それをリアルタイムスタイラスでキャッチすることが可能であるが、例外は、リアルタイムスタイラススレッド（インクスレッド）上に存在し、制御フローの起源はリアルタイムスタイラスであるため、リアルタイムスタイラス以外に行くところはない。エラーをユーザインターフェーススレッドに伝搬し、クライアントコードが優雅にエラーに対処することを可能にすることは困難であるといえる。以下に解決策を記載する。
【０１５３】
．ＮＥＴの標準的なエラー処理は、例外が生じたときにプラグインからイベントを発し、ＵＩスレッドにおけるデベロッパのエラー処理コードにこのイベントを検出させる。しかし、これは、プラグインがイベントを発すると、その例外を生じたデータがキューイングのためＵＩスレッドに到達していない可能性があるため、リアルタイムスタイラスに対しては機能しない。例外がエラー処理コードに対して生じた、コンテキスト（すなわち、不良データならびに先行および後続データ）を利用できない優雅なエラー処理を実施することは困難である。このアプローチは、エラーダイアログを立ち上げ、アプリケーションを終了するといった単純なエラー処理に対してのみ好適である。
【０１５４】
プラグインは、デベロッパの制御下にある唯一のコードブロックであるため、リアルタイムスタイラス枠組内でエラー処理を実施するための適正な場所は、プラグイン（同期または非同期）にある。
【０１５５】
ＵＩスレッド（アプリケーションスレッド）においてエラー処理を実施することが困難になる（例えば、キューはエラー処理に対してそのままの状態を維持する必要がある）ため、リアルタイムスタイラススレッド（インクスレッド）は、同時プラグインから生じた例外に際して直ちに機能を停止してはならない。また、１つのプラグインが無効な入力であると見なすものは、他のプラグインにとって完全に有効なことがある。
【０１５６】
図１５は、可能な解決策を示す図である。ここで、例外情報は、エラーデータとして、再びキューに通される。プラグインにおいてエラー処理を実施することができる。プラグインに対して生成されたデータ流、すなわちキューを通じて例外情報を処理することができる。
【０１５７】
図１５に示されるように、リアルタイムスタイラス６０３は、プラグイン６０６〜６０８からの全ての例外をキャッチし、エラーデータオブジェクトを作成する。以下に、エラーを識別するためのプロセスを示す。
ａ．例外が、同期または非同期プラグインに対するインターフェース上でエラー方法に生じた場合は、例外発生プラグインへの呼び戻しによる無限のループを回避するために、エラーデータオブジェクトを作成しない。
ｉ．代替的なアプローチは、例外を生じた実際のデータの前に、エラーデータオブジェクトをすぐに集合における残りのプラグインに通すことである。
ｂ．同期または非同期プラグイン法に対するインターフェース上で他の方法に例外が生じた場合は、まず例外発生プラグインにエラーデータオブジェクトをすぐに送り、次いで、例外を生じた実際のデータの前に、集合における残りのプラグインに通すことができる。
ｃ．例外が同期プラグインに生じた場合は、エラーデータを最終的に出力キューに入れ、または非同期プラグインに送る。
ｄ．エラーデータが集合を通った後に、例外を生じたデータが、集合における残りのプラグインを通る。
【０１５８】
専用の方法（例えば「Ｉスタイラス同期プラグイン．エラー」法または「Ｉスタイラス非同期プラグイン．エラー」法）を通じて、エラーデータオブジェクトをプラグイン集合に通すことができる。
【０１５９】
より具体的には、プラグインが例外を投じると、データの正常な流れが妨害される。リアルタイムスタイラスオブジェクトは、エラーデータオブジェクトを生成し、例外を投じたプラグインの「Ｉスタイラス同期プラグイン．エラー」または「Ｉスタイラス非同期プラグイン．エラー」法、ならびにその集合における残りのプラグインの「Ｉスタイラス同期プラグイン．エラー」または「Ｉスタイラス非同期プラグイン．エラー」法を呼び出す。例外を投じたプラグインが同期プラグインである場合は、エラーデータオブジェクトを出力キューに追加する。次いで、リアルタイムスタイラスオブジェクトは、オリジナルデータの処理を再開する。
【０１６０】
プラグインがそのエラー法から例外を投じる場合は、リアルタイムスタイラスオブジェクトは、その例外をキャッチするが、新たなエラーデータオブジェクトを生成しない。あるいは、実装形態またはデベロッパの要望に応じて、新たなエラーデータオブジェクトを生成することができる。この代替的なアプローチにおいて、リアルタイムスタイラスは、次いで、反復数を制限することによって、任意の生成ループを低減することもできるし、またはそのリスクを全く無視することもできる。
【０１６１】
同期プラグインによって追加されたカスタムスタイラスデータに関係して、エラーデータは、エラーデータを作成した例外の前に「即時出力」キューに追加される任意のカスタムスタイラスデータの後で、同期プラグイン集合における後続のプラグインによって「即時出力」キューに追加される任意のカスタムスタイラスデータの前に、出力キューに追加される。同期プラグインのいずれかが、エラーデータに対応して、カスタムスタイラスデータを「即時出力」キューに追加する場合は、データは、エラーデータの直前に追加される。同期プラグインのいずれかが、エラーデータに対応して、カスタムスタイラスデータを出力キューに追加する場合は、データは、エラーデータの直後に追加される。
【０１６２】
リアルタイムスタイラスオブジェクトは、そこから例外が投じられるスレッド上で、「Ｉスタイラス同期プラグイン．エラー」法を呼び出す。
【０１６３】
管理／非管理実例
図１６は、本発明の態様を挿入する様々なアプローチを示す図である。該システムは、Ｃ＃管理オブジェクトの集合によって包まれたＣＯＭオブジェクトを含むことができる。あるいは、Ｊａｖａ（登録商標）、Ｃ＋＋等を含む任意のオブジェクト指向言語を使用してもよい。
【０１６４】
図１６は、管理または非管理空間に存在するリアルタイムスタイラス構成要素を示す図である。図１６は、動的描写体、非同期プラグインＹ、非同期プラグインおよびジェスチャレコグナイザを含む。
【０１６５】
ペンサービス１６０１は、非管理コード領域にその入力キュー１６０３および出力キュー１６０４を有するリアルタイムスタイラス構成要素１６０２にスタイラスデータを送る。スタイラスデータは。管理コード領域におけるリアルタイムスタイラス構成要素１６０５に送られる。
【０１６６】
動的描写体は、リアルタイムスタイラス構成要素に接続された最初の同期プラグインである。非管理空間において、そのデータキャッシュ１６１６を有する動的描写体１６０８は、リアルタイムスタイラス構成要素１６０２に接続される。同様に、管理空間において、そのデータキャッシュ１６１７を有する動的描写体１６１５は、リアルタイムスタイラス構成要素１６０５に対する同期プラグイン集合の一部である。同期プラグイン集合における次の同期プラグインは、同期プラグイン１６０７である。同期プラグイン１６０７は、リアルタイムスタイラス構成要素１６０５に対する同期プラグイン集合における動的描写体の後に続く。同期プラグインＹ１６０７は、管理空間に存在するにすぎないため、同期プラグインラッパー１６１８は、非管理「リアルタイムスタイラス」構成要素１６０２が、管理／非管理境界を越えて同期プラグイン１６０７にアクセスすることを可能にする。
【０１６７】
図１６は、非同期プラグインの集合をも示す図である。非同期プラグインは、同期プラグイン１６１２およびジェスチャレコグナイザ１６０９を含む。非同期プラグイン１６１２は、管理空間における「リアルタイムスタイラス」構成要素１６０５に接続された非同期プラグイン集合における最初の非同期プラグインである。非同期プラグイン１６１２は管理空間に存在するため、非同期プラグインラッパー１６１９を使用して、非管理「リアルタイムスタイラス」構成要素１６０２からそこへのアクセスを可能にすることができる。ジェスチャレコグナイザは、管理空間と非管理空間の両方に存在する。そのデータキャッシュ１６１０を有する管理ジェスチャレコグナイザ１６０９は、非同期プラグイン１６１２の後にアクセスされる次のプラグインである。ジェスチャレコグナイザ１６０９は、（そのデータキャッシュ１６１４を有する）ジェスチャレコグナイザ１６１３の非管理バージョンと情報を交換することができる。
【０１６８】
図１６の管理側と非管理側の間を横切るデータを、非管理空間で使用する構造と、管理空間で使用する空間との間で変換または「配列」することが必要とされることがある。マイクロソフトコーポレーションによる．ＮＥＴフレームワークは、この配列の多くを自動的に行うインターオペラビリティ層を提供する。この追加的なデータ処理は、黙視的な性能ペナルティを招くため、図１６に示される設計は、インターオペラビリティ層の交差を最小限にするように調整される。
【０１６９】
ＲＴＳ１６０５に対する管理ラッパーと非管理ＲＴＳ１６０２との関係は、ネイティブ（非管理ＲＴＳ１６０２）にとって、管理ＲＴＳ１６０５が他のＲＴＳイベントシンクのように見えることである。そのコンストラクタにおける動的描写体１６１５でインスタンス化されると、ＲＴＳ１６０５は、対応する非管理動的描写体１６０８にアクセスし、その後の同期プラグイン集合にフックする。
【０１７０】
管理ジェスチャレコグナイザオブジェクト１６０９は、非同期プラグインの完全な実装形態でありうる。それは、パケットデータを管理側に蓄積し、それをインターオペラビリティ層に沿って配列し、非管理コード実装１６１３に送り込む。戻りコードは、パケットがジェスチャに対応しているか否かについてのものである。
【０１７１】
図１６には、管理および非管理動的描写体オブジェクト１６１５および１６０８も示されている。管理動的描写体オブジェクトは、非管理動的描写体１６０８の特性に対する薄いラッパーであってもよい。管理動的描写体１６１５はオプションである。ここで動的描写体１６１５がインスタンス化されない場合は、それを他の同期プラグインの１つとしてインスタンス化することができる。
【０１７２】
図１６のシステムを作成するためのプロセスを以下に示す。
ａ．第１に、デベロッパは、管理非同期プラグイン１６１２および管理動的描写体１６１５をインスタンス化する。内的には、動的描写体１６１５は、特性設定を下に送るために、非管理動的描写体をインスタンス化する。
ｂ．第２に、デベロッパは、動的描写体１６１５に特性を設定する（描画属性等）。
ｃ．第３に、デベロッパは、リアルタイムスタイラス１６０２をインスタンス化して、リアルタイムスタイラスコンストラクタにおける動的描写体１６１５を処理する。いくつかの事柄が発生しうる。
ｉ．管理リアルタイムスタイラス１６０５は、（公用密封アクセス機構を介して）非管理動的描写体１６０８のアドレスを問い合わせる。
ｉｉ．管理リアルタイムスタイラスは、それ自体をペンサービス１６０１にフックするネイティブリアルタイムスタイラス１６０２をインスタンス化する。
ｉｉｉ．管理リアルタイムスタイラス１６０５は、リアルタイムスタイラスイベントシンクとして、それ自体をネイティブリアルタイムスタイラス１６０２にフックする。
ｉｖ．管理リアルタイムスタイラス１６０５は、ネイティブ動的描写体１６０８をその同期出力にフックする。
ｖ．管理リアルタイムスタイラス１６０５は、それ自体をネイティブリアルタイムスタイラス１６０２の同期プラグインスレッドにフックする。
ｄ．第４に、デベロッパは、場合によっては管理ジェスチャレコグナイザ１６０９を含む１つまたは複数の管理同期および／または非同期プラグインオブジェクトをインスタンス化する。
ｅ．第５に、デベロッパは、管理プラグインオブジェクトを集めて、様々なプラグイン集合にする（これは、プラグインにアクセスする順番を「リアルタイムスタイラス」構成要素に通知することによって実施できる。あるいは、プラグインを互いに連鎖させるために、特性を設定し、ここでは第１のプラグインを参照することができる）。
ｆ．第６に、デベロッパは、管理非同期プラグインオブジェクト１６１２を管理リアルタイムスタイラス１６０５の「インク集合オブジェクト」特性に対応づける（したがって、非同期プラグインオブジェクト１６１２を非同期プラグイン集合にフックする）。
ｇ．第７に、デベロッパは、「ＲＴＳ．イネーブルド」を「真」に設定する。これにより、管理リアルタイムスタイラス１６０５に、ネイティブリアルタイムスタイラス１６０２上で「Ｉリアルタイムスタイラス−＞イネーブルド」を「真」に設定させることもできる。
ｈ．第８に、イベントが、リアルタイムスタイラス１６０２を流れ始める。
【０１７３】
工程（ｃ）を代替的な構成で実現することができる。例えば、ＡＰＩは、ＲＴＳコンストラクタ上にプラグイン特有のアコモデーションを有することができない。その代わりに、ＲＴＳの様々なオーバーロードが、ＲＴＳ自体の使用法（例えば、ウィンドウまたは制御機構に接続する、１つまたは多くのデジタイザに対応づける、マウスでペンの挙動を表現する等）を決定づける。インターオペラビリティ境界を複数回横切るデータの性能により「動的描写体」パラメータを使用することができる。その結果、「動的描写体」を構築的に使用して、プラグイン集合またはチェーンにおける最初または最後の同期プラグインとすることができる。
【０１７４】
図１６は、インターオペラビリティ交差を最小限にし、「動的描写体」がプラグインの順序リストのいずれかに存在することを可能にする構造のアプローチを示す図である。
【０１７５】
図１６のシステムを使用するためのプロセスを以下に記載する。
ａ．ペンサービス１６０１は、ＲＴＳ１６０２上に機能を呼びだし、「リアルタイムスタイラス」構成要素１６０２に対応づけられた同期プラグイン集合に蓄積されるデータを送る。場合によっては、入力キュー１６０３からのデータをプラグイン集合に送り込むこともできる。
【０１７６】
ｂ．新たなデータが入力キュー１６０３に出現したとき（または、それがペンサービス１６０１に接触させるインターフェース状に適切な方法が呼び出されたとき）に、ネイティブＲＴＳ１６０２は以下のことを実施する。
ｉ．パケットをデジタイザ空間からＨＩＭＥＴＲＩＣ（「インク空間」）に変換する。
ｉｉ．逆変換（ＨＩＭＥＴＲＩＣ→デジタイザ）をパケットデータに埋め込む。
ｉｉｉ．データに対する適切な機能を同期プラグイン集合インターフェース（この場合は管理ＲＴＳ）上に呼び出すことによって、変換されたパケットデータをプラグイン集合の第１の同期プラグインに送り込む。
【０１７７】
ｃ．管理ＲＴＳ１６０５は以下のことを実施する。
ｉ．適切な管理データ構造を作成して、管理に適した様式でデータを保持する。
ｉｉ．収集された管理同期プラグイン上に適切な機能を呼び出す。
ｉｉｉ．各プラグインがデータを処理し、次のプラグインを呼び出すことができるように「リアルタイムスタイラス」構成要素１６０５を戻すことを確認する。
ｉｖ．ジェスチャレコグナイザ１６０９上に対応する機能を呼び出すまで繰り返す（ジェスチャレコグナイザ１６０９が使用される場合）。
【０１７８】
ｄ．動的描写体１６１５を「リアルタイムスタイラス」１６０５によって呼び出すことができる。動的描写体１６１５は、新たなパケットを描写するのを完了すると、戻り、非管理ＲＴＳ１６０２は、パケットデータが修正されたかどうかを検出し、適切なデータをキューに入れる。追加すべき何らかの「非即時的」ユーザデータ項目が存在した場合は、ここでそれらを追加する。
【０１７９】
ｅ．次いで、ネイティブＲＴＳ１６０２は、接続されたウィンドウに私的なメッセージを貼りつける。
【０１８０】
ｆ．次いで、ネイティブＲＴＳ１６０２は、入力キュー１６０３を調べて、何らかのリアルタイムデータが追加されたかどうかを確認し、追加された場合は、同期プラグイン集合を再び呼び出し、そのデータを送る。データが追加されなかった場合は、ネイティブＲＴＳ１６０２は戻り、ペンサービス１６０１が、前進し、新たなデジタイザデータとともに再びＲＴＳ１６０２を呼び出すことを可能にする。
【０１８１】
ｇ．私的メッセージは、データをキュー１６０３から検索し、適切な機能を接続された同期プラグインインターフェース上に呼び出すＲＴＳ１６０２上のサブクラスプロクによって確認される。
【０１８２】
ｈ．この場合、管理ＲＴＳ１６０５は、それ自体を接続し、呼び出される。次いで、管理ＲＴＳ１６０５は、非同期プラグイン１６１２上に対応する機能を呼び出す。これを非同期プラグインラッパー１６１９に通すことができる。
【０１８３】
ｉ．次いで、管理非同期プラグイン１６１２は、データを非同期的に処理し、適宜描写または蓄積する。
【０１８４】
ｊ．ジェスチャレコグナイザ１６０９を「リアルタイムスタイラス」構成要素からの非同期プラグイン集合の一部として呼び出すことができる。ジェスチャレコグナイザ１６０９は、「カーソルアップ」に遭遇し、その時点で蓄積パケットが、認識のためにインターオペラビリティ境界を通ってネイティブジェスチャレコグナイザ１６１３に送り込まれるまで、内部にパケットを蓄積する。
ｉ．この動作は、どのジェスチャが認識されたかに関する情報、およびどれだけの筆画が可能なジェスチャの各々に対応するかに関する情報を戻す。
ｉｉ．次いで、ジェスチャレコグナイザ１６０９は、（「即時」が偽に設定された）管理ＲＴＳ１６０５上で「ユーザデータをキューに追加」法を用いて、ジェスチャ認識の結果を非同期的消費のためにキュー１６０４に入れる（これにより、新たなジェスチャデータが、すぐにインターオペラビリティ境界（またはインターオプ）を横切り、ネイティブプラグイン集合が完成するまで他のキューにとどまる）。
ｉｉｉ．また、従来的な管理イベントをあらゆる聞き手に発して、今ジェスチャが行われたことをリアルタイムで世界に通知する。
ｉｖ．次いで、ジェスチャレコグナイザ１６０９によって現行のデータをプラグイン集合におけるあらゆる追加的プラグインに対する「リアルタイムスタイラス」構成要素１６０５に戻す。
【０１８５】
データ集合および流れ
イベントシンクハンドラ、およびそれらに伴う情報を以下に列記する。
・ソースＩリアルタイムペン
このバックポインタは、イベントシンク実装に原始「リアルタイムスタイラス」へのバックリファレンスを与える。このポインタは、２つのこと、すなわち（ａ）スタイラスインスタンスに関するコンテキスト情報にアクセスすること（例えば、動的描写体１６１５は、デジタイザ座標と画素の間で単位変換ができることが必要である）、および（ｂ）多数のＲＴＳイベントチェーンの間で共用することを可能にする。
・タブレットコンテキストＩＤ
リアルタイムデータの消費者が、効率的にデータを蓄積し、タブレットＩＤをデータ集合における指標として用いることを可能にする。
・パケットデスクリプション
パケット呼出におけるデータのレイアウトを描く。異なるデジタイザが、（例えば）ｘ、ｙ、圧力、角度を含む異なる量の情報をサポートする。「パケットデスクリプション」は、パケットの受取側に、最終的に到達する整数の平坦なアレイにどのようにしてデータを配置するかを示す。
・カーソルＩＤ
リアルタイムデータの消費者が、効率的にデータを蓄積し、カーソルＩＤをデータ集合における指標として用いることを可能にする。
・スタイラスインフォ
タブレットコンテキストＩＤと、カーソルＩＤと、反転状態（これは、関連性、およびカーソルがペンの「消しゴム」端に対応するか、「執筆」端に対応するかを示す３値状態である）と、ボタン状態（３２までのボタンの各々が押されるかどうか）と、必要に応じて他の関連情報とを含む便利な情報を集約した単純な構造。
・プロパティカウントパーパケット
デベロッパが、ＡＰＩ呼出を用いずにパケットデータのレイアウトを推定することを可能にする妥協パラメータ。（Ｘ、Ｙ）は、第１になり、その順番になるように保証され、カウントは、ｘｙデータのみに関心を持つデベロッパが、あらゆるｎ番目の要素を飛ばしながらリストを閲覧することを可能にする。
・カウントオブパケット
効率のために「結束された」パケットの数（ペンサービスおよび／またはデジタイザデバイスドライバは、いつ、そしてどれだけのパケットがこのようにして束ねられるかを判断する）。
・パケットデータ
これは、パケットデータの読取り専用コピーである。
・カウントオブパケットレフ
プラグインデベロッパが割り当てることができる修正パケットデータ集合におけるパケットの数。
・パケットデータレフ
これは、リアルタイムデータ操作を含むシナリオを達成するために、パケットデータを修正する機能をプラグインオブジェクトのデベロッパに与えるパケットデータのリファレンスである。
【０１８６】
一実装形態において、プラグイン集合実装が、プラグイン集合に入る前にパケットデータが修正されたかどうかを「把握」することを可能にすることができない。あるいは、パケットデータが修正されたかどうかをプラグイン集合に知らせることができる。例えば、データ上のフラグ、またはデータから独立したフラグを設定することができる。プラグイン集合が、パケットデータが修正されたかどうかを把握することを可能にする１つの利点は、警告のない修正パケットデータを無視する機能をプラグイン集合に提供することである。他方で、このアプローチは、デベロッパが誤りを犯すさらなるオプションを提供する。より重要なことは、プラグインはデータの起源に対して認知不能ではないため、設計パターンの簡潔性とオブジェクト指向の性質を混同させる。プラグインがオリジナルデータと修正データの両方を調べることができれば、前のプラグインに属する動作を恐らく実施している。
【０１８７】
性能／効率のために、デベロッパがデータを修正することを意図しなければ、メモリを割り当てずにすむように、２つのデータを内部に維持することができる。
【０１８８】
データ同期
図１７Ａに示すように、同期を確保するために、どのようにしてデータをキューに追加できるかを以下に説明する。
【０１８９】
ＩＣＯは、ＵＩスレッド上に到来する他の要求と、インキングスレッドを通じて到来する保留データとを同期させるために、シグナリング機構として入力および出力キューを用いることができる。
【０１９０】
図１７Ａは、システムが情報を処理しながら行われるモード切換えを示す図である。システムは、１７０１における（において「実施」された）第１の処理の結果を示す図である。時刻１７０２において、新たなスタイラスデータを受け取り、時刻１７０２でプラグイン１によって、時刻１７０４でプラグイン２によってその処理を開始し、時刻１７０５で完了する。時刻１７０３においてモード切換えが行われる。例えば、アプリケーションのユーザが、「編集モード」を「インク」から「消しゴム」に変更し、アプリケーションがビジーである場合は、ユーザモードが変化してからある時間にわたって、キューから流れるパケットデータがまだ「インク」であるという合理的な可能性がある。
【０１９１】
しかし、このときにモード切替えイベントをキュー１７０６に追加する代わりに、スタイラスデータに対して、時刻１７０５で現行の処理が完了された後まで遅らせる。これを２通りの方法で行うことができる。第１に、時刻１７０２でプラグインにおいて開始するスタイラスデータが完成されるまでモード切換え動作イベントを遅らせることができる。第２に、システムは、時刻１７０５におけるプラグイン２からの結果をキュー１７０６におけるその前に配置するための十分な余地を残しながら、モード切換えイベントをキュー１７０６に入力することができる。そこで、この場合、ＩＣＯは、ユーザがモードを変えた瞬間に、「マーカ」を出力キューに挿入することができる。ある時間が経過した後に、マーカは、（リアルタイムスタイラスプラグイン集合インターフェース上の「カスタムデータ追加」法を介して）ＩＣＯに戻され、その時点で、ＩＣＯが、入力パケットデータを「消しゴム」要求と解釈しはじめることが可能になる。
【０１９２】
図１７Ｂは、図１７Ａの一般的なバージョンを示す図である。第１のスレッドに対するプロセスの終了がイベント１７０７によって示されている。それはキュー１７１２に配置される。次の時刻１７０８において、第１のスレッドに対する他のプロセスが開始する。時刻１７０９において、第２のスレッド上にイベントが発生する。第１のスレッドに対するプロセスが点１７０８で開始したため、プロセスは、時刻１７０９でのイベントの前に扱われるものと期待される。しかし、第１のスレッドに対するプロセスは、時刻１７１０で続行し、次いで時刻１７１１で終了するため、そのプロセスの開始時刻１７０８に対する時刻１７０９におけるイベントの挿入のタイミングは、時刻１７１１でプロセスが実施される前に時刻１７０９におけるイベントがキューに配置されることになるという点において、好ましくない。ここで、図１７Ｂは、キュー１７１２における少なくとも１つの箇所を飛ばすことにより、点１７０７で実施されたプロセスから生成されたイベントからキュー１７１２の下流に距離をおいて挿入されている時刻１７１１におけるイベントを示す図である。キュー１７１２においてある場所を利用可能に維持することにより、プロセス１７０８、１７１０、１７１１の完成をキュー１７１２における１７０９のイベントの前方の箇所に正しく配置することを可能にして、キュー１７１２におけるパケット／イベントの読取りを期待される順序で行うことを可能にする。ここで、その順序を、それらのプロセスが開始された、またはイベントが生じた順序でパケット／イベントが生じるものとして要約することができる。この順序は、点１７１３（プロセスの開始）、１７１４（プロセス続行）および１７１５（プロセス完了）によって示される次のプロセスについても継続する。
【０１９３】
図１８および１９は、本発明の態様による、ペンデータを処理するための様々なシステムを示す図である。
【０１９４】
図１８を参照すると、ペンデバイス１８０１は、データをペンサービス１８０３に送る。マウスは、情報を生成し、それをユーザ３２（ユーザ３２．ｄｌｌとしても知られる）１８０４に送ることもできる。アルペンデータ（例えばボタンをクリックする）は、マウスイベントを表現することができ、ユーザ３２  １８０４に送られて、マウスイベントとして処理される。同様に、いくつかのマウスイベントは、インクを表現することができ、１８１４において送られて、ペン入力として処理される。次いで、マウスイベントは、ウィンドウメッセージポンプ１８０５、次いでＨＷＮＤ１８０６、ＨＷＮＤマウスデバイス１８１２、入力キュー１８１０、次いで入力マネージャ１８１１に送られる。ペン入力（例えば、ペンが潜在的なインキングサービスの範囲に移動するとき）、またはスタイラスイベントは、ペン入力マネージャ１８０７／１８０８（非管理および管理リアルタイムスタイラスサービス）に送られる。ペン入力マネージャ１８０７／１８０８は、ペンサービス１８０３とアプリケーションの間の全ての通信を処理する。この処理は、通常の優先スレッド、または高優先ステータススレッド上で実施されうる。ペンサービス１８０３は、様々なイベントを生成することができる。ペンイベントをペン入力マネージャ１８０７／１８０８に送って、標準メッセージ通信システム１８０４〜１８０６および１８１２をバイパスすることができる。
【０１９５】
ペンサービス１８０３は、以下のイベント、すなわちスタイラスインレンジ（スタイラスがデジタイザの範囲に入った場合）、スタイラスアウトオブレンジ（スタイラスが、デジタイザによって検出されなくなる場合）、スタイラスパケット（デジタイザからの生の点データ−ペンはデジタイザに接触してもしなくてもよい）、スタイラスインエアポイント、タブレット追加／除去、およびシステムジェスチャイベント（例えば、「押下げおよび保持」ならびにホーバイベント）を生成することができる。
【０１９６】
スタイラスは、生のプリビュイベントを生成することができる。これらの生のプリビュイベントをリアルタイムインキングサービス１９０１によって処理することができる（図１９より）。他のサービスもこれらのイベントを検索することができる。リアルタイムインキングサービス１９０１は、生のプリビュイベントに対して以下の工程を含むいくつかの工程を実施することができる。
ａ．イベントがダウン「パケット」イベントであるかどうかを調べる。そうでない場合は、処理を停止し、ナルに戻る。
ｂ．イベントが、そのキャッシュドレイアウト情報に基づいて、インキング要素上に存在したかどうかを調べる。そうでない場合は、処理を停止し、ナルに戻る。
ｃ．このパケットは、インキング部の内部の「ダウン」イベントに対するものであるため、増進的に筆画を描く。
ｄ．最後に、その要素上に筆画が描かれたペン入力マネージャ１８０７／１８０８に戻る。
【０１９７】
生のプリビュイベントからの戻り値は、そのイベントを「目標」とするペン入力マネージャ１８０７／１８０８によって使用される。ナルでない目標が戻されると、イベントをその特定の目標とともに入力キューに配置することができる。これにより、要素に描かれたインクが、入力キューにおける他のイベントの結果として何らかの他の要素に送られるのではなく、実際にその要素に送られることになる。
【０１９８】
ここで、スタイラスイベントは、入力イベントになる準備が整っている。しかし、たいていの場合、各スタイラスイベントは、メッセージシステムを流れる対応するマウスメッセージをも有する。ペン入力マネージャ１８０７／１８０８がスタイラスイベントを入力イベントに変換する前に、まずイベントを対応するマウスメッセージと突き合わせる必要がある。必要な場合は、ペン入力マネージャ１８０７／１８０８は、マウスメッセージが到着するのを待つことが可能である。
【０１９９】
ペン入力マネージャ１８０７／１８０８が、マウスメッセージとスタイラスイベントの両方を有すると、それら２つを組み合わせて、適切な入力レポートとし、そのレポートを入力キュー１８１０に配置する。
【０２００】
図２０は、本発明の態様によるキューを示す図である。図２０は、キュー２００１を含む。簡単にするために、キューを円として示す。線形キュー、および当該技術分野で知られている他の様々な形を含む代替的なキューの形を用いてもよい。キュー２００１は、開始ポインタ２００２および終了ポインタ２００８を含む。キュー２００１は、情報を有するいくつかの場所（２００３、２００４および２００９）をも含む。場所２００５および２００７は空である。場所２００６はロックされている。場所２００６は、異なる供給源からのイベントおよびデータを同期するために場所ホルダとしてロックされていてもよい（その例が図１７Ａおよび１７Ｂに示されている）。また、その内部に含まれるデータがプラグイン集合またはチェーンに通されているときに、場所２００６をロックしてもよい。場所２０１０および２０１１も空である。空の空間の数を必要に応じて増減することができる。例えば、キューが一杯になった場合に、追加的なデータを記憶するために追加的な空間を追加することができる。あるいは、キューに保持されうるデータが破棄されるように、キューのサイズを固定することもできる。これは、システムが他のプロセスに高度に関わっており、キューに対する新たなデータの作成を遅くすることが有益であるということを示す指標をユーザに提示するという点において、有用な利点を提供することができる。情報の破棄は、システムがロックアップされており、システムが再び処理を続けるまで追加的なデータを入力しない方がよいということをユーザに示すこともできる。
【０２０１】
アプリケーションプログラミングインターフェース
本発明の態様によって使用できる様々なアプリケーションプログラミングインターフェースの概要を以下に提示する。
【０２０２】
リアルタイムスタイラスは、リアルタイムスタイラス入力クラスの一部であってもよい。インスタンス化されたリアルタイムスタイラスオブジェクトをウィンドウハンドルまたはコントロールに接続することができる。リアルタイムスタイラスは、既定コンストラクタを含むことができる。既定コンストラクタを使用すると、他のリアルタイムスタイラスオブジェクトからの入力のみを受け付けることが可能になる。
【０２０３】
プラグインが、ペンデータ流と相互作用することを可能にするために、リアルタイムスタイラスオブジェクトは、２つのプラグイン集合を維持することができる。それらの集合をリアルタイムスタイラスオブジェクトの特性に規定することができる（例えば、同期プラグインに対する「同期プラグイン集合」および非同期プラグインに対する「非同期プラグイン集合」）。追加法（例えば、プラグインを同期集合に追加するための「スタイラス同期プラグイン集合追加」、またはプラグインを非同期集合に追加するための「スタイラス非同期プラグイン集合追加」を適切な特性上に呼び出すことによって、プラグインをいずれかの集合に追加することができる。
【０２０４】
同期プラグインは、あるインターフェース（例えば「Ｉスタイラス同期プラグイン」）を実装することができ、非同期プラグインは、異なるインターフェース（例えば、「Ｉスタイラス非同期プラグイン」）を実装することができる。各プラグインは、そのデータ対象（例えば、「Ｉスタイラス同期プラグインデータ対象」または「Ｉスタイラス非同期プラグインデータ対象」を規定する特性を有することができる。リアルタイムスタイラスオブジェクトは、プラグインが利用した方法に対する通知方法を呼び出すことができる。
【０２０５】
リアルタイムスタイラスオブジェクトは、「Ｉスタイラス非同期プラグイン」インターフェースを実装する。他のリアルタイムスタイラスから入力を受け付けるリアルタイムスタイラスをインスタンス化することは、既定コンストラクタを使用することを含むことができる。さらなる代替的な機構を使用して、子または縦続ＲＴＳを親に対応づけることができる。他の機構は、親ＲＴＳに対応づけられた専用ポインタを使用して、子ＲＴＳへのリファレンスを保持することができる。ここで、親ＲＴＳは、非同期プラグインインターフェースを実装する必要はない。
【０２０６】
リアルタイムスタイラスオブジェクトは、ペンデータを転送する２つまたはそれ以上の内部キューを有することができる。これらは、入力キューおよび出力キューを含む。これらの２つのキューの間に他のキューを追加することができる。また、データが、ペンデータ流から同期プラグインを入力することだけを目的としているときは、入力キューを取り除いてもよい。これらのキューがペンデータを処理するのに用いるプロセスは、少なくとも図６、８、１１および１３に関連して上述されている。
【０２０７】
インクを収集する形式上でリアルタイムスタイラスオブジェクトを使用するための例示的なシナリオを以下に記載する。
ａ．「Ｉスタイラス非同期プラグイン」インターフェースを実装する形式を作成する。
ｂ．その形式上にコントロールに接続されたリアルタイムスタイラスオブジェクトを作成する。
ｃ．その形式が関与するデータに関する形式の特性（例えばデータ対象特性）において、表面に接触するスタイラスに関する通知（スタイラスダウンイベント）、データパケット、およびスタイラスアップ（例えばスタイラスアップイベント）通知に関与するようにその形式を設定する。
ｄ．その形式の「Ｉスタイラス非同期プラグインス．タイラスダウン」、「Ｉスタイラス非同期プラグイン．パケット」および「Ｉスタイラス非同期プラグイン．スタイラスアップ」法において、その形式のリアルタイムスタイラスオブジェクトから送られるスタイラスダウン、パケットおよびスタイラスアップ通知を処理するためのコードを追加する。
【０２０８】
各リアルタイムスタイラスオブジェクトは、それが関与できるオブジェクトに対する一意的識別子のリストを維持する。リアルタイムスタイラスオブジェクトは、一意的識別子とタブレットオブジェクトとの間の翻訳を行うためのいくつかの方法を有することができる。これらは、「タブレットからタブレットコンテキストＩＤを取得」および「タブレットコンテキストＩＤからタブレットを取得」法を含むことができる。
【０２０９】
ペンデータは、それ自体の名前空間（例えば、「スタイラス入力．プラグインデータ」名前空間）を占有することができる。
【０２１０】
タブレット特性記述オブジェクト（例えば「タブレット特性記述」オブジェクト）は、特性包括的一意的識別子（ＧＵＩＤ）、および特定のタブレットについての範囲、解像度、および特性の単位を示すタブレット特性計量（例えば「タブレット特性計量」）を含むことができる。
【０２１１】
一意的タブレット識別子を取得し、タブレットによってサポートされる特性記述オブジェクトの集合を戻す方法が存在しうる。例えば、リアルタイムスタイラスオブジェクトの「タブレット特性記述集合を取得」法は、一意的タブレット識別子を取得し、タブレットによってサポートされる「タブレット特性記述」オブジェクトの集合を戻す。リアルタイムスタイラスオブジェクトの「所望のパケット記述を取得」法は、リアルタイムスタイラスオブジェクトがそのプラグインに送ることになるパケット特性に対するＧＵＩＤのアレイを戻す。
【０２１２】
所定のタブレットに対するプラグインに送られるパケット特性の集合は、「タブレット特性記述集合を取得」法によって戻される集合と、「所望のパケット記述を取得」法によって戻される集合との共通部分でありうる。リアルタイムスタイラスがそのプラグインに送ることになるパケット特性の集合を修正するために、リアルタイムスタイラスオブジェクトの「所望のパケット記述を設定」法を呼び出すことができる。
【０２１３】
リアルタイムスタイラスオブジェクトが使用可能になると、各プラグインは、「Ｉスタイラス同期プラグイン．リアルタイムスタイラスイネーブルド」または「Ｉスタイラス非同期プラグイン．リアルタイムスタイラスイネーブルド」法の呼出を受け取る。通知で送られた「リアルタイムスタイラスイネーブルドデータ」オブジェクトは、「リアルタイムスタイラス」オブジェクトが使用可能であるときに利用可能なタブレットに対するコンテキスト識別子の集合を含む。「リアルタイムスタイラス」オブジェクトが使用可能である間に、「リアルタイムスタイラス」オブジェクトが使用できるタブレットが、ペン−使用可能コンピューティングシステムに追加、またはそこから除去されると、「リアルタイムスタイラスオブジェクト」は、タブレットが追加または除去されたことをそのプラグインに通知する。
【０２１４】
スタイラスは、追加的なインターフェースを有することができる。各スタイラスは、スタイラスに対応づけられたパケットを示す、スタイラスに対応づけられた情報を有することができる。リアルタイムスタイラスオブジェクトは、スタイラスに関する情報をいくつかの通知方法でプラグインに送る。ペンまたはスタイラスに関する情報をスタイラスオブジェクトによって表現することができる。オブジェクトは、データが収集されたときのタブレットペンの状態のスナップショットである。プラグインは、タブレットペンデータ流の一部としてタブレットペンデータを受け取っているため、プラグインは、カーソルクラスを通じて特定のタブレットペンの現行の状態を調べる代わりに、スタイラスオブジェクトにおける情報を用いる必要がある。
【０２１５】
プラグインおよび「リアルタイムスタイラス」クラスについて以下に説明する。プラグイン、「Ｉスタイラス同期プラグイン」または「Ｉスタイラス非同期プラグイン」インターフェースを実装するオブジェクトをリアルタイムスタイラスオブジェクトに追加することが可能である。
【０２１６】
「Ｉスタイラス同期プラグイン」および「Ｉスタイラス非同期プラグイン」インターフェースは、同じ方法を定める。これらの方法は、リアルタイムスタイラスオブジェクトが、ペンデータを各プラグインに送ることを可能にする。｛Ｉスタイラス同期プラグイン．データ対象｝および「Ｉスタイラス非同期プラグイン．データ対象」特性は、各プラグインが、タブレットペンデータ流における特定のデータを利用することを可能にする。プラグインは、潜在的な性能上の問題を最小限に抑える、その作業を実施するのに必要なデータを利用するだけでよい。あるいは、追加的な利用はプラグインに含まれてもよい。
【０２１７】
リアルタイムスタイラスオブジェクトは、「スタイラス入力．プラグインデータ」名前空間におけるオブジェクトを使用して、ペンデータをそのプラグインに送ることができる。リアルタイムスタイラスは、また、プラグインによって投じられた例外をキャッチする。そうする場合は、リアルタイムスタイラスは、「Ｉスタイラス同期プラグイン．エラー」または「Ｉスタイラス非同期プラグイン．エラー」法を呼び出すことによってプラグインに通知できる。
【０２１８】
プラグインデータおよびリアルタイムスタイラスクラスについて以下に説明する。
【０２１９】
リアルタイムスタイラスに対するプラグインは、「Ｉスタイラス同期プラグイン」または「Ｉスタイラス非同期プラグイン」インターフェースのいずれかを実装することができる。リアルタイムスタイラスにおける全ての方法を実施することができる。
【０２２０】
インターフェース上に定められた方法は、「スタイラス入力。プラグインデータ」名前空間におけるオブジェクトを使用して、ペンデータをプラグインに送ることができる。以下の表には、通知方法におけるパラメータであるデータオブジェクトが示されているとともに、その通知に対応づけられた「データ対象マスク」値が列記されている。
【０２２１】
【表３−１】
2007509413.tif 000010
【０２２２】
【表３−２】
2007509413.tif 000011
【０２２３】
リアルタイムスタイラスオブジェクトは、タブレットペンに関する情報をいくつかの通知方法でそのプラグインに送る。タブレットペンに関する情報は、スタイラスオブジェクトによって表現される。このオブジェクトは、データが収集されたときのタブレットペンの状態のスナップショットである。プラグインは、タブレットペンデータ流の一部としてタブレットペンデータを受け取っているため、プラグインは、カーソルクラスを通じて特定のタブレットペンの現行の状態を調べる代わりに、スタイラスオブジェクトにおける情報を用いる必要がある。各スタイラスオブジェクトは、データを収集したタブレットに対するタブレットコンテキスト識別子を含む。
【０２２４】
同期および非同期インターフェース上で以下の１３の機能を実装することができる。表は、様々なイベントを通じて送られる情報を比較したものである。イベントおよびパラメータのリストは例示的なものであって、網羅的なものではない。以下のイベントおよびパラメータとともに、またはそれらの代わりに他のイベントおよびパラメータを用いてもよい。
【０２２５】
同期パラメータの多くは、受取り側が、キューを通るデータを修正することを可能にするという点においてのみそれらの同期パラメータと異なる。あるいは、両方のパラメータの集合が、キューを通るデータを修正することを可能にすることができる。
【０２２６】
【表４−１】
2007509413.tif 000012
【０２２７】
【表４−２】
2007509413.tif 000013
【０２２８】
【表４−３】
2007509413.tif 000014
【０２２９】
【表４−４】
2007509413.tif 000015
【０２３０】
【表４−５】
2007509413.tif 000016
【０２３１】
【表４−６】
2007509413.tif 000017
【０２３２】
本発明の態様をその例示的な実施形態の観点で説明した。この開示内容を吟味すれば、添付の請求項の範囲および主旨に含まれる多くの実施形態、改造形態および変更が当業者に理解されるであろう。
【図面の簡単な説明】
【０２３３】
【図１】本発明のある態様を実施することができる汎用デジタルコンピューティング環境の概略図を示す図である。
【図１Ｂ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｃ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｄ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｅ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｆ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｇ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｈ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｉ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｊ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｋ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｌ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図１Ｍ】本発明の１つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。
【図２】本発明の態様によるスタイラスをベースとした入力システムのためのディスプレイを示す図である。
【図３】本発明の態様による電子インクの流れを処理するためのシステムを示す図である。
【図４】本発明の態様による電子インクの流れを処理するための代替的アプローチを示す図である。
【図５】本発明の態様をサポートすることができるオブジェクトモードを示す図である。
【図６】本発明の態様による電子インクを処理するためのシステムを示す図である。
【図７】本発明の態様による電子インクを処理するためのシステムを示す図である。
【図８Ａ】本発明の態様による入力キューおよび出力キューを使用するための様々なアプローチを示す図である。
【図８Ｂ】本発明の態様による入力キューおよび出力キューを使用するための様々なアプローチを示す図である。
【図９】本発明の態様によるインクを処理するためのシステムを形成・使用するための方法を示す図である。
【図１０】本発明の態様によるインクを処理するためのシステムを形成・使用するための方法を示す図である。
【図１１】本発明の態様によるインク集合オブジェクトを警報するためのプロトコルを備えたシステムを示す図である。
【図１２】本発明の態様による追加的なキューを備えたシステムを示す図である。
【図１３】本発明の態様による分離されたリアルタイムスタイラス構成要素を備えたシステムを示す図である。
【図１４】本発明の態様による、ジェスチャ認識装置がジェスチャを追跡できる深さを示す図である。
【図１５】本発明の態様による例外処理のためのシステムを示す図である。
【図１６】本発明の態様による管理および非管理コードを示す図である。
【図１７Ａ】本発明の態様による、同期を確保するためにキューにおける異なる箇所にどのようにしてデータを配置できるかを示す図である。
【図１７Ｂ】本発明の態様による、同期を確保するためにキューにおける異なる箇所にどのようにしてデータを配置できるかを示す図である。
【図１８】本発明の態様によるペンデータを処理するための様々なシステムを示す図である。
【図１９】本発明の態様によるペンデータを処理するための様々なシステムを示す図である。
【図２０】本発明の態様によるキューを示す図である。
【図１】
2007509413.tif 000018
【図１Ｂ】
2007509413.tif 000019
【図１Ｃ】
2007509413.tif 000020
【図１Ｄ】
2007509413.tif 000021
【図１Ｅ】
2007509413.tif 000022
【図１Ｆ】
2007509413.tif 000023
【図１Ｇ】
2007509413.tif 000024
【図１Ｈ】
2007509413.tif 000025
【図１Ｉ】
2007509413.tif 000026
【図１Ｊ】
2007509413.tif 000027
【図１Ｋ】
2007509413.tif 000028
【図１Ｌ】
2007509413.tif 000029
【図１Ｍ】
2007509413.tif 000030
【図２】
2007509413.tif 000031
【図３】
2007509413.tif 000032
【図４】
2007509413.tif 000033
【図５】
2007509413.tif 000034
【図６】
2007509413.tif 000035
【図７】
2007509413.tif 000036
【図８Ａ】
2007509413.tif 000037
【図８Ｂ】
2007509413.tif 000038
【図９】
2007509413.tif 000039
【図１０】
2007509413.tif 000040
【図１１】
2007509413.tif 000041
【図１２】
2007509413.tif 000042
【図１３】
2007509413.tif 000043
【図１４】
2007509413.tif 000044
【図１５】
2007509413.tif 000045
【図１６】
2007509413.tif 000046
【図１７Ａ】
2007509413.tif 000047
【図１７Ｂ】
2007509413.tif 000048
【図１８】
2007509413.tif 000049
【図１９】
2007509413.tif 000050
【図２０】
2007509413.tif 000051
【国際調査報告】
2007509413.tif 000052
2007509413.tif 000053