Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ツールバーの表示ON/OFFを行うとちらつく現象への対策 #533

Merged
merged 2 commits into from
Oct 8, 2018
Merged

Conversation

beru
Copy link
Contributor

@beru beru commented Oct 7, 2018

変更前 変更後
status_bar_flickering_master status_bar_flickering_pr

@beru
Copy link
Contributor Author

beru commented Oct 7, 2018

なぜこの変更を入れるとちらつく現象が改善するのかメカニズムは分かっていません…。

@beru
Copy link
Contributor Author

beru commented Oct 7, 2018

この PR 用にスクリーンキャプチャした動画のコマを確認している際に気付いた点ですが、複数のサクラエディタのウィンドウを開いている状態で Ctrl + 1 押しでツールバーを表示から非表示に切り替えるとフォーカスが合っていないウィンドウのツールバーも非表示になりますが、その際にアイコンが消えてからツールバーが消えています。本来は同時に消えるべきだと思います。フォーカスが合っているウィンドウは問題有りません。一瞬の出来事なので気付きにくいですが直した方が表示切替がすっきり動くと思います。

// タブバーを表示中にツールバーの表示ONを行うとちらつくので対策
if( m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd ){
::SendMessage( GetHwnd(), WM_SIZE, 0, 0 );
}
::SendMessage( GetHwnd(), WM_SIZE, m_nWinSizeType, MAKELONG( rc.right - rc.left, rc.bottom - rc.top ) );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題が発生するときの m_nWinSizeType の値は何になっていますか?
(https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-size の wParam)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

m_nWinSizeType の値は 0 になっている事を確認しました。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これたぶん、前回の WM_SIZE で送られてきた wParam のキャッシュだと思います。

最近のwindowsのサイズ変更シーケンスは複雑なので、
ここのキャッシュに意味があるかどうか結構微妙だと思っとります。
SIZE_RESTORED(=0) の決め打ちで指定してやってもいいような気がします。

@berryzplus
Copy link
Contributor

なぜこの変更を入れるとちらつく現象が改善するのかメカニズムは分かっていません…。

分かってないと言っちゃうわけですねw

本質的には CEditWnd::OnSize2 の問題だと思っとります。
どっかで CEditWnd::OnSize2 自体に手を入れたいなと考えてます。
前にどっかで書いたけど、これめちゃめちゃ効率悪い処理なので。

WM_SIZE は 実際にはウインドウサイズを変えないので、
これを挟むことで改善する事象があるなら入れていいと思います。

SendMessage(hWnd, WM_SIZE, 0, 0)で改善するってことは、
ウインドウサイズが変わらない場合の処理に問題がありそうな気配です。
いま詳細を追求する意味をあまり感じないので、後日でいいと思ってます。

berryzplus
berryzplus previously approved these changes Oct 8, 2018
Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTMです。

暫定対処の効果を確認できたので入れてしまってよいと考えます。

@beru
Copy link
Contributor Author

beru commented Oct 8, 2018

この対策ですがタブバーを表示していない時でも(ツールバーの表示ON/OFF時に)確認出来る横スクロールバーのちらつき(というか残像というか…)にも効果がありますね。

変更前 変更後
status_bar_flickering_master status_bar_flickering_pr

変更後 はタブバーを表示していない時でも同様の処理をするように、

if( m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd ){

の判定を外したものです。

@beru
Copy link
Contributor Author

beru commented Oct 8, 2018

分かってないと言っちゃうわけですねw

本質的には CEditWnd::OnSize2 の問題だと思っとります。
どっかで CEditWnd::OnSize2 自体に手を入れたいなと考えてます。
前にどっかで書いたけど、これめちゃめちゃ効率悪い処理なので。

WM_SIZE は 実際にはウインドウサイズを変えないので、
これを挟むことで改善する事象があるなら入れていいと思います。

SendMessage(hWnd, WM_SIZE, 0, 0)で改善するってことは、
ウインドウサイズが変わらない場合の処理に問題がありそうな気配です。
いま詳細を追求する意味をあまり感じないので、後日でいいと思ってます。

CEditWnd::OnSize2 を見てみましたが何だか色々な事をやっていますね。変更すると色々な動作環境で思わぬ不具合が出たりしないか心配になっちゃいます…。MoveWindow を複数回呼んでいますが、BeginDeferWindowPos, DeferWindowPos, EndDeferWindowPos で一括処理した方が良いんでしょうね。

@berryzplus
Copy link
Contributor

CEditWnd::OnSize2 を見てみましたが何だか色々な事をやっていますね。変更すると色々な動作環境で思わぬ不具合が出たりしないか心配になっちゃいます…。

色んなことやり過ぎ+キャッシュ変数大杉なので、
不具合を起こしやすいコードだと思います。
本体を触らずに軽減できる方法があるのだから、とりあえずそれで対応でいいような気がしています。

MoveWindow を複数回呼んでいますが、BeginDeferWindowPos, DeferWindowPos, EndDeferWindowPos で一括処理した方が良いんでしょうね。

おそらく歴史的にちょっとずつ増えていったものなので、
一括処理になってないのは仕方ないのかなとか思っています。
位置決めロジックと位置変更ロジックは分離ができるはずなので、
うまいことどうにかならんかなぁ・・・と思っています。

@beru beru changed the title タブバーを表示中にツールバーの表示ONを行うとちらつく現象への対策 ツールバーの表示ON/OFFを行うとちらつく現象への対策 Oct 8, 2018
@beru
Copy link
Contributor Author

beru commented Oct 8, 2018

この暫定対処ですが、タブバーを表示していない時でもツールバーのON/OFF時に発生する横スクロールバーのちらつきにも効果が有るので、タブバーを表示していない時でも実施するように変更しました。

再度レビューお願いします。

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTMです。

SendMessage( GetHwnd(), WM_SIZE, 0, 0) が何らかのステータスをリセットしている感じなんですかね。裏が取れてるならリネームお願いするんですけど、今回は空気でやってるのでこのままいっちゃいましょう。

@beru
Copy link
Contributor Author

beru commented Oct 8, 2018

それでは Merge します。もし問題が見つかったら別の PR で対処する事にしましょう。

@beru beru merged commit 7bf177d into sakura-editor:master Oct 8, 2018
@beru beru deleted the Anti_Flicker branch October 8, 2018 07:52
@m-tmatma m-tmatma added this to the next release milestone Oct 21, 2018
@KENCHjp KENCHjp added the enhancement ■機能追加 label Dec 5, 2018
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
ツールバーの表示ON/OFFを行うとちらつく現象への対策
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ■機能追加
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants