JP4698599B2 - リアルタイムインキング - Google Patents

リアルタイムインキング Download PDF

Info

Publication number
JP4698599B2
JP4698599B2 JP2006536576A JP2006536576A JP4698599B2 JP 4698599 B2 JP4698599 B2 JP 4698599B2 JP 2006536576 A JP2006536576 A JP 2006536576A JP 2006536576 A JP2006536576 A JP 2006536576A JP 4698599 B2 JP4698599 B2 JP 4698599B2
Authority
JP
Japan
Prior art keywords
data
plug
stylus
real
ink
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006536576A
Other languages
English (en)
Other versions
JP2007509413A (ja
Inventor
ダッジ スティーブ
ジェイ.コルミコフ−ゾトフ アレキサンダー
ジェイ.ゴールドバーグ アリン
クランツ ブリジット
フェルドマン キリル
ケイ.ビスワス マノ
バラツ ルドルフ
シンバガラクシュミ ピチャイア
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007509413A publication Critical patent/JP2007509413A/ja
Application granted granted Critical
Publication of JP4698599B2 publication Critical patent/JP4698599B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/03Arrangements for converting the position or the displacement of a member into a coded form
    • G06F3/033Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor
    • G06F3/038Control and interface arrangements therefor, e.g. drivers or device-embedded control circuitry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0487Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
    • G06F3/0488Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
    • G06F3/04883Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1204Improving or facilitating administration, e.g. print management resulting in reduced user or operator actions, e.g. presetting, automatic actions, using hardware token storing data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1206Improving or facilitating administration, e.g. print management resulting in increased flexibility in input data format or job format or job type
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/126Job scheduling, e.g. queuing, determine appropriate device
    • G06F3/1263Job scheduling, e.g. queuing, determine appropriate device based on job priority, e.g. re-arranging the order of jobs, e.g. the printing sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1278Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
    • G06F3/1284Local printer device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/14Image acquisition
    • G06V30/142Image acquisition using hand-held instruments; Constructional details of the instruments
    • G06V30/1423Image acquisition using hand-held instruments; Constructional details of the instruments the instrument generating sequences of position coordinates corresponding to handwriting

Description

本発明の態様は、画像処理および情報処理に関する。より詳細には、本発明の態様は、電子インク情報を受け取って、処理することに関する。
本出願は、その内容が参照により本明細書に明確に組み込まれている、2003年10月24日に出願された「Tablet Platform Controls and APIs」という名称の米国出願第60/513,591号の優先権を主張するものである。
典型的なコンピュータシステム、特にマイクロソフトWindows(登録商標)の如きグラフィカルユーザインターフェース(GUI)システムを使用するコンピュータシステムは、テキストを入力するためのキーボードの如き1つまたは複数の個別的な入力デバイス、およびユーザインターフェースを駆動するための1つまたは複数のボタンを備えたマウスの如きポインティングデバイスからユーザ入力を受けつけるように最適化される。汎用的なキーボードおよびマウスインターフェースは、文書、スプレッドシート、データベースフィールド、図および写真等の高速作成および修正に対応する。しかし、コンピュータを使用しない(すなわち標準の)ペンおよび紙に比べると、キーボードおよびマウスインターフェースが与える柔軟性に大きなギャップがある。標準のペンおよび紙では、ユーザは、文書を編集し、縁に注釈を書き、絵および他の形状等を描く。場合によっては、ユーザは、キーボードおよびマウスインターフェースの範囲外で自由に注釈を加えることができるという理由から、画面上で文書を見直すより、ペンを使用して、文書にマーク付けするのを好むこともある。
ユーザは、ペンで書くときは、ペン先端からインクが流れるのを期待する。電子インクの領域でも、同様の目標が存在する。電子インクがペンまたはスタイラスから流れるのを妨げる1つの問題は、電子インクの扱い方である。
従来のアプローチは、インキングのすべての側面を同時に扱うことを意図していた。従来のアプローチは、インク情報が存在すれば、インクを描写し、ジェスチャを追跡し、インク情報を他のインク情報と組み合わせ、インクを認識し、インクの外観を滑らかにする等の処理を行うことを意図していた。これらの処理は、ユーザに対してインクを表示するのを遅らせることによって、より多くのインクを導入、より重要なことは、電子スタイラスの先端からインクが流れるという幻想を低減または排除するのにユーザを待たせるものであった。
本発明の態様は、上述の問題の1つまたは複数の問題に対処することにより、スタイラスからのインクの流れを提供する。
動的描写オブジェクトをプロセス流れで移動させて、ユーザの動きと電子インクの表示との間の遅れを低減することができる。
これらの態様および他の態様を、図面および関連説明に関連づけながら述べる。
本発明の態様は、スタイラスイベントを効率的に処理して、電子インクをユーザに対して迅速に描写することに関する。
本文献は、読者に役立つようにいくつかのセクションに分割されている。これらのセクションは、インクの特性、用語定義、汎用的コンピューティング環境、リアルタイムインキングの概観、オブジェクトモデル、動的描写および湿式インク、ジェスチャ認識、同期および非同期プロセス、カスケーディング、動的プラグイン集合改良、誤差伝搬、管理/非管理実例、データ集合および流れ、データ同期、およびアプリケーションプログラミングインターフェースを含む。
インクの特性
インクペンを使用するユーザに知られているように、物理的インク(インク溜を備えたペンを使用して紙上に書き込まれる種類)は、線分によって接続された一連の座標より多くの情報を伝達できる。例えば、物理的インクは、ペン圧(インクの濃さによる)、ペン角度(直線または曲線分の形状、および個別点付近のインクの挙動による)、およびペンの尖端の速度(真直性、線幅、および直線または曲線のコースに対する線幅変化による)を反映することができる。さらなる例は、インクが付着する紙または他の表面の繊維にインクが吸収される様式を含む。これらの些細な特性も、上記の特性を付与するに役立つ。これらの追加的な特性により、転換の均一な線幅を用いるより、情緒、個性および強調等をより即時的に付与することが可能である。
電子インク(またはインク)は、ユーザがスタイラスをベースとした入力デバイスを使用するときに取り込まれる電子情報の取込みおよび表示に関する。電子インクは、筆画の配列または任意の集合を指し、各筆画は、点の配列で構成される。筆画は、同時に描画または収集されるか、または個別的な時刻および箇所、および個別的な理由で描画または収集されうる。デカルト座標(X、Y)、極座標(r、Θ)、および当該技術分野で知られている他の技術を含む、知られている様々技術を用いて、それぞれの点を表現することができる。電子インクは、圧力、角度、速度、色、スタイラスサイズおよびインク透明性を含む実際のインクの特性の表示を含むことができる。電子インクは、ページにインクが付着された秩序(たいていの西洋言語では、左から右へ、そして下に続けるラスタパターン)、タイムスタンプ(インクが付着されたときを示す)、インクの作者の指標、および発祥デバイス(インクが引き出された機械の指標、またはインクを付着させるのに使用されたペンの指標)等の情報をさらに含むことができる。
用語定義
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
汎用コンピューティング環境
図1Aは、本発明を実施できる好適なコンピューティングシステム環境100の例を示す図である。コンピューティングシステム環境100は、好適なコンピューティング環境の一例にすぎず、本発明の用途または機能の範囲に関して何らかの制限を示唆することを意図するものではない。コンピューティングシステム環境100は、例示的なコンピューティングシステム環境100に示されている任意の1つの構成要素またはその組合せに関
する何らかの依存性または要件を有するものとして解釈されるべきではない。
本発明は、他の多くの汎用または特殊用途のコンピューティングシステム環境または構成で動作可能である。本発明への使用に好適でありうるよく知られているコンピューティングシステム、環境および構成の例としては、パーソナルコンピュータ、サーバコンピュータ、スマートフォン、スマートウォッチおよびパーソナルデータアシスタントを含むハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサをベースとしたシステム、セットトップボックス、プログラム可能大衆消費電子製品、ネットワークPC、ミニコンピュータ、大型コンピュータ、および上記システムまたはデバイスのいずれかを含む分散コンピューティング環境等が挙げられるが、それらに限定されない。
コンピュータによって実行されるプログラムモジュールの如きコンピュータ実行可能命令の全体的な脈絡で本発明を説明することができる。一般には、プログラムモジュールは、特定の作業を実施するか、または特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、構成要素およびデータ構造等を含む。通信ネットワークを通じて互いにリンクされる遠隔処理デバイスによってタスクが実施される分散コンピューティング環境で本発明を実施することもできる。分散コンピューティング環境では、メモリ記憶デバイスを含むローカルおよび遠隔コンピュータ記憶媒体にプログラムモジュールを配置することができる。
図1Aを参照すると、本発明を実施するための例示的なシステムは、コンピュータ110の形の汎用コンピューティングデバイスを含む。コンピュータ110の構成要素としては、処理装置120、システムメモリ130、およびシステムメモリを含む様々なシステム構成要素を処理装置120に結合するシステムバス121を挙げることができるが、それらに限定されない。システムバス121は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用したローカルバスを含むいくつかのバス構造体のいずれかであってもよい。限定ではなく、例として、当該アーキテクチャは、工業規格アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ電子装置規格化協会(VESA)ローカルバス、およびメザニンバスとしても知られている周辺装置相互接続(PCI)を含む。
コンピュータ110は、典型的には、様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ110によってアクセスすることが可能である任意の利用可能な媒体で、揮発性媒体、不揮発性媒体、取外し可能な媒体および取外し不可能な媒体を含む。限定ではなく、例として、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュールまたは他のデータの如き情報を記憶するための任意の方法または技術で実装される揮発性媒体、不揮発性媒体、取外し可能な媒体および取外し不可能な媒体を含む。コンピュータ記憶媒体としては、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電子的消去書込可能読取り専用メモリ(EEPROM)、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタルビデオディスク(DVD)または他の光ディスク記憶機構、磁気カセット、磁気テープ、磁気ディスク記憶機構または他の磁気記憶デバイス、あるいは所望の情報を記憶するのに使用でき、コンピュータ110によってアクセスできる任意の他の媒体が挙げられるが、それらに限定されない。通信媒体は、典型的には、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または搬送波の如き変調データ信号もしくは他の伝送機構内の他のデータを具現化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、その1つまたは複数の特性が信号内の情報をコード化するように設定または変化された信号を意味する。限定ではなく、例として、通信媒体は、有線ネットワークまたは直線有線接続の如き有線媒体、ならびに音響、RF、赤外および他の無線媒体の如き無線媒体を含む。上記のいずれかの組合せもコンピュータ読取り可能媒体の範囲に含まれるものとする。
システムメモリ130は、ROM131およびRAM132の如き揮発性および/または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などにコンピュータ110内の要素間で情報を伝達するのに役立つ基本ルーチンを含む基本入出力システム133(BIOS)は、典型的にはROM131に記憶される。RAM132は、典型的には、すぐにアクセス可能で、かつ/または処理装置120によって現在動作されているデータおよび/またはプログラムモジュールを含む。限定ではなく、例として、図1Aは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137を示す図である。
コンピュータ110は、他の取外し可能/取外し不可能、および揮発性/不揮発性コンピュータ記憶媒体を含むこともできる。例示のみを目的とし、図1Aは、取外し不可能で不揮発性の磁気媒体に対して読取りまたは書込を行うハードディスクドライブ141、取外し可能で不揮発性の磁気ディスク152に対して読取りまたは書込みを行う磁気ディスクドライブ151、およびCD ROM、または他の光媒体の如き取外し可能で不揮発性の光ディスク156に対して読取りまたは書込みを行う光ディスクドライブ155を示す図である。例示的な動作環境で使用できる他の取外し可能/取外し不可能および揮発性/不揮発性コンピュータ記憶媒体としては、磁気テープカセット、フラッシュメモリカード、デジタルビデオディスク、デジタルビデオテープ、固体RAMおよび固体ROM等が挙げられるが、それらに限定されない。ハードディスクドライブ141は、典型的には、インターフェース140の如き取外し不可能なメモリインターフェースを通じてシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、典型的には、インターフェース150の如き取外し可能なメモリインターフェースによってシステムバス121に接続される。
上記に説明し、図1Aに示したドライブ、およびそれらに伴うコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびコンピュータ110のための他のデータの記憶機構を提供する。図1Aにおいて、例えば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147を記憶するものとして示されている。これらの構成要素は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137と同じであっても異なっていてもよい。ここでは、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147にそれぞれ異なる番号を割り当てて、最低限、それらが異なるコピーであることを示す。ユーザは、デジタルカメラ163、キーボード162、および一般的にマウスまたはタッチパッドと称するポインティングデバイス161の如き入力デバイスを通じて、コンピュータ110に指令および情報を入力することができる。他の入力デバイス(不図示)としては、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュまたはスキャナ等を挙げることができる。これらの入力デバイスおよび他の入力デバイスは、システムバス121に結合されるユーザ入力インターフェース160を通じて処理装置120にしばしば接続されるが、並列ポート、ゲームポートまたはユニバーサルシリアルバス(USB)によって接続されうる。モニタ191または他のタイプの表示デバイスも、ビデオインターフェース190の如きインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータは、出力周辺インターフェース195を通じて接続できるスピーカ197およびプリンタ196の如き他の周辺出力デバイスを含むこともできる。
コンピュータ110は、遠隔コンピュータ180の如き1つまたは複数の遠隔コンピュータEの論理接続を用いたネットワーク化環境で動作できる。遠隔コンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、同位デバイスまたは他の共通ネットワークノードであってもよく、コンピュータ110に対して上述した要素の多くまたは全てを含むが、図1Aにはメモリ記憶デバイス181のみを示した。図1Aに示されている論理接続は、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。当該ネットワーキング環境は、オフィス、企業内コンピュータネットワーク、イントラネットおよびインターネットに普及している。
コンピュータ110は、LANネットワーキング環境で使用されるときは、ネットワークインターフェースまたはアダプタ170を通じてLAN171に接続される。コンピュータ110は、WANネットワーキング環境で使用されるときは、典型的には、モデム172、またはインターネットの如きWAN173に通信を確立するための他の手段を含む。内部または外部モデムであってもよいモデム172は、ユーザ入力インターフェース160または他の適切な機構を介してシステムバス121に接続されうる。ネットワーク化環境では、コンピュータ110またはその部分に対して示されているプログラムモジュールを遠隔メモリ記憶デバイスに記憶することができる。限定ではなく、例として、図1Aは、メモリデバイス181上に存在する遠隔アプリケーションプログラム185を示す図である。示されているネットワーク接続は、例示的なものであり、コンピュータの間に通信リンクを確立する他の手段を使用できることが理解されるであろう。
示されているネットワーク接続は、例示的なものであり、コンピュータの間に通信リンクを確立する他の手段を使用することが可能であることが理解されるであろう。TCP/IP、イーサネット(登録商標)、FTPおよびHTTP等のよく知られている様々なプロトコルのいずれかの存在が想定され、システムをクライアントサーバ構成で動作させて、ユーザがウェブをベースとしたサーバからウェブページを検索することを可能にすることができる。様々な従来のウェブブラウザのいずれかを使用して、ウェブページ上にデータを表示・操作することが可能である。
プログラミングインターフェース(または、より簡潔にはインターフェース)を、コードの1つまたは複数のセグメントが、コードの1つまたは複数の他のセグメントによって提供される機能と通信するか、またはそれにアクセスすることを可能にするための任意の機構、プロセス、プロトコルと見なすことができる。あるいは、プログラミングインターフェースを、他の構成要素の1つまたは複数の機構、方法、機能、呼出およびモジュール等と通信結合することが可能なシステムの構成要素の1つまたは複数の機構、方法、機能、呼出およびモジュール等と見なすことができる。先述の文における「コードのセグメント」という用語は、コードの1つまたは複数の命令またはラインを含むことを意図し、例えば適用される用語、あるいはコードセグメントが個別に編集されるかどうか、あるいはコードセグメントが原コードとして提供されるか、中間コードとして提供されるか、または目的コードとして提供される、あるいはコードセグメントがルーチンシステムまたはプロセスで利用されるか、あるいはそれらが同じまたは異なる機械に配置されるか、または複数の機械に分配されるか、あるいはコードのセグメントによって表される機能が全てソフトウェアで実施されるか、全てハードウェアで実施されるか、ハードウェアとソフトウェアの組合せで実施されるかにかかわらず、例えばコードモジュール、オブジェクト、サブルーチンおよび機能等を含む。
概念的には、図1Bまたは図1Cに示されるように、プログラミングインターフェースを包括的に捉えることができる。図1Bは、第1および第2のコードセグメントが、それを通じて通信する導管としてのインターフェース、すなわちインターフェース1を示す図である。図1Cは、システムの第1および第2のコードセグメントが、媒体Mを介して通信することを可能にする、(第1および第2のコードセグメントの一部であってもなくてもよい)インターフェースオブジェクトI1およびI2を備えるインターフェースを示す図である。図1Cを見ると、インターフェースオブジェクトI1およびI2を同一システムの個別的なインターフェースと見なすことができとともに、オブジェクトI1およびI2+媒体Mはインターフェースを備えると考えることができる。図1Bおよび1Cは、双方向の流れと、流れの各々の側のインターフェースとを示しているが、特定の実装形態は、一方向にのみ情報の流れを有することができ(または、以下に示すように情報の流れを有さなくてもよく)、あるいは一方の側にのみインターフェースを有することができる。限定ではなく、例として、アプリケーションプログラミングインターフェース(API)、入口点、方法、機能、サブルーチン、遠隔手順呼出および構成要素オブジェクトモデル(COM)インターフェースのような用語は、プログラミングインターフェースの定義に包括される。
当該プログラミングインターフェースの態様は、第1のコードセグメントが、情報(ただし、「情報」は最も広い意味で用いられ、データ、指令および要求等を含む)を第2のコードセグメントに伝送する方法と、第2のコードセグメントが情報を受け取る方法と、情報の構造、配列、シンタックス、構成、スキーム、タイミングおよび内容とを含むことができる。この点で、基礎を成す伝達媒体そのものは、情報がインターフェースによって定められるように伝達される限り、媒体が有線であっても、無線であっても、両者の組合せであっても、インターフェースの動作にとって重要ではないといえる。一定の状況において、情報伝達が他の機構を介するものであっても(例えば、コードセグメントの間の情報の流れから分離された緩衝域、ファイル等に搭載された情報)、1つのコードセグメントが第2のコードセグメントによって果たされる機能に単にアクセスするとき等は存在しなくてもよいため、情報が、従来の意味で一方向または双方向に送られないこともある。これらの態様のいずれかまたは全ては、所定の状況において、例えばコードセグメントが疎結合構成または緊密結合構成のシステムの一部であるかどうかに応じて重要でありうるため、このリストは例示的で、非制限的である。
このプログラミングインターフェースの概念は、当業者に知られており、本発明の先述の詳細な説明から明らかである。しかし、プログラミングインターフェースを実装するための他の方法も存在し、明らかに排除されるものでなければ、これらも、本明細書の前に記載されている請求項に包括されるものとする。そのような他の方法は、図1Bおよび1Cの簡潔な図に比べて、より精巧または複雑に見えることもあるが、それでも同様の機能を果たして、同じ包括的結果を達成する。次に、プログラミングインターフェースのいくつかの例示的な代替的な実装形態を簡単に説明する。
A.ファクタリング
通信を多数の個別的な通信に分割することによって、1つのコードセグメントから他のコードセグメントへの通信を間接的に達成できる。これは、図1Dおよび1Eに概略的に示されている。ここに示されるように、分割可能な機能の集合体という観点でいくつかのインターフェースを説明することが可能である。したがって、ちょうど数学的に24、または2×2×3×2を与えることができるように、図1Bおよび1Cのインターフェース機能をファクタリングして、同じ結果を達成することができる。よって、図1Dに示されるように、インターフェース、すなわちインターフェース1によって提供される機能を細分割して、インターフェースの通信を多数のインターフェース、すなわちインターフェース1A、インターフェース1B、インターフェース1C等に変換しながら、同じ結果を達成することができる。図1Eに示されるように、インターフェースI1によって提供される機能を多数のインターフェースI1a、I1b、I1c等に細分割しながら、同じ結果を達成することができる。同様に、第1のコードセグメントから情報を受け取る第2のコードセグメントのインターフェースI2を多数のインターフェースI2a、I2b、I2c等にファクタリングすることができる。ファクタリングするときは、第1のコードセグメントに含まれるインターフェースの数が、第2のコードセグメントに含まれるインターフェースの数と一致する必要はない。図1Dおよび1Eの場合のいずれも、インターフェース、すなわちインターフェース1およびインターフェースI1の機能的意味は、それぞれ図1Bおよび1Cの場合と同じである。インターフェースのファクタリングは、ファクタリングの認識が困難になりうるように、結合特性、交換特性および他の数学的特性を追従することもある。例えば、動作の順序は重要でなく、その結果、インターフェースによって実施される昨日は、コードまたはインターフェースの他の部分によって、インターフェースに到達する前に十分に実施されるか、またはシステムの個別的な構成要素によって実施されうる。さらに、同じ結果を達成する異なる機能呼出の様々な方法が存在することを、プログラミング技術分野の当業者なら理解できる。
B.再定義
場合によっては、プログラミングインターフェースの一定の態様(例えばパラメータ)を無視、追加または再定義しながら、目的とする結果を遂行することが可能である。これは、図1Fおよび1Gに示されている。例えば、インターフェース、すなわち図1のインターフェース1は、機能呼出平方(入力、精度、出力)、すなわち入力、精度および出力の3つのパラメータを含み、第1のコードセグメントから第2のコードセグメントに発せられる呼出を含むものと仮定する。中央のパラメータである精度が、所定のシナリオに関係ない場合は、図1Fに示されるように、無視するか、または(この状況において)無意味なパラメータと交換することも可能である。関係のないさらなるパラメータを追加することもできる。いずれの場合も、入力が第2のコードセグメントによって平方された後に出力が戻されるのであれば、平方の機能を達成することが可能である。精度は、コンピューティングシステムの下流または他の部分にとって十分に意味のあるパラメータでありうるが、精度が、平方を計算するという狭い目的に必要ないと認識されれば、交換または無視することができる。例えば、有効な精度値を通す代わりに、結果に悪影響を与えることなく誕生日のような無意味な値を通すことが可能である。同様に、図1Gに示されるように、インターフェースI1を、パラメータを無視するか、またはインターフェースに追加するように再定義されたインターフェースI1’と交換する。インターフェースI2は、同様に、不要なパラメータ、または他の場所で処理できるパラメータを無視するように再定義されたインターフェースI2’として再定義されうる。ここでのポイントは、いくつかの場合において、プログラミングインターフェースは、ある目的に必要とされないパラメータの如き態様を含むことができるため、無視または再定義されるか、あるいは他の目的のために他の場所で処理されうることである。
C.インラインコード化
2つの個別的なコードモジュールの機能の一部または全てを、それらの間の「インターフェース」が形を変えるように結合することも実現可能である。例えば、図1Bおよび1Cの機能をそれぞれ図1Hおよび1Iに変換できる。図1Hにおいて、図1Bの先の第1および第2のコードセグメントを結合して、その両方を含むモジュールにする。この場合、コードセグメントは、まだ互いに通信しているが、単一モジュールにより好適な形に適合されうる。したがって、例えば、フォーマット呼出および復帰命令はもう必要ではないが、インターフェース、すなわちインターフェース1に準拠する処理または応答はまだ有効でありうる。同様に、図1Iに示されるように、図1CによるインターフェースI2の一部(または全て)をインターフェースI1にインラインで書き込んで、インターフェースI1’’を形成することができる。示されるように、インターフェースI2は、I2aとI2bに分割され、インターフェースI2aは、インターフェースI1によりインラインでコード化されて、インターフェースI1’’を形成する。具体的な例としては、第2のコードセグメントによって(入力の平方を計算するために)入力とともに通された値を処理した後で、平方結果を出力とともに戻すインターフェースI2によって受け取られる機能呼出平方(入力、出力)を実施する図1のインターフェイスI1を考える。そのような場合は、(入力を平方する)第2のコードセグメントによって実施された処理を、インターフェースに対する呼出を伴わずに第1のコードセグメントによって実施することができる。
D.分離
1つのコードセグメントから他のコードセグメントへの通信は、通信を多数の個別的な通信に分割することによって間接的に達成されうる。これは、図1Jおよび1Kに概略的に示されている。図1Jに示されるように、コードの1つまたは複数の部分(機能および・またはインターフェース機能を本来のインターフェースから分離するため分離インターフェースである)は、第1のインターフェース、すなわちインターフェース1上の通信を変換して、それらを異なるインターフェース、この場合はインターフェース、すなわちインターフェース2A、インターフェース2Bおよびインターフェース2Cに適合させるように設けられる。これは、例えばインターフェース1プロトコルに従って所謂オペレーティングシステムと通信するように設計されたアプリケーションのベースがインストールされているが、その後オペレーティングシステムが、異なるインターフェース、この場合はインターフェース、すなわちインターフェース2A、インターフェース2Bおよびインターフェース2Cを使用するように変化される場合に実施されうる。ポイントは、第2のコードセグメントによって使用される本来のインターフェースが、第1のコードセグメントによって使用されるインターフェースと適合できなくなるように変化されるため、仲介物を使用して、古いインターフェースと新しいインターフェースを適合可能にすることである。同様に、図1Kに示されるように、第3のコードセグメントを分離インターフェースDI1とともに導入して、インターフェースI1からの通信を受け、分離インターフェースDI2とともに導入して、インターフェース機能を、例えば、DI2と協働するが、同じ機能結果を提供するように再設計されたインターフェースI2aおよびI2bに送信することが可能である。同様に、DI1およびDI2は協働して、図1CのインターフェースI1およびI2の機能を新たなオペレーティングシステムに合わせて翻訳しながら、同一または同様の機能的結果を提供することができる。
E.書換え
さらに他の可能な変形は、コードを動的に書き換えて、インターフェース機能を他の機能と交換するものであるが、それも同じ包括的結果を達成する。例えば、中間言語(例えばマイクロソフトIL、Java(登録商標)ByteCode等)が、実行環境(.NETフレームワークによって提供される環境、Java(登録商標)ルーチン環境、他の同様のルーチン型環境等)におけるジャストインタイム(JIT)コンパイラまたはインタプリタに提供される。第1のコードセグメントから第2のコードセグメントへの通信を動的に変換させ、すなわち第2のコードセグメント(本来の第2のコードセグメントまたは異なる第2のコードセグメント)が必要としうる異なるインターフェースにそれらを適合させるように、JITコンパイラを書き込むことができる。これは、図1Lおよび1Mに示されている。図1Lに見られるように、このアプローチは上記の分離シナリオに類似している。それは、例えば、インストールされたアプリケーションのベースが、インターフェース1のプロトコルに従ってオペレーティングシステムと通信するように設計されるが、後に異なるインターフェースを使用するようにオペレーティングシステムが変化される場合に実施されうる。JITコンパイラを使用して、インストールされたベースアプリケーションからの実行中の通信をオペレーティングシステムの新たなインターフェースに適合させることが可能である。図1Mに示されるように、動的にインターフェースを書き換えるこのアプローチを適用して、インターフェースを動的にファクタライズするか、あるいはインターフェースを変えることもできる。
代替的な実施形態を介してインターフェースとして同一または同様の結果を達成するための上記シナリオを様々な様式で、縦列および/または並列に、または他の介在コードで組み合わせることができるという点にも注目される。したがって、上述の代替的な実施形態は、相互に排他的なものではなく、それらを混合し、整合し、組み合わせて、図1Bおよび1Cに示される一般的なシナリオと同一または同等のシナリオを生成することができる。たいていのプログラミング構造と同様に、ここに記載することができないが、それでも本発明の主旨および範囲によって表される同一または同様のインターフェースの機能を達成する他の同様の方法が存在するという点にも注目される。すなわち、それは、少なくとも部分的に、インターフェースの値の基礎を成すインターフェースによって表される機能、およびそれによって可能になる有利な結果であるという点に注目される。
図2は、本発明の様々な態様に従って使用することが可能であるタブレットPC201を示す図である。図1のシステムにおける特徴、サブシステムおよび機能のいずれかまたは全てを図2のコンピュータに含めることができる。タブレットPC201は、複数のウィンドウ203が表示される大きな表示面202、例えばデジタル化フラットパネルディスプレイ、好ましくは液晶表示(LCD)画面を含む。ユーザは、スタイラス204を使用して、デジタル化表示面202上で選択、強調および/または書込みを行うことができる。好適なデジタル化表示面202の例としては、MutohまたはWacomペンデジタイザの如き磁気ペンデジタイザが挙げられる。他のタイプのペンデジタイザ、例えば光デジタイザを使用することもできる。タブレットPC201は、データを処理し、テキストを入力し、図を作成し、かつ/またはスプレッドシートおよびワードプロセッシングプログラム等の従来のコンピュータアプリケーション作業を実行するために、スタイラス204を使用してジェスチャを翻訳する。
スタイラス204には、その選択機能を拡大するために、1つまたは複数のボタンまたは他の特徴を装備することができる。一実施形態において、一端が執筆部を構成し、他端が「消しゴム」端を構成し、ディスプレイを移動するときに、ディスプレイの部分が消去されることを示す「鉛筆」または「ペン」としてスタイラス204を実装することが可能である。マウスまたはトラックボール等の他のタイプの入力デバイスを使用することが可能である。また、ユーザ自身の指をスタイラス204とし、接触式または近接式ディスプレイ上の表示画像の部分を選択または指示するのに使用することも可能である。これにより、本明細書で用いられている「ユーザ入力デバイス」という用語は、広い定義を有することを意図しており、スタイラス204の如きよく知られている入力デバイスに対する多くの変形を包括する。領域205は、スタイラス204が表示面202のどこに接触したかをユーザが判断することを可能にするフィードバック領域または接触領域を示す。
様々な実施形態において、そのシステムは、インクを取り込み、処理し、保管するのにアプリケーションが使用できるCOM(構成要素オブジェクトモデル)サービスの集合としてインクプラットフォームを提供する。1つのサービスは、アプリケーションが、開示されたインクの表現を用いてインクの読取りおよび書込みを行うことを可能にする。インクプラットフォームは、拡張可能マーク付け言語(XML)のような言語を含むマーク付け言語を含むこともできる。さらに、システムは、他の実装形態としてDCOMを使用できる。マイクロソフトコーポレーションによるWin32プログラミングモデルおよびNetプログラミングモデルを含むさらなる実装形態を使用することができる。
リアルタイムインキングの概要
ユーザは、スタイラスまたはペンを使用して、電子インクを作成する。インクは、さらなるプロセスが完了するまで待つのではなく、ユーザがインクを作成する時刻により近い時刻にインクを表示することを可能にするシステムによって処理される。
図3は、本発明の態様による電子インクを処理するための例示的なシステムを示す図である。入力マネージャは、入力マネージャ301においてインクを受け取る。ペンおよびデジタル化タブレット、およびWacomタブレット等を含む様々な入力マネージャが当該技術分野に存在する。インクデータの存在は、スタイラス入力イベント302と呼ばれる。次に、スタイラス入力イベント302は、インク収集器303によって処理される。インク集合オブジェクト303は、入力マネージャ130からの情報の最初の処理を実施する。次いで、システムは、ディスプレイ305上に出力用インク304を動的に描写する。他の構成要素は、インクのより複雑な処理を行うことができる。例えば、筆画を既存のインクオブジェクト306に加え(またはインク筆画を含む新たなインクオブジェクトを作製し)、受け取ったインク(データと称する)を1つまたは複数の特性と関連づけることができる。これは、インクオブジェクト特性を有する構成要素307によって示される。次いで、ディスプレイ305上の表示のために、インクオブジェクトの細描写(スムーシングが望まれる場合)308を行うことができる。
図4は、図3のアプローチの代替的なアプローチを示す図である。図4は、入力内部スタイラス入力源401、入力マネージャ402(入力キューを有しても有さなくてもよい)、インク集合オブジェクト403、インクオブジェクト特性を有する要素405、リアルタイムインキングオブジェクト404およびディスプレイ406を含む。
2つのタイプの入力の集合、すなわちスタイラスとデジタイザの間の接触に起因するデータと、デジタイザ上の移動に起因するデータとを処理することができる。デジタイザに接触しないデジタイザ上の移動は、「空間スタイラス」入力と呼ばれる。内部スタイラス入力源は、2つの入力の集合を分離し、それに応じてそれらを追跡する。図4に示される様々な活動を以下に列記する。
A)空中スタイラス入力イベントを入力マネージャ402の入力キューに追加する。
B)入力マネージャ402は、空中スタイラス入力をインク集合403に送る。
C)入力マネージャ402は、焦点変化が生じたかどうかを判断するための処理に向けて空中スタイラス入力を出力する。リアルタイムインキングオブジェクト404(リアルタイムスタイラスコントロールとも称する)にも通知される。リアルタイムインキングオブジェクト404は、何らかの必要なデータ(インク色等)を要求することができる。
D)空中スタイラスイベントは、通常の処理を続行し、インクオブジェクト特性を有する要素405に続く。
E)スタイラス「ダウン」イベントを受け取って、リアルタイムインキングオブジェクト405に送る。
F)リアルタイムインキングオブジェクト405は、点を受け取りながら描画する。これを動的描写と呼ぶことができる。
G)リアルタイムインキングオブジェクト405は、描画したイベントを入力マネージャ402に送って、ユーザインターフェーススレッドが利用可能になる後の時刻に送らせる。
H)筆画を集め、次いでインクプロジェクトに追加する。
I)該要素は、リアルタイムインキングオブジェクト405に、動的に描画された筆画を除去するように通知し、次いで新たな筆画を再描画する。この動作は、筆画毎に行ってもよいし、いくつかのインク筆画に対して適用してもよい。
J)全てのインキングが完了した後にインクを描写する。
図4に示される上記アプローチは、インクラグが「スタイラスダウン」イベントに対してのみ致命的であるという利点を提供する。インクラグは、スタイラスが活動的に描画している間のみ認知可能である。マイナスのユーザ影響を与えることなく、他の全てのスタイラスイベントを遅らせることが可能である。
図4のアプローチは、マルチスレッド感知を入力マネージャキューおよびRTIオブジェクトにおいて局在化させる。また、焦点が確立されると、ラグまたは遅れが生じないことを保証する。
オブジェクトモデル
図5は、様々な度合いで組み合わせることができる5つの部分を含む本発明の態様と併用することができる様々なオブジェクトを示す図である。以下の説明に用いられる様々な用語を以下に列記する。
第1の部分は、電子インクの収集をサポートするペンサービスアプリケーション501である。例としては、マイクロソフトコーポレーションから提供され、Windows(登録商標)XPタブレットエディションで使用されるwisptis.exeがある。
第2に、リアルタイムスタイラスサービス503(プロセス1 502と対応づけて示されている)は、スタイラスデータをペンサービス501から適切な収集用ウィンドウに送るアプリケーションである。リアルタイムスタイラスサービス503は、無数のオブジェクトを処理することができ、または過使用を最小限にするために制限されうる。例えば、制限される場合は、スレッド毎のオブジェクトの例示的な数を16、32、64および128等とすることができる。勿論、他の値を適用することもできる。
第3に、リアルタイムスタイラス504および505をプロセス1に示す。リアルタイムスタイラス504および505は、スタイラスデータをリアルタイムスタイラスサービス503から受け取ることができる。各リアルタイムスタイラスオブジェクトは、ウィンドウの所定の部分または(対応付けられたウィンドウに基づく)領域またはそのリアルタイムスタイラスオブジェクトに対するスタイラスデータを受け取ることができる。
多数のプロセスを以下にして同時に実施できるかを示すために、プロセス2 506も示す。リアルタイムスタイラスサービス507は、また、ペンサービス501からスタイラスデータを受け取ることができ、この情報をリアルタイムスタイラス508および509に送る。
リアルタイムスタイラスオブジェクト504、505、508および509を、図6により詳細に示す。ペンサービス構成要素601は、データ流Aにおいて、データをリアルタイムスタイラスサービス602に送る。次に、リアルタイムスタイラスサービス602は、データ流Bにおいて、スタイラスデータを1つまたは複数のリアルタイムスタイラス構成要素603に送る。あるいは、点線で示されるリアルタイムスタイラスサービス602によって示されるように、このサービスを省略し、スタイラスデータをリアルタイムスタイラス構成要素603に直接流すことができる。
リアルタイムスタイラス構成要素603で受け取られたスタイラスデータをプラグ可能構成要素606〜608に直接供給することができる。あるいは、受け取ったスタイラスデータを、順序処理に向けてその入力キュー604に供給することもできる。次に、リアルタイムスタイラス構成要素603は、スタイラスデータを1つまたは複数のプラグ可能構成要素に送る。これらの構成要素606〜608は、現在描写されているスタイラスデータを記憶する視覚的記憶機構を有する動的描写体608を含むことができる。データ流は、データ流CおよびDを含む。
動的描写体608は、1つまたは複数の筆画のパケットデータを蓄積し、視覚的記憶機構609に記憶することができる。これは、例えば、筆画がエッジの上に伸び、次いでスタイラスがまだダウンしている間にインク可能領域に再度入るときに有利である。ペンがダウンしている間に表示ウィンドウが再塗装要求を受け取ると、記憶機構609は、そのウィンドウを迅速に再塗装するためにその情報を提供する。動的描写体が記憶機構609にスタイラスデータを記憶しなかった場合は、システムは、データがそれを出力キューから出して、インク集合オブジェクト611に入れるまで、ウィンドウを再塗装し、最も新しい1つまたは複数の筆画を描写するのを待たなければならないことになる。
プラグ可能構成要素606〜608は、インターフェースを通じて一定の呼出に応答して、スタイラスデータを処理できるクラスオブジェクトである。使用できるインターフェースの一例としては、IStylusSyncpluginが挙げられる。プラグ可能構成要素606〜608の組合せは、デベロッパが、プラグイン内のパケット流からのデータを完全に制御し、修正し、そしてさらに消去することを可能にする。次いで、データ流Bからの修正されたパケット流を出力キュー605に記憶する。
出力キュー605の出力は、データ流FおよびGを通じて、プラグ可能構成要素610および611の他の集合に流れる。これらの構成要素は、ジェスチャレコグナイザ610と、インク収蔵庫612を有するインク集合オブジェクト611とを含むことができる。様々な追加的プラグインオブジェクトをデータ流FおよびGによって引き出すことができる。
プラグ可能構成要素606〜608をプラグ可能構成要素610および611から分離するための決定を様々な基準に基づいて行うことができる。例えば、構成要素606〜608を同期プラグインとし、構成要素610および611を非同期プラグインとすることができる。あるいは、スタイラスデータ処理時間がより短いプラグインをデータ流C/Dで処理することができ、より長いデータ処理時間はデータ流F/Gによって対処することができる。1つのスレッドC/Dからの構成要素をスレッドF/Gの構成要素と交換することができる。
プラグ可能構成要素606〜608と610〜611の2つの集合を分離する利点は、プラグ可能構成要素が異なるスレッドによって処理されることである。ここで、同期プラグインと非同期プラグインの違いは、それらが実行されるスレッド、および呼出順序にある(リアルタイムスタイラス603が実行されるスレッドによって同期プラグインを呼び出すことができ、非同期プラグインは、パケット流が同期プラグインによって処理され、出力キュー605に記憶された後で、通常はユーザインターフェースアプリケーションスレッドによって呼び出される)。
ある場合は、リアルタイムスタイラス構成要素603からペンサービス601またはリアルタイムスタイラスサービス602に戻る公共通信が存在しうる。他の場合は、リアルタイムスタイラス構成要素603からペンサービス601またはリアルタイムスタイラスサービス602に戻る公共通信が存在しない。通信を防止することで、これらの構成要素からのデータの流れを容易にすることができる。
ある状況において、リアルタイムスタイラス構成要素603は、所定の順序で呼出をプラグインに送ることによってデータを検索するときをプラグインに通知することができる。これらの通知を検索するプラグインの順序およびタイプは、デベロッパによって制御されうる。イベントにおけるパケットデータをこれらのプラグイン606〜608ならびに610〜611によって監視することができる。
本発明の態様は、ペンサービスからのパケットデータ、ディスプレイ、タブレットおよびペン等に関する変化の通知、ならびにリアルタイムスタイラスによって処理できる他のデータ集合を含む様々なデータタイプを扱う。以下の説明は、ペンサービスからのパケットデータの使用について記載しているが、これは、リアルタイムスタイラス603に使用できる多くのデータのタイプの1つにすぎない。以下の説明では、パケットデータは、RTSによって処理されるデータタイプについての説明例として用いられているが、RTSによって処理できるより一般的なデータを示すものとして理解されるべきである。
リアルタイムスタイラス構成要素603は、キュー604および605を含むこともできる。出力キュー605は、時間スタイラス構成要素603が処理するパケットデータの全てを維持する。パケットデータがプラグインから戻されると、パケットデータはデータ流Eからの出力キュー605に追加される。次いで、出力キュー605は、プラグイン(例えば、非同期で、一般にインク集合オブジェクト611を含む)によって使用されうる。これは、データを(データ流Fから)抽出し、データ流Gにおける出力キュー605内に保持されたデータからインクオブジェクトを構築することによって行うことができる。
出力キュー605のサイズは一定であってもなくてもよい。一定であれば、キュー605が満たされた後に、続いて受け取られるデータパケットが失われることがある。一定でなければ、キュー605のサイズが拡大して、追加的なデータパケットを受け取ることができる。一定サイズのキューを維持する利点は、データのバックログを合理的な時間で処理できるバックログに限定することである。例えば、エンドユーザがシステムと相互作用し、システムが応答しなくなった場合は、エンドユーザは、システムが再び応答するまで休止することによって、キューがデータを失うことなくバックログを処理することを可能にするのが一般的である。また、何らかの理由で、大容量のスタイラスデータが作成された場合は、キュー605は、一定サイズを有することによってデータの一部を除去するのに役立つことができる。
データを順次受け取る際に出力キュー605を固定することができる。あるいは、以下に記載するように、データを順不同で出力キュー605に配置して、リアルタイム描写との同期を維持することができる。
入力キュー604は、データ流B(または、リアルタイムスタイラスサービス602が存在しない場合は、データ流A)における情報を受け取る。入力キューは、データをプラグイン606〜608に入力するプロセスを提供する。あるいは、スタイラスデータは、プラグイン606〜608に直接流れることができる。データ流BとCの間の仲介物(ここではデータ流Z)として入力キュー604を有することに対する利点は、作成されたスタイラスデータを何も存在しないところに挿入できることである。
高レベル制御の流れを以下に記載する。
a.リアルタイムスタイラス603は、プラグイン606〜608に通されたパケットデータの処理を終了する。
b.リアルタイムスタイラス603は、処理したデータを出力キュー605に記憶する。
c.リアルタイムスタイラス603は、入力キュー604に保留中のパケットデータが存在するかどうかを調べる。データが存在すれば、入力キューからのそのパケットを取り出し、上記の工程aで処理する。
d.リアルタイムスタイラス603は、ペンサービス601に保留中のパケットデータが存在するかどうかを調べる。存在すれば、ペンサービス601からのそのパケットデータを取り出し、上記の工程aで処理する。
e.このプロセスは、工程cで繰り返される。
リアルタイムスタイラスオブジェクトが以下にしてタブレットペンデータを処理できるかに対する代替的なアプローチを以下に記載する。図8、11および13に対する小さな改造によって以下のことを適用することができ、その改造は、同期スレッド上のプラグインの配列(デージチェーンされた各プラグインからリアルタイムスタイラスオブジェクトによって個別的に呼び出された各プラグインまで)であることが理解される。
a.リアルタイムスタイラスオブジェクト603は、まずその入力キュー604のプラグインデータオブジェクトを、次いでペンデータ流Bからのプラグインデータオブジェクトを調べる。
b.リアルタイムスタイラスオブジェクト603は、Cの1つのプラグインデータオブジェクトをその同期プラグイン集合におけるオブジェクト606〜608に送る。各同期プラグイン606〜608は、入力キュー604または出力キュー605にデータを追加することが可能である。
c.プラグインデータオブジェクトが同期プラグイン集合の全てのメンバーに送られると、プラグインデータオブジェクトをリアルタイムスタイラスオブジェクトの出力キュー605に配置する。
d.次いで、リアルタイムスタイラスオブジェクト603は、(入力キュー604またはデータ流Bからの)処理する次のプラグインデータオブジェクトを調べる。
e.リアルタイムスタイラスオブジェクトの出力キュー605がデータを含んでいうる間に、リアルタイムスタイラスオブジェクト603は、1つのプラグインデータオブジェクトを出力キュー605からその非同期プラグイン集合610〜611におけるオブジェクトに送る。各非同期プラグイン610〜611は、入力キュー604または出力キュー605にデータを追加することができる。しかし、非同期プラグインはUIスレッド上で実行できるため、キュー604/605に追加されたデータは、タブレットペンデータ流Bにおけるデータの残り、またはリアルタイムスタイラスオブジェクトの入力604および出力キュー605に対して、設定された関係を有さない。
第4に、システムは、非同期プラグイン611(ここではインク集合オブジェクトとして示される)を含む。ここで、インク集合オブジェクトは、1つまたは複数のプラグインオブジェクトを表すことができる。インク収集および保存は、UIまたは非同期スレッドで行われる様々な活動の1つでありうる。パケットデータ(または修正パケットデータ)は、同期プラグイン606〜608から戻ると、リアルタイムスタイラス603の出力キュー605に配置される。次いで、リアルタイムスタイラス603は、データを出力キュー605に配置する。次いで、データは、次のプラグイン610〜611の集合(集合またはチェーン)に送られる。これは、非同期スレッド上の様々なプラグインによって指定されるようにデータを破壊/削除/再循環/解放できるインク収集オブジェクト611にデータを送ることを含むことができる。
第5に、システムは、基本的な機能をシステムに提供する(同期または非同期スレッドのいずれかまたは両方のスレッド上で動作するように設計されうる)標準的なプラグインを含むことができる。標準的なプラグインは、動的描写体608と、ジェスチャレコグナイザ610とを含むことができる。勿論、要望に応じて、標準的なプラグインを他のプラグインと交換することができる。さらに、本発明の態様のいくつかの実装形態において、リアルタイムスタイラスには、最初から標準的なプラグインを含めなくてもよい。むしろ、デベロッパは、第3の供給者から選定し、かつ/または必要に応じて独自のプラグインを作成するのがよい。
図7および8は、図6の構造の代替的なバージョンを提示している。図7は、スタイラスデータをリアルタイムスタイラス702に提供するペンサービス701を示す図である。入力キュー703(使用してもしなくてもよい)は、スタイラスデータを同期プラグイン801〜805に提供する。ここで、各プラグインは、プラグイン集合の一部である。あるいは、プラグインは、プラグインのチェーンの一部であってもよい。最後の同期プラグイン(リアルタイムスタイラス同期プラグインN805)の後に、スタイラスデータ(または修正スタイラスデータ)は、出力キュー709に配置され、次いで後続のリアルタイムスタイラスイベント非同期プラグイン710および808によって処理される。
図6および7のデータに関しては、RTSを通じて送信されるデータ集合は、単一データ集合であってもよいし、デジタイザは非常に高速でサンプリングするために効率性を目的として束ねられたデータ集合の束であってもよい。これらのデータ集合は、様々なイベントの通知を提供し、RTSを通じて新たな情報を送る。ある状況では、データ集合を削除することができる。データ集合がデータ集合の束である他の状況では、その束における単一のデータ集合を削除しながら、他のデータ集合を保持することができる。実際には、データ集合の束が修正される。次いで、リアルタイムスタイラス702は、私的なメッセージを、それが添付されるウィンドウに通知し、入力キューにおける次のデータ集合に進むことができる(存在しない場合は、ペンクライアントインターフェース上のペンサービス701によって呼び出される機能から戻る)。
図8Aおよび8Bは、様々な動作のデータ流を示す図である。図8Aは、ペンサービス701で受け取られている色変化を示す図である。リアルタイムスタイラス702は、同期プラグイン集合809および非同期プラグイン集合810を含む。同期プラグイン集合は、同期プラグイン1 801、動的描写体804および同期プラグイン3 805を含む。同期プラグイン集合809からの出力は、出力キュー709に送られる。非同期プラグイン集合810は、出力キュー709からデータ集合を受け取り、非同期プラグイン1〜3 811、812および813で処理する。
図8Aおよび8Bについての以下の説明では、データパケットが使用される。しかし、情報を伝達するのに他のデータ集合も使用できることが理解される。データパケットは、使用できるデータ集合のタイプの一例にすぎない。ここで、リアルタイムスタイラス702は、出力キュー709に2つのデータパケットAおよびBを有する。データパケットCは、色変化CCがペンサービス701によって受け取られるときに、動的描写体804によって処理されている。色変化CCをすぐに非同期プラグインの1つに送り、それによって処理することができる。しかし、そのようにすると、データパケットA、BおよびCが色変化の前に作成される当惑的状況が発生しうる。よって、非同期プラグイン集合810によるデータパケットA、BおよびCの最終的な処理および最終的な描写の後でのみ色変化を処理することが望まれることもある。
色変化CCの処理を遅らせるために、プラグイン集合809における同期プラグインの1つは、データオブジェクトCCを作成し、入力キュー703に押し込むことができる。次に、そのデータオブジェクトを入力キューによってオンラインで処理することができ、その結果は、色変化が出力キュー709においてCCで表される。このアプローチを用いて、筆画の色を変える命令を既に受け取られたデータパケットで適性に指示することができる。
図8Aは、リアルタイムスタイラス構成要素702によって処理されている色変化の例を示す図である。しかし、入力キューまたは出力キューによる処理のためのオブジェクトを作成するこのアプローチは、他のイベントを処理するのに役立つ。
いくつかのプラグイン(動的描写体を含むが、それに限定されない)は、2つの範疇の特性、すなわち、変化が即時効果を示す特性と、次のスタイラスダウン(筆画開始)から効果を示す特性とを有することができる。それら2値の範疇の間の区別は、技術的要素、およびユーザの経験およびユーザの予想についての問題等を含む様々な理由によって発生しうる。例えば、筆画およびイベントがユーザの観点から発生した指示を保持するように、筆画の色変化を遅らせることができる。
図8Bは、データパケットを処理し、同時にジェスチャ認識オブジェクトを処理するリアルタイムスタイラス構成要素702を示す図である。出力キュー709は、スタイラスダウンイベント(SD)、データパケット(P)およびスタイラスアップイベント(SU)を含むいくつかのデータオブジェクトを含む。スタイラスアップイベントSUが同期プラグイン集合809でペンサービス701から受け取られると、ジェスチャレコグナイザは、1つまたは複数の前のデータパケットPからジェスチャを認識しようと試みる。データパケットが、ジェスチャとして認識された場合は、ジェスチャレコグナイザ814は、ジェスチャ認識オブジェクトGRを生成し、入力キュー703に配置する。次いで、オブジェクトのジェスチャ認識GRは、同期プラグインを通って、出力キュー709に送られる。出力キュー709から、ジェスチャ認識オブジェクトGRは、同期プラグインを通って、次いで破壊/消去/再循環/解放される。ジェスチャ認識オブジェクトを作成し、入力プラグイン集合809を通じて戻す利点は、その処理により、受け取られたジェスチャ認識オブジェクト出力キュー709に送る前に、修正し、かつ/または消去することが可能になることである。さらに、ジェスチャ認識オブジェクトGRを同期プラグイン集合809および非同期プラグイン集合810によって処理させることによって、スタイラスダウンイベントとスタイラスアップイベントの間のデータパケットは、ジェスチャオブジェクトGRの存在に取って代わられるため、それらを除去することができる。あるいは、ジェスチャが対応するデータのイベントを無視してよいが、それは下流の他のプラグインに関係することもある。概して、システムは、挙動がデベロッパの所望の結果と符合するように、すなわち、無視されているデータが、データ構造に配置された後にそこから実際に除去されるように、ジェスチャレコグナイザが存在するときにどのプラグインが存在するかを管理する。
例えば、(パケットのテーブルを構築することができ、次いでSUにインク筆画を作成する)インク収集オブジェクトプラグインは、GRがそこに達する時までに既に筆画を作成することができる。そのため、GRを受け取ると、インク収集オブジェクトは、前に作成された筆画を単に消去することができる。次いで、他のプラグインは、GR上の適切な活動をトリガする役割を担うことができる。
同期および非同期プラグイン集合内のデータの処理は、データに対する様々な処理技術に対応する。あるデータがいくつかのプラグインにのみ関係していた場合は、他のプラグインはそのデータを必要に応じて、無視するか、または送ることができる。例えば、第1のプラグインは、データパケットがディスプレイのインク不可能領域に関連していることを判断することができる。第2のプラグインは、以下の方法を含む様々な方法でデータパケットを処理することができる。
a.第1のパケットからの通知を無視する。
b.データパケットが後続のプラグインに送られないように通知を吸収し、破棄する。
または、
c.(例えば、第2のプラグインがこれらのタイプのパケットに持つ関心の程度を示す特性を設定することによって)それが通知に関心がないことを明記する。ここで、それが、データパケットに関心がないことを明示すると、リアルタイムスタイラス構成要素は、第2のプラグインを省く。
この第3のアプローチCは、機能呼出のオーバヘッドを、必要とされないときに除去することによって、性能便益を提供する。
「カスタムスタイラスデータをキューへ追加」法を呼び出すことによってカスタムスタイラスデータをリアルタイムスタイラスオブジェクトに追加することが可能である。「カスタムスタイラスデータをキューへ追加」法の呼出が、その「Iスタイラス同期プラグイン」法の1つの呼出に応答して同期プラグインからなされる場合は、カスタムスタイラスデータを確定的にタブレットペンデータ流に追加する。さもなければ、非確定的に追加する。「カスタムスタイラスデータをキューへ追加」法は、「リアルタイムスタイラス」オブジェクトが使用不可の場合は、例外をもたらす。
3つの場合のいずれかにおいて、カスタムスタイラスデータをリアルタイムスタイラスオブジェクトのキューに追加することができる。
a.キューパラメータが「入力」に設定されるときは、タブレットペンデータ流からの新たなデータの前に、カスタムデータをリアルタイムスタイラスオブジェクトの入力キューに追加し、同期プラグイン集合に送る。
b.キューパラメータが「出力」に設定されるときは、同期プラグイン集合によって現在処理されているデータの後に、カスタムデータをリアルタイムスタイラスオブジェクトの出力キューに追加する。
c.キューパラメータが「即時出力」に設定されるときは、同期プラグイン集合によって現在処理されているデータの前に、カスタムデータをリアルタイムスタイラスオブジェクトの出力キューに追加する。
上記の各々の場合において、同期プラグイン集合における後続のプラグインによって追加されたデータは、直前のプラグインによって追加されたデータの後に追加される。
カスタムスタイラスデータは、カスタムスタイラスデータオブジェクトとしてキューに追加され、プラグインは、「Iスタイラス同期プラグイン.カスタムスタイラスデータ追加」または「Iスタイラス非同期プラグイン.カスタムスタイラスデータ追加」法を通じてこのデータを受け取る。
動的描写体およびジェスチャレコグナイザオブジェクトは、カスタムスタイラスデータをキューに追加することができる。
リアルタイムスタイラスオブジェクトは、それが、その「カスタムスタイラスデータをキューへ追加」法の呼出を受ける元となるスレッド上で、「Iスタイラス同期プラグイン.カスタムスタイラスデータ追加」法を呼び出す。
リアルタイムスタイラスオブジェクトは、インクを収集するように構成されていても、いなくてもよい。それがインクを収集する場合は、リアルタイムスタイラスを使用して、インクデータをインク集合オブジェクトに送ることが可能である。インク集合オブジェクトは、リアルタイムスタイラスの出力に差し込むインク集合プラグインの形をとることができる。
インク分析または手書き認識は、リアルタイムスタイラスオブジェクトの機能ではない。インク集合プラグインがインクを収集・作成すると、またはインクを認識したいときは、インクを「レコグナイザコンテキスト」または「ディバイダ」オブジェクトにコピーすることが可能である。
上述したように、インクを複数回表示することができる。最初は、インクを動的描写体で表示することができる。二度目は、インクがインク集合オブジェクトに収集された後で、インクを静的描写体で表示することができる。これにより、他のタイプの描写体を使用して、インクがインク集合オブジェクトから受け取られたときにインクを描写することが可能になる。例えば、多色インクを静的描写体の一部として有することができる。この効果の集合を動的描写体に押しつけることは、同期スレッドには負担が大きすぎることもある。そこで、描写体を作成し、それを非同期スレッドに接続することができる。あるいは、デフォルトの動的描写体を無視し、独自の動的描写体を作成し、それを同期スレッドに差し込むこともできる。オブジェクト指向のアプローチで用いられるように、多型、凝集または封込めを通じて標準的な動的描写体を内部的に再使用する動的描写体を作成することもできる。
非同期スレッド上のこの新しい描写体を静的描写体として再使用してもよいし、この目的に合わせて新しい描写体を作成してもよい。例えば、インクを、木炭または他の先端で描画されているかのように描写したいことがある。さらに、物理的インクが乾燥する様子を表現するために、インクが(急速または徐々に)経時的に絶えず変化しているかのようにインクを表示する描写体を作成することができる。さらに、インクを強調表示するために、(虹のような)循環色でインクを表示する描写体を作成することができる。具体的には、スタイラスダウン、パケットおよびスタイラスアップ通知に従う同期プラグインを作成することによって、動的描写体プラグインを作成することができる。次いで、プラグインは、筆画を描かれているように描写することができる。新しい描写体は、インキングならびに様々な選択機構を処理することができる。
動的描写体プラグインは、タブレットペンデータがリアルタイムスタイラスオブジェクトによって処理されているときに、それをリアルタイムで表示するオブジェクトである。後に、フォーム再生のようなイベントに対して、動的描写体プラグインまたはインク集合プラグインは、インクを再描画することができる。
動的描写体オブジェクトは、「Iスタイラス同期プラグイン」インターフェースを実装する。動的描写体は、また、非同期インターフェースを実装することもできる。動的描写体オブジェクトは、インクを描画されているようにリアルタイムで描写する。特に指定がなければ、再生法が呼び出されると、動的描写体オブジェクトは、(「動的描写体のキャッシュドデータ」に対応する)既に収集された任意の他の筆画とともに、現在収集されている筆画を再描画する。例えば、インクが所定の形状の外に描写されないように、クリッピング領域によって描画の挙動を拘束するためのパラメータを含む再生挙動の他のオーバーロードが可能である。
これは、(動的描写体が一時的にインクデータを保存することができる)様々な図に示されている。動的描写体オブジェクトは、その「Iスタイラス同期プラグイン.スタイラスアップ」法の呼出を受け取ると、筆画データを保存し、その筆画に対する「スタイラスアップデータ」オブジェクトに応答してカスタムスタイラスデータを入力キューに追加する。「カスタムスタイラスデータ」オブジェクトの「カスタムデータId」特性は、「ダイナミック描写体キャッシュドデータGuid」値に設定され、「カスタムスタイラスデータ」オブジェクトのデータ特性は、「ダイナミック描写体キャッシュドデータ」オブジェクトを含む。次いで、インクが下流で描写されると、対応づけられたデータの動的描写体のキャッシュをクリアすることができる。あるいは、インク筆画は、まだインク収集オブジェクトを通って、それによって記憶されていないため、インクを再生する(原稿の筆画および「キャッシュドデータ」に記憶されたデータを再描画する)と、必ずインク筆画の動的描写体のキャッシュをクリアされるわけではない。
図9および10は、本システムの態様を確立するためのプロセスを示す図である。図9では、工程901において、リアルタイムスタイラス構成要素をインスタンス化する。工程902において、同期および非同期プラグインをインスタンス化する。これは、動的描写体および/またはジェスチャレコグナイザ903を含んでいてもいなくてもよい。工程904において、プラグインをプラグイン集合に追加する。工程905において、リアルタイムスタイラスを使用可能にする。工程906において、リアルタイムスタイラスを通じてペンデータを受け取る。
図10は、リアルタイムスタイラスを使用するためのプロセスを示す図である。工程1001において、RTSによってパケットを受け取る。これは、入力キューの動作を含んでいてもいなくてもよい。入力キューは、任意のデータの挿入を、それが同期集合を通るように何時でもサポートする。本例では、RTSのペンクライアントインターフェースの実装に対する機能を呼び出す結果として、データを入力キューに挿入する唯一の構成要素は、ペンサービスである。
工程1002において、パケットは、同期プラグイン集合に入る。図8のシステムのようなシステムに対しては、この工程は、パケットをプラグインの第1のプラグインに送ることを意味することになる。リアルタイムスタイラスは、集合(またはチェーンが存在する場合はチェーン)における第1のプラグインにおける特定のパケットデータに適した機能を呼び出す。多くの場合、この構成要素は、データを修正するか、またはそのままにしておくかの選択肢を有する。構成要素は、その動作を終了すると、次のプラグインオブジェクトについて同じ機能を呼び出す等である。
工程1003において、パケットは、同期プラグイン集合(またはチェーン)を進む。これは、工程1004に示されるように、パケットをジェスチャレコグナイザまたは動的描写体に送ることを含んでいてもいなくてもよい。動的描写体を使用する場合は、カーソルダウンイベント(ペンダウンイベントとも称する)のデータを記憶機構に蓄積し、それらを画面に描写すること(動的描写体の動作)を開始することができる。カーソルアップイベント(またはペンアップイベント)において、動的描写体は、次のカーソルダウンイベントのためにその記憶機構をクリアすることができる。
ジェスチャレコグナイザを使用する場合は、ジェスチャレコグナイザは、カーソルダウンイベントを検出し、それ自体の記憶機構(例えば記憶機構807)へのデータの蓄積を開始することができる。筆画が蓄積するにつれて、ジェスチャレコグナイザは、筆画をレコグナイザに導き、筆画が所望のパターン(またはジェスチャ)に対応する場合は、a)ジェスチャデータを出力キューに追加し、b)記憶機構を空にし、次のカーソルダウンイベントをキューに通して蓄積を再び開始する。ここで、ジェスチャは、1つまたは複数の筆画を含むことができることを注記しておく。以下により詳細に説明する図14は、図10のプロセスに関して、多数の筆画ジェスチャをどのように処理できるかを示す図である。
プラグインがどの程度前の筆画を把握すべきか、または把握できるかは、プラグインの目的に左右される。
a.1つの例示的なシナリオにおいて、ジェスチャを検出しているプラグインは、ジェスチャに応答して活動を行う役割を担うことができる。それは、筆画に関して何かを把握する必要はない。例えば、ウィンドウ内の「サークル」ジェスチャが、そのアプリケーションに対する「削除」を意味する場合は、ジェスチャを受け取るプラグインは、単にそのウィンドウに「削除」キー入力を送ることになる。この例示的なシナリオでは、インクがウィンドウに収集されないことがある。それは、テキストを含むウィンドウであってもよく、この場合、筆画データが単に通過して回収されないように、RTS枠組を構成することができる。したがって、プラグインは、筆画を保存する必要はない。
i.代替的な場合において、上記の「インタープレタ」プラグインは、ジェスチャが翻訳されたため、その筆画を持続しないことを下流のプラグインが把握するように、独自の通知を生成することができる。
b.他の例示的なシナリオにおいて、プラグインは、インク収集を行い、動作を編集することができる。この規範的な例は、全ての筆画が潜在的にジェスチャであり、それらがジェスチャとして扱われる場合は、筆画が実質的に削除されるインクコレクタオブジェクトのモード(インクおよびジェスチャモード)である。したがって、プラグインは、筆画がジェスチャとして翻訳されてしまった場合に、筆画を見つけて削除できるようにするために、筆画を保存する。
これらの例示的なシナリオのいずれにおいても、実際には、単一の筆画ジェスチャと多数の筆画ジェスチャとの違いは問題ではない。アプリケーションシナリオは、多数の筆画ジェスチャ(例えば矢印)を必要とすることがあり、その場合は、上記の例示的なプラグインのいずれもが不要な多数の筆画ジェスチャを認識することになる。
次に、工程1005において、パケットは、同期プラグインの集合によって処理された後に出力キューに入る。先述したように、プラグインの集合は、そこに送られたオブジェクトの各々を処理するのに際して、データパケットを修正、削除、かつ/または交換することができる。同期プラグインのいずれもがパケットを削除しなかったとすると、工程1005を実行する。
工程1006において、パケットは、非同期プラグイン集合を進む。
動的描写および湿式インク
システムは、スタイラスデータを迅速かつ効率的に処理する能力を提供する。電子インクを真のインクのように挙動させるために、電子インクは、スタイラスの先端から、真のインクと同じくらい容易に流れるように見えることが必要である。インクの流れにおける小さな破損および遅れは、電子インク体験にとって有害である。電子インクが、スタイラスからスムースに流れるように見えるようにするための様々なアプローチを以下に記載する。「湿式」インクは、動的描写体が、インク収集後に、静的描写をどのくらい長く保持するかを制御する機能と見なされる。インクの寿命の管理を扱いやすくするために、通知(ここでは動的描写体キャッシュドデータと称する)を利用して、インク収集プラグインが、キャッシュド(または湿式)インクを動的描写体から解放することを可能にする。
様々な異なるタイプの動的描写体を作成することができる。例えば、動的描写は、微尖端またはチゼル尖端ペンによって生成されたようなインクを描写する代わりに、半透明水性塗料(「水性色」とも称する)によって生成されたようなインクを描写することができる。また、木炭スタイラスによって生成されたようなインクを描写する動的描写体を作成することができる。さらに、動的描写体は、インクが固定されずに、定期的に色を変化させ、かつ/または移動するようにインクを描写することができる。例えば、合体して所望のインク形態になるインクまたはダストの小滴、究極的に移動して所望のインクを形成する小さなウォーム、または色および形状を変化させるインクのように見えるインクを描写することができる。
動的描写体は、RTSの非同期スレッドに対応づけられたオブジェクトによって後に描写されるのと同じ形態でインクを表示することができる。あるいは、動的描写体によって描写されたインクと、RTSの非同期スレッドに対応づけられたインクの最終的な表示との間に関係が存在していてもよい。例えば、動的描写体は、非同期スレッド上のプラグインによって後に第2の色調または形状に修正されることになる第1の色調または形状でインクを示すことができる。これは、ユーザにとっては、スタイラスから流れているインクまたは塗料が乾燥するように見えることがある。
動的描写および湿式インクについての以下の説明を図6および7に適用することができる。説明を目的として、図6を参照する。図7の構成も同様に適用可能で、以下の説明は、図7をも包括するのが望ましい。
図6を参照すると、デジタイザ入力は、ペンサービス601から進入し、リアルタイムスタイラス603に到達する。リアルタイムスタイラスは、デジタイザ入力を複数の同期プラグインオブジェクト606〜608に通し、その結果を出力キュー605に記憶する。オブジェクト606〜608は、オブジェクト606〜608の間にリンクを描くインターフェース、例えば「Iスタイラス同期プラグイン」を通じて接続されうる。次いで、オブジェクト610および611の非同期プラグイン集合は、出力キュー605から出力を受け取り、その処理を開始する。例えば、インク収集オブジェクト611は、出力キューからデジタイザ入力を抽出し、それをインクとして記憶することができる。デジタイザ入力の動的描写は、リアルタイムスタイラス構成要素603が、デジタイザ入力(修正または未修正)を動的描写体608に通すときに行われる。デジタイザ入力(修正または未修正)の静的描写は、デジタイザ入力がインク収集オブジェクト611の内側のインク記憶機構に記憶されているときに行われる。
動的描写608の後で、デジタイザ入力がインク収集オブジェクト611の内側に記憶される前にインキング表面が無効になる場合に1つの問題が発生しうる。得られるユーザ体験は、デジタイザ入力がインク収集オブジェクト611に到達するまで表示インクが消失することになる。ユーザは、インクを再度作成する必要があるものと考え、そうすることに時間を費やすため、結果的には重複したインクが記憶される。この視覚的問題は、インクがすぐにユーザに示されないこと、または遅れの後に示されることに起因する。
このインク消失シナリオを回避するために、動的描写体608とインク収集オブジェクト611の間に通信プロトコルを確立することができる。動的描写体608は、(例えば、デジタイザ入力がインク記憶機構612に記憶されたときに)インク収集オブジェクト611によりデジタイザ入力を解除できることを指示されるまで、デジタイザ入力を視覚的記憶機構609に継続して蓄積することができる。
ここでの目的に応じて、動的描写体608におけるデジタイザ入力の一時的キャッシュ609を現行ではキャッシュデータと呼ぶ。湿式インクは、システムが、デジタイザ入力をインク集合オブジェクト611に記憶する前にインクを描写するための機能である。
図11は、どのようにしてインク集合オブジェクトが、そのキャッシュドデータを解放するように動的描写体に警告するかを示す図である。動的描写体1201は、視覚的記憶機構1202を含む。インク収集オブジェクトは、インク記憶機構1204を含む。動的描写体1201は、スタイラスデータを視覚的記憶機構1202に記憶すると、オブジェクトを入力キュー1205に出力する。リアルタイムスタイラス(例えば702)は、ペンサービス701を検索する前に処理する次のデータのために入力キューを探査する。ここでの目的に応じて、入力キューに挿入されたオブジェクトを「ダイナミック描写体キャッシュドデータ」と呼ぶ。次いで、オブジェクトをリアルタイムスタイラスによって取り出し(追加的な処理を伴う、または伴わない)、それを出力キュー1206に出力する。その間、インク収集オブジェクト1203は、出力キュー1206に現れる順番に、受け取られたスタイラス入力パケットを処理する。インク収集オブジェクト1203は、動的描写体1201からのオブジェクト(ここでは「動的描写体キャッシュドデータオブジェクト」)、以下のことを実施する。
a.動的描写体によって描写された筆画と一致する適正な相関筆画を作成する。
b.動的描写体筆画上に存在する描画属性を、描写される比較に適用する。
c.動的描写体1201に解除通知を送る。この通知は、動的描写体に関する方法を実行し、パラメータを通すことを含むことができる。
上記の工程Bは、全ての筆画が出力キューから外に移動される前に、描画属性改良の同期がとられたか否かに適正に基づいて、実施してもしなくてもよい。図8Aは、描画属性の変化を先に受け取られたデータパケットと同期させるためのプロセスに関する。
描画属性をデベロッパの要望に従ってシステムに設定してもよいし、他のアプローチでは、インク収集オブジェクト1203に送られるオブジェクトに設けてもよい。解除通知は、動的描写体1201によって提供されるインターフェースに対する呼出であってもよい。ここでは、通知は、リリースキャッシュドデータであってもよい。
図12は、湿式インクを処理する代替的なアプローチを示す図である。図12は、スタイラスデータをリアルタイムスタイラス702に送るペンサービス入力701を含む。入力キュー703は、リアルタイムスタイラスイベントシンクを出力キュー709に配置した結果を伴う入力を処理し、待ち行列に入れることができる。図12は、追加的なキュー1101を含む。このキューは、他のリアルタイムスタイラスイベントシンクA1103およびB1104から分離された動的描写体1102からの結果を処理する。ここで、このアプローチは、リアルタイムスタイラスイベントシンクA1103および/またはB1104がスタイラスから流れるインクの出現を遅らせるという、発生しうる問題に対処する。図12のシステムは、他のイベントシンクA1103およびB1104を処理する前にスタイラスデータの動的描写を処理する。イベントシンクA1103およびB1104が、スタイラスデータがインク集合オブジェクト1105に送られる過程でその処理を遅らせたとしても、動的描写1102イベントシンクは、スタイラスデータが受け取られているときにその処理を続けることができる。スタイラスデータが動的描写体1102によって受け取られるや否や、出力が追加的なキュー1101に送られ、そこでリアルタイムイベントシンクA1103およびB1104によってアクセスされる。リアルタイムイベントシンクA1103およびB1104がどのようにアクセスされるか(一方が他方を呼び出すか、または両方が追加的なキュー1101によって呼び出される)についてのプロセスは、いずれかのアプローチを通じて実施されうることに留意されたい。
図13は、湿式インクがスタイラスから流れることをどのようにして保証するかに関するさらに他の態様を示す図である。ここで、個別的なスレッドに二次的なリアルタイムスタイラスオブジェクトが存在する。ペンサービス701は、スタイラスデータをリアルタイムスタイラス構成要素1301に出力する。入力キュー1302は、スタイラスデータを動的描写体1303に提供する。他の同期プラグインをリアルタイムスタイラス構成要素1301に対応づけても、対応づけなくてもよい。オプションの同期プラグインは、ジェスチャレコグナイザ1304および他の同期プラグイン1305を含む。これらの同期プラグインからの出力は、出力キュー1306に送られる。ここで、リアルタイムスタイラス構成要素1307は、リアルタイムスタイラス構成要素1301からの出力キュー1306に接続される。リアルタイムスタイラス構成要素1307、ならびにそれに対応づけられた同期プラグイン1309〜1311および非同期プラグイン1312〜1313は、リアルタイムスタイラス構成要素1301の観点から、非同期プラグインとして働く。データパケット(ただし、リアルタイムスタイラス構成要素1301の同期プラグインによって修正されている)は、リアルタイムスタイラス構成要素1307に対する同期プラグイン集合に送られる。例えば、リアルタイムスタイラス構成要素1307に対する同期プラグイン集合は、同期プラグインA1309、同期プラグイン構成要素B、1310、および(既に使用されていない場合は)ジェスチャレコグナイザ1313を含む。ジェスチャレコグナイザ1313は、任意のリアルタイムスタイラス構成要素に対する同期スレッドまたは非同期スレッドに対応づけることができるタイプのプラグインであることが理解される。ジェスチャレコグナイザ1313をリアルタイムスタイラス構成要素1307に対する同期プラグイン集合に対応づけることは、例示のみを目的としている。
リアルタイムスタイラス構成要素1307の同期プラグイン集合の出力は、出力キュー1311に送られる。次いで、非同期プラグインオブジェクト1312および1313は、出力キュー1313におけるデータパケットを処理することができる。ここでも、インクは動的に描写され、アプリケーションが中断されてもペンからスムースに流れる。
参照のため、様々なプラグイン構成要素を、プラグイン集合において順次送るのではなく、互いに連鎖させることができることを注記しておく。ここで、同期プラグイン構成要素A1309をプラグイン構成要素B1310に連鎖した例を図13に示す。勿論、本発明の態様に従ってプラグイン構成要素を扱うために、プラグイン構成要素を互いに連鎖させ、またはそれらを集合に収集するアプローチを互いに代替的または追加的に用いることができる。
ジェスチャ認識
ジェスチャ認識は、ジェスチャが作られ、それが適切に処理されているかどうかを判断することを目的とする。例えば、ジェスチャレコグナイザ610は、デジタイザ入力を検出し、ジェスチャ認識結果を動的描写体608と同様の入力キューに挿入する役割を担う。図8Bは、同期および非同期プラグイン集合でジェスチャ認識をどのように実施できるかを説明する図である。その説明は、ジェスチャ認識オブジェクトの動作に対応している。
ジェスチャレコグナイザ610は、アルゴリズムを使用することができる。ここで、ジェスチャレコグナイザは、交換アルゴリズムを使用して、多筆画ジェスチャを認識することができる。例えば、最大数の筆画に関する特性が設定されると、ジェスチャレコグナイザは、多くの筆画をふり返る。例えば、その特性が2に設定された場合は、ジェスチャレコグナイザは、最近の2つの筆画をふり返って、それらをジェスチャとして認識しようとする。これは、多数の認識呼出をもたらすことがある。しかし、このアプローチは、ジェスチャレコグナイザが、最後の筆画の後で処理を開始するのを待つための一定の遅れを排除する。
図14は、ジェスチャレコグナイザが、ジェスチャの部分を得るために、どのくらい後までふり返るかについての例を示す図である。結果を(ここでは、例えば「ジェスチャ認識データ」と名付けられる)オブジェクトに記憶することができる。その結果をリアルタイムスタイラス入力キューに挿入することができる。
インク収集オブジェクト611は、ジェスチャオブジェクト(ここでは「ジェスチャ認識データ」)を受け取ると、インク記憶機構612からそのジェスチャに対する筆画を除去し、そのジェスチャに応じて適切な活動を実施する。
上述したように、ジェスチャ認識を実施するために、システムは、タップジェスチャに対する「スタイラスアップデータ」オブジェクトの如き、ジェスチャを完成するデータに応じて「システムジェスチャデータ」オブジェクトを入力キューに追加することができる。
ジェスチャレコグナイザを様々なインターフェースによるオブジェクトとして実装することができる。例えば、ジェスチャレコグナイザオブジェクトは、「Iスタイラス同期プラグイン」および「Iスタイラス非同期プラグイン」インターフェースを実装することができる。
ジェスチャレコグナイザオブジェクトは、ジェスチャを認識すると、筆画に対する「スタイラスアップデータ」オブジェクトに応じて、カスタムスタイラスデータを入力キューに追加する。「カスタムスタイラスデータ」オブジェクトの「カスタムデータId」特性が「ジェスチャ認識データGuid」値に設定され、「カスタムスタイラスデータ」オブジェクトのデータ特性は、「ジェスチャ認識データ」オブジェクトを含む。
特に指定がなければ、ジェスチャレコグナイザオブジェクトは、単一筆画ジェスチャを認識するにすぎない。ジェスチャレコグナイザオブジェクトは、多筆画ジェスチャを認識するように設定されうる(例えば図14を参照)。多筆画ジェスチャについては、「カスタムスタイラスデータ」オブジェクトが、ジェスチャの最終筆画に対する「スタイラスアップデータ」オブジェクトに応じて、入力キューに追加される。多筆画ジェスチャを認識すると、重複する筆画の集合に対する通知を受け取ることができる。例えば、第1および第2の筆画をともに1つのジェスチャとして認識することができ、第2の筆画そのものをジェスチャとして認識することができ、第2および第3の筆画をともに他のジェスチャとして認識することができる。
多筆画ジェスチャ認識のためにジェスチャレコグナイザオブジェクトを使用している場合は、リアルタイムスレッドでの遅れを低減しながらも、ジェスチャ認識がユーザインターフェースでの遅れの影響を受けるのを防ぐために、縦続リアルタイムスタイラスモデルを使用し、ジェスチャレコグナイザオブジェクトを二次的なリアルタイムスタイラスオブジェクトに接続することができる。
さらに、筆跡、ジェスチャまたは他のオブジェクトを以下の3つの方法で認識するカスタムジェスチャレコグナイザプラグインを作成することができる。
a.筆画情報を既存のレコグナイザオブジェクトに送り、「カスタムスタイラスデータをキューへ追加」法を用いて、その結果をペンデータ流に追加する。
b.カスタムプラグイン内で認識を行い、「カスタムスタイラスデータをキューへ追加」法を用いて、その結果をペンデータ流に追加する。
c.標準的なジェスチャレコグナイザプラグインを、デージチェーン様式で、その標準的なプラグインを呼び出すカスタムプラグインに重ねる。このように、デベロッパは、インエアパケットをパケットに、「カーソルインレンジ」を「スタイラスダウン」に、「カーソルアウトオブレンジ」を「スタイラスアップ」に翻訳することによって、インエアジェスチャ認識を実施することができる。
リアルタイムスタイラスオブジェクトは、システムジェスチャがシステムによって認識されているときに、それらに関するデータを受け取る。以下のテーブルは、「スタイラスジェスチャデータ」オブジェクトがペンデータ流のどこで発生するかを、他のペンデータに関連して説明するものである。以下のリストは、例示的なものであって、網羅的なものではない。本発明の範囲を逸脱することなく、他のジェスチャを本発明の態様と併用することができる。
Figure 0004698599
同期および非同期プロセス
リアルタイムスタイラスインスタンスがインスタンス化されると、実行スレッドをインスタンス化することができる。実行スレッドを同期オブジェクトと非同期オブジェクトに分離することができる。同期オブジェクトは、一般には、ペンサービス構成要素から発するパケットと同期して動作する。非同期オブジェクトは、一般には、インク筆画、および/またはペンサービス構成要素から発する他のデータパケットと常に同期して実行されなくてもよいオブジェクトに分類される。これら2つのスレッドの分離は、動的描写体オブジェクトが、データパケットの受取りと同期してデータパケットを迅速に処理することを可能にし、まだ重要である間に、オリジナルデータパケットを受け取ってからわずかな遅れで正確に処理することができる他のプラグインオブジェクトを可能にする。
同期プラグインの収集は、リアルタイムスタイラスインスタンスに対してインスタンス化されたこの新しいスレッド上で実行される。非同期プラグインの収集は、ユーザインターフェーススレッドで実行されうる。
リアルタイムスタイラススレッドは、インキング(パケットキューイングおよび動的描写)が全体的に反応的でスムースになるように、計算的に軽い活動を目的とするものであってもよい。したがって、一般には、同期プラグインに対するスレッドには、計算的に軽い処理のみを実施すべきである。
(通常は出力キューの出力に対応づけられる)ユーザインターフェーススレッドは、通常は、計算的に重い活動を必要とする非同期プラグインによって使用される。そのために、リアルタイムスタイラススレッドとユーザインターフェーススレッドの間にキューアーキテクチャを設けて、ユーザインターフェース(UI)スレッドにおける一時的な妨害に対して強くする。UIスレッドは、パケット、およびリアルタイムスタイラススレッドに収集された他のデータの最終的な宛先であってもなくてもよい。代替的なアーキテクチャも計算的に重い活動をより良好に処理できることにより、ペンスレッドの妨害とユーザインターフェーススレッドの妨害との間でデベロッパに容易に妥協させないことを注記しておく。例えば、ここに記載されている縦続設計は、スレッドの分離によって異なる活動をより良好に処理することを可能にする。
ジェスチャレコグナイザを同期スレッド上に実装してもよいし、ジェスチャレコグナイザが、見込まれる重いジェスチャ認識活動(例えば、筆画が比較されることになる多数の容認ジェスチャ)から弱まるものと判断または想定される場合は、非同期スレッド上に実装してもよい。ジェスチャレコグナイザオブジェクトは、同期プラグインインターフェースと非同期プラグインインターフェースの両方を有することで、いずれかまたは両方のスレッドからのオブジェクトを利用する柔軟性をデベロッパに与えることができる。この機能は、ジェスチャレコグナイザに限定されない。動的描写体または任意の他のプラグインも、場合によっては、いずれかまたは両方のキューにおける使用をサポートすることができる。デベロッパがプラグインの良好な位置をどこであると想定するかに応じて、プラグインがサポートする場合は、デベロッパがプラグインを同期集合または非同期集合またはその両方に配置することを可能にするために、全てのプラグインが、同期インターフェース、非同期インターフェース、またはその両方を有していてもいなくてもよい。
リアルタイムスタイラスオブジェクトは、タブレットペンデータ流へのリアルタイムのアクセスを提供し、それ自体のスレッド上で動作することができる。同期プラグインは、一般には、リアルタイムスタイラスオブジェクトのスレッド上で動作してもしなくてもよく、非同期プラグインは、一般には、アプリケーションのユーザインターフェース(UI)スレッド上で動作してもしなくてもよい。動的描写の如き、データ流へのリアルタイムのアクセスを必要とし、計算的に軽い作業のためのプラグインを同期スレッド上に配置することによって、同期スレッドを非同期スレッドから分離することができる。インク収集の如き、データ流へのリアルタイムのアクセスを必要としない作業のためのプラグインを同期スレッド上に配置することができる。
特定の作業は、計算的に重い作業であっても、多筆画ジェスチャ認識のように、タブレットペンデータ流へのリアルタイムアクセスに近づくことを必要とすることもある。これらのタスクを扱うためのプラグインを一方または他方のスレッド上で分類してもよいし、図12および13に示されているように、縦続リアルタイムスタイラスオブジェクトの一部とすることができる。
縦続
リアルタイムスタイラスインスタンスは、多くの面で、拡張性および方策を包含するスレッドホストである。図13は、どのようにして多数の同期スレッドがともに機能できるかの例を示す図である。ジェスチャレコグナイザを位置1304の同期スレッド上に配置してもよいし、位置1313の同期スレッド上に配置してもよい。
デベロッパが多重糸状に接続したい多機能が存在していれば、デベロッパは、多数のリアルタイムスタイラスインスタンスを縦続し、それらの機能を同期プラグインとして挿入することが可能である。
この特徴を示唆する具体的なシナリオは、「完全無中断」インキングを実現することである。ジェスチャレコグナイザは、デベロッパが多筆画ジェスチャに特に関心があるときに、認識結果を得るために時々著しい待ち時間をもたらすことがある。したがって、ジェスチャレコグナイザは、動的描写体を妨害する可能性を有するため、動的描写体が配置されるリアルタイムスタイラスの同期集合上に存在しないことがある。ジェスチャレコグナイザは、非同期プラグインを有するインク集合オブジェクトとともに配置されることもある。
図13に示されるシステムは、計算的に重い動作をジェスチャレコグナイザ、またはデータベースへのアクセス、ウェブサーバへの書込み、および画面の再生等を含む動作のための他のスレッドから分離したい場合に有益である。ジェスチャ認識が、「完全非遮断」体験の不可欠の部分である場合は、ジェスチャレコグナイザを独自のスレッド、すなわち第2のリアルタイムスタイラススレッド上で動作させることができる。
リアルタイムスタイラスは、非同期インターフェースを実装して、単なる非同期プラグインインスタンスとして挙動することを可能にすることによって、この使用をサポートすることができる。どのようにしてリアルタイムスタイラスを他のリアルタイムスタイラスに追加できるかを以下に説明する。実施してもしなくてもよいいくつかのオプションを以下に提示する。
1.リアルタイムスタイラスを非同期プラグインの集合に追加するときは、システムは、他の非同期プラグインインターフェースを追加できるように関係を制限することができる。
2.様々な数のリアルタイムスタイラスオブジェクトを多次元に沿って縦続できる。例えば、多数の「リアルタイムスタイラス」オブジェクトを単一の「親」リアルタイムスタイラスに直接接続するか、あるいは多数の「リアルタイムスタイラス」を、各々が隣に縦続するように直列に接続するか。あるいは「リアルタイムスタイラス」オブジェクトを上記の構成の組合せで接続することが可能である。実行者は、簡潔性または信頼性に応じてこれらの組合せを限定するように選択することが可能である。
3.同一のリアルタイムスタイラスを多数の親リアルタイムスタイラスから多数の非同期プラグインの集合体に追加するときは、縦続リアルタイムスタイラスは、通常通り機能できる。あるいは、縦続(子)リアルタイムスタイラスインスタンスは、機能を停止し、「エラーデータ」オブジェクトをキューに挿入することができる。「エラーデータ」オブジェクトは、データにエラーがあるか、または前のプラグインが、データを処理している間にエラーに遭遇したことを下流のオブジェクトに示す指標でありうる。勿論、これは、エラーを処理する1つのアプローチにすぎない。他のアプローチを用いてもよい。
一実装形態は、縦続のための集合点として非同期プラグイン集合を再使用できるのに対して、他の実装形態は、縦続RTSを接続するための専用接続点を有することによって、縦続の各RTSが、同期および非同期プラグインの独自の独立集合を有することを可能にできることを注記しておく。
「エラーデータ」オブジェクトの存在は、縦続から独立していてもよいことが理解される。そのため、単一のリアルタイムスタイラス構成要素、ならびに縦続リアルタイムスタイラス構成要素に対して、「エラーデータ」オブジェクトが生成されうる。
ダイナミックプラグイン集合の修正
性能便益のために、リアルタイムスタイラスを使用不可とし、次いで再度使用可能とすることなしに、リアルタイムスタイラス上の同期および非同期集合を修正できる。したがって、リアルタイムスタイラスの範囲で実施される「使用可能」または「使用不可」動作が存在する保証はない。
プラグインが初期化&浄化できるタイミングを確保するために、「人工的な」(使用可能&使用不可に対する真のクライアントコード呼出に起因しないことを意味する)「リアルタイムスタイラスイネーブルド」&「リアルタイムスタイラスディスエーブルド」呼出を、プラグイン集合に動的に挿入され、またはそこから除去されるプラグインに対して行うことができる。
プラグインを追加または除去するときに起こりうる挙動のいくつかを以下に記載する。
・プラグインを使用可能リアルタイムスタイラスインスタンスに追加するときは、人工的な「リアルタイムスタイラスイネーブルド」呼出をこのプラグインに対して行うことができる。
・プラグインを使用不可リアルタイムスタイラスインスタンスに追加するときは、何も行われない。
・プラグインを使用可能リアルタイムスタイラスインスタンスから除去するときは、人工的な「リアルタイムスタイラスディスエーブルド」呼出をこのプラグインに対して行うことができる。
・プラグインを使用不可リアルタイムスタイラスインスタンスから除去するときは、何も行われない。
これらの関係を維持する方法は、リアルタイムスタイラス使用可能呼出を受ける毎にカウンタをインクリメントすることを含んでも含まなくてもよい。このカウンタは、リアルタイムスタイラス使用不可呼出を受ける毎に、デクリメントされる。カウンタが1のときは、このプラグインは機能する。カウンタが1より大きくなると、このプラグインは例外を生じ、その機能を抑制する。カウンタが1に戻っても、このプラグインは使用不可状態を維持する。カウンタが再び0に戻らなければ、プラグインは、再度使用可能にならない。他のアプローチを用いることもできる。
エラー伝搬
設計時
開発環境にある間は(例えばマイクロソフトコーポレーションによるVisual Studio.NET)、デベロッパは、トライキャッチでキャッチされるか否かにかかわらず生じる任意の例外で中断することがある。したがって、エラー報告は、「リアルタイムスタイラス」枠組の無効な構成を検出することを目的として、端的なものとなる。
実行時
エラー報告/伝搬の問題は、リアルタイムスタイラスおよび同期プラグインが、UIスレッド(アプリケーションスレッド)と異なるリアルタイムスタイラススレッド(インクスレッド)上で実行されているため、実行時エラーの場合は困難になる。同期プラグインが例外を生じるのであれば、それをリアルタイムスタイラスでキャッチすることが可能であるが、例外は、リアルタイムスタイラススレッド(インクスレッド)上に存在し、制御フローの起源はリアルタイムスタイラスであるため、リアルタイムスタイラス以外に行くところはない。エラーをユーザインターフェーススレッドに伝搬し、クライアントコードが優雅にエラーに対処することを可能にすることは困難であるといえる。以下に解決策を記載する。
.NETの標準的なエラー処理は、例外が生じたときにプラグインからイベントを発し、UIスレッドにおけるデベロッパのエラー処理コードにこのイベントを検出させる。しかし、これは、プラグインがイベントを発すると、その例外を生じたデータがキューイングのためUIスレッドに到達していない可能性があるため、リアルタイムスタイラスに対しては機能しない。例外がエラー処理コードに対して生じた、コンテキスト(すなわち、不良データならびに先行および後続データ)を利用できない優雅なエラー処理を実施することは困難である。このアプローチは、エラーダイアログを立ち上げ、アプリケーションを終了するといった単純なエラー処理に対してのみ好適である。
プラグインは、デベロッパの制御下にある唯一のコードブロックであるため、リアルタイムスタイラス枠組内でエラー処理を実施するための適正な場所は、プラグイン(同期または非同期)にある。
UIスレッド(アプリケーションスレッド)においてエラー処理を実施することが困難になる(例えば、キューはエラー処理に対してそのままの状態を維持する必要がある)ため、リアルタイムスタイラススレッド(インクスレッド)は、同時プラグインから生じた例外に際して直ちに機能を停止してはならない。また、1つのプラグインが無効な入力であると見なすものは、他のプラグインにとって完全に有効なことがある。
図15は、可能な解決策を示す図である。ここで、例外情報は、エラーデータとして、再びキューに通される。プラグインにおいてエラー処理を実施することができる。プラグインに対して生成されたデータ流、すなわちキューを通じて例外情報を処理することができる。
図15に示されるように、リアルタイムスタイラス603は、プラグイン606〜608からの全ての例外をキャッチし、エラーデータオブジェクトを作成する。以下に、エラーを識別するためのプロセスを示す。
a.例外が、同期または非同期プラグインに対するインターフェース上でエラー方法に生じた場合は、例外発生プラグインへの呼び戻しによる無限のループを回避するために、エラーデータオブジェクトを作成しない。
i.代替的なアプローチは、例外を生じた実際のデータの前に、エラーデータオブジェクトをすぐに集合における残りのプラグインに通すことである。
b.同期または非同期プラグイン法に対するインターフェース上で他の方法に例外が生じた場合は、まず例外発生プラグインにエラーデータオブジェクトをすぐに送り、次いで、例外を生じた実際のデータの前に、集合における残りのプラグインに通すことができる。
c.例外が同期プラグインに生じた場合は、エラーデータを最終的に出力キューに入れ、または非同期プラグインに送る。
d.エラーデータが集合を通った後に、例外を生じたデータが、集合における残りのプラグインを通る。
専用の方法(例えば「Iスタイラス同期プラグイン.エラー」法または「Iスタイラス非同期プラグイン.エラー」法)を通じて、エラーデータオブジェクトをプラグイン集合に通すことができる。
より具体的には、プラグインが例外を投じると、データの正常な流れが妨害される。リアルタイムスタイラスオブジェクトは、エラーデータオブジェクトを生成し、例外を投じたプラグインの「Iスタイラス同期プラグイン.エラー」または「Iスタイラス非同期プラグイン.エラー」法、ならびにその集合における残りのプラグインの「Iスタイラス同期プラグイン.エラー」または「Iスタイラス非同期プラグイン.エラー」法を呼び出す。例外を投じたプラグインが同期プラグインである場合は、エラーデータオブジェクトを出力キューに追加する。次いで、リアルタイムスタイラスオブジェクトは、オリジナルデータの処理を再開する。
プラグインがそのエラー法から例外を投じる場合は、リアルタイムスタイラスオブジェクトは、その例外をキャッチするが、新たなエラーデータオブジェクトを生成しない。あるいは、実装形態またはデベロッパの要望に応じて、新たなエラーデータオブジェクトを生成することができる。この代替的なアプローチにおいて、リアルタイムスタイラスは、次いで、反復数を制限することによって、任意の生成ループを低減することもできるし、またはそのリスクを全く無視することもできる。
同期プラグインによって追加されたカスタムスタイラスデータに関係して、エラーデータは、エラーデータを作成した例外の前に「即時出力」キューに追加される任意のカスタムスタイラスデータの後で、同期プラグイン集合における後続のプラグインによって「即時出力」キューに追加される任意のカスタムスタイラスデータの前に、出力キューに追加される。同期プラグインのいずれかが、エラーデータに対応して、カスタムスタイラスデータを「即時出力」キューに追加する場合は、データは、エラーデータの直前に追加される。同期プラグインのいずれかが、エラーデータに対応して、カスタムスタイラスデータを出力キューに追加する場合は、データは、エラーデータの直後に追加される。
リアルタイムスタイラスオブジェクトは、そこから例外が投じられるスレッド上で、「Iスタイラス同期プラグイン.エラー」法を呼び出す。
管理/非管理実例
図16は、本発明の態様を挿入する様々なアプローチを示す図である。該システムは、C#管理オブジェクトの集合によって包まれたCOMオブジェクトを含むことができる。あるいは、Java(登録商標)、C++等を含む任意のオブジェクト指向言語を使用してもよい。
図16は、管理または非管理空間に存在するリアルタイムスタイラス構成要素を示す図である。図16は、動的描写体、非同期プラグインY、非同期プラグインおよびジェスチャレコグナイザを含む。
ペンサービス1601は、非管理コード領域にその入力キュー1603および出力キュー1604を有するリアルタイムスタイラス構成要素1602にスタイラスデータを送る。スタイラスデータは。管理コード領域におけるリアルタイムスタイラス構成要素1605に送られる。
動的描写体は、リアルタイムスタイラス構成要素に接続された最初の同期プラグインである。非管理空間において、そのデータキャッシュ1616を有する動的描写体1608は、リアルタイムスタイラス構成要素1602に接続される。同様に、管理空間において、そのデータキャッシュ1617を有する動的描写体1615は、リアルタイムスタイラス構成要素1605に対する同期プラグイン集合の一部である。同期プラグイン集合における次の同期プラグインは、同期プラグイン1607である。同期プラグイン1607は、リアルタイムスタイラス構成要素1605に対する同期プラグイン集合における動的描写体の後に続く。同期プラグインY1607は、管理空間に存在するにすぎないため、同期プラグインラッパー1618は、非管理「リアルタイムスタイラス」構成要素1602が、管理/非管理境界を越えて同期プラグイン1607にアクセスすることを可能にする。
図16は、非同期プラグインの集合をも示す図である。非同期プラグインは、同期プラグイン1612およびジェスチャレコグナイザ1609を含む。非同期プラグイン1612は、管理空間における「リアルタイムスタイラス」構成要素1605に接続された非同期プラグイン集合における最初の非同期プラグインである。非同期プラグイン1612は管理空間に存在するため、非同期プラグインラッパー1619を使用して、非管理「リアルタイムスタイラス」構成要素1602からそこへのアクセスを可能にすることができる。ジェスチャレコグナイザは、管理空間と非管理空間の両方に存在する。そのデータキャッシュ1610を有する管理ジェスチャレコグナイザ1609は、非同期プラグイン1612の後にアクセスされる次のプラグインである。ジェスチャレコグナイザ1609は、(そのデータキャッシュ1614を有する)ジェスチャレコグナイザ1613の非管理バージョンと情報を交換することができる。
図16の管理側と非管理側の間を横切るデータを、非管理空間で使用する構造と、管理空間で使用する空間との間で変換または「配列」することが必要とされることがある。マイクロソフトコーポレーションによる.NETフレームワークは、この配列の多くを自動的に行うインターオペラビリティ層を提供する。この追加的なデータ処理は、黙視的な性能ペナルティを招くため、図16に示される設計は、インターオペラビリティ層の交差を最小限にするように調整される。
RTS1605に対する管理ラッパーと非管理RTS1602との関係は、ネイティブ(非管理RTS1602)にとって、管理RTS1605が他のRTSイベントシンクのように見えることである。そのコンストラクタにおける動的描写体1615でインスタンス化されると、RTS1605は、対応する非管理動的描写体1608にアクセスし、その後の同期プラグイン集合にフックする。
管理ジェスチャレコグナイザオブジェクト1609は、非同期プラグインの完全な実装形態でありうる。それは、パケットデータを管理側に蓄積し、それをインターオペラビリティ層に沿って配列し、非管理コード実装1613に送り込む。戻りコードは、パケットがジェスチャに対応しているか否かについてのものである。
図16には、管理および非管理動的描写体オブジェクト1615および1608も示されている。管理動的描写体オブジェクトは、非管理動的描写体1608の特性に対する薄いラッパーであってもよい。管理動的描写体1615はオプションである。ここで動的描写体1615がインスタンス化されない場合は、それを他の同期プラグインの1つとしてインスタンス化することができる。
図16のシステムを作成するためのプロセスを以下に示す。
a.第1に、デベロッパは、管理非同期プラグイン1612および管理動的描写体1615をインスタンス化する。内的には、動的描写体1615は、特性設定を下に送るために、非管理動的描写体をインスタンス化する。
b.第2に、デベロッパは、動的描写体1615に特性を設定する(描画属性等)。
c.第3に、デベロッパは、リアルタイムスタイラス1602をインスタンス化して、リアルタイムスタイラスコンストラクタにおける動的描写体1615を処理する。いくつかの事柄が発生しうる。
i.管理リアルタイムスタイラス1605は、(公用密封アクセス機構を介して)非管理動的描写体1608のアドレスを問い合わせる。
ii.管理リアルタイムスタイラスは、それ自体をペンサービス1601にフックするネイティブリアルタイムスタイラス1602をインスタンス化する。

