説明

情報処理装置、及びその制御方法、プログラム、及び記録媒体

【課題】配置された複数のオブジェクトの重なり関係を直感的に変更する。
【解決手段】2つのオブジェクトが、他のオブジェクトを介さずに重なりを有する場合に、当該2つのオブジェクトが接触していると判定する。そして、第1のオブジェクトの移動中に、第1のオブジェクトと重なりを有する状態になった後に、重なりを有さない状態を経て再び重なりを有する状態となった第2のオブジェクトを検出する。情報処理装置は、第1のオブジェクトと第2のオブジェクトが重なりを有さない状態の前後で接触していると判定されている場合は第1のオブジェクトと第2のオブジェクトのZオーダにおける上下関係を入れ替える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のオブジェクトを重ねて配置し、オブジェクト同士の重なり順を変更する技術に関する。
【背景技術】
【0002】
従来、ユーザがパーソナルコンピュータにインストールされたアプリケーションプログラムを使って文書やプレゼンテーションのスライド等を作成する際に、アイコンや図形、画像等のオブジェクトを重ねて配置することが行われている。
【0003】
そして、複数のオブジェクトが重なり合って配置されている場合、オブジェクトの重なっている順番(Zオーダ)を入れ替えることがある。
【0004】
例えば、ユーザの操作に応答して、オブジェクトのZオーダの入れ替えを指示するためのUIが表示され、所望の重なり順に変更することが行われている。UIには例えば、「最前面に移動」、「前面に移動」、「背面に移動」、「最背面に移動」の4つのコマンドが表示され、これらから選択を繰り返すことでオブジェクトの重なり順を変更する(特許文献1参照)。
【0005】
また、重なりを有するオブジェクトの一方を選択して移動し、一度重なりを解消した後に当該オブジェクトを元の位置に移動し、再び重ねることで、選択したオブジェクトと他方のオブジェクトの上下関係を入れ替える方法が開示されている(特許文献1参照)。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2007−328029号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述した特許文献1の方法では、重なりを有する2つのオブジェクトの間に、当該2つのオブジェクトと重なりを有する別のオブジェクトが存在する場合であってもZオーダが変更される。このため、ユーザが意図していない重なり関係になってしまうことがある。
【0008】
例えば、図12(a)に示すように、フィールド内にオブジェクトA、B、及びCが、Zオーダが前面からC、B、Aの順に重ねて配置され、オブジェクトCはオブジェクトAとBのそれぞれに直接重なっている場合を考える。このとき、図12(b)に示すように、オブジェクトCを移動させてオブジェクトAとCとの重なりを解除されたが、オブジェクトBとCの重なりは維持された状態になったとする。その後に、オブジェクトCを図12(a)での位置まで移動させて再びオブジェクトAに重ならせると、Zオーダの変更が生じる。Zオーダの変更後、特許文献1によればオブジェクトCはオブジェクトAの下に重なるように制御されるため、図12(c)のような重なり関係となる。
【0009】
このとき、図12(b)の状態ではオブジェクトCとオブジェクトBとの重なりは解除されていなかったにも関わらず、当該2つのオブジェクトのZオーダも変更されることになってしまう。よって、ユーザが意図していない、物理的に不自然な順番の変更がなされることになる。即ち、ユーザにとって直感的ではない、オブジェクトの重なり関係の変更が生じる。
【0010】
また、ユーザがオブジェクトCを図12(b)での位置に移動した後、図12(a)の状態に再び戻したいために、オブジェクトCを元の位置に移動した場合であっても、特許文献1の方法では一度図12(c)の状態を経由するため、操作が煩雑になる。
【0011】
本発明は、上述の問題点に鑑みてなされたものであり、配置された複数のオブジェクトの重なり関係を直感的に変更することを目的とする。
【課題を解決するための手段】
【0012】
前述の目的を達成するために、本発明の情報処理装置は、以下の構成を備える。
それぞれ異なるZオーダを有する複数のオブジェクトを、Zオーダに従って所定のフィールドに表示する表示手段と、複数のオブジェクトのうちの第1のオブジェクトをフィールド内で移動する移動手段と、複数のオブジェクトのうちの2つのオブジェクトが、他のオブジェクトを介さずに重なりを有する場合に、当該2つのオブジェクトが接触していると判定する判定手段と、移動手段による第1のオブジェクトの移動中に、複数のオブジェクトのうち、第1のオブジェクトと重なりを有する状態になった後に、重なりを有さない状態を経て再び重なりを有する状態となった第2のオブジェクトを検出する検出手段と、第2のオブジェクトが、重なりを有さない状態の前後で、判定手段により第1のオブジェクトと接触したと判定された場合に、第1のオブジェクトと第2のオブジェクトのZオーダにおける上下関係を入れ替えるZオーダ入替手段と、を備え、表示手段は、第1のオブジェクトの移動中、Zオーダ入替手段によるZオーダにおける入れ替えを反映して複数のオブジェクトを表示することを特徴とする。
【発明の効果】
【0013】
このような構成により本発明によれば、配置された複数のオブジェクトの重なり関係を直感的に変更することが可能となる。
【図面の簡単な説明】
【0014】
【図1】本発明の実施形態に係るPCの機能構成を示したブロック図
【図2】本発明の実施形態に係る、それぞれ異なるZオーダを有するオブジェクトが配置されたGUIを説明するための図
【図3】本発明の実施形態に係るオブジェクト移動時処理の動作例を説明するための図
【図4】本発明の実施形態に係るオブジェクト移動時処理の動作例を説明するための別の図
【図5】本発明の実施形態に係るオブジェクト移動時処理の動作例を説明するためのさらに別の図
【図6】本発明の実施形態に係る接触オブジェクトの定義を説明するための図
【図7】本発明の実施形態に係るオブジェクト移動時処理のフローチャート
【図8】本発明の実施形態に係る接触判定処理のフローチャート
【図9】本発明の実施形態に係るオブジェクト抜き出し処理のフローチャート
【図10】本発明の実施形態に係るオブジェクト挿入処理のフローチャート
【図11】本発明の実施形態に係るZオーダ変更処理のフローチャート
【図12】従来技術の問題点を説明するための図
【発明を実施するための形態】
【0015】
以下、本発明の好適な一実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、情報処理装置の一例としての、ユーザが移動可能な複数のオブジェクトを、重なり合わせて所定のフィールドに表示可能なPCに、本発明を適用した例を説明する。しかし、本発明は、ユーザが移動可能な複数のオブジェクトを、Zオーダに従って所定のフィールドに表示することが可能な任意の機器に適用可能である。また、本明細書において、「Zオーダ」とは、複数のオブジェクトが配置されるフィールドの面に直交する方向(法線方向)についての、当該複数のオブジェクトの位置関係を示す情報である。なお、複数のオブジェクトは、それぞれ異なるZオーダを有するものとする。
【0016】
図1は、本発明の実施形態に係るPC100の機能構成を示すブロック図である。
【0017】
CPU101は、PC100が備える各ブロックの動作を制御する。本実施形態では、後述する複数のオブジェクトを配置し、オブジェクトのZオーダを変更可能にするアプリケーション(画像レイアウトアプリケーション)に係るプログラムは、例えば記録媒体106に記録されているものとする。CPU101は、当該アプリケーションに係るプログラムを後述する記録媒体106より読み出し、RAM103に展開して実行することにより、PC100が備える各ブロックの動作を制御する。
【0018】
ROM102は、書き換え可能な不揮発性メモリであり、例えばPC100が備える各ブロックの制御プログラムや、各ブロックの動作において必要な設定パラメータ等の情報を格納する記憶領域である。またRAM103は、揮発性メモリであり、上述したアプリケーションに係るプログラムの展開領域としてだけでなく、各ブロックの動作において出力された中間データ等の一時的な格納領域としても用いられる。
【0019】
描画制御部104は、後述する表示部107に表示するための表示画像の生成、及び表示部107への当該表示画像の出力を制御するためのブロックである。描画制御部104は、CPU101の制御の下、ROM102、あるいは記録媒体106に格納されているGUIデータ等のオブジェクトを読み出し、表示するための画像が記憶されるVRAM105において所定の位置に配置されるように描画させる。VRAM105は、表示画像が記憶される描画用の記憶領域である。本実施形態ではVRAM105において、複数のオブジェクトはZオーダに従って重畳され、これにより表示画像が生成される。
【0020】
記録媒体106は、例えばHDDやメモリカード等のPC100に着脱可能に装着される記録装置であり、Zオーダを変更可能に複数のオブジェクトを配置するアプリケーションに係るプログラム、及び配置するオブジェクト等が記録されている。なお、本実施形態では当該アプリケーションのプログラム及び配置するオブジェクトは、記録媒体106に記録されているものとして以下に説明するが、本発明の実施はこれに限らない。当該プログラム及びオブジェクトは、例えば不図示のネットワークインタフェースを介して、インターネット等のネットワーク上のサーバより取得するものであってもよいことは容易に想像されよう。
【0021】
表示部107は、例えば液晶モニタ等の表示装置である。本実施形態では当該表示部107はPC100に内蔵されているものとして説明するが、本発明の実施はこれに限らず、表示部107はPC100に接続された外部の表示装置であってもよい。
【0022】
操作入力部108は、例えばマウスやキーボード等のPC100に接続されたユーザインタフェースをユーザが操作を受け、当該操作に対応した制御信号をCPU101に伝送する。本実施形態では、ユーザは表示部107に表示された表示画像を閲覧しながら、当該表示画像に配置されたオブジェクトをマウスにより選択及びドラッグ(移動)することによりオブジェクトのZオーダを変更するものとする。
【0023】
なお、本実施形態ではマウス操作によりオブジェクトのZオーダを変更するものとして説明するが、本発明の実施はこれに限らず、キーボード操作、あるいは表示部107がタッチセンサを有するタッチパネルである場合は、当該センサの出力に従って操作してもよい。
【0024】
なお、タッチパネルは、表示部107に重ね合わせて平面的に構成され、接触された位置に応じた座標情報が出力されるようにした入力デバイスである。操作入力部108にタッチパネルが含まれる場合、CPU101はタッチパネルへの以下の操作を検出できる。タッチパネルを指やペンで触れたこと(以下、タッチダウンと称する)。タッチパネルを指やペンで触れている状態であること(以下、タッチオンと称する)。タッチパネルを指やペンで触れたまま移動していること(以下、ムーブと称する)。タッチパネルへ触れていた指やペンを離したこと(以下、タッチアップと称する)。タッチパネルに何も触れていない状態(以下、タッチオフと称する)。これらの操作や、タッチパネル上に指やペンが触れている位置座標は、CPU101に通知され、CPU101は通知された情報に基づいてタッチパネル上にどのような操作が行なわれたかを判定する。ムーブについてはタッチパネル上で移動する指やペンの移動方向についても、位置座標の変化に基づいて、タッチパネル上の垂直成分・水平成分毎に判定できる。またタッチパネル上をタッチダウンから所定の距離以上のムーブを経てタッチアップをしたとき、ドラッグを経てドロップが行われたこと(ドラッグアンドドロップ)とする。タッチパネルは、抵抗膜方式や静電容量方式、表面弾性波方式、赤外線方式、電磁誘導方式、画像認識方式、光センサ方式等、様々な方式のタッチパネルのうちいずれの方式のものを用いても良い。
【0025】
なお、本実施形態においては、本発明をPCに適用する場合を例にして説明するが、これに限定されない。すなわち、本発明は、デジタルカメラなどの撮像装置に適用してもよい。すなわち、メモリカードなどの、デジタルカメラが読み取り可能な記録媒体に記録された撮影画像を、デジタルカメラの有する背面液晶装置などのディスプレイに再生表示する際にも、本発明は適用可能である。さらに、PDA、携帯電話端末や携帯型の画像ビューワ、ディスプレイを備えるプリンタ装置、デジタルフォトフレーム、音楽プレーヤー、ゲーム機、電子ブックリーダーなど、画像やテキスト、イラスト図形などのオブジェクトを表示可能な装置であれば、本発明は適用可能である。
【0026】
<アプリケーションGUI>
図2(a)は、本実施形態における画像レイアウトアプリケーションのウィンドウを例示している。本実施形態では、ユーザの指示に応答して、CPU101は当該アプリケーションを起動し、記録媒体106に記録されている画像データをウィンドウ内のフィールド内にドラッグアンドドロップ操作により配置し、レイアウトを管理する。また、複数の画像データには、例えばウィンドウに配置された順に、それぞれ異なるZオーダの値が割り当てられており、Zオーダが小さいほど背面に配置され、Zオーダが大きいほど前面に配置されるものとする。
【0027】
なお、本実施形態ではフィールド上に配置するオブジェクトとして画像データを用いるものとして以下に説明するが、本発明の実施はこれに限らず、例えば図形、表、文字列等であってもよい。
【0028】
<動作の概要>
まず、本実施形態において、図2(a)に示すようにオブジェクトA乃至Eが配置された状態で、オブジェクトBやCと重なりを有するオブジェクトAが選択された場合を説明する。そして、図3(a)に示すようにオブジェクトAがウィンドウの縦方向の下に移動し、オブジェクトAとBの重なりは保持されたまま、オブジェクトAとオブジェクトCの重なりがない状態になったとする。その後、引き続いてオブジェクトAがウィンドウの縦方向の上に移動して元の位置に戻り、オブジェクトCと重なると、図2(a)に示す状態に戻る。すなわち、このような場合、本実施形態では、オブジェクトAとCのZオーダも元の順位を維持し、図12(a)乃至(c)に示した従来技術のようにオブジェクトAとオブジェクトCのZオーダの順番が入れ替わることが無い。
【0029】
次に、本実施形態において、図3(a)に示す状態から、さらにオブジェクトAがウィンドウの水平方向の右に移動し、図4(a)に示すようにオブジェクトAがどのオブジェクトとも重なりがない状態になった場合を説明する。その後、引き続いてオブジェクトAがウィンドウの水平方向の左に移動し、オブジェクトDと重なると、図5(a)に示すようにオブジェクトAとオブジェクトDのZオーダの順位が入れ替わる。ここで、オブジェクトAとオブジェクトB及びオブジェクトCとの上下関係は変わらないように、オブジェクトB及びオブジェクトCのZオーダも修正される。また、オブジェクトDとオブジェクトEの上下関係も変わらないように、オブジェクトEのZオーダも修正される。
【0030】
<オブジェクトのZオーダ管理>
ここで、本実施形態において、画像レイアウトアプリケーションに配置された複数の画像データのZオーダを管理するために用いる、図2(b)に示すような「重なりグラフ」について説明する。なお、図2(b)の重なりグラフは、図2(a)に示した複数の画像データのZオーダを管理している。
【0031】
重なりグラフでは、それぞれのZオーダの値ごとにオブジェクトについての情報をノードとして管理している。本実施形態では、Zオーダは値が小さいほど、オブジェクトがより背面に存在することを指すものとし、オブジェクト同士が重なって配置された場合は、Zオーダの大きいオブジェクトが前面に重なる。また、配置された複数のオブジェクトのそれぞれについては、Zオーダの値として、重なっている順に連続した自然数が割り当てられるものとする。図2(b)の例では、図2(a)に示すウィンドウに、背面から順に、オブジェクトE、オブジェクトD、オブジェクトA、オブジェクトB、オブジェクトCが配置されており、それぞれ0から4のZオーダの値が割り当てられていることを示している。
【0032】
また重なりグラフでは、以下に定義する接触しているオブジェクトについて、当該オブジェクトのノード間を線分で接続することにより示している。図2(a)の例では、オブジェクトAはオブジェクトB及びDとそれぞれ接触しており、オブジェクトB及びDそれぞれのノードとオブジェクトAのノードとが線分で接続されている。また、オブジェクトBはさらにオブジェクトCと接触し、オブジェクトCのノードとオブジェクトBのノードとが線分で接続されている。また、オブジェクトDはさらにオブジェクトEと接触し、オブジェクトEのノードとオブジェクトDのノードとが線分で接続されている。
【0033】
<接触オブジェクト>
(接触オブジェクトの定義)
本実施形態では1つの注目オブジェクトについて、注目オブジェクトと重なりを有するオブジェクトのうち、当該注目オブジェクトと直接的に重なるオブジェクトを接触しているオブジェクト(接触オブジェクト)と定義する。具体的には接触オブジェクトとは、注目オブジェクトと当該接触オブジェクトとの間のZオーダに存在する他のオブジェクトを経由した重なり(間接的な重なり)を有さないオブジェクトを指すものとする。
【0034】
例えば図6(a)に示すようにオブジェクトA’乃至Dが配置される場合、オブジェクトA’とオブジェクトD’とは重なりを有する。しかしながら、当該オブジェクトA’とオブジェクトD’との間のZオーダに存在するオブジェクトB’及びオブジェクトC’を考慮すると、オブジェクトA’とオブジェクトB’、オブジェクトB’とオブジェクトC’、オブジェクトC’とオブジェクトD’は重なりを有する。このような場合、オブジェクトA’からオブジェクトD’の間には間接的な重なりが存在することになるため、オブジェクトD’はオブジェクトA’の接触オブジェクトには該当しないものと判断する。
【0035】
これに対し、例えば図6(b)に示すようにオブジェクトA”乃至D”が配置される場合を考える。このとき、オブジェクトA”とオブジェクトD”との間のZオーダに存在するオブジェクトB”及びオブジェクトC”は、オブジェクトC”とオブジェクトD”とは重なりを有するが、オブジェクトB”もオブジェクトC”もオブジェクトA”との重なりを有さない。よって、オブジェクトA”からオブジェクトD”の間には間接的な重なりは存在しない。即ち、オブジェクトA”とオブジェクトD”との間には直接的な重なりが存在することになるため、オブジェクトD”はオブジェクトA”の接触オブジェクトに該当すると判断することができる。
【0036】
従って、図2(a)の例ではオブジェクトAを注目オブジェクトとした場合、接触オブジェクトはオブジェクトB及びオブジェクトDとなる。しかし、オブジェクトAとオブジェクトCは重なりを有するが、オブジェクトAとオブジェクトCの間のZオーダにオブジェクトBが存在し、オブジェクトBはオブジェクトAと重なりを有するので、オブジェクトCはオブジェクトAの接触オブジェクトではない。
【0037】
本実施形態では、さらに接触オブジェクトのうち、注目オブジェクトの前面に重なる、即ちZオーダの値が大きいオブジェクトを前面接触オブジェクトと定義する。また、接触オブジェクトのうち、注目オブジェクトの背面に重なる、即ちZオーダの値が小さいオブジェクトを背面接触オブジェクトとして定義する。図2(a)の例では、オブジェクトB及びDはオブジェクトAの前面接触オブジェクトとなる。
【0038】
(系列オブジェクトの定義)
また本実施形態ではさらに、注目オブジェクトから、前面あるいは背面の方向に接触オブジェクトとして順に重なっている全てのオブジェクトを、前面系列オブジェクト、あるいは背面系列オブジェクトとして定義する。なお、前面系列オブジェクトと背面系列オブジェクトとを合わせて、系列オブジェクトと定義する。
【0039】
例えば図2(a)に示すように、オブジェクトA乃至Eが配置されており、オブジェクトAを注目オブジェクトとした場合を考える。このとき、オブジェクトAの前面接触オブジェクトはオブジェクトBであり、オブジェクトBの前面接触オブジェクトはオブジェクトCであり、オブジェクトCの前面接触オブジェクトは存在しない。従って、オブジェクトAの前面系列オブジェクトは、オブジェクトB及びオブジェクトCとなる。また同様に背面系列オブジェクトは、オブジェクトAの背面接触オブジェクトが存在しないのでオブジェクトAは背面系列オブジェクトを持たない。一方、図3(b)に示すように、オブジェクトA”乃至D”が配置されており、オブジェクトB”を注目オブジェクトとする。ここで、オブジェクトB”の背面接触オブジェクトはオブジェクトC”であり、オブジェクトC”の背面接触オブジェクトはオブジェクトD”であり、オブジェクトD”の背面接触オブジェクトは存在しない。したがって、オブジェクトB”の背面系列オブジェクトはオブジェクトC”及びオブジェクトD”となる。
【0040】
<オブジェクト移動時処理>
上述のような構成をもつ本実施形態のPC100のオブジェクト移動時処理について、図7乃至13のフローチャートを用いて具体的な処理を説明する。当該フローチャートに対応する処理は、CPU101が、例えば記録媒体106に記憶されている対応する処理プログラムを読み出し、RAM103に展開して実行することにより実現することができる。
【0041】
なお、本オブジェクト移動時処理は、例えばユーザがマウスを操作することによりウィンドウに配置されているオブジェクトのうちの1つのオブジェクトを選択した際に開始され、オブジェクトの選択中繰り返し実行されるものとして説明する。また、以下のオブジェクト移動時処理の説明において、ユーザ操作により選択され、移動させられているオブジェクトを「注目オブジェクト」として説明する。
【0042】
まず、CPU101は、ウィンドウに配置されたオブジェクトのうち1つが選択されたか否かを判定する(S701)。オブジェクトが選択されれば(S701でYes)、相手オブジェクト候補リスト、抜出フラグ、挿入フラグを初期化し(S702)、CPU101はウィンドウに配置された全てのオブジェクトについて接触オブジェクトリスト作成処理を実行する(S703)。そして、CPU101は注目オブジェクトが移動したかどうかを判定し(S704)、注目オブジェクトが移動すれば(S704でYes)、注目オブジェクトの抜き出し処理(S705)を実行する。その後、CPU101は抜出フラグが初期値のオフからオンに更新されていれば(S706でYes)、さらに注目オブジェクトが移動したかどうかを判定する(S707)。注目オブジェクトが移動すれば(S707でYes)、注目オブジェクトの挿入処理を実行する(S708)。
【0043】
CPU101は、注目オブジェクトが移動しない場合(S704でNo)や注目オブジェクトの抜き出し処理後も抜出フラグがオフの場合(S706でNo)、注目オブジェクトの選択状態が解除されたか否かを判定する(S709)。選択状態が維持されていれば(S709でNo)、ステップS704に戻り、選択状態が解除されていれば(S709でYes)、注目オブジェクトと相手オブジェクトとのZオーダの入れ替えを行わずに、本処理を終了する。
【0044】
また、CPU101は、注目オブジェクトが移動しない場合(S707でNo)や注目オブジェクトの挿入処理後も挿入フラグがオフの場合(S710でNo)も、注目オブジェクトの選択状態が解除されたか否かを判定する(S711)。選択状態が維持されていれば(S711でNo)、ステップS707に戻って処理を実行し、選択状態が解除されていれば(S711でYes)、注目オブジェクトと相手オブジェクトとのZオーダの入れ替えを行わずに、本処理を終了する。
【0045】
(S703、接触オブジェクトリストの作成処理)
次に、アプリケーションのウィンドウに配置されている、第1のオブジェクト及び第2のオブジェクトが接触しているか否かを判定するための、接触判定処理について、図8のフローチャートを用いて具体的な処理を説明する。当該フローチャートに対応する処理は、CPU101が、例えば記録媒体106に記憶されている対応する処理プログラムを読み出し、RAM103に展開して実行することにより実現することができる。
【0046】
S801で、CPU101は、配置されている第1のオブジェクトと第2のオブジェクトとが重なりを有するか否かを判断する。具体的にはCPU101は、第1のオブジェクト及び第2のオブジェクトそれぞれの配置座標、オブジェクトサイズ等の情報を取得し、配置されている第1のオブジェクトと第2のオブジェクトとが重なって表示される領域が存在するか否かを判断する。ここで、第1のオブジェクトまたは第2のオブジェクトが矩形ではなく、曲線である場合に、これらのオブジェクトを囲む矩形の領域を用いて重なりの有無を判断してもよい。また、ユーザに対するオブジェクトの画面上での実際の見え方やユーザが用いるカーソルや指などの操作部材の大きさも考慮して、第1のオブジェクトまたは第2のオブジェクトの実際の表示領域よりも所定の割合だけ大きなまたは小さな領域を用いて重なりの有無を判断してもよい。CPU101は、第1のオブジェクトと第2のオブジェクトとが重なりを有すると判断した場合は処理をS802に移し、重ならないと判断した場合は処理をS807に移す。
【0047】
第1のオブジェクトと第2のオブジェクトとが重なりを有する場合、CPU101は、第1のオブジェクトと第2のオブジェクトとの間のZオーダに存在する全てのオブジェクト(中間オブジェクト)について、S802からS805のループ処理を実行する。そのため、S802においてCPU101は、ループ処理を実行していない中間オブジェクトが存在する場合はループ処理を実行し、全ての中間オブジェクトについてループ処理を実行している場合は処理をS806に移す。
【0048】
S803で、CPU101は、選択された1つの中間オブジェクトと第1のオブジェクトとが重なりを有するか否かを判断する。本ステップの処理は、S801において第1のオブジェクトと第2のオブジェクトについて実行した処理と同様であるため、説明を省略する。CPU101は、選択された中間オブジェクトと第1のオブジェクトとが重なりを有すると判断した場合は処理をS804に移す。またCPU101は、選択された中間オブジェクトと第1のオブジェクトとが重ならないと判断した場合は当該中間オブジェクトについてのループ処理を終了し、次の中間オブジェクトについてループ処理を実行する。
【0049】
S804で、CPU101は、選択された中間オブジェクトと第2のオブジェクトについて、本接触判定処理を実行する。即ち、本ステップでは第1のオブジェクトと第2のオブジェクトとの間に、選択された中間オブジェクト、あるいは当該中間オブジェクト及び他の中間オブジェクトを介した間接的な重なりが存在する可能性があるため、再帰的処理を実行する。
【0050】
S805で、CPU101は、選択された中間オブジェクトと第2のオブジェクトとが接触しているか否かを判断する。具体的にはCPU101は、S804で実行された選択された中間オブジェクトと第2のオブジェクトとについての接触判定処理の結果、接触していると判定されたか否かを判断する。
【0051】
本ステップでは、第1のオブジェクトと第2のオブジェクトとの間のZオーダに存在する中間オブジェクトについて再帰的処理を実行することで、重なりを有するオブジェクトを辿った先に第2のオブジェクトに接触するオブジェクトが存在するか否かを判断できる。即ち、最終的に重なりを有するオブジェクトを辿った先に、第2のオブジェクトに接触するオブジェクトが存在する場合は、間接的な重なりが存在することを意味する。
【0052】
CPU101は、選択された中間オブジェクトと第2のオブジェクトとが接触していると判断した場合は処理をS807に移す。またCPU101は、選択された中間オブジェクトと第2のオブジェクトとが接触していないと判断した場合は当該中間オブジェクトについてのループ処理を終了し、次の中間オブジェクトについてループ処理を実行する。
【0053】
第1のオブジェクトと第2のオブジェクトとの間のZオーダに存在する全ての中間オブジェクトについてのループ処理の実行が完了した場合、S806でCPU101は第1のオブジェクトと第2のオブジェクトとが接触していると判断する。そしてCPU101は、第1のオブジェクトの接触オブジェクトリストに第2のオブジェクトに関する情報を出力し(S808)、本接触判定処理を完了する。ここで、Zオーダの値が、第1のオブジェクトよりも第2のオブジェクトの方が小さいとき、第2のオブジェクトが背面接触オブジェクトであることを示す情報も出力される。一方、Zオーダの値が第1のオブジェクトよりも第2のオブジェクトの方が大きいとき、第2のオブジェクトが前面接触オブジェクトであることを示す情報も出力される。
【0054】
またS807で、CPU101は、第1のオブジェクトと第2のオブジェクトとが接触していないと判断し、接触していない旨を示す判定結果を出力し、本接触判定処理を完了する。
【0055】
(S705、注目オブジェクトの抜き出し処理)
次に、注目オブジェクトが移動し、その接触オブジェクトとの重なりがなくなったときの、抜き出し処理について図9のフローチャートを用いて具体的な処理を説明する。当該フローチャートに対応する処理は、CPU101が、例えば記録媒体106に記憶されている対応する処理プログラムを読み出し、RAM103に展開して実行することにより実現することができる。
【0056】
まず、CPU101は注目オブジェクトの接触オブジェクトに関する情報を接触オブジェクトリストから取得し(S901)、接触オブジェクトの個数をNに代入し(S902)、カウンタiを初期化してiに“1”を代入する(S903)。そして、CPU101は、注目オブジェクトがi番目の接触オブジェクトと未だ重なったままであるか否かを判定する(S904)。未だ重なっていれば(S904でYes)、ステップS907に進む。一方、注目オブジェクトがi番目の接触オブジェクトと重なっていなければ(S904でNo)、相手オブジェクト候補リストにi番目の接触オブジェクトに関する情報を追加する(S905)。そして、抜出フラグを初期値“オフ”から“オン”に変更し(S906)、カウンタiに1を加算する(S907)。カウンタiの値が接触オブジェクトの個数よりも小さければ(S908でNo)、CPU101はステップS904に戻り、次の接触オブジェクトについて同様の処理を繰り返す。カウンタiの値が接触オブジェクトの個数Nよりも大きければ(S908でYes)、CPU101は上述と同様に、ウィンドウに配置されている全てのオブジェクトについて接触オブジェクトリストの作成処理を実行する(S909)。
【0057】
(S708、注目オブジェクトの挿入処理)
次に、注目オブジェクトが移動し、その接触オブジェクトとの重なりが無くなった後、再び重なったときの、挿入処理について図10のフローチャートを用いて具体的な処理を説明する。当該フローチャートに対応する処理は、CPU101が、例えば記録媒体106に記憶されている対応する処理プログラムを読み出し、RAM103に展開して実行することにより実現することができる。
【0058】
まず、CPU101は接触オブジェクトリストを参照し、ウィンドウに配置されているオブジェクトのうち、注目オブジェクトの系列オブジェクトではないオブジェクト(以下、別系列オブジェクトと言う。)を取得し(S1001)、別系列オブジェクトの個数をNに代入し(S1002)、カウンタiを初期化してiに“1”を代入する(S1003)。そして、CPU101は、注目オブジェクトがi番目の別系列オブジェクトと重なったかどうかを判定する(S1004)。注目オブジェクトがi番目の別系列オブジェクトと重なっていなければ(S1004でNo)、ステップS1008に進む。注目オブジェクトがi番目の別系列オブジェクトと重なっていれば(S1004でYes)、i番目の別系列オブジェクトが相手オブジェクト候補リストに含まれているか否かを判定する(S1005)。i番目の別系列オブジェクトが相手オブジェクト候補リストに含まれていなければ、ステップS1008に進む。一方、i番目の別系列オブジェクトが相手オブジェクト候補リストに含まれていれば(S1005でYes)、相手オブジェクト確定リストにi番目の別系列オブジェクトに関する情報を追加する(S1006)。そして、挿入フラグを初期値“オフ”から“オン”に更新し(S1007)、カウンタiに1を加算する(S1008)。カウンタiの値が別系列オブジェクトの個数よりも小さければ(S1009でNo)、CPU101はステップS1004に戻り、次の別系列オブジェクトについて同様の処理を繰り返す。カウンタiの値が別系列オブジェクトの個数Nよりも大きく(S1009でYes)、挿入フラグがオンであれば、Zオーダの変更処理を実行する(S1011)。CPU101は上述と同様に、ウィンドウに配置されている全てのオブジェクトについて接触オブジェクトリストの作成処理を実行する(S1012)。
【0059】
(S1011、Zオーダ変更処理)
次に、注目オブジェクトと相手オブジェクトの重なりの順番を変更するときの、Zオーダの変更処理について図11のフローチャートを用いて具体的な処理を説明する。当該フローチャートに対応する処理は、CPU101が、例えば記録媒体106に記憶されている対応する処理プログラムを読み出し、RAM103に展開して実行することにより実現することができる。
【0060】
まず、CPU101は注目オブジェクトと相手オブジェクトのZオーダを比較し(S1101)、注目オブジェクトの方が大きければ(S1101でYes)、注目オブジェクトをオブジェクトpとし、相手オブジェクトをオブジェクトqとする(S1102)。一方、注目オブジェクトの方が小さければ(S1101でNo)、相手オブジェクトをオブジェクトpとし、注目オブジェクトをオブジェクトqとする(S1103)。つまり、Zオーダが大きく、上に重なっている方をオブジェクトpとする。CPU101は、接触オブジェクトリストを参照し、オブジェクトqの前面接触オブジェクトを取得し(S1104)、オブジェクトpの背面接触オブジェクトを取得する(S1105)。そして、CPU101はオブジェクトpとオブジェクトqのZオーダを交換する(S1106)。CPU101は、オブジェクトqの前面接触オブジェクトの個数をNに代入し(S1107)、Nが0より大きいか否かを判定する(S1108)。なお、S1104やS1105では相手オブジェクト以外の接触オブジェクトを取得する。
【0061】
Nが0より大きければ(S1108でYes)、CPU101はiに1を代入し(S1109)、オブジェクトqとその前面接触オブジェクト[i]のZオーダを比較する(S1110)。CPU101は、オブジェクトqの方が大きければ(S1110でYes)、オブジェクトqと、前面接触オブジェクト[i]のZオーダを交換する(S1111)。そして、CPU101はiに1を加算し(S1112)、iがNより大きいか否かを判定する(S1113)。CPU101は、iがNより小さければ(S1113でNo)、ステップS1110へ戻り、iがNより大きければ(S1113でYes)、ステップS1114へ進み、各処理を実行する。
【0062】
すなわち、オブジェクトqに対してオブジェクトpとのZオーダは入れ替わっても、オブジェクトqに対するオブジェクトp以外の前面接触オブジェクトとの上下関係は変わらないようにする。
【0063】
次に、CPU101はオブジェクトpの背面接触オブジェクトの個数をNに代入し(S1114)、Nが0より大きいか否かを判定する(S1115)。
【0064】
Nが0より大きければ(S1115でYes)、CPU101はiに1を代入し(S1116)、オブジェクトpと背面接触オブジェクト[i]のZオーダを比較する(S1117)。CPU101は、オブジェクトpの方が小さければ(S1117でYes)、オブジェクトpと背面接触オブジェクト[i]のZオーダを交換する(S1118)。そして、CPU101はiに1を加算し(S1119)、iがNより大きいか否かを判定する(S1120)。CPU101は、iがNより小さければ(S1120でNo)、ステップS1117へ戻り、処理を実行し、iがNより大きければ(S1120でYes)終了する。
【0065】
すなわち、オブジェクトpに対してオブジェクトqとのZオーダは入れ替わっても、オブジェクトpに対するオブジェクトq以外の背面系列オブジェクトとの上下関係は維持されるようにする。一方、オブジェクトpの方が大きければ本処理を終了する。
【0066】
このようにすることで、注目オブジェクトと他のオブジェクトの上下関係は維持したまま、相手オブジェクトとのZオーダの入れ替えを行うことができる。また、ユーザに対し、物理的に自然な入れ替えを反映した、直感的に操作結果を提示することができる。
【0067】
なお、本実施形態では注目オブジェクトと相手オブジェクトについてZオーダの入れ替えが生じた場合に相手オブジェクト候補リストを初期化するようにしてもよい。または、相手オブジェクト候補リストを初期化せずに保持しておくことにより、連続的に接触したオブジェクトとのZオーダの入れ替えが可能なように構成してもよい。
【0068】
なお、上述したZオーダ入替処理においては、注目オブジェクトと相手オブジェクトのZオーダを入れ替えるものとして説明したが、本発明は注目オブジェクトと相手オブジェクトの上下関係を逆転させればよく、本発明の実施はこれに限らない。例えば相手オブジェクトが相手オブジェクトの前面に接触する場合、相手オブジェクトのZオーダの1つ下のZオーダを追加し、注目オブジェクトに当該Zオーダを割り当ててもよい。即ち、一方のオブジェクトのZオーダの値が、接触する他方のオブジェクトのZオーダの直上あるいは直下の値となるように変更してもよい。このようにすることで、少なくとも相手オブジェクトの前面接触オブジェクトの重なり関係は維持されるため、第1のオブジェクトの背面接触オブジェクトについてのみZオーダ整合処理を実行すればよいことになる。
【0069】
以上のように、本実施形態の情報処理装置は、それぞれ異なるZオーダを有する複数のオブジェクトが、ユーザの操作に応じて移動可能にフィールドに表示されている場合に、配置された複数のオブジェクトの重なり関係をユーザに直感的に配置された複数のオブジェクトの重なり関係を直感的に変更することができる。具体的には情報処理装置は、2つのオブジェクトが、他のオブジェクトを介さずに重なりを有する場合に、当該2つのオブジェクトが接触していると判定する。そして、第1のオブジェクトの移動中に、第1のオブジェクトと重なりを有する状態になった後に、重なりを有さない状態を経て再び重なりを有する状態となった第2のオブジェクトを検出する。情報処理装置は、第1のオブジェクトと第2のオブジェクトが重なりを有さない状態の前後で接触していると判定されている場合は第1のオブジェクトと第2のオブジェクトのZオーダにおける上下関係を入れ替える。
【0070】
このようにすることで、2つのオブジェクトのZオーダを入れ替えても、他のオブジェクトとの重なり関係は維持することができるため、違和感を与えることのない、直感的で分かりやすいオブジェクトのZオーダを入れ替えられる操作方法をユーザに提供できる。
【0071】
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

【特許請求の範囲】
【請求項1】
それぞれ異なるZオーダを有する複数のオブジェクトを、前記Zオーダに従って所定のフィールドに表示する表示手段と、
前記複数のオブジェクトのうちの第1のオブジェクトを前記フィールド内で移動する移動手段と、
前記複数のオブジェクトのうちの2つのオブジェクトが、他のオブジェクトを介さずに重なりを有する場合に、当該2つのオブジェクトが接触していると判定する判定手段と、
前記移動手段による前記第1のオブジェクトの移動中に、前記複数のオブジェクトのうち、前記第1のオブジェクトと重なりを有する状態になった後に、重なりを有さない状態を経て再び重なりを有する状態となった第2のオブジェクトを検出する検出手段と、
前記第2のオブジェクトが、前記重なりを有さない状態の前後で、前記判定手段により前記第1のオブジェクトと接触したと判定された場合に、前記第1のオブジェクトと前記第2のオブジェクトのZオーダにおける上下関係を入れ替えるZオーダ入替手段と、を備え、
前記表示手段は、前記第1のオブジェクトの移動中、前記Zオーダ入替手段によるZオーダにおける入れ替えを反映して前記複数のオブジェクトを表示する
ことを特徴とする情報処理装置。
【請求項2】
前記Zオーダ入替手段は、前記重なりを有さない状態の前後のいずれかで、前記第1のオブジェクトと前記第2のオブジェクトとが接触したと判定されていない場合は、前記第1のオブジェクトと前記第2のオブジェクトのZオーダにおける上下関係を入れ替えないことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記Zオーダ入替手段により、前記第1のオブジェクトと前記第2のオブジェクトのZオーダの上下関係が入れ替えられた場合に、前記第1及び第2のオブジェクトの間のZオーダを有する中間オブジェクトのZオーダを修正するZオーダ整合手段をさらに備え、
前記Zオーダ整合手段は、
前記中間オブジェクトのうち、前記第2のオブジェクトに接触していたオブジェクト、及び接触しているオブジェクトを介することで前記第2のオブジェクトに間接的に接触していたオブジェクトについてはZオーダを入れ替える前の前記第2のオブジェクトとのZオーダにおける上下関係を維持し、
前記中間オブジェクトのうち、前記第1のオブジェクトに接触していたオブジェクト、及び接触しているオブジェクトを介することで前記第1のオブジェクトに間接的に接触していたオブジェクトについてはZオーダを入れ替える前の前記第1のオブジェクトとのZオーダにおける上下関係を維持するように、
前記中間オブジェクトのZオーダを修正する
ことを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記Zオーダ入替手段は、前記第1のオブジェクトと前記第2のオブジェクトのZオーダの値を交換することにより、前記第1のオブジェクトと前記第2のオブジェクトのZオーダにおける上下関係を入れ替えることを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
【請求項5】
前記Zオーダ入替手段は、前記第1のオブジェクトあるいは前記第2のオブジェクトのZオーダの値を、接触する他方のオブジェクトのZオーダの直上あるいは直下となるように変更することにより、前記第1のオブジェクトと前記第2のオブジェクトのZオーダにおける上下関係を入れ替えることを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
【請求項6】
情報処理装置の表示手段が、それぞれ異なるZオーダを有する複数のオブジェクトを、前記Zオーダに従って所定のフィールドに表示する表示工程と、
前記情報処理装置の移動手段が、前記複数のオブジェクトのうちの第1のオブジェクトを前記フィールド内で移動する移動工程と、
前記情報処理装置の判定手段が、前記複数のオブジェクトのうちの2つのオブジェクトが、他のオブジェクトを介さずに重なりを有する場合に、当該2つのオブジェクトが接触していると判定する判定工程と、
前記情報処理装置の検出手段が、前記移動工程における前記第1のオブジェクトの移動中に、前記複数のオブジェクトのうち、前記第1のオブジェクトと重なりを有する状態になった後に、重なりを有さない状態を経て再び重なりを有する状態となった第2のオブジェクトを検出する検出工程と、
前記情報処理装置のZオーダ入替手段が、前記第2のオブジェクトが、前記重なりを有さない状態の前後で、前記判定工程において前記第1のオブジェクトと接触したと判定された場合に、前記第1のオブジェクトと前記第2のオブジェクトのZオーダにおける上下関係を入れ替えるZオーダ入替工程と、を備え
前記表示手段は前記表示工程において、前記第1のオブジェクトの移動中、前記Zオーダ入替工程におけるZオーダについての入れ替えを反映して、前記複数のオブジェクトを表示する
ことを特徴とする情報処理装置の制御方法。
【請求項7】
コンピュータを、請求項1乃至5のいずれか1項に記載の情報処理装置の各手段として機能させるためのプログラム。
【請求項8】
コンピュータを、請求項1乃至5のいずれか1項に記載の情報処理装置の各手段として機能させるためのプログラムを記録した記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2013−65281(P2013−65281A)
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願番号】特願2012−156927(P2012−156927)
【出願日】平成24年7月12日(2012.7.12)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】