[スレッド全体]

2008/6/4 (水) 12:57:28 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5321] Re5:Patchesにアップしました
▼ ryojiさん
> エディタ機能全体として、既存機能の強化、新機能の追加まで含めたハード的な余力って、どのくらいあるんでしょうかね??

私自身は余力があり余っていると思うのですが、使用者のPCや使用方法で変わってくるので中々定量的に示すのは難しいですね。

ただ、常に全ライン走査というのはかなりパワーを必要とするので余り良い方法ではないとは思います。
現にカーソル行アンダーラインがちらつくなどの影響が出ています。
単純なコーディングで済まそうとしていたからなのですが、上記のような見た目の問題を軽減するために現在はもう少し複雑な判定を考えています。

逆に、見た目の性能劣化が少なければ少々要求パワーが上がっても良いかなという感じです。
気になる方はオプションを切って今まで通りの状態で使用してもらうということで……

複雑なコーディングをすると後々の不具合の元になるのでできるだけ単純にしたかったのですが、私のレベルではもう無理、どんどん汚くなっていく (^^;

あと>>dev:5317の、
> 「折り返さない」設定のときの動作でいくつか気になる点があります。
> 1.置換画面で置換実行した場合、最大幅の更新に水平スクロールバーが追随しないみたいです


上記現象の発生条件がわかりません。
文書が編集されたときに下記の関数のどれかが呼ばれれば大丈夫なつもりなんですが、呼ばれないルートがあるのでしょうかね?
 CEditView::InsertData_CEditView()
 CEditView::DeleteData2()
 CEditView::ReplaceData_CEditView()

ではでは。

2008/6/4 (水) 19:15:13 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)
[5322] Re6:Patchesにアップしました
▼ なすこじさん
> 現在はもう少し複雑な判定を考えています。

if(変更行長>最大長)
 最大長=変更行長
else if(最大長だった行が短くなった)
 全行再スキャン

てな感じの細工でもかなり負荷緩和されそうですね。

> > 1.置換画面で置換実行した場合、最大幅の更新に水平スクロールバーが追随しないみたいです
>
> 上記現象の発生条件がわかりません。


普通に「置換」ボタンで置換実行するだけです。
例えば、改行のみがいくつか存在するテキストに1行だけスクロールバーが表示されるような長い行を追加しておいて、その行データを空文字列に置換するとスクロールバーが追随しません。
その後、置換ダイアログを閉じてビューをクリックしたり、矢印キーでカーソル移動すると、そのときにスクロールバーが追随します。

>  CEditView::InsertData_CEditView()
>  CEditView::DeleteData2()
>  CEditView::ReplaceData_CEditView()


「置換」ボタンでの置換動作は、検索でカーソル移動/選択したのち選択範囲の文字列を入れ替えるという連続動作になっています。
検索でのカーソル移動では画面がスクロールしますが、文字列入れ替えは描画OFFで行ってから全体再描画してます。
描画OFFでMoveCursor()が実行されるときはスクロールOFFになっているため現状のコードでは最大幅のスキャンが行われません。
最後の全体再描画では更新されていない昔の最大幅のままでスクロールバーが再描画されます。

MoveCursor()ではなく、MoveCursor()の中で呼び出しているAdjustScrollBars()のほうに最大幅計算の処理も入れてしまえば、最後の全体再描画(こちらでもAdjustScrollBars()を呼び出している)で正しく表示されるんじゃないでしょうか。

2008/6/4 (水) 21:17:01 なすこじ  
Mozilla/4.8 (Macintosh; U; PPC)
[5324] Re7:Patchesにアップしました
▼ ryojiさん
どうもありがとうございます。現象確認できました。
相変わらずソースが読み切れてませんでした (^^;

修正の方なんですが、最大幅の算出の呼び出しを if( bScroll ){ の上に出してしまうというのではまずいですかね?

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