专利摘要:
ユーザインタフェースエレメントに対するレイアウトアップデート(更新)を管理するための種々のテクノロジおよび手法が開示されている。ユーザインタフェースエレメントのダーティステートが、ユーザインタフェースエレメントの複数のノードをもつツリーにおいてトラッキング(追跡)される。このダーティステートはノードのダーティサブツリーを特定することを可能にする。ルートノードはダーティサブツリーの各々について特定される。ツリーの影響を受けた部分は、ダーティサブツリーの各々について特定されたルートノードからスタートしてアップデートされる。アップデートプロセスの一部として、先祖ノードに対する変更が検出され、その変更はレイアウトプロセスをより効率化するために使用される。例えば、変更された祖先のいずれかの子孫ノードで現在実行されているレイアウトプロセスがあれば、そのレイアウトプロセスが放棄され、変更された祖先で再開される。ツリーの影響を受けた部分をアップデートしたあと、アップデートされたユーザインタフェースエレメントが出力デバイス上でレンダリングされる。
公开号:JP2011507056A
申请号:JP2010535009
申请日:2008-11-14
公开日:2011-03-03
发明作者:エス.パリク スジョー;ピー.レリア デイビッド
申请人:マイクロソフト コーポレーション;
IPC主号:G06T11-20
专利说明:

[0001] 現代のコンピュータオペレーティングシステムは、モニタまたはプリンタなどの出力デバイスからグラフィカルユーザインタフェースエレメントを提示し、管理する能力をもっている。あるグラフィカルユーザインタフェースエレメントがアプリケーション内で作成されるとき、そのアイテムは出力デバイス上でレンダリングするのに適したサイズにされ、配置されている。同様に、既存のグラフィカルユーザインタフェースエレメントがアプリケーション内で修正または削除されるとき、または新しいユーザインタフェースエレメントが追加されるとき、出力デバイスはその変更を正しく反映していなければならない。既存のコンピュータオペレーティングシステムは、デバイスドライバを利用して特定の出力デバイスと通信することにより、特定の出力デバイスからグラフィカル出力をレンダリングする煩雑な細事からソフトウェア開発者を解放している。既存のコンピュータオペレーティングシステムは、アプリケーションプログラミングインタフェース(Application Programming Interface:API)を将来のソフトウェア開発者に公表することによってこれを達成している。]
[0002] 一般的に、APIは、ソフトウェア開発者が利用することが可能で、いずれかの特定デバイスにとって必要であるローレベル(低水準)の命令に依存しないハイレベル(高水準)のファンクションコール(関数呼び出し)が集まったものである。プラットフォームまたはオペレーティングシステムは、デバイスドライバの援助を得て、ハイレベルのAPIコールからローレベルのデバイス固有コールへの必要な変換を実行しているのが代表的である。]
[0003] それにもかかわらず、ソフトウェア開発者は、自分のアプリケーションのグラフィカルユーザインタフェースエレメントが、いずれかの特定の出力デバイス上でどのように物理的に表示されまたはレンダリングされるかを実現することに係わりをもつことを望まないとしても、その開発者は、これらのエレメントがどのように論理的にレイアウトされ、管理されるかには関心を持つことがある。例えば、ソフトウェア開発者が、そのメニューの表示またはアイコンの配置を特定の方法で行なうグラフィカルユーザインタフェースを開発したいこともあれば、その開発者が、シングルドキュメントの中の複数のグラフィカルユーザインタフェースエレメントを特定の方法で配置し、表示するアプリケーションを開発したいこともある。ツールの中には、グラフィカルレイアウトを管理するある種の能力をソフトウェア開発者に与えているものがあるが、このような能力は複雑または非効率的であることが多い。]
課題を解決するための手段

[0004] ユーザインタフェースエレメントに対するレイアウトアップデート(更新)を管理するためのテクノロジおよび手法が開示されている。ユーザインタフェースエレメントのダーティステート(dirty state)がユーザインタフェースエレメントのツリーの中でトラッキング(追跡)される。ツリーは、ユーザインタフェースエレメントの複数のノードを含み、このダーティステートは、ノードのダーティサブツリーを特定することを可能にしている。ルートノードはダーティサブツリーの各々について特定される。ツリーの影響を受けた部分(affected portions)は、ダーティサブツリーの各々について特定されたルートノードから始まってアップデートされる。このツリーの影響を受けた部分をアップデートしたあと、アップデートされたユーザインタフェースエレメントが出力デバイス上でレンダリングされる。]
[0005] ある実施形態では、祖先(ancestor)ノードに対する変更が検出され、その変更はレイアウトプロセスをより効率化するために使用される。レイアウトプロセスは指定したデバイスから開始される。指定したノードのいずれかの祖先が変更されたか否かの判断が行なわれる。指定したノードの少なくとも1つの変更された祖先が特定されたときは、その変更された祖先のいずれかの子孫(descendant)のノードで現在実行中のレイアウトプロセスがあれば、そのレイアウトプロセスが放棄され、このレイアウトプロセスが変更された祖先で再開される。]
[0006] 別の実施形態では、指定したノードについてレイアウトステータスを無効化することができる。指定したノードがすでにダーティであるか否かの判断が行なわれる。指定したノードがまだダーティでなければ、指定したノードはダーティとしてマークされ、指定したノードが現在レイアウト(測定または配置)されている少なくとも1つのノードの祖先であるか否かの判断が行なわれる。指定したノードが現在レイアウトされている少なくとも1つのノードの祖先であれば、指定したノードから現在レイアウト(測定または配置)されているノードまでの直接経路上のすべてのノードはダーティ祖先を有しているが、指定したノードを含んでいないとしてマークされる。]
[0007] この概要は、以下の「詳細説明」に詳しく記載されている概念を選んで簡単に紹介したものである。この要約説明は請求項に記載の主題のキーとなる特徴または必須の特徴を特定するものでも、請求項に記載の主題の範囲を判断する際の一助として使用されるものでもない。]
図面の簡単な説明

[0008] ある実施形態のコンピュータシステムを示す概略図である。
図1のコンピュータシステム上で動作するある実施形態のレイアウトマネージャアプリケーションを示す概略図である。
ノードの2つの異なるダーティサブツリーを有している例示のノードのツリーを示す概略図である。
祖先変更のステータスを使用してレイアウトプロセスをより効率化する際に係わりのあるステージを例示するある実施形態のプロセスフロー図である。
無駄な作業を避けるようにノードのサイズが変更されたとき親をダーティとしてマークする際に係わりのあるステージを例示するある実施形態のプロセスフロー図である。
ノードのダーティサブツリーを処理することによってレンダリング直前にレイアウトをアップデートする際に係わりのあるステージを例示するある実施形態のプロセスフロー図である。
指定したノードでレイアウトプロセスを実行する際に係わりのあるステージを例示するある実施形態のプロセスフロー図である。
レイアウトプロセスを無効化する際に係わりのあるステージを例示するある実施形態のプロセスフロー図である。] 図1
実施例

[0009] 本明細書におけるテクノロジと手法は、出力デバイス上でユーザインタフェースエレメントのサイズと位置のアップデートを調整するレイアウトマネージャアプリケーション(layout manager application)として一般的コンテキストの中で説明されていることがあるが、これらのテクノロジと手法は上記のほかに、他の目的にも役立っている。ある実施形態では、本明細書に記載のテクノロジの1つまたは2つ以上は、MICROSOFT(登録商標)Silverlightなどのプラットフォーム内の特徴としても、MICROSOFT(登録商標)WINDOWS(登録商標)などのオペレーティングシステム内の特徴としても、または出力デバイス上でユーザインタフェースエレメントに対するアップデートを調整することを担当する他のタイプのプログラムまたはサービスからの特徴としても実現することができる。]
[0010] ある実施形態では、ユーザインタフェースエレメントのサイズと位置のアップデートを調整し、そのアップデートを出力デバイス上でレンダリングするのを可能にするレイアウトマネージャが提供されている。本明細書の中で使用されている「ユーザインタフェースエレメント(user interface element)」という用語は、リストボックス、コンボボックス(combo box)、ツリー構造、ラジオボタン、カレンダ、ウィンドウ、フォーム、パネル、およびこれらを組み合わせたもの、などのすべてのユーザインタフェースオブジェクトを含むものを意味している。ユーザインタフェースオブジェクトの新しい実施形態は絶えず作成されており、これらの開示例には、まだ特別に名前が付けられていないユーザインタフェースエレメントも含まれている。ユーザインタフェースエレメントは、ノードのツリーに編成され、そのステータスがトラッキングされ、アップデートされることを可能にしている。本明細書の中で用いられている「ツリー(tree)」という用語は、ユーザインタフェースエレメント間の関係を特定することを可能にする階層または他の構造で表現された複数のユーザインタフェースエレメントを含むものを意味している。本明細書の中で用いられている「ノード(node)」という用語は、複数のユーザインタフェースエレメントのツリー内の個別的ユーザインタフェースエレメントを含むものを意味している。]
[0011] ユーザインタフェースエレメントに影響を与える所与のプログラム実行(run)の一部として、レイアウトマネージャはノードのツリーを使用して、ユーザインタフェースエレメントに対するこれらの変更をトラッキングする。例えば、ツリー内のあるノードについて1つまたは2つ以上のステータスインジケータは、ユーザインタフェースエレメントの1つまたは2つ以上の細部が変更されたことを確認するようにアップデートすることができる。一例として(この例に限定されない)、ユーザインタフェース上の特定のテキストボックスに収められているテキストのフォントサイズを変更するコードを実行することがある。ある実施形態では、変更されたノードでダーティインジケータがマークされ、そのノードには、ユーザインタフェースが次回に再レンダリングされるときにアップデートする必要がある1つまたは2つ以上の変更された細部を有しているとのフラグが付けられる。これらのステータスインジケータはレイアウトマネージャによってトラッキングされ、そのあと、出力デバイスから表示された所与のプログラムに対するユーザインタフェースエレメントについて、どのアップデートをレンダリングする必要があるかを判断するために使用される。]
[0012] 例えば、ステータスインジケータは、ユーザインタフェースに対するアップデートを再レンダリングする前にレイアウトマネージャによってコールされるレイアウトプロセスによって使用することができる。本明細書の中で用いられている「レイアウトプロセス」という用語は、ユーザインタフェースエレメントのサイズを決め、位置決めするプロセスを含むものを意味している。本明細書の中で用いられている「レイアウトされた(laid out)」という用語は、それまでにあるユーザインタフェースエレメントに影響を与えた変更を反映するためにそのユーザインタフェースエレメントのサイズが決められ、位置決めされたことを含むものと意味している。レイアウトマネージャは、測定プロセスおよび/または配置プロセスを含むことができる。「測定プロセス」は、ある特定のユーザインタフェースエレメントをどれだけ大きくすることが望ましいかを推定するプロセスである。測定プロセスの間、ノードは、その子のすべてが要求するサイズを判断することによって、あるいはそのノードに子がなければ、そのノード自身が要求するサイズによって、そのノードが要求するサイズを判断する。ノードの子を測定するとき(子がある場合)、そのノードにはサイズの制約があり、これは、ノードがまだ測定していない子に割り振るために親が残しておいたサイズであるのが代表的である。このサイズ制限は、一方または両方のディメンションにおいて無制限のこともある。ある実施形態では、ノードに子があるか否かに関係なく、高さ、最小高さ、最大高さ、幅、最大幅および最小幅といった他の制約は、これらが指定されていれば、使用されることもある。「配置プロセス」は、位置およびその位置に表示されるために子ノードに割り振られたサイズを親エレメントが子ノードに知らせる場合のプロセスである。これは、測定プロセスで要求したことをノードが示したサイズより小であることも、大であることも、等しいこともある。ノードは、それに応じて自身でスクリーン上の位置とサイズを決める。ストレッチモード、水平位置合わせ(horizontal alignment)および垂直位置合わせ(vertical alignment)、といったプロパティは、その指定があれば、ノードの位置および/またはサイズを判断するために使用されることもある。]
[0013] 図4乃至図8により詳しく記載されているいくつかの実施形態では、祖先ノードで行なわれた変更のステータスは、レイアウトプロセス(例えば、測定プロセスおよび/または配置プロセス)の実行をより効率化するために使用される。本明細書の中で用いられている「祖先ノード(ancestor node)」という用語は、指定したノードまでの上向きのリニアチェインに含まれるいずれかの先行ノード(predecessor node)を含むものを意味している。本明細書の中で用いられている「親ノード(parent node)」という用語は、指定したノードの近隣親ノード(例:父)を含むものを意味している。ある任意のノードについてレイアウトプロセス(測定プロセスおよび/または配置プロセス)を実行しているとき、レイアウトマネージャは、いずれかの祖先ノードが変更されたかどうかを判断する。いずれかの祖先ノードが変更されていれば、変更された祖先の下位にある子孫ノード(例:子ノード)についてプロセス中のレイアウト(測定および/または配置)があれば、そのレイアウトが放棄され、レイアウトプロセス(測定または配置している)が変更された祖先で再開される。指定したノードに対するいずれかの祖先ノードが変更されていなければ、レイアウトプロセス(測定および/または配置している)は、子孫ノードの経路を下っていくことにより継続する。ある実施形態では、祖先に対する変更が行なわれたことを認識することにより、無駄な作業は、子孫レベルではなく、祖先レベルで変更を処理することによって回避することができる。さもなければ、祖先ノードに対してアップデートがそのあとで処理されたとき期限切れになる可能性のある、子孫ノードに対する変更を処理するのにこの作業が消費されていた可能性がある。以下では、これらの手法の一部について詳しく説明する。] 図4 図8
[0014] 図1に示すように、システムの1つまたは2つ以上の部分を実現するために使用される例示のコンピュータシステムは、コンピューティングデバイス100のようなコンピューティングデバイスを含んでいる。その最も基本的な構成では、コンピューティングデバイス100は、少なくとも1つの処理ユニット102とメモリ104を装備しているのが代表的である。コンピューティングデバイスの正確な構成とタイプに応じて、メモリは揮発性(RAMなど)であることも、不揮発性(ROM、フラッシュメモリなど)であることも、これら2つを任意に組み合わせたものであることもある。この最も基本的な構成は図1に破線106で示している。] 図1
[0015] さらに、デバイス100は追加の特徴/機能を備えていることもある。例えば、デバイス100は追加ストレージ(取り外し可能および/または取り外し不能)を装備していることもあり、その中には、磁気または光ディスクまたはテープが含まれるが、これらに限定されない。このような追加ストレージは、図1に取り外し可能ストレージ108および取り外し不能ストレージ110で示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたはその他のデータなどの情報をストアするための任意の方法またはテクノロジで実現された揮発性および不揮発性の取り外し可能および取り外し不能媒体を含んでいる。メモリ104、取り外し可能ストレージ108および取り外し不能ストレージ110は、いずれもコンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリテクノロジ、CD−ROM、DVDまたは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、または必要な情報をストアするために使用可能で、デバイス100によってアクセス可能である任意の他の媒体を含んでいるが、これらに限定されない。このようなコンピュータ記憶媒体は、いずれもデバイス100の一部になっていることがある。] 図1
[0016] コンピューティングデバイス100は、コンピュータデバイス100が他のコンピュータ/アプリケーション115と通信することを可能にする1つまたは2つ以上の通信コネクションを含んでいる。デバイス100は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス112を装備していることもある。ディスプレイ、スピーカ、プリンタなどの出力デバイス111が含まれていることもある。これらのデバイスはこの分野で周知であるので、ここで詳しく説明することは省略する。ある実施形態では、コンピューティングデバイス100はレイアウトマネージャアプリケーション200を含んでいる。レイアウトマネージャアプリケーション200は図2に詳しく記載されている。] 図2
[0017] 図1に引き続き図2を参照して説明すると、図2はコンピューティングデバイス100上で動作するレイアウトマネージャアプリケーション200を示している。レイアウトマネージャアプリケーション200は、コンピューティングデバイス100上に置かれているアプリケーションプログラムの1つである。なお、当然に理解されるように、レイアウトマネージャアプリケーション200は、代替的にまたは付加的に、1つまたは2つ以上のコンピュータ上のコンピュータ実行可能命令としておよび/または図1に示すものと異なるバージョンで具現化することができる。代替的にまたは付加的に、レイアウトマネージャアプリケーション200の1つまたは2つ以上の部分は、他のコンピュータおよび/またはアプリケーション115上のシステムメモリの一部にすることも、コンピュータソフトウェア分野で見られるような他の変形にすることも可能である。] 図1 図2
[0018] レイアウトマネージャアプリケーション200はプログラムロジック204を含み、これは、本明細書に記載した手法の一部またはすべての実行を担当している。プログラムロジック204は、ユーザインタフェースエレメントのサイズと位置のアップデート(更新)を調整するためのロジック206(これは図3を参照して以下に説明されている)、エレメントのツリー内のユーザインタフェースエレメントのダーティステートをトラッキング(追跡)するためのロッジ208(これは図4乃至図7を参照して以下に説明されている)、エレメントのツリーの影響を受けた部分をアップデートするためのロジック210(これは図6を参照して以下に説明されている)、ツリー内のノードで特殊なステートを使用してダーティサブツリーのルートを見つけ、アップデート期間中の無駄な再計算を回避するためのロジック212(これは図4乃至図7を参照して以下に説明されている)、およびレイアウトマネージャアプリケーション200を動作させるための他のロジック220を含んでいる。] 図3 図4 図6 図7
[0019] 図3は、2つの異なるノードのダーティサブツリーを有する例示のノードのツリーを示す概略図である。本明細書の中で用いられている「サブツリー」の用語は、ツリー内のより小さなノードのサブセット、別の言い方をすると、ツリー内のツリーを含むものと意味している。本明細書の中で用いられている「ダーティサブツリー」という用語は、ダーティとしてマークされた祖先と子孫の1つまたは2つ以上の連続ノードであって、ダーティでない親ノードをもつノードを1つだけ含むものを意味している。この定義をもっと分かり易くする例をいくつか示すことにする。図3に示す例では、2つのダーティサブツリーが存在する。第一のサブツリーはcanvas1を含んでいる。canvas1が第一のサブツリーの唯一のメンバであるのは、同じくダーティである近隣の祖先または子孫がそこにないからである。第二のサブツリーにはcanvas3とR4がある。canvas3とR4は祖先/子孫の関係があり、連続的であり、canvas3は同じくダーティである近隣の祖先をもたないサブツリーの唯一のメンバである。図6のような、以降の図の一部の説明の中では、ダーティサブツリーという概念を使用することにする。] 図3 図6
[0020] 図1乃至図3に引き続いて図4乃至図8を参照して説明すると、レイアウトマネージャアプリケーション200の1つまたは2つ以上の実施形態を実現するためのステージがより詳しく説明されている。いくつかの実施形態では、図4乃至図8のプロセスは、少なくともその一部がコンピューティングデバイス100のオペレーティングロジックの中で実現されている。図4乃至図5には、祖先変更を使用してレイアウトプロセスをより効率化するハイレベルの例がいくつか示されている。図6乃至図8には、これらの広義概念を例示の実施形態に適用するためのいくつかの手法が詳しく記載されている。] 図1 図3 図4 図5 図6 図8
[0021] 次に、図4を参照して説明すると、図4は、祖先変更のステータスを使用してレイアウトプロセス(測定または配置など)をより効率化する際に係わりのあるステージのある実施形態を示すプロセスフロー図である。所与のノードに対してレイアウトプロセスがコールされる(ステージ242)。レイアウトマネージャアプリケーション200は、その所与のノードに対するいずれかの祖先ノードが変更されたかどうかを判断する(ステージ244)。いずれかの祖先が変更されていれば(判定ポイント246)、変更された祖先の下位にある子孫ノードに対してプロセス中のレイアウトが放棄され(ステージ248)、レイアウトプロセスが変更された祖先で再開される(ステージ249)。変更された祖先がなければ(判定ポイント)、レイアウトプロセスは子孫の経路を下って行くことにより継続する(ステージ250)。] 図4
[0022] 次に、図5を参照して説明すると、図5は、無駄な作業を避けるためにノードのサイズが変更されたとき親ノードをダーティとしてマークする際に係わりのあるステージのある実施形態を示すプロセスフロー図である。指定したノードに対してレイアウトプロセスがスタートされる(ステージ272)。そのノードのサイズが変更されていれば(判定ポイント274)、指定したノードの親ノードでダーティインジケータがマークされ(ステージ278)、現行レイアウトプロセスが放棄され(ステージ278)、そのレイアウトプロセスが親ノードで実行される(ステージ280)。これについては、他の図に詳しく説明されている。そのノードのサイズが変更されていなければ(判定ポイント274)、レイアウトプロセスはそのノードの次の兄弟(sibling)から継続される(ステージ282)。] 図5
[0023] 図6は、ダーティサブツリーの処理によってレンダリング直前にレイアウトをアップデートする際に係わりのあるステージのある実施形態を示すプロセスフロー図である。アップデートレイアウトプロセスをスタートすると、レイアウトマネージャ200は、ウィンドウサイズが変更されたかどうか、またはツリー内のどこかで、エレメントが測定される必要があるかどうか(例えば、測定がダーティである)を判断する(判定ポイント322)。ウィンドウは、全スクリーン、スクリーン内のウィンドウ、ブラウザページのエリアなどのように、ユーザインタフェースエレメントとしてそこに表示されるスクリーンのエリアを含むことができる。これらの条件のいずれかが真であれば、ダーティサブツリーのルートノードが測定され(ステージ324)、そのあと評価が反復的に再び実行される(各ノードの子を処理するために)。これらの条件のいずれもが真でなければ(判定ポイント322)、レイアウトマネージャ200はツリー内のどこかで、エレメントが配置される必要があるかどうか(例えば、配置がダーティである)を判断する(判定ポイント326)。そうであれば、ルートノードが配置され(ステージ328)、プロセスがループして判定ポイント322まで戻る。] 図6
[0024] ツリー内のどこかで配置がダーティでなければ(判定ポイント326)、キュー(待ち行列)に置かれたサイズ変更イベントがファイヤされ(ステージ330)、エレメントがそのサイズを変更したことに応答してアプリケーションがオプションのカスタムコードを実行するのを可能にしてから、エレメントがその新サイズで表示される。ツリーがダーティであれば(判定ポイント332)、プロセスはループして判定ポイント322まで戻る。ツリーがダーティでなければ(判定ポイント332)、レイアウトアップデートイベントがファイヤされ(ステージ334)、レイアウトアップデートオペレーションが完了したことに応答してアプリケーションがカスタムコードを実行するのを可能にしてから、アップデートしたエレメントのいずれかがその新サイズおよび/または位置で表示される。ツリーがダーティであれば(判定ポイント336)、プロセスはループして判定ポイント322まで戻る。ツリーがダーティでなければ(判定ポイント336)、プロセスは終了する(ステージ338)。]
[0025] 次に、図7を参照して説明すると、図7は、指定したノードでレイアウトプロセスを実行する際に係わりのあるいくつかの詳細ステージのある実施形態を示すプロセスフロー図である。指定したノード自体がダーティでなければ(判定ポイント352)、レイアウトマネージャ200は、指定したノードがダーティ子孫を有しているかどうかを確かめるチェックを行い(判定ポイント358)、すぐあとに記載されているようにそのダーティ子孫の経路に対する処理を続ける。指定したノード自体がダーティであれば(判定ポイント352)、レイアウトプロセスが指定したノードで実行される(ステージ354)。祖先ノードがダーティとしてマークされたときは(判定ポイント356)、レイアウトプロセスは指定したノードに対して放棄される(ステージ357)。] 図7
[0026] 指定したノードでレイアウトを実行したあと祖先ノードがダーティとしてマークされていなければ、レイアウトマネージャ200は指定したノードがダーティ子孫を有しているかどうかを判断する(判定ポイント358)。また、レイアウトマネージャは、指定したノード自身が判定ポイント352でダーティと分からなかった場合、指定したノードがダーティ子孫を有しているかどうかを判断する。どちらの場合も、指定したノードがダーティ子孫を有していなければ(判定ポイント358)、レイアウトプロセスは終了する(ステージ362)。指定したノードがダーティ子孫を有していなければ(判定ポイント358)、次の子がリトリーブされ(ステージ360)、レイアウトされる(ステージ364)。その子をレイアウトしたあと、レイアウトマネージャ200は、祖先がダーティとしてマークされていたかどうかを判断する(判定ポイント366)。そうであれば(判定ポイント366)、レイアウトプロセスは放棄される(ステージ357)。祖先がダーティとしてマークされていなければ(判定ポイント366)、レイアウトマネージャ200は、そのノード自身がダーティであるかどうかを判断する(判定ポイント367)。そのノード自身がダーティであれば(判定ポイント367)、レイアウトプロセスはそのノードに対して実行され(ステージ354)、レイアウトプロセスに続く他のステージが前述したように実行される。そのノード自体がダーディでなければ(判定ポイント367)、追加の子がある場合に次の子が処理される(ステージ368)。追加の子がなければ(判定ポイント368)、プロセスはループしてダーティサブツリー内の現在の親の次の兄弟ノードの処理まで戻る(ステージ352)。]
[0027] ある実施形態では、6つの異なるインジケータが各ノードで維持され、上述した判定のいくつかを行い、アップデートをいかに効率的に処理するかを判断する。6つの例示インジケータを示すと、以下の通りである。
・IsMearureDirtyビット:測定ではノードをダーティとしてマークする
・IsOnPathToMeasureDirtyビット:測定ではダーティ子孫を有しているとしてノードをマークする
・IsArrangeDirtyビット:配置ではノードをダーティとしてマークする
・IsOnPathtoArrangeDirtyビット:配置ではダーティ祖先を有しているとしてノードをマークする
・IsAnsestorDirtyビット:ダーティ祖先を有しているとしてノードをマークする
・IsOnStackビット:そのレイアウト(測定または配置)が進行中であるとマークする]
[0028] 他の実施形態では、より少ないまたは追加のインジケータが使用できる。これらのインジケータは例示の目的で以下のコードサンプルの中で使用されている。このサンプルは、図6と図7に記載のレイアウトプロセスを実行するためにいくつかの例示コードをウォークスルーしている。] 図6 図7
[0029] LavoutManager ;;UpdateLavout擬似コード
While (true)
{
If (ディスプレイエリアサイズが変更された、またはルートmeasureDirtyまたはonPathToMeasureDirtyフラグがセットされた)
{
pRoot->Measure(ディスプレイエリアサイズ);
}
Else if (ルートはarrangeDirtyまたはonPathToArrangeDirtyフラグがセットされている)
{
pRoot->Arrange(ディスプレイエリアレクタングル);
}
Else
{
If (ファイヤする必要のあるSizeChangedイベントがある)
SizeChangedイベントをファイヤする
If (ルートは測定または配置を要求していない(上記参照))
LayoutUpdatedイベントをファイヤする
}
Else
Break; Whileループ終了
}]
[0030] CUIElement;;Measure擬似コード

CUIElement::Measure(availableSize)
{
IsOnMeasureStack = true;
IsAncestorDirty = false;

while (true)
{
if (IsMeasureDirty || availableSizeが変更されている)
{
Measurelnternal(availableSize);
If (IsAncestorDirty || IsLayoutSuspended)
Break;
IsOnMeasureDirtyPath = false;
}
Else if (IsOnMeasureDirtyPath)
{
IsOnMeasureDirtyPath = false;
Foreach (子の中の子)
{
If (child->IsMeasureDirty || child-> IsOnMeasureDirtyPath)
{
child->Measure(child-> PreviousConstraint);
}
If (IsAncestorDirty)
{
IsOnMeasureDirtyPath = true; goto Cleanup;
}
If (IsMeasureDirty)
{
Break; // foreachループ終了
}
}
}
Else
Break; // whileループ終了
}
Cleanup:
IsOnMeasureStack = true;
}]
[0031] CUIElement;; Arrange擬似コード

CUIElement: : Arrange(finalRect)
{
IsOnArrangeStack = true;
IsAncestorDirty = false;

while (true)
{
if (いずれかのノードが測定を要求している)
break; // whileループ終了
if (IsArrangeDirty || finalReacが変更されている)
{
ArrangeInternal(availableSize) ;
If (IsAncestorDirty || IsLayoutSuspended)
Break;
IsOnArrangeDirtyPath = false;
}
Else if (IsOnArrangeDirtyPath)
{
IsOnArrangeDirtyPath = false;
Foreach (子の中の子)
{
if (いずれかのエレメントが測定を要求している)
break; // foreachループ終了
if (child->IsArrangeDirty 11 child->IsOnArrangeDirtyPath)
{
child-> Arrange(GetArrangeRect());
}
if (IsAncestorDirty)
{
IsOnArrangeDirtyPath = true;
Break; // foreachループ終了
}
}
}
Else
Break; // // whileループ終了
}
Cleanup:
IsOnArrangeStack = true;
}]
[0032] UpdateLayoutプロシージャで上述したように、測定プロセスは、ディスプレイエリアのサイズが変更されていた場合、またはルートはIsMeasureDirtyまたはonPathToMeasureDirtyフラグが真にセットされている(自身がダーティであるか、ダーティ子孫を有している)場合にコールされる。そうでなければ、ルートはIsArrangeDirtyまたはIsOnPathToArrangeDirtyフラグがセットされている場合、配置プロセスがコールされる。]
[0033] 次に、例示のコードサンプルに示す測定プロセスと配置プロセスとが必要に応じてノードのツリーの中を繰り返しループして、このコードサンプル(および図7)に記載された種々の基準の評価に応じて、祖先では上方に、子孫では下方に測定または配置するかを判断する。] 図7
[0034] 図8は、レイアウトプロセスを無効化する際に係わりがあるステージのある実施形態を示すプロセスフロー図である。指定したノードがすでにダーティであれば(判定ポイント392)、レイアウトプロセス無効化は終了する(ステージ394)。指定したノードがまだダーティでなければ(判定ポイント392)、指定したノードはダーティであるとしてマークされる(ステージ396)。指定したノードが現在レイアウトされているノードの祖先であれば(判定ポイント398)、このノードから現在レイアウトされているノードまでの直接経路上のすべてのノードはダーティ祖先を有しているとしてマークされる(ステージ400)。このノードが現在レイアウトされているノードの祖先でなければ(判定ポイント398)、レイアウトプロセス無効化は終了する(ステージ402)。] 図8
[0035] 以下に示すいくつかの例示ソースコードは、図8のプロセスをより詳細に例示したものである。図示の例では、InvalidateMeasureプロセスは指定したノードがすでにスタック上にあるかどうか(つまり、測定されているかどうか)を確かめるチェックを行い、そうであれば、InvalidateMeasureプロセスは終了する。指定したノードはダーティとしてマークされ、そのあと祖先ノードはダーティであるとしてマークされる。] 図8
[0036] UIElement::InvalidateMeasure()
{
// すでに測定中であればダーティでない
If (CurrentOnStack == this)
{ Return;
}
// 自身をダーティとしてマークする
IsDirty = true;
// すべての祖先上のbreadcrumbsをマークする
Ancestor = this. Parent;
While (Ancestor !=NULL && Ancestor.OnPathToDirty == false)
{
Ancestor.OnPathToDirty = true;
Ancestor = Ancestor.Parent;
}
// いま、スタック上にいれば、ダーティ祖先を有するとして
// スタック上の現在から我々まで(しかし、我々を含まない)をマークする
If (IsOnStack)
{
Child = CurrentOnStack;
While (Child ! = NULL && Child ! = this)
{
Child.AncestoryDirty = true;
Child = Child.Parent;
}
}
}]
[0037] これらのコード例(このコード例に限定されない)は、これらの手法のいくつかを詳しく例示する目的で示されたものにすぎない。コンピュータソフトウェア分野の精通者ならば理解されるように、本明細書に記載の手法の一部またはすべてを実装するためにソースコードを書くことができる方法は他にも多数存在する。]
[0038] 構成上の特徴および/または方法上のアクトに特有の表現で主題を説明してきたが、当然に理解されるように、請求項に定義した主題は、必ずしも上述した特定の特徴またはアクトに限定されない。むしろ、上述した特定の特徴またはアクトは、請求項を実現する形態例として開示されたものである。本明細書に記載されている実施形態の精神の範囲内に属する、および/または請求項による等価技術、変更および改良はすべて保護の対象となるものである。]
[0039] 例えば、コンピュータソフトウェア分野の通常知識を有するものならば認識されるように、本明細書に説明した例は、これらの例に示したものよりも少ないオプションや追加のオプションまたは特徴を含むように1つまたは2つ以上のコンピュータ上で異なる編成にすることが可能である。]
权利要求:

