[スレッド全体]

2008/5/25 (日) 03:26:55 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5299] 水平スクロールバーを常にテキストの幅に合わせる
A) 水平スクロールバーを常にテキストの幅に合わせる
B) 常にウィンドウの幅で折り返す

上記の機能を実験的に作ってみました(ダウンロードページの10-5.)
しかし、速度の問題と分割ウィンドウでの表示の問題があります。

■速度の問題
A:入力毎に全ラインを走査してテキストの最大幅を求めています。そしてAdjustScrollBars()でそれを使っています。
B:OnSize()にて折り返し位置の変更を呼び出しています。こちらの方が負荷が高いです。

これをAthlonXP-M3000, mem DDR1GB, Win2k SP4のデスクトップ環境で試してみました。
A:10万行程度までなら使えそうな感じ。
B:1万行までなら大丈夫そう、2万行あると遅さが分かる。
  5万行では明らかに遅い。書き直しに1秒程掛かる。

■分割ウィンドウの問題(Bのみ)
左右に分割すると、左側のウィンドウが右側のウィンドウサイズで折り返されます。
折り返し幅は1つしかないので処理順の都合でこの様になります(と思う)
こちらは今のままだとちょっと致命的ですかね?左右に分割すると問題ありますよ、で押し通したい所ですが……


一応タイプ別オプション→スクリーン→レイアウトの所にオプションを追加して選択できるようにしてみました。
また、Ctrl+Alt+Uでの折り返しの変更については、AまたはBが選択されている時はA,Bのトグルとしました。

こんな感じですが、この機能使えると思います?
Patchesに載せる価値あるでしょうか?

http://www.geocities.jp/nasukoji_7/download/download_sakuraeditor.html


2008/6/4 (水) 20:05:58 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5323] Re:水平スクロールバーを常にテキストの幅に合わせる
ツリーが深いのでここへ繋げます。
修正版をアップしました。
 080604_01_TextWrapControl_a1364.zip

1.1行が最大幅を超える場合、水平スクロール バーのつまみを最右端にすることができない不具合を修正しました。

2.以下の操作を除いて全ラインの走査をしないようにしました。
・最大幅の行で改行を入力する
・最大幅の行を含んで削除を実行する


Undo, Redoや置換で発生する操作も対象に含まれます。
普通に入力するぶんには今まで殆ど変わらない負荷となると思います。

高負荷となるような操作例:
・最大幅の行の行頭でEnterキーをリピートする
・最大幅の行でDeleteキーまたはBackSpaceキーをリピートする


2008/6/5 (木) 17:51:44 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5325] 修正版アップしました
以下の修正を行いました。

1.置換ダイアログで置換を実行したとき、スクロールバーの幅が更新されない不具合を修正(dev:5322,5324)
2.最大幅の行での文字削除によるカーソル行アンダーラインのちらつきを軽減した
3.最大幅の行で改行を入力した場合でも、行頭かつ文字列非選択の場合は全ラインの走査を実行しないようにした(負荷軽減)

2008/6/6 (金) 12:54:49 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.5.21022)
[5330] Re:修正版アップしました
コードを眺めていて思ったんですが、今は「折り返さない」については最低限の実装(最大長の拡大方向のみ追従)に止めておきませんか?
設定やコマンドの追加だけでも結構な量なのに、動作まで厳密さを求めていたらレビュー/テストは滞るばかりで、そのうちまたお蔵入りになってしまいそうな予感。
そんなことになるくらいなら、最低限の実装で固めておいて、追加分は追加分としてあとでじっくり煮詰めていくのが良いように思いますけど。今考えているよりも良い案が浮かぶかもしれませんし。

・最大長の縮小方向への追従
・どんなに長くなっても折り返さない
・スクロールなしのときはスクロールバーを消す


といったあたりは後付けでも…
#「読み切れない/意欲が追い付かない」いうのが本音だったりしますけど(^^;

2008/6/6 (金) 21:46:12 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5331] Re2:修正版アップしました
▼ ryojiさん
> コードを眺めていて思ったんですが、今は「折り返さない」については最低限の実装(最大長の拡大方向のみ追従)に止めておきませんか?

私はそれでかまいません。
ただ、私の中では「最大長の拡大方向のみ追従」というのが「折り返さない」からほんの少し変更しただけの状態なので、いっその事出来の悪い「折り返さない」を削除してしまった方が良い気がしています。

以下>>dev:5326に対して
> 1.
> テキスト最大幅の算出をテキスト変更直後ではなく CEditView::MoveCursor() で遅延実行するのはなぜですか?


元々は1回の操作に対して何度も全ライン走査が走らない様にする事を考えていたのですが、負荷軽減をした事で不要になったと思います。

> あと、以前の計算要求が実行される前に次のテキスト変更があった場合、新たな変更を加えてしまった後で以前の計算要求を実行しているように見えますが、これは何?

バグです (^^;
ループした時のために辻褄を合わせようとして変な事になってます。

> 2.
> テキスト最大幅の算出を CEditView::OnSize() で実行するのはなぜですか?
> テキスト最大幅は画面サイズには関係無いと思うのですが…


最大幅が未算出の時に算出されるようにしていますが、手抜き……かもしれない。
未算出の時だけなので、アプリ起動時/ファイル読み込み/設定変更などで最大幅がクリアされなければ殆ど実行されないです。
ただ、OnSize()を利用するのは確かに変ですね。
SetLayoutInfo()は印刷プレビューとの絡みで躊躇しました。

ということで、「折り返さない」を削除したものを作成しても良いでしょうか?

2008/6/6 (金) 22:07:13 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)
[5333] Re3:修正版アップしました
▼ なすこじさん
> ということで、「折り返さない」を削除したものを作成しても良いでしょうか?

当面は「折り返さない」を選択したら最大幅(10240桁)が適用されるようにしておくのでもいいんじゃないでしょうか?
まだ本格的に手をつける人がいないから最大幅で代用してるだけ、というつもりで。
他エディタにそういう実装のものもちょくちょく見かけますし、あとで変更の話が出たとしてもUI部の作り込みの手間が省けると思います。

2008/6/7 (土) 22:40:20 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5335] Re4:修正版アップしました
修正版をアップしました。

080607_01_TextWrapControl_a1372
 >>dev:5326の1,2の取り込みなど。

080607_02_TextWrapControl_a1372
 上記から「折り返しなし」機能を10240桁で折り返しに機能縮小した。
 折り返し方法の初期値を「指定幅で折り返す」に変更した。

「折り返しなし」機能は開発中ということにして、080607_02を使って「右端で折り返す」機能の完成を目指すことにします。
でも差分が1300行近い……

2008/6/10 (火) 21:06:55 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.5.21022)
[5340] Re5:修正版アップしました
▼ なすこじさん
> 修正版をアップしました。

基本路線としてなすこじさんのパッチで筋の良い感じだったので、それをもとに既存機能も含め細部に修正を加えてみました。

詳細はPatchesのほうをご覧頂くとして、自分なりにですが、これでおおむね満足なものになったと思ってます。

2008/6/12 (木) 00:14:41 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5343] Re6:修正版アップしました
▼ ryojiさん
> 詳細はPatchesのほうをご覧頂くとして、自分なりにですが、これでおおむね満足なものになったと思ってます。

080611_02版で確認しました。
私も十分満足のいくものだと思います。

後は、折角作ったので使ってくれる人がいるといいなぁって感じです (^^;

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]