iii.管理リアルタイムスタイラス1605は、リアルタイムスタイラスイベントシンクとして、それ自体をネイティブリアルタイムスタイラス1602にフックする。
iv.管理リアルタイムスタイラス1605は、ネイティブ動的描写体1608をその同期出力にフックする。
v.管理リアルタイムスタイラス1605は、それ自体をネイティブリアルタイムスタイラス1602の同期プラグインスレッドにフックする。
d.第4に、デベロッパは、場合によっては管理ジェスチャレコグナイザ1609を含む1つまたは複数の管理同期および/または非同期プラグインオブジェクトをインスタンス化する。
e.第5に、デベロッパは、管理プラグインオブジェクトを集めて、様々なプラグイン集合にする(これは、プラグインにアクセスする順番を「リアルタイムスタイラス」構成要素に通知することによって実施できる。あるいは、プラグインを互いに連鎖させるために、特性を設定し、ここでは第1のプラグインを参照することができる)。
f.第6に、デベロッパは、管理非同期プラグインオブジェクト1612を管理リアルタイムスタイラス1605の「インク集合オブジェクト」特性に対応づける(したがって、非同期プラグインオブジェクト1612を非同期プラグイン集合にフックする)。
g.第7に、デベロッパは、「RTS.イネーブルド」を「真」に設定する。これにより、管理リアルタイムスタイラス1605に、ネイティブリアルタイムスタイラス1602上で「Iリアルタイムスタイラス−>イネーブルド」を「真」に設定させることもできる。
h.第8に、イベントが、リアルタイムスタイラス1602を流れ始める。
工程(c)を代替的な構成で実現することができる。例えば、APIは、RTSコンストラクタ上にプラグイン特有のアコモデーションを有することができない。その代わりに、RTSの様々なオーバーロードが、RTS自体の使用法(例えば、ウィンドウまたは制御機構に接続する、1つまたは多くのデジタイザに対応づける、マウスでペンの挙動を表現する等)を決定づける。インターオペラビリティ境界を複数回横切るデータの性能により「動的描写体」パラメータを使用することができる。その結果、「動的描写体」を構築的に使用して、プラグイン集合またはチェーンにおける最初または最後の同期プラグインとすることができる。
図16は、インターオペラビリティ交差を最小限にし、「動的描写体」がプラグインの順序リストのいずれかに存在することを可能にする構造のアプローチを示す図である。
図16のシステムを使用するためのプロセスを以下に記載する。
a.ペンサービス1601は、RTS1602上に機能を呼びだし、「リアルタイムスタイラス」構成要素1602に対応づけられた同期プラグイン集合に蓄積されるデータを送る。場合によっては、入力キュー1603からのデータをプラグイン集合に送り込むこともできる。
b.新たなデータが入力キュー1603に出現したとき(または、それがペンサービス1601に接触させるインターフェース状に適切な方法が呼び出されたとき)に、ネイティブRTS1602は以下のことを実施する。
i.パケットをデジタイザ空間からHIMETRIC(「インク空間」)に変換する。
ii.逆変換(HIMETRIC→デジタイザ)をパケットデータに埋め込む。
iii.データに対する適切な機能を同期プラグイン集合インターフェース(この場合は管理RTS)上に呼び出すことによって、変換されたパケットデータをプラグイン集合の第1の同期プラグインに送り込む。
c.管理RTS1605は以下のことを実施する。
i.適切な管理データ構造を作成して、管理に適した様式でデータを保持する。
ii.収集された管理同期プラグイン上に適切な機能を呼び出す。
iii.各プラグインがデータを処理し、次のプラグインを呼び出すことができるように「リアルタイムスタイラス」構成要素1605を戻すことを確認する。
iv.ジェスチャレコグナイザ1609上に対応する機能を呼び出すまで繰り返す(ジェスチャレコグナイザ1609が使用される場合)。
d.動的描写体1615を「リアルタイムスタイラス」1605によって呼び出すことができる。動的描写体1615は、新たなパケットを描写するのを完了すると、戻り、非管理RTS1602は、パケットデータが修正されたかどうかを検出し、適切なデータをキューに入れる。追加すべき何らかの「非即時的」ユーザデータ項目が存在した場合は、ここでそれらを追加する。
e.次いで、ネイティブRTS1602は、接続されたウィンドウに私的なメッセージを貼りつける。
f.次いで、ネイティブRTS1602は、入力キュー1603を調べて、何らかのリアルタイムデータが追加されたかどうかを確認し、追加された場合は、同期プラグイン集合を再び呼び出し、そのデータを送る。データが追加されなかった場合は、ネイティブRTS1602は戻り、ペンサービス1601が、前進し、新たなデジタイザデータとともに再びRTS1602を呼び出すことを可能にする。
g.私的メッセージは、データをキュー1603から検索し、適切な機能を接続された同期プラグインインターフェース上に呼び出すRTS1602上のサブクラスプロクによって確認される。
h.この場合、管理RTS1605は、それ自体を接続し、呼び出される。次いで、管理RTS1605は、非同期プラグイン1612上に対応する機能を呼び出す。これを非同期プラグインラッパー1619に通すことができる。
i.次いで、管理非同期プラグイン1612は、データを非同期的に処理し、適宜描写または蓄積する。
j.ジェスチャレコグナイザ1609を「リアルタイムスタイラス」構成要素からの非同期プラグイン集合の一部として呼び出すことができる。ジェスチャレコグナイザ1609は、「カーソルアップ」に遭遇し、その時点で蓄積パケットが、認識のためにインターオペラビリティ境界を通ってネイティブジェスチャレコグナイザ1613に送り込まれるまで、内部にパケットを蓄積する。
i.この動作は、どのジェスチャが認識されたかに関する情報、およびどれだけの筆画が可能なジェスチャの各々に対応するかに関する情報を戻す。
ii.次いで、ジェスチャレコグナイザ1609は、(「即時」が偽に設定された)管理RTS1605上で「ユーザデータをキューに追加」法を用いて、ジェスチャ認識の結果を非同期的消費のためにキュー1604に入れる(これにより、新たなジェスチャデータが、すぐにインターオペラビリティ境界(またはインターオプ)を横切り、ネイティブプラグイン集合が完成するまで他のキューにとどまる)。
iii.また、従来的な管理イベントをあらゆる聞き手に発して、今ジェスチャが行われたことをリアルタイムで世界に通知する。
iv.次いで、ジェスチャレコグナイザ1609によって現行のデータをプラグイン集合におけるあらゆる追加的プラグインに対する「リアルタイムスタイラス」構成要素1605に戻す。
データ集合および流れ
イベントシンクハンドラ、およびそれらに伴う情報を以下に列記する。
・ソースIリアルタイムペン
このバックポインタは、イベントシンク実装に原始「リアルタイムスタイラス」へのバックリファレンスを与える。このポインタは、2つのこと、すなわち(a)スタイラスインスタンスに関するコンテキスト情報にアクセスすること(例えば、動的描写体1615は、デジタイザ座標と画素の間で単位変換ができることが必要である)、および(b)多数のRTSイベントチェーンの間で共用することを可能にする。
・タブレットコンテキストID
リアルタイムデータの消費者が、効率的にデータを蓄積し、タブレットIDをデータ集合における指標として用いることを可能にする。
・パケットデスクリプション
パケット呼出におけるデータのレイアウトを描く。異なるデジタイザが、(例えば)x、y、圧力、角度を含む異なる量の情報をサポートする。「パケットデスクリプション」は、パケットの受取側に、最終的に到達する整数の平坦なアレイにどのようにしてデータを配置するかを示す。
・カーソルID
リアルタイムデータの消費者が、効率的にデータを蓄積し、カーソルIDをデータ集合における指標として用いることを可能にする。
・スタイラスインフォ
タブレットコンテキストIDと、カーソルIDと、反転状態(これは、関連性、およびカーソルがペンの「消しゴム」端に対応するか、「執筆」端に対応するかを示す3値状態である)と、ボタン状態(32までのボタンの各々が押されるかどうか)と、必要に応じて他の関連情報とを含む便利な情報を集約した単純な構造。
・プロパティカウントパーパケット
デベロッパが、API呼出を用いずにパケットデータのレイアウトを推定することを可能にする妥協パラメータ。(X、Y)は、第1になり、その順番になるように保証され、カウントは、xyデータのみに関心を持つデベロッパが、あらゆるn番目の要素を飛ばしながらリストを閲覧することを可能にする。
・カウントオブパケット
効率のために「結束された」パケットの数(ペンサービスおよび/またはデジタイザデバイスドライバは、いつ、そしてどれだけのパケットがこのようにして束ねられるかを判断する)。
・パケットデータ
これは、パケットデータの読取り専用コピーである。
・カウントオブパケットレフ
プラグインデベロッパが割り当てることができる修正パケットデータ集合におけるパケットの数。
・パケットデータレフ
これは、リアルタイムデータ操作を含むシナリオを達成するために、パケットデータを修正する機能をプラグインオブジェクトのデベロッパに与えるパケットデータのリファレンスである。
一実装形態において、プラグイン集合実装が、プラグイン集合に入る前にパケットデータが修正されたかどうかを「把握」することを可能にすることができない。あるいは、パケットデータが修正されたかどうかをプラグイン集合に知らせることができる。例えば、データ上のフラグ、またはデータから独立したフラグを設定することができる。プラグイン集合が、パケットデータが修正されたかどうかを把握することを可能にする1つの利点は、警告のない修正パケットデータを無視する機能をプラグイン集合に提供することである。他方で、このアプローチは、デベロッパが誤りを犯すさらなるオプションを提供する。より重要なことは、プラグインはデータの起源に対して認知不能ではないため、設計パターンの簡潔性とオブジェクト指向の性質を混同させる。プラグインがオリジナルデータと修正データの両方を調べることができれば、前のプラグインに属する動作を恐らく実施している。
性能/効率のために、デベロッパがデータを修正することを意図しなければ、メモリを割り当てずにすむように、2つのデータを内部に維持することができる。
データ同期
図17Aに示すように、同期を確保するために、どのようにしてデータをキューに追加できるかを以下に説明する。
ICOは、UIスレッド上に到来する他の要求と、インキングスレッドを通じて到来する保留データとを同期させるために、シグナリング機構として入力および出力キューを用いることができる。
図17Aは、システムが情報を処理しながら行われるモード切換えを示す図である。システムは、1701における(において「実施」された)第1の処理の結果を示す図である。時刻1702において、新たなスタイラスデータを受け取り、時刻1702でプラグイン1によって、時刻1704でプラグイン2によってその処理を開始し、時刻1705で完了する。時刻1703においてモード切換えが行われる。例えば、アプリケーションのユーザが、「編集モード」を「インク」から「消しゴム」に変更し、アプリケーションがビジーである場合は、ユーザモードが変化してからある時間にわたって、キューから流れるパケットデータがまだ「インク」であるという合理的な可能性がある。
しかし、このときにモード切替えイベントをキュー1706に追加する代わりに、スタイラスデータに対して、時刻1705で現行の処理が完了された後まで遅らせる。これを2通りの方法で行うことができる。第1に、時刻1702でプラグインにおいて開始するスタイラスデータが完成されるまでモード切換え動作イベントを遅らせることができる。第2に、システムは、時刻1705におけるプラグイン2からの結果をキュー1706におけるその前に配置するための十分な余地を残しながら、モード切換えイベントをキュー1706に入力することができる。そこで、この場合、ICOは、ユーザがモードを変えた瞬間に、「マーカ」を出力キューに挿入することができる。ある時間が経過した後に、マーカは、(リアルタイムスタイラスプラグイン集合インターフェース上の「カスタムデータ追加」法を介して)ICOに戻され、その時点で、ICOが、入力パケットデータを「消しゴム」要求と解釈しはじめることが可能になる。
図17Bは、図17Aの一般的なバージョンを示す図である。第1のスレッドに対するプロセスの終了がイベント1707によって示されている。それはキュー1712に配置される。次の時刻1708において、第1のスレッドに対する他のプロセスが開始する。時刻1709において、第2のスレッド上にイベントが発生する。第1のスレッドに対するプロセスが点1708で開始したため、プロセスは、時刻1709でのイベントの前に扱われるものと期待される。しかし、第1のスレッドに対するプロセスは、時刻1710で続行し、次いで時刻1711で終了するため、そのプロセスの開始時刻1708に対する時刻1709におけるイベントの挿入のタイミングは、時刻1711でプロセスが実施される前に時刻1709におけるイベントがキューに配置されることになるという点において、好ましくない。ここで、図17Bは、キュー1712における少なくとも1つの箇所を飛ばすことにより、点1707で実施されたプロセスから生成されたイベントからキュー1712の下流に距離をおいて挿入されている時刻1711におけるイベントを示す図である。キュー1712においてある場所を利用可能に維持することにより、プロセス1708、1710、1711の完成をキュー1712における1709のイベントの前方の箇所に正しく配置することを可能にして、キュー1712におけるパケット/イベントの読取りを期待される順序で行うことを可能にする。ここで、その順序を、それらのプロセスが開始された、またはイベントが生じた順序でパケット/イベントが生じるものとして要約することができる。この順序は、点1713(プロセスの開始)、1714(プロセス続行)および1715(プロセス完了)によって示される次のプロセスについても継続する。
図18および19は、本発明の態様による、ペンデータを処理するための様々なシステムを示す図である。
図18を参照すると、ペンデバイス1801は、データをペンサービス1803に送る。マウスは、情報を生成し、それをユーザ32(ユーザ32.dllとしても知られる)1804に送ることもできる。アルペンデータ(例えばボタンをクリックする)は、マウスイベントを表現することができ、ユーザ32 1804に送られて、マウスイベントとして処理される。同様に、いくつかのマウスイベントは、インクを表現することができ、1814において送られて、ペン入力として処理される。次いで、マウスイベントは、ウィンドウメッセージポンプ1805、次いでHWND1806、HWNDマウスデバイス1812、入力キュー1810、次いで入力マネージャ1811に送られる。ペン入力(例えば、ペンが潜在的なインキングサービスの範囲に移動するとき)、またはスタイラスイベントは、ペン入力マネージャ1807/1808(非管理および管理リアルタイムスタイラスサービス)に送られる。ペン入力マネージャ1807/1808は、ペンサービス1803とアプリケーションの間の全ての通信を処理する。この処理は、通常の優先スレッド、または高優先ステータススレッド上で実施されうる。ペンサービス1803は、様々なイベントを生成することができる。ペンイベントをペン入力マネージャ1807/1808に送って、標準メッセージ通信システム1804〜1806および1812をバイパスすることができる。
ペンサービス1803は、以下のイベント、すなわちスタイラスインレンジ(スタイラスがデジタイザの範囲に入った場合)、スタイラスアウトオブレンジ(スタイラスが、デジタイザによって検出されなくなる場合)、スタイラスパケット(デジタイザからの生の点データ−ペンはデジタイザに接触してもしなくてもよい)、スタイラスインエアポイント、タブレット追加/除去、およびシステムジェスチャイベント(例えば、「押下げおよび保持」ならびにホーバイベント)を生成することができる。
スタイラスは、生のプリビュイベントを生成することができる。これらの生のプリビュイベントをリアルタイムインキングサービス1901によって処理することができる(図19より)。他のサービスもこれらのイベントを検索することができる。リアルタイムインキングサービス1901は、生のプリビュイベントに対して以下の工程を含むいくつかの工程を実施することができる。
a.イベントがダウン「パケット」イベントであるかどうかを調べる。そうでない場合は、処理を停止し、ナルに戻る。
b.イベントが、そのキャッシュドレイアウト情報に基づいて、インキング要素上に存在したかどうかを調べる。そうでない場合は、処理を停止し、ナルに戻る。
c.このパケットは、インキング部の内部の「ダウン」イベントに対するものであるため、増進的に筆画を描く。
d.最後に、その要素上に筆画が描かれたペン入力マネージャ1807/1808に戻る。
生のプリビュイベントからの戻り値は、そのイベントを「目標」とするペン入力マネージャ1807/1808によって使用される。ナルでない目標が戻されると、イベントをその特定の目標とともに入力キューに配置することができる。これにより、要素に描かれたインクが、入力キューにおける他のイベントの結果として何らかの他の要素に送られるのではなく、実際にその要素に送られることになる。
ここで、スタイラスイベントは、入力イベントになる準備が整っている。しかし、たいていの場合、各スタイラスイベントは、メッセージシステムを流れる対応するマウスメッセージをも有する。ペン入力マネージャ1807/1808がスタイラスイベントを入力イベントに変換する前に、まずイベントを対応するマウスメッセージと突き合わせる必要がある。必要な場合は、ペン入力マネージャ1807/1808は、マウスメッセージが到着するのを待つことが可能である。
ペン入力マネージャ1807/1808が、マウスメッセージとスタイラスイベントの両方を有すると、それら2つを組み合わせて、適切な入力レポートとし、そのレポートを入力キュー1810に配置する。
図20は、本発明の態様によるキューを示す図である。図20は、キュー2001を含む。簡単にするために、キューを円として示す。線形キュー、および当該技術分野で知られている他の様々な形を含む代替的なキューの形を用いてもよい。キュー2001は、開始ポインタ2002および終了ポインタ2008を含む。キュー2001は、情報を有するいくつかの場所(2003、2004および2009)をも含む。場所2005および2007は空である。場所2006はロックされている。場所2006は、異なる供給源からのイベントおよびデータを同期するために場所ホルダとしてロックされていてもよい(その例が図17Aおよび17Bに示されている)。また、その内部に含まれるデータがプラグイン集合またはチェーンに通されているときに、場所2006をロックしてもよい。場所2010および2011も空である。空の空間の数を必要に応じて増減することができる。例えば、キューが一杯になった場合に、追加的なデータを記憶するために追加的な空間を追加することができる。あるいは、キューに保持されうるデータが破棄されるように、キューのサイズを固定することもできる。これは、システムが他のプロセスに高度に関わっており、キューに対する新たなデータの作成を遅くすることが有益であるということを示す指標をユーザに提示するという点において、有用な利点を提供することができる。情報の破棄は、システムがロックアップされており、システムが再び処理を続けるまで追加的なデータを入力しない方がよいということをユーザに示すこともできる。
アプリケーションプログラミングインターフェース
本発明の態様によって使用できる様々なアプリケーションプログラミングインターフェースの概要を以下に提示する。
リアルタイムスタイラスは、リアルタイムスタイラス入力クラスの一部であってもよい。インスタンス化されたリアルタイムスタイラスオブジェクトをウィンドウハンドルまたはコントロールに接続することができる。リアルタイムスタイラスは、既定コンストラクタを含むことができる。既定コンストラクタを使用すると、他のリアルタイムスタイラスオブジェクトからの入力のみを受け付けることが可能になる。
プラグインが、ペンデータ流と相互作用することを可能にするために、リアルタイムスタイラスオブジェクトは、2つのプラグイン集合を維持することができる。それらの集合をリアルタイムスタイラスオブジェクトの特性に規定することができる(例えば、同期プラグインに対する「同期プラグイン集合」および非同期プラグインに対する「非同期プラグイン集合」)。追加法(例えば、プラグインを同期集合に追加するための「スタイラス同期プラグイン集合追加」、またはプラグインを非同期集合に追加するための「スタイラス非同期プラグイン集合追加」を適切な特性上に呼び出すことによって、プラグインをいずれかの集合に追加することができる。
同期プラグインは、あるインターフェース(例えば「Iスタイラス同期プラグイン」)を実装することができ、非同期プラグインは、異なるインターフェース(例えば、「Iスタイラス非同期プラグイン」)を実装することができる。各プラグインは、そのデータ対象(例えば、「Iスタイラス同期プラグインデータ対象」または「Iスタイラス非同期プラグインデータ対象」を規定する特性を有することができる。リアルタイムスタイラスオブジェクトは、プラグインが利用した方法に対する通知方法を呼び出すことができる。
リアルタイムスタイラスオブジェクトは、「Iスタイラス非同期プラグイン」インターフェースを実装する。他のリアルタイムスタイラスから入力を受け付けるリアルタイムスタイラスをインスタンス化することは、既定コンストラクタを使用することを含むことができる。さらなる代替的な機構を使用して、子または縦続RTSを親に対応づけることができる。他の機構は、親RTSに対応づけられた専用ポインタを使用して、子RTSへのリファレンスを保持することができる。ここで、親RTSは、非同期プラグインインターフェースを実装する必要はない。
リアルタイムスタイラスオブジェクトは、ペンデータを転送する2つまたはそれ以上の内部キューを有することができる。これらは、入力キューおよび出力キューを含む。これらの2つのキューの間に他のキューを追加することができる。また、データが、ペンデータ流から同期プラグインを入力することだけを目的としているときは、入力キューを取り除いてもよい。これらのキューがペンデータを処理するのに用いるプロセスは、少なくとも図6、8、11および13に関連して上述されている。
インクを収集する形式上でリアルタイムスタイラスオブジェクトを使用するための例示的なシナリオを以下に記載する。
a.「Iスタイラス非同期プラグイン」インターフェースを実装する形式を作成する。
b.その形式上にコントロールに接続されたリアルタイムスタイラスオブジェクトを作成する。
c.その形式が関与するデータに関する形式の特性(例えばデータ対象特性)において、表面に接触するスタイラスに関する通知(スタイラスダウンイベント)、データパケット、およびスタイラスアップ(例えばスタイラスアップイベント)通知に関与するようにその形式を設定する。
d.その形式の「Iスタイラス非同期プラグインス.タイラスダウン」、「Iスタイラス非同期プラグイン.パケット」および「Iスタイラス非同期プラグイン.スタイラスアップ」法において、その形式のリアルタイムスタイラスオブジェクトから送られるスタイラスダウン、パケットおよびスタイラスアップ通知を処理するためのコードを追加する。
各リアルタイムスタイラスオブジェクトは、それが関与できるオブジェクトに対する一意的識別子のリストを維持する。リアルタイムスタイラスオブジェクトは、一意的識別子とタブレットオブジェクトとの間の翻訳を行うためのいくつかの方法を有することができる。これらは、「タブレットからタブレットコンテキストIDを取得」および「タブレットコンテキストIDからタブレットを取得」法を含むことができる。
ペンデータは、それ自体の名前空間(例えば、「スタイラス入力.プラグインデータ」名前空間)を占有することができる。
タブレット特性記述オブジェクト(例えば「タブレット特性記述」オブジェクト)は、特性包括的一意的識別子(GUID)、および特定のタブレットについての範囲、解像度、および特性の単位を示すタブレット特性計量(例えば「タブレット特性計量」)を含むことができる。
一意的タブレット識別子を取得し、タブレットによってサポートされる特性記述オブジェクトの集合を戻す方法が存在しうる。例えば、リアルタイムスタイラスオブジェクトの「タブレット特性記述集合を取得」法は、一意的タブレット識別子を取得し、タブレットによってサポートされる「タブレット特性記述」オブジェクトの集合を戻す。リアルタイムスタイラスオブジェクトの「所望のパケット記述を取得」法は、リアルタイムスタイラスオブジェクトがそのプラグインに送ることになるパケット特性に対するGUIDのアレイを戻す。
所定のタブレットに対するプラグインに送られるパケット特性の集合は、「タブレット特性記述集合を取得」法によって戻される集合と、「所望のパケット記述を取得」法によって戻される集合との共通部分でありうる。リアルタイムスタイラスがそのプラグインに送ることになるパケット特性の集合を修正するために、リアルタイムスタイラスオブジェクトの「所望のパケット記述を設定」法を呼び出すことができる。
リアルタイムスタイラスオブジェクトが使用可能になると、各プラグインは、「Iスタイラス同期プラグイン.リアルタイムスタイラスイネーブルド」または「Iスタイラス非同期プラグイン.リアルタイムスタイラスイネーブルド」法の呼出を受け取る。通知で送られた「リアルタイムスタイラスイネーブルドデータ」オブジェクトは、「リアルタイムスタイラス」オブジェクトが使用可能であるときに利用可能なタブレットに対するコンテキスト識別子の集合を含む。「リアルタイムスタイラス」オブジェクトが使用可能である間に、「リアルタイムスタイラス」オブジェクトが使用できるタブレットが、ペン−使用可能コンピューティングシステムに追加、またはそこから除去されると、「リアルタイムスタイラスオブジェクト」は、タブレットが追加または除去されたことをそのプラグインに通知する。
スタイラスは、追加的なインターフェースを有することができる。各スタイラスは、スタイラスに対応づけられたパケットを示す、スタイラスに対応づけられた情報を有することができる。リアルタイムスタイラスオブジェクトは、スタイラスに関する情報をいくつかの通知方法でプラグインに送る。ペンまたはスタイラスに関する情報をスタイラスオブジェクトによって表現することができる。オブジェクトは、データが収集されたときのタブレットペンの状態のスナップショットである。プラグインは、タブレットペンデータ流の一部としてタブレットペンデータを受け取っているため、プラグインは、カーソルクラスを通じて特定のタブレットペンの現行の状態を調べる代わりに、スタイラスオブジェクトにおける情報を用いる必要がある。
プラグインおよび「リアルタイムスタイラス」クラスについて以下に説明する。プラグイン、「Iスタイラス同期プラグイン」または「Iスタイラス非同期プラグイン」インターフェースを実装するオブジェクトをリアルタイムスタイラスオブジェクトに追加することが可能である。
「Iスタイラス同期プラグイン」および「Iスタイラス非同期プラグイン」インターフェースは、同じ方法を定める。これらの方法は、リアルタイムスタイラスオブジェクトが、ペンデータを各プラグインに送ることを可能にする。{Iスタイラス同期プラグイン.データ対象}および「Iスタイラス非同期プラグイン.データ対象」特性は、各プラグインが、タブレットペンデータ流における特定のデータを利用することを可能にする。プラグインは、潜在的な性能上の問題を最小限に抑える、その作業を実施するのに必要なデータを利用するだけでよい。あるいは、追加的な利用はプラグインに含まれてもよい。
リアルタイムスタイラスオブジェクトは、「スタイラス入力.プラグインデータ」名前空間におけるオブジェクトを使用して、ペンデータをそのプラグインに送ることができる。リアルタイムスタイラスは、また、プラグインによって投じられた例外をキャッチする。そうする場合は、リアルタイムスタイラスは、「Iスタイラス同期プラグイン.エラー」または「Iスタイラス非同期プラグイン.エラー」法を呼び出すことによってプラグインに通知できる。
プラグインデータおよびリアルタイムスタイラスクラスについて以下に説明する。
リアルタイムスタイラスに対するプラグインは、「Iスタイラス同期プラグイン」または「Iスタイラス非同期プラグイン」インターフェースのいずれかを実装することができる。リアルタイムスタイラスにおける全ての方法を実施することができる。
インターフェース上に定められた方法は、「スタイラス入力。プラグインデータ」名前空間におけるオブジェクトを使用して、ペンデータをプラグインに送ることができる。以下の表には、通知方法におけるパラメータであるデータオブジェクトが示されているとともに、その通知に対応づけられた「データ対象マスク」値が列記されている。
Figure 0004698599
Figure 0004698599
リアルタイムスタイラスオブジェクトは、タブレットペンに関する情報をいくつかの通知方法でそのプラグインに送る。タブレットペンに関する情報は、スタイラスオブジェクトによって表現される。このオブジェクトは、データが収集されたときのタブレットペンの状態のスナップショットである。プラグインは、タブレットペンデータ流の一部としてタブレットペンデータを受け取っているため、プラグインは、カーソルクラスを通じて特定のタブレットペンの現行の状態を調べる代わりに、スタイラスオブジェクトにおける情報を用いる必要がある。各スタイラスオブジェクトは、データを収集したタブレットに対するタブレットコンテキスト識別子を含む。
同期および非同期インターフェース上で以下の13の機能を実装することができる。表は、様々なイベントを通じて送られる情報を比較したものである。イベントおよびパラメータのリストは例示的なものであって、網羅的なものではない。以下のイベントおよびパラメータとともに、またはそれらの代わりに他のイベントおよびパラメータを用いてもよい。
同期パラメータの多くは、受取り側が、キューを通るデータを修正することを可能にするという点においてのみそれらの同期パラメータと異なる。あるいは、両方のパラメータの集合が、キューを通るデータを修正することを可能にすることができる。
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
Figure 0004698599
本発明の態様をその例示的な実施形態の観点で説明した。この開示内容を吟味すれば、添付の請求項の範囲および主旨に含まれる多くの実施形態、改造形態および変更が当業者に理解されるであろう。
本発明のある態様を実施することができる汎用デジタルコンピューティング環境の概略図を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の1つまたは複数の態様をサポートする汎用コンピュータ環境を示す図である。 本発明の態様によるスタイラスをベースとした入力システムのためのディスプレイを示す図である。 本発明の態様による電子インクの流れを処理するためのシステムを示す図である。 本発明の態様による電子インクの流れを処理するための代替的アプローチを示す図である。 本発明の態様をサポートすることができるオブジェクトモードを示す図である。 本発明の態様による電子インクを処理するためのシステムを示す図である。 本発明の態様による電子インクを処理するためのシステムを示す図である。 本発明の態様による入力キューおよび出力キューを使用するための様々なアプローチを示す図である。 本発明の態様による入力キューおよび出力キューを使用するための様々なアプローチを示す図である。 本発明の態様によるインクを処理するためのシステムを形成・使用するための方法を示す図である。 本発明の態様によるインクを処理するためのシステムを形成・使用するための方法を示す図である。 本発明の態様によるインク集合オブジェクトを警報するためのプロトコルを備えたシステムを示す図である。 本発明の態様による追加的なキューを備えたシステムを示す図である。 本発明の態様による分離されたリアルタイムスタイラス構成要素を備えたシステムを示す図である。 本発明の態様による、ジェスチャ認識装置がジェスチャを追跡できる深さを示す図である。 本発明の態様による例外処理のためのシステムを示す図である。 本発明の態様による管理および非管理コードを示す図である。 本発明の態様による、同期を確保するためにキューにおける異なる箇所にどのようにしてデータを配置できるかを示す図である。 本発明の態様による、同期を確保するためにキューにおける異なる箇所にどのようにしてデータを配置できるかを示す図である。 本発明の態様によるペンデータを処理するための様々なシステムを示す図である。 本発明の態様によるペンデータを処理するための様々なシステムを示す図である。 本発明の態様によるキューを示す図である。

Claims (5)

  1. 構成要素に接続されるような動的描写オブジェクトを使用してコンピュータにインクを描写させる方法であって、前記同期描写オブジェクトは、インターフェースを有し、前記構成要素は、入力インターフェース、同期インターフェース、および非同期インターフェースを有し、前記方法は、
    どのようにしてデータを処理するかを指示する前記構成要素からインクを受け取る工程であって、前記インクは、前記構成要素の前記同期インターフェースに接続される前記動的描写オブジェクトのインターフェースを介して受け取られる工程と、
    表示装置の後続の表示のために前記インクを描写する工程であって、前記描写は、前記インクを前記コンピュータが受け取ることに同期して発生する工程
    前記動的描写オブジェクトから前記インクを伝送して、描写された前記インクを一時的にキャッシュする工程と、
    別の描写オブジェクトから通知を受け取る工程であって、前記別の描写オブジェクトは、前記構成要素の前記非同期インターフェースに接続されており、前記通知は、前記動的描写オブジェクトに前記別の描写オブジェクトが前記構成要素から前記インクに関する情報を受け取ったことを示す工程と、
    前記通知に応答して、描写された前記インクのキャッシュをクリアする工程と
    を含むことを特徴とする方法。
  2. 前記描写工程は、スタイラスから流れる連続的なインクの概観をユーザに提示することを特徴とする請求項に記載の方法。
  3. 前記動的描写オブジェクトは、前記構成要素に接続された同期プラグイン集合の一部であることを特徴とする請求項に記載の方法。
  4. 前記描写オブジェクトに接続された追加オブジェクトにデータを送る工程をさらに含むことを特徴とする請求項に記載の方法。
  5. 請求項1乃至4の何れかに記載の方法を実行するためのプログラムを格納したコンピュータ可読媒体。
JP2006536576A 2003-10-24 2004-07-28 リアルタイムインキング Expired - Fee Related JP4698599B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US51359103P 2003-10-24 2003-10-24
US60/513,591 2003-10-24
US10/879,527 US7436535B2 (en) 2003-10-24 2004-06-30 Real-time inking
US10/879,527 2004-06-30
PCT/US2004/024194 WO2005045574A2 (en) 2003-10-24 2004-07-28 Real-time inking

Publications (2)

Publication Number Publication Date
JP2007509413A JP2007509413A (ja) 2007-04-12
JP4698599B2 true JP4698599B2 (ja) 2011-06-08

Family

ID=34526880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006536576A Expired - Fee Related JP4698599B2 (ja) 2003-10-24 2004-07-28 リアルタイムインキング

Country Status (13)

Country Link
US (17) US7436535B2 (ja)
EP (1) EP1676185A4 (ja)
JP (1) JP4698599B2 (ja)
KR (1) KR101085730B1 (ja)
CN (1) CN1795453B (ja)
AU (1) AU2004287136B2 (ja)
BR (1) BRPI0406514A (ja)
CA (1) CA2511395C (ja)
MX (1) MXPA05007085A (ja)
MY (1) MY139593A (ja)
RU (1) RU2392655C2 (ja)
TW (1) TWI374368B (ja)
WO (1) WO2005045574A2 (ja)

Families Citing this family (118)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7904187B2 (en) 1999-02-01 2011-03-08 Hoffberg Steven M Internet appliance system and method
US9047047B2 (en) * 2010-10-01 2015-06-02 Z124 Allowing multiple orientations in dual screen view
US7262785B2 (en) * 2003-08-21 2007-08-28 Microsoft Corporation Ink editing architecture
CN100481062C (zh) * 2003-08-21 2009-04-22 微软公司 墨水收集和再现
US7436535B2 (en) * 2003-10-24 2008-10-14 Microsoft Corporation Real-time inking
US7427984B2 (en) * 2003-10-26 2008-09-23 Microsoft Corporation Point erasing
US7978716B2 (en) 2003-11-24 2011-07-12 Citrix Systems, Inc. Systems and methods for providing a VPN solution
US8060743B2 (en) * 2003-11-14 2011-11-15 Certicom Corp. Cryptographic method and apparatus
US7757074B2 (en) 2004-06-30 2010-07-13 Citrix Application Networking, Llc System and method for establishing a virtual private network
US8495305B2 (en) 2004-06-30 2013-07-23 Citrix Systems, Inc. Method and device for performing caching of dynamically generated objects in a data communication network
US8739274B2 (en) 2004-06-30 2014-05-27 Citrix Systems, Inc. Method and device for performing integrated caching in a data communication network
US8046830B2 (en) 2004-07-23 2011-10-25 Citrix Systems, Inc. Systems and methods for network disruption shielding techniques
AU2005266945A1 (en) 2004-07-23 2006-02-02 Citrix Systems, Inc. A method and systems for securing remote access to private networks
US7761814B2 (en) * 2004-09-13 2010-07-20 Microsoft Corporation Flick gesture
US7810089B2 (en) 2004-12-30 2010-10-05 Citrix Systems, Inc. Systems and methods for automatic installation and execution of a client-side acceleration program
US8954595B2 (en) 2004-12-30 2015-02-10 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP buffering
US8700695B2 (en) 2004-12-30 2014-04-15 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP pooling
US8706877B2 (en) 2004-12-30 2014-04-22 Citrix Systems, Inc. Systems and methods for providing client-side dynamic redirection to bypass an intermediary
US8549149B2 (en) * 2004-12-30 2013-10-01 Citrix Systems, Inc. Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing
US8255456B2 (en) 2005-12-30 2012-08-28 Citrix Systems, Inc. System and method for performing flash caching of dynamically generated objects in a data communication network
EP1851750A4 (en) 2005-02-08 2010-08-25 Oblong Ind Inc SYSTEM AND METHOD FOR CONTROL SYSTEM BASED ON GESTURES
US8020084B2 (en) 2005-07-01 2011-09-13 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US8305398B2 (en) 2005-07-01 2012-11-06 Microsoft Corporation Rendering and compositing multiple applications in an interactive media environment
US8656268B2 (en) 2005-07-01 2014-02-18 Microsoft Corporation Queueing events in an interactive media environment
US7721308B2 (en) 2005-07-01 2010-05-18 Microsoft Corproation Synchronization aspects of interactive multimedia presentation management
US20070006062A1 (en) * 2005-07-01 2007-01-04 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US8799757B2 (en) * 2005-07-01 2014-08-05 Microsoft Corporation Synchronization aspects of interactive multimedia presentation management
US8108787B2 (en) * 2005-07-01 2012-01-31 Microsoft Corporation Distributing input events to multiple applications in an interactive media environment
US7941522B2 (en) * 2005-07-01 2011-05-10 Microsoft Corporation Application security in an interactive media environment
CN101495990B (zh) * 2005-12-02 2011-09-14 思杰系统有限公司 用于提供从代理服务器到虚拟计算环境的身份验证证明以访问远程资源的方法和设备
US8301839B2 (en) 2005-12-30 2012-10-30 Citrix Systems, Inc. System and method for performing granular invalidation of cached dynamically generated objects in a data communication network
US7921184B2 (en) 2005-12-30 2011-04-05 Citrix Systems, Inc. System and method for performing flash crowd caching of dynamically generated objects in a data communication network
US7378966B2 (en) * 2006-01-04 2008-05-27 Microsoft Corporation RFID device groups
US7486282B2 (en) * 2006-01-27 2009-02-03 Microsoft Corporation Size variant pressure eraser
US8370383B2 (en) 2006-02-08 2013-02-05 Oblong Industries, Inc. Multi-process interactive systems and methods
US9910497B2 (en) 2006-02-08 2018-03-06 Oblong Industries, Inc. Gestural control of autonomous and semi-autonomous systems
US8531396B2 (en) 2006-02-08 2013-09-10 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US8537111B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US9823747B2 (en) 2006-02-08 2017-11-21 Oblong Industries, Inc. Spatial, multi-modal control device for use with spatial operating system
US8207822B2 (en) * 2006-06-15 2012-06-26 Microsoft Corporation Support for batching of events, and shredding of batched events in the RFID infrastructure platform
US20080001711A1 (en) * 2006-06-15 2008-01-03 Microsoft Corporation Reliability of execution for device provider implementations
US7956724B2 (en) * 2006-06-15 2011-06-07 Microsoft Corporation Support for reliable end to end messaging of tags in an RFID infrastructure
US7903094B2 (en) * 2006-06-23 2011-03-08 Wacom Co., Ltd Information processing apparatus, operation input method, and sensing device
US20080174404A1 (en) * 2007-01-23 2008-07-24 Microsoft Corporation Dynamic updates in rfid manager
US8245219B2 (en) * 2007-01-25 2012-08-14 Microsoft Corporation Standardized mechanism for firmware upgrades of RFID devices
JP4866262B2 (ja) * 2007-02-16 2012-02-01 ソフトバンクモバイル株式会社 操作入力処理方法及び携帯型情報処理装置
JP5905662B2 (ja) 2007-04-24 2016-04-20 オブロング・インダストリーズ・インコーポレーテッド プロテイン、プール、およびスロークス処理環境
US20080271007A1 (en) * 2007-04-30 2008-10-30 Bea Systems, Inc. System and method for managed tuxedo wrapper for .net applications
US20080313607A1 (en) * 2007-06-15 2008-12-18 Microsoft Corporation Unified input stack
US20090027398A1 (en) * 2007-07-26 2009-01-29 Tufts University Method for recognizing a shape from a path of a digitizing device
US8291393B2 (en) * 2007-08-20 2012-10-16 International Business Machines Corporation Just-in-time compiler support for interruptible code
US20090144752A1 (en) * 2007-11-30 2009-06-04 Microsoft Corporation Unmanaged-to-managed aggregation
US8245145B1 (en) * 2007-12-18 2012-08-14 Eakin Douglas M Tool and method for developing a web page
US20090157848A1 (en) * 2007-12-18 2009-06-18 Western Digital Technologies, Inc. Application server processing tcp/ip requests from a client by invoking an asynchronous function
EP2245536B1 (en) 2008-01-27 2018-10-24 Citrix Systems, Inc. Methods and systems for remoting three dimensional graphics
US8390579B2 (en) * 2008-03-14 2013-03-05 France Telecom System for classifying gestures
US9684380B2 (en) 2009-04-02 2017-06-20 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US9740922B2 (en) 2008-04-24 2017-08-22 Oblong Industries, Inc. Adaptive tracking system for spatial input devices
US9740293B2 (en) 2009-04-02 2017-08-22 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US10642364B2 (en) 2009-04-02 2020-05-05 Oblong Industries, Inc. Processing tracking and recognition data in gestural recognition systems
US8723795B2 (en) 2008-04-24 2014-05-13 Oblong Industries, Inc. Detecting, representing, and interpreting three-space input: gestural continuum subsuming freespace, proximal, and surface-contact modes
US9952673B2 (en) 2009-04-02 2018-04-24 Oblong Industries, Inc. Operating environment comprising multiple client devices, multiple displays, multiple users, and gestural control
US9495013B2 (en) 2008-04-24 2016-11-15 Oblong Industries, Inc. Multi-modal gestural interface
EP2164026A1 (en) * 2008-09-15 2010-03-17 Alcatel, Lucent Gesture service platform
WO2010045394A1 (en) * 2008-10-14 2010-04-22 Oblong Industries, Inc. Multi-process interactive systems and methods
US8149431B2 (en) * 2008-11-07 2012-04-03 Citrix Systems, Inc. Systems and methods for managing printer settings in a networked computing environment
US20100131921A1 (en) * 2008-11-25 2010-05-27 Microsoft Corporation Exposing asynchronous mechanisms as first-class events
US20100131743A1 (en) * 2008-11-25 2010-05-27 Microsoft Corporation Lazy and stateless events
US20100131556A1 (en) * 2008-11-25 2010-05-27 Microsoft Corporation Unified event programming and queries
US20100131745A1 (en) * 2008-11-25 2010-05-27 Microsoft Corporation Exceptional events
US10019081B2 (en) * 2009-01-15 2018-07-10 International Business Machines Corporation Functionality switching in pointer input devices
US9317128B2 (en) 2009-04-02 2016-04-19 Oblong Industries, Inc. Remote devices used in a markerless installation of a spatial operating environment incorporating gestural control
US10824238B2 (en) 2009-04-02 2020-11-03 Oblong Industries, Inc. Operating environment with gestural control and multiple client devices, displays, and users
US20110029904A1 (en) * 2009-07-30 2011-02-03 Adam Miles Smith Behavior and Appearance of Touch-Optimized User Interface Elements for Controlling Computer Function
US8751844B2 (en) * 2009-09-24 2014-06-10 Citrix Systems, Inc. Systems and methods for attributing an amount of power consumption to a workload
US9971807B2 (en) 2009-10-14 2018-05-15 Oblong Industries, Inc. Multi-process interactive systems and methods
US9933852B2 (en) 2009-10-14 2018-04-03 Oblong Industries, Inc. Multi-process interactive systems and methods
US8847961B2 (en) * 2010-06-14 2014-09-30 Microsoft Corporation Geometry, speed, pressure, and anti-aliasing for ink rendering
US9189147B2 (en) 2010-06-22 2015-11-17 Microsoft Technology Licensing, Llc Ink lag compensation techniques
US8970870B2 (en) * 2010-06-30 2015-03-03 Canon Kabushiki Kaisha Delivery of scan services over a device service port
US9069459B2 (en) 2011-05-03 2015-06-30 Microsoft Technology Licensing, Llc Multi-threaded conditional processing of user interactions for gesture processing using rendering thread or gesture processing thread based on threshold latency
DE102011053214A1 (de) * 2011-09-02 2013-03-07 Claas Selbstfahrende Erntemaschinen Gmbh Landwirtschaftliche Erntemaschine
US8952926B2 (en) 2011-10-17 2015-02-10 Topaz Systems, Inc. Digitizer
US8994686B2 (en) 2011-10-17 2015-03-31 Topaz Systems, Inc. Digitizer
US9052796B2 (en) 2012-01-08 2015-06-09 Microsoft Technology Licensing Llc Asynchronous handling of an input stream dedicated to multiple targets
US9537899B2 (en) 2012-02-29 2017-01-03 Microsoft Technology Licensing, Llc Dynamic selection of security protocol
TWI498778B (zh) * 2012-03-19 2015-09-01 Wistron Corp 校正不同觸控系統的方法
WO2013151587A1 (en) * 2012-04-06 2013-10-10 Topaz Systems, Inc. Digitizer
US9180262B2 (en) 2012-05-15 2015-11-10 JettStream, Inc. Delivery of nebulized medicines
US9389717B2 (en) * 2012-12-14 2016-07-12 Microsoft Technology Licensing, Llc Reducing latency in ink rendering
US20160195975A1 (en) * 2012-12-23 2016-07-07 Microsoft Technology Licensing, Llc Touchscreen computing device and method
US20140253462A1 (en) * 2013-03-11 2014-09-11 Barnesandnoble.Com Llc Sync system for storing/restoring stylus customizations
US20140372903A1 (en) * 2013-06-14 2014-12-18 Microsoft Corporation Independent Hit Testing for Touchpad Manipulations and Double-Tap Zooming
US9535646B2 (en) * 2013-06-18 2017-01-03 Microsoft Technology Licensing, Llc Methods and systems for electronic ink projection
US9433736B2 (en) 2013-07-03 2016-09-06 JettStream, Inc. Positionable elongated members with multi-axis joints
US9360956B2 (en) 2013-10-28 2016-06-07 Microsoft Technology Licensing, Llc Wet ink texture engine for reduced lag digital inking
BR112016009938B1 (pt) * 2013-11-19 2022-01-25 Wacom Co., Ltd Métodos de geração de dados de tinta e de desenho para renderização de dados de imagem
WO2015141260A1 (ja) * 2014-03-17 2015-09-24 株式会社河合楽器製作所 手書き音楽記号認識装置およびプログラム
US9990046B2 (en) 2014-03-17 2018-06-05 Oblong Industries, Inc. Visual collaboration interface
US9633466B2 (en) * 2014-09-29 2017-04-25 Microsoft Technology Licensing, Llc Low latency ink rendering pipeline
US20160210038A1 (en) * 2015-01-21 2016-07-21 Microsoft Technology Licensing, Llc Electronic inking
US10225676B2 (en) * 2015-02-06 2019-03-05 Dolby Laboratories Licensing Corporation Hybrid, priority-based rendering system and method for adaptive audio
US10089291B2 (en) 2015-02-27 2018-10-02 Microsoft Technology Licensing, Llc Ink stroke editing and manipulation
US9950542B2 (en) * 2015-03-12 2018-04-24 Microsoft Technology Licensing, Llc Processing digital ink input subject to monitoring and intervention by an application program
US9898841B2 (en) 2015-06-29 2018-02-20 Microsoft Technology Licensing, Llc Synchronizing digital ink stroke rendering
JP6589469B2 (ja) 2015-09-04 2019-10-16 カシオ計算機株式会社 描画装置及び描画装置の描画方法
US20170236318A1 (en) * 2016-02-15 2017-08-17 Microsoft Technology Licensing, Llc Animated Digital Ink
JP6701853B2 (ja) * 2016-03-18 2020-05-27 カシオ計算機株式会社 描画装置及び描画装置の描画方法
US9996511B2 (en) * 2016-03-23 2018-06-12 International Business Machines Corporation Free form website structure design
US10146759B2 (en) * 2016-03-24 2018-12-04 Microsoft Technology Licensing, Llc Controlling digital input
US11029836B2 (en) * 2016-03-25 2021-06-08 Microsoft Technology Licensing, Llc Cross-platform interactivity architecture
US10529302B2 (en) 2016-07-07 2020-01-07 Oblong Industries, Inc. Spatially mediated augmentations of and interactions among distinct devices and applications via extended pixel manifold
US11360702B2 (en) 2017-12-11 2022-06-14 Hewlett-Packard Development Company, L.P. Controller event queues
CN111625303B (zh) * 2019-02-27 2023-06-09 阿里巴巴集团控股有限公司 事件处理方法、装置、设备及可读存储介质
US20220391084A1 (en) * 2019-09-25 2022-12-08 Zhangyue Technology Co., Ltd Information display method, reader, computer storage medium, ink screen reading device and screen projection display system
CN112802133B (zh) * 2021-04-13 2021-07-06 武汉精测电子集团股份有限公司 一种基于机器视觉的Mini Led显示屏单元板墨色检测分选方法
US20240094896A1 (en) * 2022-09-19 2024-03-21 Microsoft Technology Licensing, Llc Locally generating preliminary inking imagery

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04326488A (ja) * 1991-04-19 1992-11-16 Internatl Business Mach Corp <Ibm> データ入力方法及び装置
US20030025675A1 (en) * 2001-08-01 2003-02-06 Bodin Dresevic Dynamic rendering of ink strokes with transparency
JP2003141100A (ja) * 2001-06-28 2003-05-16 Microsoft Corp デジタルインクを表現し、表示するためのコンピュータ読取可能媒体およびコンピュータシステム
JP2003216324A (ja) * 2002-01-17 2003-07-31 Hitachi Information Technology Co Ltd 入力システム
JP2003228718A (ja) * 2002-01-25 2003-08-15 Xerox Corp ビットマップ化イメージを構造化テキスト/図形エディタで利用すべく変換する方法および装置
JP2003288607A (ja) * 2002-01-25 2003-10-10 Xerox Corp デジタルインクイメージを構造化テキスト/図形エディタで利用すべく変換する方法および装置

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0566293B1 (en) 1992-04-15 2003-07-16 Xerox Corporation Graphical drawing and editing systems and methods therefor
US5710831A (en) * 1993-07-30 1998-01-20 Apple Computer, Inc. Method for correcting handwriting on a pen-based computer
US5500937A (en) * 1993-09-08 1996-03-19 Apple Computer, Inc. Method and apparatus for editing an inked object while simultaneously displaying its recognized object
US5534893A (en) * 1993-12-15 1996-07-09 Apple Computer, Inc. Method and apparatus for using stylus-tablet input in a computer system
US5768607A (en) 1994-09-30 1998-06-16 Intel Corporation Method and apparatus for freehand annotation and drawings incorporating sound and for compressing and synchronizing sound
US5802388A (en) * 1995-05-04 1998-09-01 Ibm Corporation System and method for correction and confirmation dialog for hand printed character input to a data processing system
US6268859B1 (en) * 1995-06-06 2001-07-31 Apple Computer, Inc. Method and system for rendering overlapping opaque graphical objects in graphic imaging systems
US5920688A (en) * 1995-11-13 1999-07-06 International Business Machines Corporation Method and operating system for manipulating the orientation of an output image of a data processing system
US5782539A (en) * 1995-11-16 1998-07-21 Peterson; Randall D. Wall-to-wall surface mining process
US5872966A (en) * 1996-05-10 1999-02-16 Apple Computer, Inc. System and method for logging and enabling further manipulation of system state information
US5949998A (en) * 1996-07-03 1999-09-07 Sun Microsystems, Inc. Filtering an object interface definition to determine services needed and provided
US6128007A (en) * 1996-07-29 2000-10-03 Motorola, Inc. Method and apparatus for multi-mode handwritten input and hand directed control of a computing device
US5919249A (en) 1996-08-07 1999-07-06 Adobe Systems Incorporated Multiplexed output movie rendering
US5896126A (en) * 1996-08-29 1999-04-20 International Business Machines Corporation Selection device for touchscreen systems
US5953523A (en) * 1996-10-28 1999-09-14 International Business Machines Corporation Method and apparatus for creating "smart forms "
US6049832A (en) 1996-11-15 2000-04-11 Wall Data Incorporated Method for accessing information on a host computer from a client computer through an intelligent virtual host component
GB2340362B (en) * 1998-07-31 2002-11-06 Sony Uk Ltd Digital video processing
GB2340265B (en) * 1998-07-31 2003-04-23 Sony Uk Ltd Data processing
GB2340360B (en) * 1998-07-31 2002-11-06 Sony Uk Ltd Animation of video special effects
US6269378B1 (en) * 1998-12-23 2001-07-31 Nortel Networks Limited Method and apparatus for providing a name service with an apparently synchronous interface
US6249810B1 (en) * 1999-02-19 2001-06-19 Chaincast, Inc. Method and system for implementing an internet radio device for receiving and/or transmitting media information
US6498610B1 (en) * 2000-05-05 2002-12-24 Xerox Corporation Concurrent utilization of multiple color profile databases for image rending
US7397949B2 (en) * 2000-06-21 2008-07-08 Microsoft Corporation Serial storage of ink and its properties
US6355889B1 (en) * 2000-06-28 2002-03-12 International Business Machines Corporation Method and apparatus for linking electronic ink to electronic personal information systems
US6608697B1 (en) * 2000-07-26 2003-08-19 Extensis, Inc. Preflight system that provides a universal resource locator address associated with a detected print file error
US6754386B1 (en) * 2000-08-22 2004-06-22 Microsft Corporation Method and system of matching ink processor and recognizer word breaks
WO2002069583A1 (en) * 2001-02-26 2002-09-06 Maple Optical Systems, Inc. Data packet transmission scheduling using a partitioned heap
US6943787B2 (en) * 2001-02-27 2005-09-13 Medtronics, Inc. System and method for displaying implantable medical device data
US6885374B2 (en) * 2001-06-29 2005-04-26 Intel Corporation Apparatus, method and system with a graphics-rendering engine having a time allocator
US7039234B2 (en) * 2001-07-19 2006-05-02 Microsoft Corporation Electronic ink as a software object
US6909430B2 (en) * 2001-08-01 2005-06-21 Microsoft Corporation Rendering ink strokes of variable width and angle
US7287277B2 (en) * 2001-12-21 2007-10-23 Hewlett-Packard Development Company, L.P. Method and apparatus for controlling execution of a computer operation
DE10215615A1 (de) * 2002-04-09 2003-10-30 Roland Man Druckmasch Farbwerk für Druckwerke von Rotationsdruckmaschinen
US20040070616A1 (en) * 2002-06-02 2004-04-15 Hildebrandt Peter W. Electronic whiteboard
US7046213B2 (en) * 2002-06-05 2006-05-16 Ibm Apparatus and method for direct manipulation of electronic information
US7028229B2 (en) * 2002-09-30 2006-04-11 Sun Microsystems, Inc. Kernel event subscription and publication system and method
US7430623B2 (en) * 2003-02-08 2008-09-30 Hewlett-Packard Development Company, L.P. System and method for buffering data received from a network
JP4039274B2 (ja) * 2003-02-28 2008-01-30 富士ゼロックス株式会社 サービス処理システム及びプログラム
US7562289B2 (en) * 2003-06-18 2009-07-14 Layton Geo-Science, Inc. Methods and systems for encoding geographic coordinates and features in a portable document format file
EP1665128A4 (en) * 2003-08-21 2007-10-17 Microsoft Corp ELECTRONIC INK PROCESSING
US7436535B2 (en) * 2003-10-24 2008-10-14 Microsoft Corporation Real-time inking
US6925892B2 (en) 2003-12-17 2005-08-09 Sauer-Danfoss, Inc. Method and means for monitoring torque in a hydraulic power unit
US7499058B2 (en) * 2005-04-22 2009-03-03 Microsoft Corporation Programmatical access to handwritten electronic ink in a tree-based rendering environment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04326488A (ja) * 1991-04-19 1992-11-16 Internatl Business Mach Corp <Ibm> データ入力方法及び装置
JP2003141100A (ja) * 2001-06-28 2003-05-16 Microsoft Corp デジタルインクを表現し、表示するためのコンピュータ読取可能媒体およびコンピュータシステム
US20030025675A1 (en) * 2001-08-01 2003-02-06 Bodin Dresevic Dynamic rendering of ink strokes with transparency
JP2003216324A (ja) * 2002-01-17 2003-07-31 Hitachi Information Technology Co Ltd 入力システム
JP2003228718A (ja) * 2002-01-25 2003-08-15 Xerox Corp ビットマップ化イメージを構造化テキスト/図形エディタで利用すべく変換する方法および装置
JP2003288607A (ja) * 2002-01-25 2003-10-10 Xerox Corp デジタルインクイメージを構造化テキスト/図形エディタで利用すべく変換する方法および装置

Also Published As

Publication number Publication date
US7016055B2 (en) 2006-03-21
MY139593A (en) 2009-10-30
EP1676185A4 (en) 2012-01-04
US20050156913A1 (en) 2005-07-21
AU2004287136A1 (en) 2005-05-19
US20070153300A1 (en) 2007-07-05
US20050093841A1 (en) 2005-05-05
US7511836B2 (en) 2009-03-31
US20050093844A1 (en) 2005-05-05
US7428736B2 (en) 2008-09-23
CA2511395A1 (en) 2005-05-19
BRPI0406514A (pt) 2005-12-20
CN1795453A (zh) 2006-06-28
AU2004287136B2 (en) 2009-08-13
US7973957B2 (en) 2011-07-05
US20050093839A1 (en) 2005-05-05
US7453585B2 (en) 2008-11-18
US20050093838A1 (en) 2005-05-05
US8400665B2 (en) 2013-03-19
US20050088420A1 (en) 2005-04-28
US20050093840A1 (en) 2005-05-05
US7463371B2 (en) 2008-12-09
US7443531B2 (en) 2008-10-28
CN1795453B (zh) 2012-04-11
WO2005045574A3 (en) 2005-10-27
US7199885B2 (en) 2007-04-03
US20120242625A1 (en) 2012-09-27
US20050093833A1 (en) 2005-05-05
JP2007509413A (ja) 2007-04-12
KR101085730B1 (ko) 2011-11-21
US7239401B2 (en) 2007-07-03
KR20060123029A (ko) 2006-12-01
US7212296B2 (en) 2007-05-01
TW200519711A (en) 2005-06-16
US7446894B2 (en) 2008-11-04
WO2005045574A2 (en) 2005-05-19
US8213027B2 (en) 2012-07-03
US20060132817A1 (en) 2006-06-22
CA2511395C (en) 2012-04-24
US7515139B2 (en) 2009-04-07
US20050093842A1 (en) 2005-05-05
US20050093836A1 (en) 2005-05-05
MXPA05007085A (es) 2005-10-18
US20110225331A1 (en) 2011-09-15
EP1676185A2 (en) 2006-07-05
US20070121125A1 (en) 2007-05-31
US20050093843A1 (en) 2005-05-05
RU2392655C2 (ru) 2010-06-20
RU2005120672A (ru) 2006-01-20
US7450261B2 (en) 2008-11-11
US8199131B2 (en) 2012-06-12
US7436535B2 (en) 2008-10-14
US20090189879A1 (en) 2009-07-30
TWI374368B (en) 2012-10-11

Similar Documents

Publication Publication Date Title
JP4698599B2 (ja) リアルタイムインキング
US8803824B2 (en) Methods for allowing applications to filter out or opt into tablet input
KR100975504B1 (ko) 어플리케이션 프로그램에 이용가능한 정보를 만들기 위한 방법, 컴퓨터 판독가능 기록 매체, 및 컴퓨터 시스템
US7499047B2 (en) Ink editing architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100423

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100723

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110225

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110301

R150 Certificate of patent or registration of utility model

Ref document number: 4698599

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees