以下、添付図面を参照して本開示の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は本開示事項を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせすべてが本開示の解決手段に必須のものとは限らない。
<<第1実施形態>>
本実施形態で説明するオブジェクトスナッピングの機能向上の一例の概略を最初に説明し、その後に、本実施形態の構成を説明する。オブジェクトスナッピングのことを、単にスナッピングとも称することがある。オブジェクトとは、写真または図形などのオブジェクトのことである。図形には、文字またはスタンプなどの図形が含まれ得る。本実施形態では、主として、写真オブジェクト(画像オブジェクト)を、スナッピング動作(整列・位置合わせ動作)が行われる対象として説明する。また、スナッピングの目標となるオブジェクト(例えば配置済みオブジェクト)も、写真オブジェクトを例に挙げて説明する。しかしながら、オブジェクトは、上記例に限られず、編集領域に配置され得るオブジェクトであれば、任意の種類のオブジェクトを用いてよい。
オブジェクトスナッピングは、前述したように、例えばユーザが文書を編集する際に、オブジェクトを追加または移動する作業時に、既存のオブジェクトと位置関係を揃えることを支援する仕組みである。言い換えれば、オブジェクトスナッピングは、オブジェクトの位置としてユーザが指定した位置をプログラムが、既存のオブジェクトとの位置関係に基づいて自動で変更することで、オブジェクトをプログラムが自動配置する仕組みである。このため、新たなページを作り始める場合、編集領域には配置済みの他のオブジェクトが無い、または、配置済みのオブジェクトの数が少ない状態が生じる。このような状態においては、スナッピング機能は有効に動作しない。
そこで、本実施形態では、編集中のページにオブジェクトがまだ配置されておらず、スナッピングポイントを得ることができないとき、編集中のページとは別のページにおけるオブジェクトの配置情報を利用したスナッピングを行う。なお、本実施形態においては後述するように編集画面には2ページ分の領域である見開きが表示される。ここで、編集中のページとは別のページとは、編集中の見開き以外の見開きに含まれるページであるものとする。以下では、既存の作成済みページを用いた、「他ページを活用したスナッピング」を行う例を説明する。
<システム構成>
図1は、本実施形態における情報処理システムの一例を示す図である。本実施形態では、主に、フォトブックを発注するフォトブック発注システムを例に挙げて説明する。情報処理システム100は、例えば利用者の自宅内などにおいて使用される情報処理装置104と、印刷拠点に設置されている外部サーバ102およびプリンタ101とを有する。情報処理装置104と外部サーバ102とは、インターネットなどのネットワーク103を通じて接続されている。本実施形態において情報処理装置104は、フォトブック作成用のプリンタ101を有するフォトブック作成会社(印刷拠点)にフォトブックの発注を行う。
情報処理装置104は、パーソナルコンピュータ(PC)、タブレット、または、スマートフォンなどの情報処理装置である。情報処理装置104は、モニタ106、入力装置107、および外部記憶装置108と接続されている。また、情報処理装置104は、利用者宅内に設けられたプリンタ105と接続されている。情報処理装置104は、CPU111、ROM109、およびRAM110を有する。外部記憶装置108は、画像データまたはテンプレートなどを保存するHDDまたはSSDなどの記憶装置である。モニタ106は表示装置である。図1の例では、情報処理装置104、モニタ106、入力装置107、および、外部記憶装置108は、別個のデバイスとして記載されているが、情報処理装置104の形態によっては、これらの一部または全てが一体化されていてもよい。即ち、情報処理装置104の構成物としてモニタ106、入力装置107、および外部記憶装置108(情報処理装置のRAM110と共有となる場合もある)を含む形態でもよい。また、入力装置107の形態によってはモニタ106と一体となっており、モニタに直接触れ入力するタッチパネルを用いる形態でもよい。
レイアウト編集アプリケーション112は、フォトブックを編集するためのアプリケーションであり、情報処理装置104上にインストールされている。情報処理装置104は、ROM109または外部記憶装置108などに記憶されたレイアウト編集アプリケーション112を、CPU111がRAM110に読み出して実行する。これにより、オブジェクトスナッピングを含む後述する各種の処理が情報処理装置104によって実行される。情報処理装置104は、モニタ106にレイアウト編集アプリケーション112の提供するユーザインタフェースを表示する。
レイアウト編集アプリケーション112は、入力装置107(マウス、キーボード、タッチパネル、ジャイロを搭載したリモートポインタデバイス、またはスマートフォン本体のジャイロを利用した入力方法等)から入力される情報を処理する。レイアウト編集アプリケーション112は、処理した情報を再度モニタ106上にフィードバックする。本実施形態は、主に、レイアウト編集アプリケーション112のユーザインタフェースと呼ばれる部分の機能の一部を説明する。なお、本実施形態では、レイアウト編集アプリケーション112は、情報処理装置104にインストールされている例を説明するが、Webブラウザ上で動作するWebアプリケーションとして動作してもよい。Webアプリケーションの場合、情報処理装置104上へのインストールは、Webの閲覧をトリガーとして自動的に行われる。
本実施形態においては、レイアウト編集アプリケーション112は、フォトブック作成アプリケーションであるものとして説明する。即ち、レイアウト編集アプリケーション112は、デジタルカメラ等で撮影された複数の画像をフォトブック等に印刷するためのアプリケーションである。あるいは、レイアウト編集アプリケーション112は、コンピュータなどの電子機器上で、写真を読みやすく表示するためにフォトブックの型式に倣ってレイアウトを行うアプリケーションである。そして、このようなレイアウト編集アプリケーション112において、ユーザが容易に整ったレイアウトを行うことを支援するオブジェクトスナッピングを説明する。
<レイアウト編集画面>
図2は、レイアウト編集アプリケーション112がモニタ106に表示するレイアウト編集画面の例を示す図である。ユーザが図1に示す情報処理システム100を用いてフォトブックを発注する工程を、図2を用いて説明する。本実施形態においては、フォトブックを新しく作り始める工程を例に挙げて説明するが、レイアウト編集アプリケーション112において既に作成済みのフォトブックを、再度編集する工程としてもよい。
フォトブックの新規作成を開始する場合、レイアウト編集アプリケーション112は、図2の製本パラメータ210の設定領域以外がグレーアウト(入力不可)である状態で起動する。なお、図2は、後述するように一部のページが編集済みのレイアウト編集画面を示している。
ユーザは、入力装置107を操作し、カーソル215を移動させる。また、ユーザは、入力装置107を操作し、決定操作(マウスクリック等)をすることで、製本パラメータ210を任意に選択することができる。製本パラメータ210には、フォトブックのサイズ(21cm正方形、A4縦等)およびカバーの種類(ハードカバー、ソフトカバー等)が含まれる。また、製本形式(標準、フラット等)、用紙種類(光沢紙、半光沢紙等)、およびページ数(20ページ、30ページ等)が含まれる。製本パラメータ210が全て選択されると、フォトブックの価格が計算され、表示される。
レイアウト編集画面には、ページ一覧領域209が含まれる。製本パラメータ210が選択されると、ページ一覧領域209のグレーアウトが解除され、指定された製本情報に合わせたページ一覧が表示される。ユーザは、編集を開始したいページを選択すると、レイアウト編集アプリケーション112は、指定されたページをレイアウト編集領域214に表示し、編集待ち状態となる。ページ一覧領域209では、編集状態になったページの周囲がグレーに強調表示される(図ではハッチングで示している)。図2の例では、ページ1およびページ2に対応する見開きが編集状態になっている様子を示している。
尚、「見開き」または「見開きページ」とは、例えば表示においては一つの表示用ウィンドウに相当し、印刷物においては、本を開いた際にユーザが一度に鑑賞可能な互いに隣接する1対のページ(つまり2ページ分)に相当する。なお、見開き内の2ページは、それぞれ異なる用紙に印刷されたものが隣接するよう綴じられることで見開きを形成する場合と、1枚の用紙に印刷されたものが真ん中で折られることで見開きを形成する場合と、がある。なお本実施形態においては、編集画面には見開きが表示されるものとするが、1ページが表示されるものとしても良い。
ユーザが、レイアウト編集アプリケーション112にフォトブックの材料である写真を読み込ませるために、写真読み込みボタン212を押下すると、OSの機能により、ファイル選択ダイアログがオープンする。ユーザは、情報処理装置104上(外部記憶装置108またはRAM110)、または、ネットワーク103を介したストレージに格納されている写真から、任意の写真を選択する。選択された写真は、写真リスト領域206上に写真オブジェクトとして表示される。ユーザは、写真リスト領域206から所望の写真オブジェクトをレイアウト編集領域214に表示された見開きページ上にドラッグアンドドロップすることで、見開きページ上に写真オブジェクトを配置することができる。
注文ボタン211を押下してフォトブックを注文すると、情報処理装置104で作成されたフォトブックのデータが、ネットワーク103を介して外部サーバ102にアップロードされる。外部サーバ102では、アップロードされたデータをプリンタ101に出力する。例えば、外部サーバはフォトブック受注・管理サーバであり、ユーザが自身の情報処理装置104で作成したフォトブックをアップロードし、必要なフォトブック購入手続きが取られたら、プリンタ101で出力が行われる。その後、出力された印刷物は製本され、ユーザの手元に届けられる。なお、外部サーバにアップロードする形態を採らずに、ユーザは、自身が所有しているプリンタ105で印刷を行い、ユーザ自身で製本することで、フォトブックを作成してもよい。
図3は、例えばプリンタ101で出力が行われ、製本処理されたフォトブックの一例を示す図である。レイアウト編集アプリケーション112を用いて各種のレイアウト編集を行い、フォトブックを発注することで、ユーザは、図3に示すようなフォトブックを得ることができる。以上が情報処理システム100において行われる概略的な構成および処理の説明である。
上述したように、レイアウト編集アプリケーション112は、モニタ106を通して編集用の画面を表示し、ユーザはこの画面を見ながら入力装置107を使ってフォトブックのレイアウト作業を行うことになる。オブジェクトスナッピングは、ユーザがレイアウト作業を行うに際して有用な機能となる。フォトブックのレイアウト編集のオブジェクトスナッピングの処理は、例えば前述した特許文献2にも記載されている。
ここで、オブジェクトスナッピングとは、一般的には、編集中の作業領域内のオブジェクトの位置を揃えるという動作である。つまり、編集中の作業領域に存在するオブジェクトの位置情報を利用してスナッピングすべき位置(スナッピングポイント)を生成する処理が行われるものである。レイアウト編集アプリケーション112の場合には、編集中の作業領域とは、図2のレイアウト編集領域214である。即ち、フォトブックの場合、レイアウト編集領域214として表示されている見開きページが、編集中の作業領域に該当する。なお、図2の例では、見開きページの全体が表示されている例を示しているが、レイアウト編集領域214が拡大表示されている場合、または、フォトブックのサイズが大きい場合には、レイアウト編集領域214に見開きページ全体が表示できない場合もある。この場合、レイアウト編集領域214上にスクロールバーを表示し、表示位置を変更できるような構成でもよい。本実施形態では、説明簡略化のため、見開きページ全てがレイアウト編集領域214の領域内に収まっている例を用いて説明する。
次に、レイアウト編集アプリケーション112においてオブジェクトスナッピングを行う際に起こり得る例を、まずは比較例として図2を用いて説明する。図2は、1ページおよび2ページに相当する見開きページを表示した状態を表している。図2の例では、見開きページ内には、4つの写真オブジェクト216が配置されている。図2の例では、この既に配置済みの4つの写真オブジェクトに基づいてスナッピングが実行される領域(以下、スナッピング領域という)が算出される。しかしながら、新たなページの編集を開始するケースでは、作業領域上にオブジェクトが一つも配置されていない。つまり、スナッピングを行う際の基準となるオブジェクト(以下、基準オブジェクトという)が作業領域上に存在しないため、スナッピングが機能しない。
図4は、レイアウト編集画面の一例を示す図である。図4のレイアウト編集領域214には、3ページおよび4ページの見開きページが表示されている。図4の画面は、例えばユーザが、図2の次ページ移動ボタン218を押下して次の見開きページの編集に処理が変わった状態を示している。図4の例では、レイアウト編集領域214には、オブジェクトが一つも配置されていないので、基準オブジェクトが存在しない状態である。この場合、一般的な編集アプリケーションでは、スナッピング機能が動作しない。
本実施形態では、ユーザが新たなページの編集開始時において、既存のページデータ(見開きページデータ)を利用することで、レイアウト編集処理の更なる機能向上を実現させる例を説明する。具体的には、既存の見開きページデータを用いて、オブジェクトスナッピングを実施する例を説明する。
<オブジェクトスナッピング>
本実施形態における動作を具体的に理解しやすくするために、まず、ユーザインタフェースの観点で説明する。ユーザは、図2のようにフォトブックの1ページおよび2ページに対応する見開きページを編集し、1ページおよび2ページに対応する見開きページには、4つの写真オブジェクトが配置されているものとする。次に、ユーザは、3ページおよび4ページに対応する見開きページの編集を開始する。具体的には、ユーザは、カーソル215をページ一覧領域209の中の「3~4ページ」のサムネイル画像部分をマウスクリックで選択するか、次ページ移動ボタン218をクリックする。これにより、図4に示すように、3ページおよび4ページに対応する見開きページの編集に遷移している状態であるものとする。
図4では、現在表示中のページ番号が、表示中ページ番号表示領域405に表示されている。図4において、ページ一覧領域209には、フォトブックの各ページのサムネイル画像が表示されている。また、「3~4ページ」のサムネイル画像の周囲をグレーに強調表示することで、3ページおよび4ページに対応する見開きページが編集状態であることを示している。
図4において、ユーザは、画面の下部に表示されている写真リスト領域206からレイアウト編集領域214の配置したい位置にドラッグアンドドロップすることで、編集状態である見開きページに写真オブジェクトを追加する。こうして追加配置された写真オブジェクトの位置またはサイズを調整するために、マウスドラッグまたはタッチパネルを利用して、追加配置された写真オブジェクトをさらに編集することも可能である。本実施形態では、主に、編集開始直後の見開きページへのオブジェクトの追加および編集作業におけるオブジェクトスナッピング機能を中心に説明をする。そして、その際に、編集対象の見開きページ以外の見開きページデータを利用して処理が行われる。なお、本実施形態では、処理対象のページ単位を、見開きページであるものとして説明しているが、フォトアルバムのページを処理単位として処理が行われてもよい。
図5は、本実施形態におけるオブジェクトスナッピングの処理の一例を示すフローチャートである。図5のフローチャートで示される一連の処理は、情報処理装置104のCPU111が、外部記憶装置108などに記憶されているプログラムコードをRAM110に展開し、実行することにより行われる。即ち、CPU111がレイアウト編集アプリケーション112のプログラムコードを実行することにより行われる。尚、各処理の説明における記号「S」は、当該シーケンス図におけるステップであることを意味する(本明細書において同様である)。
図6は、レイアウト編集アプリケーション112が実行される際に、RAM110に確保されるバッファ領域に格納されるデータ構造の例を示す図である。図6(a)は、間隔保持バッファ600の例であり、図6(b)は、ドラッグ開始情報バッファ650の例である。
図7は、レイアウト編集アプリケーション112がレイアウトを編集する際に用いるフォトブックのデータ構造の例を示している。フォトブックのデータは、フォトブック構造体で構成されており、各種のデータ項目が含まれている。図7(a)は、フォトブック構造体700のデータ構造の例である。フォトブック構造体700には、ページ情報インデックスリスト705が含まれる。ページ情報とは、見開きページの情報のことである。図7(b)は、フォトブック構造体700の項目の一つであるページ情報インデックスリスト705の例である。図7(c)は、ページ情報構造体720に含まれる各種のデータ構造の例である。
以下、図5のフローチャートの説明を、適宜、図6または図7に示すデータ構造を参照しながら説明する。図6および図7に示す情報の詳細は、フローチャートの説明の中で、適宜、説明することとする。
CPU111が入力装置107からの信号を介してユーザによるマウスボタンの押下を検知すると、図5に示すフローチャートの処理が開始される。なお、本実施形態においてはドラッグを開始するタイミングはマウスボタンの押下としているが、これに限定するものではない。例えば入力装置がタッチパネルであればタッチ圧の閾値で判定してもよいし、規定時間以上のタッチの有無で判定してもよい。
S501で、情報処理装置104は、ユーザが入力装置107でオブジェクトをドラッグしたこと検知すると、ドラッグ開始情報をドラッグ開始情報バッファ650に保持する。情報処理装置104は、図6(b)に示すバッファ領域のようなデータ構造で、ドラッグ開始情報を保持管理している。ドラッグ開始情報には、ドラッグを開始した際のドラッグ対象オブジェクトの情報、および、マウス位置の情報が含まれる。S501で情報処理装置104は、ドラッグしたオブジェクト(以下、編集対象オブジェクトという)のドラッグ開始時の位置情報とサイズ情報とをドラッグ開始情報のバッファ領域653~656に保持する。さらに、情報処理装置104は、ドラッグした編集対象オブジェクトへのポインタを、ドラッグ開始情報のバッファ領域657に保持する。このようにドラッグ開始情報を保持するのは、ドラッグ処理後に、実体のオブジェクトの移動またはサイズ変更を実施するためである。ドラッグ開始情報は、ユーザがドラッグ処理を終了するまで、ドラッグ開始情報バッファ650に保持される。
ドラッグした編集対象オブジェクトとは、図4の例で説明すると、ユーザがレイアウト編集領域214上に配置しようと写真リスト領域206からドラッグしたオブジェクトのことである。なお、本例では、レイアウト編集領域214上に何もオブジェクトが配置されていない場面での説明を中心にするものであるが、図5の処理は、レイアウト編集領域214上に既に配置されているオブジェクトをドラッグする場合にも適用されるものである。
S501においては、情報処理装置104は、ドラッグ開始情報の中の他ページ探索開始インデックス658を「1」で初期化する。他ページ探索開始インデックス658は、図7に示すページ情報インデックスリスト705の走査用に用いられるパラメータである。
情報処理装置104は、この他ページ探索開始インデックス658に設定されたインデックスが示すページ情報を、他ページを探索する際のカレントの探索ページとして取り扱う。S501において、この他ページ探索開始インデックス658を「1」で初期化する理由を説明する。図7(b)のページ情報インデックスリスト705は、各見開きページ情報の構造体へのインデックスリストである。図7(b)のページ情報インデックスリスト705には、ページ情報構造体数711が含まれており、実質的なインデックスリストは、表紙の見開きのページ情報構造体へのポインタ712から始まることになる。そして、1~2ページに対応する見開きページのページ情報構造体へのポインタ713、3~4ページに対応する見開きページのページ情報構造体へのポインタ714と続いて、最終見開きページまで順に並んでいる。本実施形態では、編集領域のサイズが異なる表紙はスナッピングポイント探索から除外し、1~2ページに対応する見開きページから探索するため、他ページ探索開始インデックス658を先頭の「0」ではなく、「1」で初期化している。
またS501において、情報処理装置104は、ドラッグ開始情報の一部として、ドラッグ開始時のマウス位置を保持する。即ち、ドラッグ開始時のマウス位置(X)をバッファ領域651に保持し、マウス位置(Y)をバッファ領域652に保持する。XとYは、レイアウト編集画面におけるX座標とY座標をそれぞれ示す。ドラッグ開始時のマウス位置は、ドラッグ中に開始位置からの移動量を計算してドラッグ対象となった編集対象オブジェクトが移動した位置を算出する際に用いられる。また、ドラッグ開始時のマウス位置は、ドラッグがユーザの入力により中断された場合に元の位置に戻す際に用いられる。
S502で、情報処理装置104は、スナッピングポイント生成処理を行う。なお、S502の処理は、任意的な処理であり、この処理はスキップされてもよい。S502のスナッピングポイントの生成は、本実施形態では行わずにスキップするものとする。S502の処理は、後述する第2実施形態で説明することとする。
S503で、情報処理装置104は、マウスの移動量を取得する。即ち、ドラッグ開始情報バッファ650上における、ドラッグ開始時のマウス位置を保持しているバッファ領域651~652と、入力装置107から得られる現在のマウスカーソルの位置との差分を計算し、マウス移動量を求める。
S504で、情報処理装置104はオブジェクトの移動先を算出し、オブジェクトを移動させる。情報処理装置は、S503で求めたマウス移動量を、図6(b)に示すドラッグ開始情報バッファ650における、ドラッグ開始時のオブジェクト位置を示すバッファ領域653~654に保持されている位置に加算して現在位置を算出する。そして、編集対象オブジェクトへのポインタ657が示す編集中オブジェクト(ドラッグ中オブジェクト)の位置情報にセットする。具体的には、編集中オブジェクトの情報を保持する図10に示すフォトフレーム構造体の中の位置1001に、現在位置をセットする。フォトフレームとは、写真オブジェクトが含まれるフレームのことである。本明細書では、説明の簡略化のため、写真オブジェクトとフォトフレームとは、実質的に同じものとして取り扱うものとする。図10のフォトフレーム構造体は、各フォトフレーム(写真オブジェクト)の情報を示すデータ構造の例である。図10の詳細は後述する。
S505において、情報処理装置104は、スナッピングポイントの探索を行う。S505では、S504の現在位置において、編集中のページ内でのスナッピングポイントがあるか否かの判定が行われる。編集中のページ内にスナッピングポイントを発見した場合、S506に進み、発見しなかった場合、S507に進むことになる。S505のスナッピングポイントの探索処理では、情報処理装置104は、編集中の見開きページに配置されている配置済みオブジェクトと、編集中オブジェクトとの位置情報同士の比較によりスナッピング動作を行うべきか判定する。
図8は、S505におけるスナッピングポイントの探索処理の詳細な例を示す図である。S801において、情報処理装置104は、編集中のページ内オブジェクトスナッピングポイントの探索処理のために、RAM110上に確保しているオブジェクト探索ループインデックス用の変数iに「0」をセットする。また、戻り値用の変数Rtnにfalseをセットする。図8の処理が終了したときに、戻り値Rtnにtrueがセットされていれば、スナッピング対象となる基準オブジェクトを発見したことを示し、S506へ進み、基準オブジェクトの位置情報を利用して以降のスナッピング動作が行われる。一方、図8の処理が終了したときに、戻り値Rtnにfalseがセットされていれば、スナッピング対象となる基準オブジェクトが発見できなかったことを示し、S507の編集中ページ以外のページの情報を活用するかの判定処理に進むことになる。
S802において情報処理装置104は、編集中のページのフォトフレーム全ての探索が完了したかを判定する。具体的には、ループインデックスiと、ページ情報インデックスリスト705内の編集中のページ(本ケースでは見開き3~4ページ)714のポインタが示す先の「ページ情報構造体のフォトフレーム数724」とを比較する。
インデックスiがフォトフレーム数よりも小さいときは、インデックスiは、スナッピング対象かを未判定のフォトフレームを指しているので、S803へ進み処理を続ける。インデックスiがフォトフレーム数と同じか大きいときは、ページ内の全フォトフレームとの判定が完了し、スナッピング対象となるものが見つからなかったことを意味する。このため、Rtnは初期化時のfalseのままで図8の処理が終了して、S507へ進むことになる。
S803にて、情報処理装置104は、インデックスiが示すオブジェクトが、編集対象オブジェクト自身であるか否かを判定する。本処理では、編集中ページのページ情報構造体720のフォトフレームリスト725を参照する。具体的には、“フォトフレームリスト[i](リスト先頭からi+1番目という意)”の指すアドレスと、ドラッグ開始情報バッファ650の編集対象オブジェクトのポインタ667とを比較する。比較結果が同じであればインデックスiが示すフォトフレームはドラッグ中のオブジェクト自身であるので、スナッピング判定対象外としてS805へ進む。比較結果が異なればS804へ進みスナッピング判定が行われる。
S804にて、情報処理装置104は、インデックスiが示すオブジェクトが、スナッピング対象のオブジェクトであるか否か、即ち、基準オブジェクトであるか否かを判定するスナッピング判定を行う。具体的には、編集中ページのページ情報構造体720におけるフォトフレームリスト[i]725のフォトフレームと、編集対象オブジェクトの位置およびサイズ情報を比較して、インデックスiが示すオブジェクトが、基準オブジェクトであるかを判定する。
ページ内のオブジェクトを用いて、スナッピング対象のオブジェクトであるか否かを判定する技術は、様々な方法が知られている。ここではオブジェクト中心点を用いたスナッピングを一例として説明する。フォトフレームの位置(x,y)およびサイズ(w,h)から、フォトフレームの中心座標(x+w/2, y+h/2)を求める。即ち、編集対象オブジェクトの中心座標と、インデックスiが示すオブジェクトの中心座標とをそれぞれ求める。そして求めた中心座標のx軸(横方向)の距離とy軸(縦方向)の距離とをそれぞれ比較する。x軸とy軸のどちらか一方の要素だけでも距離が所定距離(例えば0.2mm)以内であれば、インデックスiが示すオブジェクトがスナッピング対象の基準オブジェクトであると判定し、S806に進む。S806では、RtnにtrueをセットしてS506へ進むことになる。この所定距離に関しては、説明便宜上0.2mmとしたが、設計上の任意の距離でよく、モニタ106への表示倍率で変化しても良い。x軸とy軸のどちらも所定距離より離れていればスナッピング対象とならないので、S805へ進む。S805では、インデックスiをインクリメントして、次のフォトフレームの比較を行うべくS802に戻る。このように、編集中ページ内でスナッピングポイントを発見した場合、S506に進み、そうでない場合、S507に進む。
図5に戻り、処理の続きを説明する。S506において、情報処理装置104は、スナッピングポイントに編集対象のオブジェクトを移動させるスナッピング処理を行う。S506では、S505の探索結果に基づき、判定距離以内となった縦または横の座標値にドラッグ中のオブジェクト(編集対象オブジェクト)の座標を移動させる。本例では、中心の座標が同じになるよう編集対象オブジェクトを移動させることで、基準オブジェクトの中心座標と一致させる。また、どのフォトフレーム(基準オブジェクト)にスナッピングしたかをユーザが認識しやすくするために、スナッピングガイドラインとして、一致した縦または横の座標に点線を表示する。S506におけるスナッピング処理は、既に一般的に実現されている処理であるため、説明の詳細は割愛する。S506の処理が終了すると、S509に進む。
次に、他のページ情報を参照してスナッピングを行う、他ページ活用スナッピング処理を説明する。S507およびS508の処理が、他のページ情報を参照してスナッピングを行う処理に対応する。
S507にて、情報処理装置104は、他ページのデータを活用するか否か判定を行う。他ページのデータを活用する場合、S508に進み、そうでない場合、S509に進む。S507の処理は、例えば現在のレイアウト編集領域214内のオブジェクト数が所定値よりも少ないか、または、既にS508の処理を、実行済みかを判定する。S507の判定は、他ページのオブジェクトを活用したスナッピングがユーザにとって有益である場合、S508に進むように構成されている。例えば、レイアウト編集領域214内のオブジェクト数が所定値(たとえば1個)よりも多ければ、別のマウス位置になった場合にページ内でのスナッピングが行われる可能性があるため、この時点では、一旦、この処理をスキップする。また、既にS508の処理を実行している場合、繰り返しの処理は必要がないため、この時点での処理をスキップする。
S508において情報処理装置104は、他ページのデータを利用したオブジェクトスナッピングを行う。S508は、編集中のページを越えた他ページにおいて配置済みのオブジェクトを参照してスナッピングを行う、他ページ活用スナッピング処理である。
図9は、S508における、他ページ活用スナッピング処理の詳細を示すフローチャートである。S901にて、情報処理装置104は、ページ探索用のループインデックスiを初期化する。情報処理装置104は、図7に示すページ情報インデックスリスト705と、ページ探索用のループインデックスiとを使ってページ情報構造体720へアクセスする。S901では、このページ情報構造体720へのアクセスに用いるページ探索用のループインデックスiを初期化する。ここでは、任意のページから走査するためにループインデックスiを、ドラッグ開始情報バッファ650の他ページ探索開始インデックス658の値に初期化する。前述したように、本実施形態では、S501の処理において、この他ページ探索開始インデックス658の値は、「1」に初期化されている。このため、ループインデックスiも「1」に初期化されることになる。この他ページ探索開始インデックス658の値は、主に、後述する第5実施形態で有効に活用することになるため、ここでの説明は省略する。
なお、前述したように、ページ情報インデックスリスト705は、表紙の見開きのページ情報構造体へのポインタ712から始まる。そして、1~2ページの見開きページのページ情報構造体へのポインタ713、3~4ページの見開きページのページ情報構造体へのポインタ714と続いて、最終ページまで順に並んでいる。ここでは1~2ページの見開きから探索したいので、他ページ探索開始インデックス658はS501で「1」に初期化されている。なお、表紙・裏表紙からなる見開きページについては、背表紙を含んでおり、内部ページよりサイズが大きいため座標が一致しない。従って、本実施形態においては、表紙は、他ページ活用スナッピングの参照対象から除外する例で説明するが、表示・裏表紙からなる見開きページを含めて参照してもよい。
ここで、図7のデータ構造を説明する。図7は、本実施形態のレイアウト編集アプリケーション112において作成するフォトブックのブック全体のデータ構造の例を示す図である。本実施形態では、フォトブック構造体700を親とした階層構造のデータを利用する。図7のデータは、フォトブックの編集中には情報処理装置104がRAM110上に領域を確保して保持しているものである。
フォトブック商材種別701は、フォトブックの商材種別を保持する。タイトル文字列702は、フォトブックの表紙または背表紙に表示するタイトル文字列である。フォトブック注文情報703は、フォトブックを発注した場合の注文情報である。フォトブックページ数704は、フォトブックのページ数情報である。
ページ情報インデックスリスト705は、フォトブックを構成する各ページのページ情報構造体にアクセスするためのページ情報へのインデックスリストである。ページ情報とは、見開きページの情報のことである。ページ情報インデックスリスト705は、図7(b)の項目711~715で示されるような構造である。ページ情報構造体数711は、ページ情報構造体の数である。例えば、20ページのフォトブックであれば、見開きページ毎に1つのページ情報構造体が割り当てられる。また、表紙および裏表紙のページ情報がある。よって、「20(ページ)/2+1(表紙・裏表紙)=11個」という算出方法により、11個のページ情報構造体のリストが用いられる。この場合、ページ情報構造体数711には「11」がセットされる。
表紙、裏表紙のページ情報構造体へのポインタ712は、表紙・裏表紙の見開きページのページ情報構造体へのポインタを格納する。1~2ページのページ情報構造体へのポインタ713は、1~2ページの見開きページのページ情報構造体へのポインタを格納する。3~4ページのページ情報構造体へのポインタ714は、3~4ページの見開きページのページ情報構造体へのポインタを格納する。前述したように、ページ情報インデックスリストは、最終見開きページまでのページ情報構造体へのアクセスポインタ715を格納する。
図7(c)に示すページ情報構造体720は、見開きページ毎に用意されている。ページ情報構造体720は、見開きページ内のオブジェクト配置を記憶しており、見開きページに配置されるオブジェクトレイアウトを管理している。即ち、ページ情報構造体720は、当該見開ページにおけるオブジェクトの配置情報である。背景種別721は、見開きページの背景種別である。スナッピング情報722は、ページ左右の余白領域または綴じ余白領域などのスナッピングポイントを記憶する領域である。スナッピング情報722の詳細は、第2実施形態で説明する。参照ページポインタ723には、図9の処理で説明する他ページオブジェクトの配置を活用したスナッピングを行った場合に、参照したその見開きページのページ情報構造体へのアクセスポインタが記録される。そして、他ページオブジェクトの配置を活用したスナッピングの対象外となるまで、そのアクセスポインタが記憶管理される。参照ページポインタ723には、他ページオブジェクトの配置を活用したスナッピングを行う前、および、ユーザが参照ページ内でのオブジェクトの移動を行った時点で、NULLがセットされる。参照ページポインタ723は、第6実施形態で説明する。
図7の項目724~729には、この見開きページに配置されたオブジェクトの情報が記憶されている。フォトフレーム数724は、見開きページに配置されているフォトフレームの数である。フォトフレームリスト725は、図10に示すフォトフレームリストの格納場所である。文字フレーム数726は、この見開きページに配置されている文字フレームの数である。文字フレームリスト727は、文字フレームオブジェクトリストの格納場所である。スタンプフレーム数728は、図形またはイラストなどのスタンプフレームの数である。スタンプフレームリスト729は、スタンプフレームオブジェクトリストの格納場所である。文字オブジェクトリストおよびスタンプオブジェクトリストは、本実施形態の説明には特に用いないので、説明を省略する。
図9の処理の説明に戻る。S902では、情報処理装置104は、最終見開きページまで検索が完了した状態であるかを判定する。この「最終見開きページ」とは、ページ情報インデックスリスト705における「ページ構造体」の最終構造体のことである。情報処理装置104は、ループインデックスiとページ情報構造体総数706とを比較し、ループインデックスiの方が小さい場合、S903に進む。そうでない場合、最終ページまでの探索が完了しているので本実施形態においては、情報処理装置104は、図9の処理を終了する。なお、S902でNoと判定された位置に記載しているS918の矩形部分の処理は、後述する第5実施形態で説明する処理であり、本実施形態では、S918の矩形部分の処理は行わないものとする。同様に、S915の矩形部分での処理は、後述する第4実施形態で説明する処理であり、本実施形態では、S915の矩形部分の処理は行わないものとする。
S903において、情報処理装置104は、ループインデックスiが示すページが、現在の編集中のページであるかを判定する。図9の処理は、他のページのデータを用いたスナッピングであるため、編集中のページを除外するために行っている。具体的には、図7のページ情報インデックスリスト705の形式で格納されているページ情報構造体のポインタリストのi番目の示すページ情報構造体のポインタが、現在編集中のページ情報構造体の先頭アドレスと一致しているか判定する。一致していた場合、次の見開きページ(ページ構造体)へ進んでループを続けるためにS906へ進む。S906では、iをインクリメントしてS902に戻り、処理を続ける。一方、一致していない場合、ループインデックスiが示す見開きページ(ページ構造体)のオブジェクトに、スナッピング可能なオブジェクトがあれば、スナッピングを行うため、S910に進む。なお、S903において一致しない場合の処理として、図9では、S907の矩形部分の処理が示されているが、このS907の処理は、第2実施形態で説明する。本実施形態では、S907の処理はスキップして、S910に進むものとする。
S910にて、情報処理装置104は、フォトフレーム構造体へのアクセスに用いるループインデックスjを「0」で初期化する。フォトフレーム構造体とは、図10に示すフォトフレーム構造体であり、項目1001から1007を有する。図10では、見開きページを一つの台紙として扱い、その台紙内の各フォトフレーム(写真オブジェクト)の配置情報を、フォトフレーム構造体で現した例を示している。S910以降の処理は、処理対象となっている他のページである見開きページ内のフォトフレーム(写真オブジェクト)との比較を行う処理となる。このため、S910では、フォトフレーム構造体へのアクセス用いるループインデックスjの初期化処理を行っている。なお、ここでループインデックスjで特定されるフォトフレーム構造体は、ループインデックスiで特定されるページ情報構造体720が指し示すフォトフレームリストで特定されるものとなる。具体的には、図7のページ情報インデックスリスト705のi番目のページ情報構造体へのポインタが示す先の、ページ情報構造体のフォトフレームリスト725が示すフォトフレームリストを使用する。ループインデックスjを初期化した後、S911に進む。
S911で情報処理装置104は、現在、探索処理中のページのフォトフレーム全ての探索が完了したかを判定する。即ち、ループインデックスjが、探索処理中のページ情報構造体720のフォトフレーム数724より小さいかを判定する。ループインデックスjがフォトフレーム数724より小さい場合、ループインデックスjが示すフォトフレームを用いた処理が完了していないため、S912に進む。そうでない場合、ループインデックスiによって特定される探索処理中のページ内のフォトフレーム全ての処理が完了し、次の見開きページを処理対象とするため、S906に進んでiをインクリメントして、再び処理を繰り返す。
S912にて、情報処理装置104は、ループインデックスjが示しているフォトフレームがスナッピング対象として該当するかを判定する。即ち、他のページに配置済みの写真オブジェクトが、スナッピング対象である基準オブジェクトであるかを判定する。本実施形態では、現在のマウス位置が、ループインデックスiが示しているフォトフレームの矩形領域内に内包されている場合、そのフォトフレーム(写真オブジェクト)は、スナッピング対象である基準オブジェクトであると判定する。具体的には、S912において情報処理装置104は、ループインデックスiを利用して、図7のページ情報インデックスリスト705のうちの、探索中のページ情報構造体720にアクセスする。そして、そのページ情報構造体のフォトフレームリスト725から、ループインデックスjの示すフォトフレーム構造体にアクセスする。そして、そのフォトフレームの位置1001(ここでは、左上座標とする)と、フォトフレームのサイズ1002と、に基づくフォトフレーム矩形領域を取得する。次に情報処理装置104は、入力装置107から得られる現在のマウス位置が、取得したフォトフレーム矩形領域に内包されているかを判定する。情報処理装置104は、現在のマウス位置がフォトフレーム矩形領域外であると判定した場合は、フォトフレームにて比較を継続すべくS914へ進む。S914では、ループインデックスjをインクリメントして、次のフォトフレームでの処理が行われることになる。一方、現在のマウス位置がフォトフレーム矩形領域内であると判定した場合、S913に処理を進める。
S913で情報処理装置104は、ループインデックスjが示すフォトフレーム(写真オブジェクト)を基準オブジェクトとするスナッピング処理を行う。例えば、情報処理装置104は、ループインデックスjのフォトフレームの中心点を求め、ドラッグ中の編集対象オブジェクトの中心点を、ループインデックスjのフォトフレームの中心点に一致させる移動を行う。詳細には、S912で算出したループインデクスjが指すフォトフレーム矩形領域の中心座標を(Xm,Ym)とする。そして、図6(b)に示すドラッグ開始情報バッファ650のドラッグ開始オブジェクトのサイズ655(W)、656(H)を使い、以下の式で、ドラッグ中のオブジェクトの現在位置(X,Y)に設定する。
X = Xm - W/2
Y = Ym - H/2
これにより、編集中の見開きページ上でユーザが編集対象オブジェクトをドラッグ中に、マウスカーソルが参照中のページに既に配置されているフォトフレーム矩形領域に入ると、スナッピングが実行されることになる。即ち、参照中のフォトフレームの中心とドラッグ中の編集対象オブジェクトの中心とが一致するようにスナッピングされる。これにより、編集中の見開きページにオブジェクトが配置されていない状態であったとしても、既にオブジェクトを配置したページが他のページに存在していれば、その配置情報を使ったスナッピングが可能になる。なお、S913は、あくまでスナッピングを行う処理であり、ユーザがドロップしない限りは編集対象オブジェクトの位置は、確定していない状態である。ドロップ(ドラッグオフ)の処理は、この図9の処理を抜けた図5の処理の続きにおいて説明する。
また、上記の例では、編集対象オブジェクトの中心座標を、基準オブジェクトの中心座標に合わせるようにスナッピングを行う例を説明したが、これに限られない。上下左右のいずれかの端部を揃えるようにスナッピングを行ってもよい。また、回転角度を合わせるようにスナッピングを行ってもよい。
S913の処理が終わると、本実施形態では、図9のフローチャートの処理を終了し、図5の処理に戻る。なお、S913の処理の後に、S915の矩形部分の処理が示されているが、S915の矩形部分の処理は第4実施形態で説明する。本実施形態では、S915の処理は、スキップする。図9の処理が終わると、図5のS509に処理が進む。
S509ではドラッギングが中断されたかを判定する。本実施形態では、S509において情報処理装置104は、入力装置107のキーボードを操作してESCキーが入力されたかを判定する。情報処理装置104がESCの押下を検出した場合、S510に進み、そうでない場合、S511に進む。
S510において、情報処理装置104は、編集対象オブジェクトを、ドラッグ開始位置に戻す処理を行う。例えば、情報処理装置104は、図6(b)のドラッグ開始情報バッファ650からドラッグ開始時のオブジェクト位置653~654とオブジェクトサイズ655~656を取得する。そして、そのドラッグ開始時の位置とサイズとを、編集対象オブジェクトへのポインタ657が示す編集対象オブジェクトに反映する。これによりドラッグしていたオブジェクトをドラッグ前の状態に戻してドラッギングを終了する。なお、編集対象オブジェクトが写真リスト領域206のオブジェクトの場合、ドラッグ開始情報バッファの情報をクリアすればよい。レイアウト編集領域214に、まだ、オブジェクトが配置されていないからである。編集対象オブジェクトがレイアウト編集領域214に既に配置されているオブジェクトである場合、次のように反映すればよい。即ち、編集対象オブジェクトへのポインタ657が示すドラッグ対象オブジェクトの位置1001とサイズ1002とに、ドラッグ開始時の位置とサイズとを反映すればよい。なお、情報処理装置104は、S510の処理が終わると、図5に示したスナッピング処理を終了する。
S511で情報処理装置104は、ドラッグOffになったかを判定する。即ち、編集対象オブジェクトがドロップされたかを判定する。情報処理装置104は、ユーザがマウスボタンを離したかを示す情報に基づいて、ドラッグが終了したかを判定する。情報処理装置104は、ユーザがマウスボタンを離したと判定した場合、S512へ進む。一方、マウスボタン707を離していないと判定した場合は、S503に戻り、再び処理を繰り返す。なお、ドラッグOffでないと判定した後にS513の点線矩形で示されているS514~S515の処理は、第5実施形態で説明する。本実施形態では、S513の点線矩形で示されている処理は、スキップするものとする。
S512において情報処理装置104は、編集対象オブジェクトを、現在の移動中のオブジェクトの状態で確定し、ドラッグを終了する。例えば、情報処理装置104は、S506の処理にてスナッピングガイドラインを表示している場合、そのスナッピングガイドラインを非表示とする。また、情報処理装置104はドラッグ開始情報バッファ650の編集対象オブジェクトのポインタ657を参照する。そして、そのポインタが編集中ページのページ情報構造体上を指している場合は、ページ内のオブジェクトの移動処理であったと判定し、既に移動操作は完了しているので、処理を完了する。一方、編集対象オブジェクトのポインタ657が、編集中ページのページ情報構造体上を指していない場合は、その編集対象オブジェクトは、編集領域外から移動させてきたオブジェクトである。このため、編集中ページのページ情報構造体に、編集対象オブジェクトを追加する処理を行う。具体的には、編集中ページのフォトフレームリスト(例えば図10に示すリスト)に、空のフレームを追加する。そして、その追加したフレームに編集対象オブジェクトのポインタ657が示すオブジェクトの内容をコピーすることで、フォトフレームリストに編集対象オブジェクトを追加する。例えば、写真リスト領域206からドラッグしたオブジェクトの場合、このようにして、フォトフレームリストに追加されることになる。
以上説明したように、本実施形態によれば、編集処理における更なる機能向上を実現することができる。具体的には、スナッピングを行う際に、編集対象以外のページに配置済みのオブジェクトの情報を用いてスナッピングを行う。例えば、編集対象以外のページに配置済みのオブジェクトと同じ座標位置に、編集対象オブジェクトの位置を合わせることが可能となる。このように、編集対象のページにオブジェクトが配置されていないような状態においても、本実施形態のスナッピング機能を用いることで、所望の位置に編集対象オブジェクトを合わせることができる。このため、例えばユーザが、既存ページと同じ座標位置に新規に写真を配置する作業を、容易にかつ正確に行うことができる。また、統一感のあるフォトブックを作成することも可能となる。
<<第2実施形態>>
本実施形態でも、第1実施形態と同様に、編集対象以外のページに配置済みのオブジェクトの情報を用いて編集対象のページにおけるスナッピングを行う例を説明する。本実施形態では、既存ページのオブジェクト配置から推定される上下左右の余白、および、綴じ部分からの余白に合わせてスナッピングさせる処理を説明する。各見開きページにおいて余白を統一してレイアウトを行うことで、デザイン性を向上させることができる。
本実施形態の基本的な構成および処理の流れは、第1実施形態と同様であり、以下、相違点を中心に説明をする。本実施形態では、図7のページ情報構造体720のスナッピング情報722を活用した処理を行う。
図11は、スナッピングポイント保持バッファの例を示す図である。ページ情報構造体720のスナッピング情報722には、図11のスナッピングポイント保持バッファと同じ形式のデータが記憶されているものとする。図11のスナッピングポイント保持バッファは、左余白、右余白、上余白、下余白、および綴じ余白(左および右)の情報を記憶している。つまり、本実施形態では、ページ情報構造体(つまり、見開きページごとの情報)の中に、その見開きページにおける余白部分のスナッピングポイントの情報が記憶されている。本実施形態では、このスナッピング情報722を用いた処理を行うものである。
本実施形態では、図5のフローチャートにおいて、S502のスナッピングポイント生成処理を追加する。また、S505およびS506の編集中ページのスナッピング処理に、ページデザインにまつわるスナッピングのための工程を追加する。また、S508の他ページのデータを活用したスナッピング処理に対応する図9の処理において、S907の処理を追加する。以下、詳細に説明する。
S502で、情報処理装置104は、スナッピングポイント生成処理を行う。本実施形態の情報処理装置104は、図11に示すようなスナッピングポイント保持バッファの形式で、各見開きページにおけるスナッピングポイントデータを生成し保持する。
図12は、レイアウトの一例を示す図である。図11および図12を用いて、図11に示すスナッピングポイントデータの例を説明する。本実施形態では、編集中ページを構成している全てのオブジェクトを走査して、図11に示す形態のスナッピングポイント保持バッファのデータが作成される。なお、図11に示すスナッピングポイントは、レイアウト編集アプリケーション112における座標位置がそれぞれ示されたデータである。図11のスナッピングポイント保持バッファの一つとして「ページ余白に関するスナッピングポイント」を例にして、概要を説明する。
図12は、フォトブックの本身(カバーおよびその前後の遊び紙を除いた見開きのページ)のレイアウト例である。図12では、ページと配置済みの写真オブジェクトとの関係から、ページ余白(左右)のスナッピングポイントを求めて示している。ページ余白のスナッピングとは、用紙端から余白距離分内側の位置でスナッピングすることである。即ち、用紙端から余白距離分内側の位置が、スナッピングポイントとなる。
用紙端からの余白には、上下余白と、左右余白とがある。左右余白は、用紙左右端から、内部に配置されている写真オブジェクトまでの最短距離を示す。図12の見開きページを構成している写真のうち、最も用紙左右端に近い写真オブジェクト1201の左端と用紙端との距離1203が、最短距離になる。この最短距離を用紙の左右端部の位置から離した位置が、それぞれ図11の左余白1101、右余白1104の座標位置のデータとなる。ここで、図12の見開きページのうち、右側のページを編集する際に、この左端と用紙端との距離1203に統一して写真を配置することで、左右のページ端からの余白が揃ったレイアウトのフォトブックを作ることができる。図12は、写真オブジェクト1202をドラッグしている状態であり、上記のようにして自動算出された距離1203だけ、右側余白から離れた位置に写真オブジェクト1202がスナッピングされた様子を表している。
図13は、S502のスナッピングポイント生成処理の詳細を示すフローチャートである。なお、図5のフローチャートにおけるS502のスナッピングポイント生成処理は、編集処理中の見開きページにおけるスナッピングポイントの生成処理である。他の見開きページにおけるスナッピングポイントの生成処理は、当該見開きページの編集処理においてそれぞれ生成が行われているものである。
図13の処理を概略的に説明すると、各余白値を、初期状態から個々のオブジェクトの位置を利用して次々に最適値に書き換えていくループを繰り返す処理である。S1301で、情報処理装置104は、RAM110上に図6(a)に示す間隔保持バッファ600の領域を確保し、値を初期化する。具体的には、情報処理装置104は、左右余白501と、綴じ余白504とに、用紙幅/4の値を初期値として保持する。また、情報処理装置104は、上下余白502に用紙高/2の値を初期値として保持する。
S1302で、情報処理装置104は、フォトフレーム探索用のループインデックスiの値を0とする。情報処理装置104は、現在編集中の見開きページ上に配置されている全フォトフレームオブジェクトに対して後述する処理を行うため、ループインデックスiの値を0とすることで初期化を行っている。
S1303では、情報処理装置104は、現在編集中の見開きページ内のフォトフレーム全てを対象とした処理が完了したかを判定する。即ち、情報処理装置104は、ループインデックスiがページ内のフォトフレームオブジェクト数よりも少ないかを判定し、少ないと判定した場合はS1304へ進む。一方、情報処理装置104は、ループインデックスiがページ内のフォトフレームオブジェクト数以上と判定した場合は、S1309へ進む。
情報処理装置104は、S1303からS1308のステップにより、ページ内のオブジェクトを走査し、これらの処理を繰り返すことで全オブジェクトを走査対象とした処理を行っている。S1304で、情報処理装置104は、ループインデックスiが示す処理対象のオブジェクトが、編集対象のオブジェクト(即ち、現在、ドラッグされているオブジェクト)かを判定する。処理対象のオブジェクトが、ドラッグ対象のオブジェクトと判断した場合は余白値抽出対象から除外すべく、S1305からS1307の処理をスキップして、S1308へ進む。そうでない場合、S1305に進む。
S1305で、情報処理装置104は、左右余白抽出処理を行う。左右余白抽出処理は、ページの左右端に近いオブジェクトの距離を抽出する処理である。つまり、ループを繰り返すことで、全オブジェクトの中から最もページの左右端に近いオブジェクトの距離が抽出される。そして、その後、間隔保持バッファ600の左右余白データ601に反映されることになる。S1306で、情報処理装置104は、上下余白抽出処理を行う。上下余白抽出処理は、前述した左右余白抽出処理と同様の処理であり、上下余白データ602を対象に処理を行うものである。S1307で、情報処理装置104は、綴じ余白抽出処理を行う。綴じ余白抽出処理は、前述した左右余白抽出処理と同様の処理であり、ページ中央の綴じを対象とした処理であり、綴じ余白データ604を対象に処理を行うものである。なお、S1305からS1307の処理の詳細は、特許文献2にも記載されており、参照により、本明細書に組み込まれる。S1308において、情報処理装置104は、ループインデックスiの値をインクリメントし、S1303の処理に戻る。
編集中のページ内の全てのオブジェクトに対するS1304~S1307の処理が完了すると、S1309に進む。S1309で、情報処理装置104は、図6(a)の間隔保持バッファ600の左右余白データ601と上下余白データ602とを比較し、より小さい値を最小余白として最小余白データ603にセットする。上述した処理により、スナッピングポイント生成に必要な余白値が算出され、図6(a)の間隔保持バッファ600上に記憶された状態となる。情報処理装置104は、この間隔保持バッファ600の値を用いて次に説明するS1310~S1313の処理を行うことで、図11のスナッピングポイント保持バッファにスナッピングポイントの値(座標)をセットすることになる。以下、具体的に説明する。
S1310で、情報処理装置104は、図6(a)の間隔保持バッファ600の左右余白データ601を、図11のスナッピングポイント保持バッファの左余白1101にセットする。S1311で、情報処理装置104は、間隔保持バッファ600の上下余白データ602を、上余白1105にセットする。S1312で、情報処理装置104は、用紙右端のX座標値から、間隔保持バッファの左右余白データ601を引いた値を、右余白1104にセットする。S1313で、情報処理装置104は、用紙下端のY座標値から、間隔保持バッファ600の上下余白データ602を引いた値を下余白1106にセットする。S1314で、情報処理装置は、綴じ余白スナップポイント更新処理を行う。例えば、見開きページ中心にオブジェクトが配置されているような場合には、綴じ余白でのスナッピングが行われないような値に更新される。そうでない場合、綴じ余白データ604を用いて綴じ余白(左)1102、綴じ余白(右)に、適宜値がセットされる。S1309からS1313の処理の詳細も、特許文献2にも記載されており、参照により、本明細書に組み込まれる。
図14は、左右余白抽出処理と上下余白抽出処理のフローチャートである。図14(a)は、S1305における左右余白抽出処理に対応し、図14(b)は、S1306における上下余白抽出処理に対応する。
図14(a)の例で簡単に説明する。S1401で、情報処理装置104は、現在のオブジェクトの左端から用紙左端までの距離が、左右余白データ601より小さいかを判定する。現在のオブジェクトの左端から用紙左端までの距離が、左右余白データ601より小さい場合、S1402へ進み、そうでない場合、S1403に進む。S1402で、情報処理装置104は、左右余白データ601を現在のオブジェクトの左端から用紙左端までの距離で上書きする。そして、S1403に進む。
S1403で、情報処理装置104は、オブジェクト右端から用紙右端までの距離が左右余白データ601より小さいかを判定する。オブジェクト右端から用紙右端までの距離が左右余白データ601より小さいと判定した場合、S1404に進み、そうでない場合、図14(a)の処理を終了する。S1404で、情報処理装置104は、左右余白データ601を現在のオブジェクトの右端から用紙右端までの距離で上書きする。そして、図14(a)の処理を終了する。
図14(b)の処理も、図14(a)の処理と同様の処理である。S1405で、情報処理装置104は、現在のオブジェクトの上端から用紙上端までの距離が、上下余白データ602より小さいかを判定する。現在のオブジェクトの上端から用紙上端までの距離が、上下余白データ602より小さい場合、S1406へ進み、そうでない場合、S1407に進む。S1406で、情報処理装置104は、上下余白データ602を現在のオブジェクトの上端から用紙上端までの距離で上書きする。そして、S1407に進む。
S1407で、情報処理装置104は、オブジェクト下端から用紙下端までの距離が上下余白データ602より小さいかを判定する。オブジェクト下端から用紙下端までの距離が上下余白データ602より小さいと判定した場合、S1408に進み、そうでない場合、図14(b)の処理を終了する。S1408で、情報処理装置104は、上下余白データ602を現在のオブジェクトの下端から用紙下端までの距離で上書きする。そして、図14(b)の処理を終了する。
以上の説明が、S502におけるスナッピングポイント生成処理の説明である。なお、図5のフローチャートは、編集処理中の見開きページにおいて、オブジェクトをドラッグした際に開始される処理である。ドラッグ以外においても、オブジェクトが編集中の見開きページに配置されたり、位置またはサイズが変更されたりすることがある。このため、各見開きページでの編集が完了した際に、図11のスナッピングポイント保持バッファの値が、その確定した内容で更新される。
図15は、ページ毎の編集が完了した際に行われるスナッピングポイント生成処理を示すフローチャートである。図15のフローチャートは、図13に示すフローチャートのうち、S1304のドラッグ対象オブジェクトか否かの判定を削除した処理となる。即ち、S1501~S1503と、S1301~S1303との処理は同じである。また、S1504~S1513の処理は、S1305~S1312の処理と、それぞれ同じである。このように、編集中のページにおいては、図13の処理においてスナッピングポイントの生成が行われ、編集済みのページにおいては、図15の処理においてスナッピングポイントの生成が既に行われている状態になっている。
このようにして求められた図11に示すスナッピングポイント保持バッファの内容が、図7のページ情報構造体720におけるスナッピング情報722に記憶されている。本実施形態では、このスナッピング情報722も利用した処理が行われる。以下、具体的に説明する。
本実施形態におけるS505のスナッピングポイント探索処理を説明する。本実施形態では、S505の処理において、第1実施形態で説明した処理に加えて、ページデザインに関するスナッピングポイントの探索として次の処理も行う。S505で、情報処理装置104は、S502で生成したスナッピングポイント(図11)と、S504で算出した編集対象オブジェクトの現在位置とを比較し、対応するスナッピングポイントがあるかを判定する。オブジェクトの現在位置を求め方は、第1実施形態で説明した通りである。即ち、編集対象オブジェクトのポインタ657の指すオブジェクトデータを参照すればよい。オブジェクトがフォトフレームである場合を例にすれば、オブジェクトデータは、図10のフォトフレーム構造体のようなデータ形式となっている。
S505において情報処理装置104は、オブジェクトの位置1001のX座標と、スナッピングポイント保持バッファの左余白1101とを比較し、任意の規定距離より近いか判定する。近い場合はS506へ進む。一方、近くなければ、綴じ余白(左)1102と比較する。同様にオブジェクトの位置1001のX座標と、「オブジェクトの位置1001のX座標+サイズ1002の幅」で求まるオブジェクトの右端のX座標、スナッピングポイント保持バッファの綴じ余白(右)1103、および右余白1104とを順に比較する。情報処理装置104は、いずれかで任意の規定距離よりも近いと判定した場合、S506へ進む。
また、S505において情報処理装置104は、オブジェクトの位置1001のY座標と、スナッピングポイント保持バッファの上余白1105、下余白1106を順に比較する。そして、情報処理装置104は、いずれかで任意の規定距離よりも近いと判定した場合は、S506へ進む。また、S505において情報処理装置104は、「オブジェクトの位置1001のY座標+サイズ1002の高さ」で求まるオブジェクトの下端と、下余白1106とを比較する。情報処理装置は、規定距離よりも近いと判定した場合は、S506へ進む。
一方、S505において情報処理装置104は、スナッピングポイント保持バッファの全てのスナッピングポイント(1101~1106)と比較して、規定距離よりも近いものがないと判定した場合、S507に進む。即ち、編集中の見開きページ内のオブジェクトから算出したスナッピングポイントの中に、スナッピング対象が見つからなかったので、他のページのオブジェクト配置に基づくスナッピングを行うべくS507へ進む。
以下では、まず、S505のスナッピングポイント探索にてスナッピングポイントが発見されたときのS506の処理を説明する。即ち、ページ内に配置済みのオブジェクトを用いた処理を説明する。
S506で情報処理装置104は、スナッピングポイントにオブジェクトを移動する。情報処理装置104は、編集対象オブジェクトへのポインタ657が示すオブジェクトの位置を、スナッピングポイントにそろえる。具体的には、一致判定されたスナッピングポジションごとに次のように求める。左余白1101または綴じ余白(左)1102に一致した場合、オブジェクトのX座標に反映させて、ドラッグ中オブジェクトの左端を一致したスナッピングポイントに合わせるように移動する。綴じ余白(右)1103または右余白1104に一致した場合は、「一致したスナッピングポイント-サイズ1002の幅」をオブジェクトのX座標に反映させて、ドラッグ中オブジェクトの右端を一致したスナッピングポイントに合わせるように移動する。上余白1105に一致した場合には、オブジェクトのY座標に反映させて、ドラッグ中オブジェクトの上端を一致したスナッピングポイントに合わせるように移動する。下余白1106に一致した場合については、オブジェクト高さを減じた値をオブジェクトのY座標に反映させて、ドラッグ中オブジェクトの下端を一致したスナッピングポイントに合わせるように移動する。さらに、情報処理装置104は、反映させたスナッピングポイントに応じて、表示装置上にスナッピングさせた対象をユーザに認識させるためのスナッピングガイドラインを表示する。
前述したように、図12は、スナッピングガイドラインの表示の一例を示している。図12は、左余白または右余白にスナッピングしたときにスナッピングガイドラインを表示した一例である。図12は、写真オブジェクト1201が最も左右端に近い位置で配置されている。図12では、写真オブジェクト1202をドラッグして、左右余白分の位置に右端が近づくことでスナッピングしている一例が示されている。また、図12では、距離1203を示す矢印アイコンと点線1204とを画面上に表示している。これにより、ドラッグ中の写真オブジェクト1202が、左右余白にスナッピングされたことをユーザに認識させることができる。尚、図12では、左右両側のスナッピングラインの点線と矢印とをユーザに提示している。なお、提示するための線および矢印は、例であり、ユーザが認識できればどのような形式でもよい。
次に、S508の他ページ活用スナッピング処理を説明する。本実施形態では、前述したように、図9の処理においてS907の処理が追加されることになる。S907の処理には、S904とS905との処理が含まれる。
S904で、情報処理装置104は、ページ関連スナッピングポイントに合致するか判定する。具体的には、情報処理装置104は、図7のページ情報インデックスリスト705から、ループインデックスi番目のポインタの示すページ情報構造体720のスナッピング情報722を参照する。そして、そのスナッピング情報722と、S504で算出した現在移動中のオブジェクトの位置情報とを比較することで、移動中のオブジェクトがスナッピングポイントに位置しているかを判定する。前述したように、スナッピング情報722には当該見開きページの編集完了時のスナッピングポイントデータが、図11のスナッピング情報保持バッファの形式で格納されている。
ここで、例えばフォトブックにおいては、表紙・裏表紙を除けば各見開きページのサイズは同一であり、編集座標領域が一致する。また、綴じ部の座標位置も一致している。このため、編集中のページ以外の他のページのスナッピング情報722に保持されている各種余白のスナッピングのデータを参照することで、その見開きページと同一座標の余白スナッピングを再現することができる。つまり、スナッピング情報722が他の見開きページのものを参照していること以外は、前述したS505のスナッピングポイント領域判定処理と同じ処理である。S904の領域判定により、情報処理装置104がスナッピング情報722の中に合致するものを発見した場合、S905に進み、そうでない場合、S910に進む。S910以降の処理は、第1実施形態で説明した通りである。
S905で、情報処理装置104は、発見したスナッピングポイントに合わせてドラッグ中の編集対象オブジェクトを移動する。情報処理装置104は、編集対象オブジェクトへのポインタ657が示す編集対象オブジェクトの位置を、スナッピングポイントに揃えることでスナッピングさせる。このS905の処理は、S506で説明した処理と同様であるため、説明を省略する。
以上、説明したように、本実施形態の処理によれば、編集中の見開きページにオブジェクトが配置されていない状態であったとしても、オブジェクトを配置済みの他の見開きページのデータを参照して、スナッピングを行うことができる。これにより、左右余白、綴じ余白など、既存ページとの余白量の統一が可能となり、統一感のあるレイアウトを実現することができる。
<<第3実施形態>>
一般的に行われている編集中ページ内のオブジェクトに対するスナッピングは、オブジェクトを等間隔に並べたり、他オブジェクトと上端の位置を揃えたりして整列させるために行われている。ここで、第1実施形態で説明したように、他のページに配置済みのオブジェクトとスナッピングさせる場合には、ユーザとしては、既に編集済みの他のページのレイアウトを活用したいというケースが多い。このため、本実施形態では、編集対象のオブジェクトの位置に限られず、その他、サイズおよび透明度フィルタといった各種の属性をも、スナッピング対象と一致させる処理を行う。各種の属性には、回転角度およびセピアなどの各種の画像効果フィルタなどが含まれる。
これにより、フォトブックであれば、作成済みページと同じ場所に、同一のレイアウト(位置、サイズ、およびフィルタなど)で所望の写真を配置することができる。このため、卒業アルバムのようなクラスごとページにおいて、集合写真の位置、サイズ、およびフィルタを全ページで同じにする、といったフォトブックを容易に作成できる。また、スナッピングエリアの判定も他ページに配置されているオブジェクトの矩形領域内であるか程度の判定の方が、X軸またはY軸上のスナッピングラインからの距離で判定が数ドットの範囲内であるかといったミクロな判定よりも好適である。
本実施形態の構成および処理は、基本的に第1実施形態で説明したものと同様である。以下、相違点を中心に説明をする。本実施形態では、S508の他ページ活用スナッピングの詳細処理である図9における、S913の処理が異なる。
S913で、情報処理装置104は、S912で発見した他ページのスナッピング対象の基準オブジェクトであるフォトフレームオブジェクトのレイアウトの情報を取得する。即ち、図10の位置1001、サイズ1002、回転角度1003、不透明度1005の属性を取得する。そして、これらの情報を、編集対象オブジェクトの属性にコピーする。これにより編集対象オブジェクトのファイルパス1004が示す写真データはオリジナルのデータのままで、編集対象オブジェクトは、スナッピング対象として発見した他ページの基準オブジェクトと同じ場所に、同じレイアウトでスナッピングされることになる。また、その状態でドロップをすることで、他ページの基準オブジェクトと同じ属性を持つオブジェクトとして編集対象オブジェクトの配置が行われることになる。
以上の通り、本実施形態では、他ページの配置済みのオブジェクトと、位置、サイズ、回転角度、およびフィルタなどの属性を合わせた形でスナッピングすることができる。尚、本実施形態は、第2実施形態で説明した処理と組み合わせてもよい。
<<第4実施形態>>
本実施形態では、スナッピング処理に際して参照している見開きページを、ユーザに認識させる形態を説明する。前述した実施形態では、編集済みのページが増えていくと、ユーザは、どのページに一致してスナッピングをしているのかが、わからない場合がある。そこで、本実施形態では、スナッピングの参照元の見開きページをユーザに通知し、認識させる処理を行う。具体的には、スナッピングの参照元の見開きページのガイド表示を行う。
図16は、スナップ対象ページのガイド表示の一例を表す図である。第1実施形態でも説明したように、ページ一覧領域209においては、レイアウト編集領域214において現在編集中のページを、グレーの矩形強調表示で示している。ユーザは、この強調表示を見て、現在編集中の見開きページを認識することができる。図16では、3~4ページの見開きページが、現在の編集中の見開きページである。ユーザは、写真リスト領域206で選択した写真オブジェクトをこの見開きページに追加するためにマウスカーソル1601を操作してドラッグ移動中である。そして、第1実施形態などで説明したように、他のページの情報を利用したスナッピングが行われた状態を示している。なお、図16の例では、1~2ページの見開きページで配置済みのオブジェクトを利用してスナッピングされた状態であるものとする。
本実施形態では、図16に示すように、ページ一覧領域209の1~2ページの見開きページサムネイル部分が、点線矩形で表示され、強調表示1602となっている。これにより、ユーザは、見開きページを編集中に、どの見開きページを用いたスナッピングが行われているのか容易に確認することができる。本実施形態の基本的な構成および処理は、第1実施形態で説明した例と同様であり、以下では、相違点を中心に説明をする。尚、図16の他の部分については、以降の実施形態で参照して説明することとする。
本実施形態では、図9の他ページ活用スナッピング処理において、S915の矩形部分の処理を追加する。S915の処理は、S916およびS917の処理を含む。S905またはS913の処理が終了すると、S916の処理に進む。即ち、編集中の見開きページ以外の他の見開きページを用いたスナッピングが行われると、S916の処理に進む。
S916で、情報処理装置104は、ループインデックスiの値が示すページのサムネイルの矩形強調表示フラグをOnにし、それ以外のページのサムネイルの矩形強調表示フラグをOffにする。本実施形態における情報処理装置104は、強調表示処理中であることを判別できるよう、RAM110に図6(b)の形式で格納しているドラッグ開始情報バッファ650内の強調表示中ページインデックス659に、iの値をコピーする。情報処理装置104では、この強調表示中ページインデックス659を参照して、レイアウト変種画面のページ一覧領域209において、当該ページのサムネイル画像に強調表示を行う。
S917は、全ページを探索した結果、スナッピングが行われない場合の処理であり、具体的には、S902でNoと判定された場合の処理である。S917で、情報処理装置104は、全ページのサムネイルの矩形強調表示フラグをOffにする。即ち、強調表示中ページインデックス659をクリアにする。情報処理装置104では、強調表示中ページインデックス659に有効な情報が入っていない場合、レイアウト変種画面のページ一覧領域209における強調表示は行われない。
以上説明したように、本実施形態では、他ページの情報を用いてスナッピングが行われた場合、その参照元の見開きページを強調する表示制御をする。これにより、ユーザは、どの見開きページを参照して、スナッピングが行われているのかを容易に確認することができる。なお、第2実施形態または第3実施形態で説明した処理と組み合わせた処理としてもよい。
<<第5実施形態>>
これまで説明した実施形態における処理において、編集済みのページが増えると、スナッピングの参照元となり得るページが増えることになる。この結果、一致させたいページではないページのスナッピングポイントに先に一致してしまい、所望のページのスナッピングポイントに一致しないことが起こり得る。前述した処理を行うと、スナッピングエリアの座標が重なっている部分があると、前のページの方が先に一致することになるためである。ここで、一般的には、スナッピングさせたいページは、編集中のページの近傍に存在することが多い。このため、図5に示した他ページ活用スナッピングの探索インデックスを、編集中のページの直前ページから先頭ページに向けて逆順に探索するように操作するという手法も考えられる。しかしながら、実際には、離れた位置にあるページを参照元にしたいということも起こり得る。
そこで、本実施形態では、ユーザが所望するページを、参照元とするスナッピングを行う例を説明する。まずUI(ユーザインタフェース)上の実現形態を、図16を用いて説明する。他ページ活用スナッピングのスナッピング対象を発見した場合、第4実施形態で説明したように、参照元ページの強調表示1602を行う。そして、さらに、電光掲示板風のメッセージボード1606に所定のメッセージを表示する。図16の例では、「下矢印キー押下にて参照元ページが切り替わります」というメッセージを表示している。ユーザは、強調表示1602がされたページが、所望のページでなかった場合には、下矢印キーを押下することで、他のページを対象とした他ページ活用スナッピングが行わることになる。そして、所望のページのオブジェクトに対するスナッピングが得られた時点でドラッグをOffにすることで、ユーザが所望するオブジェクトスナッピングが実施されたオブジェクト配置が行われる。なお、ここでは「下矢印キー」を例に挙げたが、「Shiftキー」または「Ctrlキー」であってもよいし、所定の操作に対応しているものであればよい。
本実施形態では、第4実施形態で説明した例に加えて、図5のS513の点線矩形の処理を追加し、さらに、図9のS918の点線矩形の処理を追加した。S513の点線矩形の処理は、S514およびS515を含む。S918の点線矩形の処理は、S919およびS920を含む。
まず、図5において追加した処理を説明する。S511でドラッグOffでないと判定した場合の処理としてS513が示すS514およびS515が追加されている。S514で、情報処理装置104は、オブジェクトのドラッグ中に所定のキー(本例では、「下矢印」キー)がユーザによって押されたかを判定する。所定のキーが押された場合、S515へ進み、そうでない場合、S503へ進む。
S515で、情報処理装置104は、探索ページインクリメント処理を行う。具体的には、情報処理装置104は、他ページ探索開始インデックス658に、図9の探索ループ用インデックスiに1を加えた値を代入する。これにより、次にS508の他ページ活用スナッピングの処理に入ると、S901の初期化処理により、他ページ探索開始インデックス658の値が反映される。即ち、スナッピングを参照元のページの次のページから探索が開始されることになる。
なお、この処理を繰り返すと、徐々に最終ページに近づいて、最後までマッチング対象が見つからない場合が起こり得る。このため、図9の処理において、S918の処理を追加している。即ち、他ページ活用スナッピングの処理において、最終ページまで探索しても基準オブジェクトを発見しない場合、つまり、S902の最終ページ判定に合致して処理を抜けた位置に、S918処理を追加する。
図9のS918は、最終ページまで探索したら先頭ページに戻すための処理である。S919で、情報処理装置104は、ループインデックスiの初期化に用いた初期値が2より大きいか判定する。情報処理装置104は、RAM110上に格納されているドラッグ開始情報バッファの他ページ探索開始インデックス658に、初期化に用いる値を保持管理している。情報処理装置104は、他ページ探索開始インデックス658の値を確認し、値が2よりも大きいか判定する。値が2よりも大きいと判断した場合は、S920へ進み、そうでない場合は、S917の処理に進む、または、図9の処理を終了する。
S920で情報処理装置は、他ページ探索開始インデックス658の値を1に設定する。そして、S901の処理に戻る。これにより、情報処理装置104は、先頭ページからの探索状態に戻してからS901へ進むことになり、先頭ページに戻って他ページを活用するオブジェクトの探索が続けられることとなる。
以上説明したように、本実施形態によれば、スナッピングの参照元として検出されるページが複数ある場合において、ユーザは、所定の操作を行うことで、参照元となるページを適宜切り替えることができる。このため、任意のページを参照元とするオブジェクトスナッピングを容易に実現することができる。
<<第6実施形態>>
本実施形態では、他ページ活用スナッピングを行った場合、スナッピング対象となる参照元のページを固定化する例を説明する。ユーザとしては、他ページ活用スナッピングを行うような場合においては、その参照元のページとレイアウトを揃えたいと要望するケースが多い。換言すれば、他ページ活用スナッピングを行った場合には、そのスナッピングに用いた参照元のページ、または、現在編集中のページ内のオブジェクトにスナッピングをする以外は、操作の妨げとなり得る。そこで、本実施形態では、他ページ活用スナッピングを行った場合、その参照元となるページを固定して保持する例を説明する。以下、第1実施形態と異なる点を中心に説明する。
本実施形態では、情報処理装置104のRAM110に格納している図7のページ情報構造体720に、参照ページポインタ723の保持場所を設ける。参照ページポインタ723の初期値には、情報処理装置104が領域確保したときに、NULLがセットされる。参照ページポインタ723には、このページ情報構造体720に対応する見開きページの編集操作において、初めて他ページ活用スナッピングの結果を利用したときに参照したページのポインタがセットされる。参照ページのポインタがセットされた後は、この設定値を基に処理が行われることになる。以下、具体的に説明する。
まず、他ページ活用スナッピングを行ったときに、参照ページポインタ723をセットする処理を説明する。図5において、S512において、ドラッグOff時に現在の移動中オブジェクトの位置を確定する際に、情報処理装置104が、参照ページポインタ723を次のようにセットする。まず、情報処理装置104が参照ページポインタ723の値をチェックする。そして、1以上の値がセットされているか、即ち、現在の編集中のページにおける最初の他ページ活用スナッピングが行われているかを判定する。参照ページポインタ723の値が、1以上の値がセットされていれば、既に他ページ活用スナッピングが行われた状態であるので、その参照元のページを維持する。即ち、この場合、参照ページポインタ723を変更しない。
一方、参照ページポインタ723が、NULLであれば、他ページ活用スナッピングを行った際の参照元のページのポインタを、参照ページポインタ723にコピーする。具体的には、図7に示すページ情報インデックスリスト705の先頭のポインタ712から、強調表示中ページインデックス659分をオフセットしたデータを、参照ページポインタ723にコピーする。参照ページポインタを、インデックスでなくページ情報構造体のポインタ値にしている理由は、レイアウト編集アプリケーションにおいて、ページ順序の入れ替え等は頻繁に行われるからである。ポインタで管理することで、ページ入れ替え等でページインデックスリストが書き換わっても最初のスナッピング時に参照したページ情報に確実にたどり着くことができる。
さらに、S508の他ページ活用スナッピング処理においては、参照ページポインタ723を確認し、1以上の値がセットされていればページ探索ループを回さず、参照ページポインタ723の指すページのみ処理を行う。具体的には、参照ページポインタ723を確認し、1以上の値がセットされていれば、S508の編集他ページ活用スナッピングの処理として、図17に示す処理を行う。一方、参照ページポインタ723に、1以上の値がセットされていなければ、図9で説明した処理を行う。
図17は、参照ページポインタ723が指すページのみを処理対象とした他ページ活用スナッピングの処理を示すフローチャートである。図17の処理は、図9の処理から、全ページを走査するロジックを取り除いた図となる。
S1701の矩形部分内の処理は、S907と同じである。ここでは、情報処理装置104は、参照ページポインタ723の示す、見開きページのページ情報構造体のスナッピング情報722を用いた処理が行われる。処理の詳細は、S907で説明した例と同様である。S1702でページ関連スナッピングポイントに合致し、S1703でスナッピングが終了するとS1704に進む。S1704では、ページの強調表示処理が行われる。この処理は、S915と同様の処理である。
その後のS1710からS1714の処理は、S910からS914の処理と同様の処理である。ここで参照するフォトフレームリストは、参照ページポインタ723にて参照されているページ構造体のフォトフレームリストが用いられる。S1511で全てのフォトフレームの探索が終了したと判定した場合、即ち、ループインデックスjがフォトフレーム数以上の場合、S1705に進む。S1705では、強調表示をOffにする。S1705は、S917と同じ処理である。
以上説明したように、本実施形態では、参照元の見開きページが確定している場合、他ページ活用スナッピングを行う際には、当該確定した見開きページを参照元として固定して処理を行う。これにより、ユーザの利便性を向上させることができる。また、本実施形態で説明したように、スナッピング処理の参照元の見開きページをガイド表示することで、どの見開きページに固定してスナッピングが行われているのかをユーザが容易に確認することができる。
<<第7実施形態>>
本実施形態は、他ページ活用スナッピングを行う場合において、更なる利便性を向上させる例を説明する。ユーザは、オブジェクトを配置済みの既存のページのレイアウトと全く同じようにオブジェクトを配置することを望む場合がある。この場合、先に説明した実施形態では、参照元の見開きページでオブジェクトが配置されている領域内に、編集対象オブジェクトをドラッグ移動させる必要がある。しかしながら、他ページ活用スナッピングを行う場合、典型的な例としては、編集中の見開きページ(レイアウト編集領域214)には、何も配置されていない状態となっている。このため、見えていないページを想像しながらオブジェクトを移動させることになるため、ユーザは、移動先を適切に把握できない場合がある。本実施形態では、スナッピング対象となる他ページのオブジェクトが配置されている領域を、レイアウト編集領域214に可視化する例を説明する。
図16を用いて本実施形態のUIの形態を説明する。図16では、ページ一覧領域209に、スナッピング対象ページのサムネイルの強調表示1602がされている。この図16は、マウスカーソル1601で示す位置に、写真オブジェクトを配置しようとドラッグしているときに、他ページ活用スナッピングによって、1~2ページの見開きページのオブジェクトの一つにスナッピングが行われた状態である。本実施形態では、スナッピング対象ページのサムネイルの強調表示1602に加えて、参照元ページの全フォトフレームオブジェクトの外形1603を点線矩形で表示する。これにより、ユーザがページレイアウトを認識しやすくなる。
さらに第6実施形態で説明したように、一度スナッピングして参照元ページが確定した後は、写真リスト領域206からの写真追加のためのドラッグ移動の検出直後からガイド表示を行う。即ち、スナッピング検出前から強調表示1602、および、参照元ページの全フォトフレームオブジェクトの外形1603のガイド表示を行う。これにより、ユーザは参照元ページのフォトフレームオブジェクトの外形1603のガイド表示矩形の中の所望の矩形を目標として追加コンテンツをドラッグすればよく、ユーザの作業効率を向上させることができる。以下では、第6実施形態に対して追加する処理を説明する。
まず、ページガイド開始処理を説明する。ページガイドの開始処理は、参照元ページのフォトフレーム枠強調表示処理とページサムネイルの強調表示処理とを開始する処理である。この処理は、図5に示すS501のドラッグ開始情報の保持直後に実行される。本例では、強調表示の開始条件は、編集中ページのページ情報構造体の参照ページポインタ723がNULLでないときであり、かつ、オブジェクトの追加のためのドラッグの際に行うものとする。オブジェクトの追加のためのドラッグとは、写真リスト領域206からのドラッグのことである。
参照ページのフォトフレーム枠強調表示処理においては、情報処理装置104は、参照ページポインタ723が示すページ情報構造体を参照する。そして、そのページ情報構造体のフォトフレームリスト725の全フォトフレームにおける位置1001と、サイズ1002から求まる矩形を、図16の外形1603のように点線で編集画面上に表示する。また、第4実施形態で説明したように、情報処理装置104は、参照ページのサムネイルの強調表示処理を行う。
このようにして表示したページガイドの終了処理を説明する。ページガイドの終了処理は、図5のフローチャートの処理の終了直前に、情報処理装置104が、参照ページのフォトフレーム枠強調表示処理として表示した強調表示を終了すればよい。なお、ページ一覧領域209の強調表示1602のOffは、第4実施形態で説明した例と同様である。
以上説明したように、本実施形態によれば、レイアウト編集領域214に、他ページ活用スナッピングでのスナッピング対象候補のオブジェクトの領域が可視化されて表示される。このため、ユーザは、オブジェクトを移動させる位置を容易に特定することができる。
<<第8実施形態>>
ここまでの実施形態では、レイアウト編集を行う際におけるスナッピングを例に挙げて説明した。本実施形態では、第7実施形態で説明したような、参照元ページと同じレイアウトを容易に実現する別の例を説明する。具体的には、参照元ページのレイアウト情報(ページ情報)のうち、全フォトフレームの画像データの実体部分を除いたものを、編集中のページのレイアウト情報にコピーする。つまり、編集中のページに空フォトフレームを配置する。また、その編集中のページにおける空フォトフレームにガイド表示をする。一般的に、画像データが配置されているフォトフレームに、写真リスト領域206などか写真オブジェクトをドラッグアンドドロップすると、フォトフレームの写真がドラッグアンドドロップした写真に置き換わる。一般的にユーザは、このようなコンテンツ配置の操作に慣れているため、ユーザの利便性をさらに向上させることができる。
図18は、本実施形態でのUIの例を示す図である。図18は、ユーザが1~2ページの見開きページまで編集を完了し、新たに3~4ページの見開きページの編集を開始した状態の図であるものとする。そして、ユーザが1~2ページの見開きページと同じ並びで3~4ページの見開きページに写真オブジェクトを配置したい場合を想定する。ユーザがページ一覧領域209のページサムネイルリスト画面で、1~2ページの見開きページサムネイル上で右クリックする。すると、例えば、カット、コピーなどのような右クリックメニューが表示される。ここで、ユーザは、コピーを選択する。その後、一般的な例では、ページ一覧領域209における3~4ページの見開きページサムネイル上で、右クリックメニューから「貼付」を選択する。すると、3~4ページの見開きページには、1~2ページの見開きページと同じ写真オブジェクトがコピーされて、同じデザインのページが出来上がる。ユーザは、その後、写真リスト領域206から所望の写真オブジェクトをドラッグアンドドロップして、所望の写真に入れ替える。このようにして、同じレイアウトで、写真が異なるページデザインを行うことが、一般的に行われている。
上記の一般的に行われている方法では、レイアウトされた写真枚数が多いと写真の入れ替え漏れなどのミスが生じやすい。本実施形態では、右クリックメニュー1803に示すうように、「テンプレート貼り付け」という操作項目を追加する。そして、「テンプレート貼り付け」が選択されると、貼り付けの際に、写真オブジェクトの実体情報を除いて、フォトフレームのみを貼り付ける。つまり、空のフォトフレームを貼り付ける。この空のフォトフレームは、印刷表示されないが、編集画面の時のみ、外形1804のように、その外形を点線矩形で表示する。また、内部に「写真をドロップしてください」という旨のメッセージを例えばグレーで表示する。ユーザが、この空のフォトフレームに写真オブジェクトをドラッグアンドドロップすると、写真オブジェクトの実体情報の部分のみが置き換わる。これにより、所望の他ページとの同一レイアウト配置を容易に行うことができる。また、写真オブジェクトを配置しなかった場合は、ただの空のフォトフレームであるので、印刷されない点においても利便性が向上する。
具体的な構成を説明する。図7のページ情報構造体720におけるフォトフレームリスト725が、その見開きページにおける全てのフォトフレームに対応している。従って、このフォトフレームリスト725を、指定された見開きページのページ情報構造体のフォトフレームリストにコピーする。その際に、フォトフレーム構造体のファイルパス1004をNULLクリアする。これにより、jpegなどの写真オブジェクトの実体情報への参照されなくなり、空のフォトフレームとしてコピーされることなる。図18の外形1804のような、編集中のフォトフレームへの点線矩形表示については、情報処理装置104は、フォトフレーム構造体のファイルパス1004がNULLであり、かつ編集モード時に行う。なお、点線矩形の表示に際しての矩形の位置およびサイズの取得方法は、第7実施形態で説明したフォトフレームの矩形表示と同じ処理とすればよい。本実施形態では、外形1804のような点線矩形表示に際して、図18に示すように、「写真をドロップしてください」といったメッセージを表示することで、ユーザの利便性をさらに向上させている。
以上説明したように、本実施形態によれば、他の見開きページのレイアウト情報のうち、写真オブジェクトの実体情報を除いた情報を、任意のページにコピーすることができる。即ち、空のフォトフレームが既に配置された状態のページをコピーすることができる。この際に、空のフォトフレームの位置およびサイズを編集画面上で明示的に表示することで、ユーザは、オブジェクトを配置したい位置を容易に把握することができる。
<<その他の実施形態>>
上述した各実施形態では、フォトブック発注システムを例に挙げて説明したが、この例に限られるものではない。編集対象となるページが複数設けられるようなレイアウト編集アプリケーション全般において適用することができる。例えば、プレゼンテーション文書作成ソフトウェア又はCADソフトウェア等において、上述した各実施形態の処理を適用してもよい。
また、上述した各実施形態では、編集対象オブジェクトおよびスナッピング対象となる基準オブジェクトは、写真オブジェクト(フォトフレーム)である例を説明したが、これに限られない。編集対象オブジェクトおよびスナッピング対象は、文字フレームであってもよいし、スタンプフレームであってもよい。また、同種のオブジェクトに限らず、異種のオブジェクトであってもよい。例えば、編集対象オブジェクトが写真オブジェクトであり、スナッピング対象となる基準オブジェクトがスタンプオブジェクトであってもよい。また、どのオブジェクトでスナッピングをするのかをユーザが設定可能に構成されていてもよい。
<<その他の実施形態>>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。