土日シリーズ「DTPの構造を考える」です。
このシリーズ、第9回までで、本の構造、さらにDTPソフト全体でもつ、フォント、色、ライブラリの構造を概念的に説明してきました。
それ以降、機能のお話しを書いています。
今回は、編集関係の機能についてです。
■カットアンドペーストと、プロパティ変更
一般的な機能としては、一般的な編集ソフトの作り方 その12:イベント発生時の動き(概要)。 で、あげたように
・印刷
・保存
・読み込み
・カット(切り取り)
・ペースト(貼り込み)
・プロパティ(属性設定・変更)
・表示
・要素の選択
・(要素の)移動
とあり、とくに、プロパティの変更に関しては、ここで取り上げました。
プロパティ変更には、
・大きさ、位置がかわるもの
・大きさ、位置はかわらず、中身のみ変わるもの
とあり、それぞれ処理が違うと書きました。
この、大きさ位置が変わる処理と、カットアンドペーストの動きはにているので、今回はまとめて、編集機能として書きます。
■位置決めが問題
で、先ほどあげたところでは、処理は、こんな漢字に書きました。
1.ダイアログや、その他いろいろな操作で、プロパティ変更を受け付ける
2.現在選択されているもの(=変更するプロパティ)を決定
3.変更するものの親に対し、子供(変更するものと、その兄弟)
の位置決めをする
4.3の値に変更し、変更するものに通知する。
→変更できない場合、変更処理を取り消し、元に戻る
5.変更するものの子供に対し、変更後の位置決めをする
→変更できない場合、変更処理を取り消し、元に戻る
6.5の位置に子供の属性を変更する。自分の属性も変更する
7.再描画する
→クリックされたとこををバッファをもって調べている場合、
そのバッファにも書き出し
つまり、3で自分の親が自分を含めた子供に対し、
5で、自分が、子供に対して、位置決めを行います。
この位置決めを、どの範囲で、どのようにやるのかが問題です。
■どの範囲で、どのように位置決めするか
位置決めについて、どのように行うかが問題というのは、わかっていただけると思います。
どの範囲の問題なのですが、親が、子供全体に行うのであれば、何も問題はないのですが、それだと時間がかかります。たとえば、10行書いて、文末の。を削除した場合、。の文字1字分だけ処理すればいいです。しかし、文頭の文字を削除した場合、全部の文字に影響が出ます。
前者の1文字だけ処理すればいい場合、全部の子供(10行分)を処理するのは無駄になってしまいます。なので、範囲があるといいのですが、このとき、修正した文字からでいいかというと、そうではないです。
英語などで、追い込んで入れたり、文字を追い出したりする場合、その行1行分使って処理します。つまり、変更文字の前も含めて変更行全体を処理します。なので、前の部分も含まれることがあります。
次回は、この位置決めについて、さらに深く考えます。