[スレッド全体]

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/5 (木) 20:54:51 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)
[5326] Re:修正版アップしました
ざっとソースコードも眺めてみました。
それで、いくつか疑問・コメントがあります。

1.
テキスト最大幅の算出をテキスト変更直後ではなく CEditView::MoveCursor() で遅延実行するのはなぜですか?
その場で計算させれば、
m_bCalTextWidth
m_nCalTextWidthLinesFrom
m_nCalTextWidthLinesTo
といったややこしいメンバー変数も不要になると思うのですが…
あと、以前の計算要求が実行される前に次のテキスト変更があった場合、新たな変更を加えてしまった後で以前の計算要求を実行しているように見えますが、これは何?

2.
テキスト最大幅の算出を CEditView::OnSize() で実行するのはなぜですか?
テキスト最大幅は画面サイズには関係無いと思うのですが…
CEditView::OnSize() は各ビューのサイズ変更で呼ばれるので、画面を4分割して分割バーを動かすと1度に4回も計算しなおすことになるのでは?
テキスト変更時と SetLayoutInfo() のときくらいだけで済ませられないのでしょうか?

3.
CEditView::GetRightEdgeForScrollBar()は「折り返しなし」のときしか使われていないのですが、全モード共通でスクロール最右端の計算をするのに使えれば、もっとすっきりしたものができるかな?と思います。
指定幅で折り返す場合にも指定幅ぴったりではなく、右余白(改行/句読点ぶら下げ)が見えるところまでスクロールバーでスクロールできるようになると嬉しいですね。

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.010]