請求項1
コンピュータ実行可能命令を収めたコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、ユーザインタフェースエレメントのツリーにおいてユーザインタフェースエレメントのダーティステートをトラッキングし、前記ツリーは複数のノードを含み、前記ダーティステートは前記ノードの1つまたは2つ以上のダーティサブツリーを特定できるように操作可能であるステップ(208)と、ダーティサブツリーの各々についてルートノードを特定するステップ(212)と、ツリーの影響を受けた部分を、ダーティツリーの各々について特定されたルートノードから始まってアップデートするステップ(210)と、を含むステップをコンピュータに実行させることを特徴とするコンピュータ可読媒体。
請求項2
前記ダーティサブツリーの各々についてルートノードを特定するステップ(212)は、ダーティステートおよびツリー内のノードに関連する追加ステートを分析することによって容易化されていることを特徴とする請求項1に記載のコンピュータ可読媒体。
請求項3
前記追加ステートは、ノードのうち選択されたノードがダーティ子孫ノードを有しているか否かを指定する(358)インジケータを含んでいることを特徴とする請求項2に記載のコンピュータ可読媒体。
請求項4
前記追加ステートは、ノードのうち選択されたノードがダーティ祖先ノードを有しているか否かを指定する(356)インジケータを含んでいることを特徴とする請求項2に記載のコンピュータ可読媒体。
請求項5
追加ノードは、ノードのうち選択されたノードが現在レイアウトされているか否かを指定する(398)インジケータを含んでいることを特徴とする請求項2に記載のコンピュータ可読媒体。
請求項6
ダーティステートは、ノードのうち選択されたノードがダーティであるか否かを指定する(352)インジケータを含んでいることを特徴とする請求項1のコンピュータ可読媒体。
請求項7
ユーザインタフェースエレメントのツリーの影響を受けた部分をアップデートしたあとユーザインタフェースエレメントを出力デバイス上でレンダリングするステップ(210)を含むステップをコンピュータに実行させるためのコンピュータ実行可能命令を、さらに収めていることを特徴とする請求項1に記載のコンピュータ可読媒体。
請求項8
前記アップデートするステップ(212)は、ダーティサブツリーの各々について特定されたルートノードからスタートし、親ノードで行なわれたアップデートに起因して、そのあとでオーバライトされるアップデートがダーティサブツリー内の子ノードで実行されないようにすることを特徴とする請求項1に記載のコンピュータ可読媒体。
請求項9
祖先ノード変更のステータスを使用してレイアウトプロセスをより効率化するための方法であって、指定したノードからレイアウトプロセスをスタートするステップ(242)と、指定したノードのいずれかの祖先が変更されたかどうかを判断するステップ(244)と、指定したノードの少なくとも1つの変更された祖先が特定されたとき、前記変更された祖先のいずれかの子孫ノードで現在実行されているレイアウトプロセスがあれば、そのレイアウトプロセスを放棄し(248)、前記変更された祖先でレイアウトプロセスを再開する(249)ステップとを含むことを特徴とする方法。
請求項10
指定したノードの少なくとも1つの変更された祖先が特定されないときは、指定したノードの子孫ノードの経路を下っていくことによりレイアウトプロセスを継続するステップ(250)をさらに含むことを特徴とする請求項9に記載の方法。
請求項11
指定したノードの少なくとも1つの祖先は、指定したノードの望みのサイズが変更されたために変更され、指定したノードの親ノードはそのあとダーティであるとしてマークされる(320)ことを特徴とする請求項10に記載の方法。
請求項12
指定したノードのいずいれかの祖先が変更されたかどうかの判断を容易にするために複数のインジケータが使用される(320)ことを特徴とする請求項9に記載の方法。
請求項13
複数のインジケータの少なくとも1つは、特定のノードがダーティであるか否かを指定している(352)ことを特徴とする請求項12に記載の方法。
請求項14
複数のインジケータの少なくとも1つは、特定のノードがダーティ子孫を有しているか否かを指定している(358)ことを特徴とする請求項12に記載の方法。
請求項15
複数のインジケータの少なくとも1つは、特定のノードにダーティ祖先があるか否かを指定している(356)ことを特徴とする請求項12に記載の方法。
請求項16
前記複数のインジケータの少なくとも1つは、特定のノードが現在レイアウトされているか否かを指定している(398)ことを特徴とする請求項12に記載の方法。
請求項17
指定したノードの少なくとも1つの変更された祖先が特定され、変更された祖先で行なわれたアップデートに起因して、そのあとでオーバライトされる可能性のあるアッップデートは変更された祖先のいずれかの子孫ノードで実行されないように、レイアウトプロセスが放棄される(278)ことを特徴とする請求項9に記載の方法。
請求項18
指定したノードに対するレイアウトプロセスを無効化する方法であって、指定したノードがすでにダーティであるかどうかを判断するステップ(392)と、指定したノードがまだダーティでないときは、指定したノードをダーティとしてマークし(396)、前記指定したノードが現在レイアウトされている少なくとも1つのノードの祖先であるかどうかを判断するステップ(398)と、指定したノードが現在レイアウトされている少なくとも1つのノードの祖先であるときは(398)、指定したノードから現在レイアウトされているノードまでの直接経路上のすべてのノードはダーティ祖先を有しているが、指定したノードを含んでいないとしてマークするステップ(400)とを含むことを特徴とする方法。
請求項19
指定したノードがすでにダーティであるときは、無効化レイアウトプロセスを終了するステップ(394)をさらに含むことを特徴とする請求項18に記載の方法。
請求項20
指定したノードは、レイアウトされているノードのスタックに指定したノードが含まれているためにすでにダーティであると判断される(392)ことを特徴とする請求項19に記載の方法。
类似技术:
公开号 | 公开日 | 专利标题
US10754493B2|2020-08-25|Software robots for programmatically controlling computer programs to perform tasks
US9772822B2|2017-09-26|Visualization framework for customizable types in a development environment
Burnett et al.1995|Scaling up visual programming languages
US5630069A|1997-05-13|Method and apparatus for creating workflow maps of business processes
US5905496A|1999-05-18|Workflow product navigation system
US6278450B1|2001-08-21|System and method for customizing controls on a toolbar
US7487464B2|2009-02-03|Enhanced visualization and selection of multi-layered elements in a containment hierarchy
US9842097B2|2017-12-12|Browser extension for web form fill
US4764867A|1988-08-16|Display system and method for constructing and editing a hierarchical arrangement of information
KR101169171B1|2012-07-30|객체 모델 설계를 용이하게 하는 방법 및 시스템
US5598524A|1997-01-28|Method and apparatus for improved manipulation of data between an application program and the files system on a computer-controlled display system
US5550967A|1996-08-27|Method and apparatus for generating and displaying visual cues on a graphic user interface
ES2751324T3|2020-03-31|Flujos de trabajo basados en documentos
US7631320B2|2009-12-08|Method and apparatus for improved interaction with an application program according to data types and actions performed by the application program
US7366723B2|2008-04-29|Visual query modeling for configurable patterns
US7069547B2|2006-06-27|Method, system, and program for utilizing impact analysis metadata of program statements in a development environment
US7953767B2|2011-05-31|Developing applications using configurable patterns
US8855983B2|2014-10-07|Graphical user interface for viewing or editing an executable block diagram model
US6263339B1|2001-07-17|Dynamic object visualization and code generation
JP4896444B2|2012-03-14|電子ドキュメント内で特定のタイプのコンテンツを管理するための方法、装置、およびコンピュータ可読媒体
US8072433B2|2011-12-06|Ink editing architecture
JP4100630B2|2008-06-11|Uml設計方法
ES2471394T3|2014-06-26|Programación y ejecución orientadas por gráficos de productor
US7523440B2|2009-04-21|Dynamic generation of formatted user interfaces in software environments
KR100986415B1|2010-10-08|커맨드 바인딩을 수행하기 위한 데이터-바인딩 매카니즘의 애플리케이션
同族专利:
公开号 | 公开日
BRPI0820487A2|2015-06-16|
WO2009067388A2|2009-05-28|
CN101868791A|2010-10-20|
US20090132578A1|2009-05-21|
EP2223234A2|2010-09-01|
CN102591637A|2012-07-18|
RU2010120429A|2011-11-27|
WO2009067388A3|2009-08-13|
JP5260672B2|2013-08-14|
US8095865B2|2012-01-10|
RU2483350C2|2013-05-27|
EP2223234A4|2012-05-16|
CN101868791B|2013-01-23|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2011-08-13| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110812 |
2012-11-20| A977| Report on retrieval|Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20121120 |
2012-12-03| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121130 |
2013-01-16| RD13| Notification of appointment of power of sub attorney|Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20130115 |
2013-01-31| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20130115 |
2013-03-01| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130228 |
2013-03-21| TRDD| Decision of grant or rejection written|
2013-03-27| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130326 |
2013-05-02| FPAY| Renewal fee payment (event date is renewal date of database)|Free format text: PAYMENT UNTIL: 20160502 Year of fee payment: 3 |
2013-05-02| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130425 |
2013-05-02| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 |
2015-04-16| S111| Request for change of ownership or part of ownership|Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
2015-04-24| R350| Written notification of registration of transfer|Free format text: JAPANESE INTERMEDIATE CODE: R350 |
2016-05-02| LAPS| Cancellation because of no payment of annual fees|
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]