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

PageUp, PageDown 時に描画する必要が無い場合は描画しないようにする判定を追加 #1320

Merged
merged 2 commits into from
Sep 6, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions sakura_core/cmd/CViewCommander_Cursor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -740,11 +740,17 @@ void CViewCommander::Command_1PageUp( bool bSelect, CLayoutYInt nScrollNum )
if( nScrollNum <= 0 ){
nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1;
}
GetCaret().Cursor_UPDOWN( -nScrollNum, bSelect );
// Sep. 11, 2004 genta 同期スクロール処理のため
// m_pCommanderView->RedrawAllではなくScrollAtを使うように
m_pCommanderView->SyncScrollV( m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum ));
auto& caret = GetCaret();
auto prevCaretPos = caret.GetCaretLayoutPos();
caret.Cursor_UPDOWN( -nScrollNum, bSelect );
auto currCaretPos = caret.GetCaretLayoutPos();
CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine - nScrollNum );
Copy link
Contributor

Choose a reason for hiding this comment

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

やや好みの問題ですが、正確には CLayoutYInt nScrolled と思います。
めんどうなら auto nScrolled でもよいです。

Copy link
Contributor Author

@beru beru Sep 5, 2020

Choose a reason for hiding this comment

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

そうなんですか? CEditView::ScrollAtV の戻り値の型は CLayoutInt ですが、どうして CLayoutYInt にする方が正確なんでしょうか?

Copy link
Contributor

Choose a reason for hiding this comment

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

ええと・・、「べき論」ではないんですが・・・。
CLayoutInt型は、現在3つの意味で使われています。

正確な型 備考
CLayoutInt nLines CLayoutYInt 垂直方向のレイアウト単位(≒行)です
CLayoutInt nPos CLayoutXInt 水平方向のレイアウト単位(≒桁)です
CLayoutInt tabPadding LONG 水平方向の幅・ピクセル単位で、誤用です

そんなに遠くない未来に CLayoutInt の X,Y を区別するようにしたいと考えています。

「好みの問題」と言ってるように、いまその基準に合わせる必然はないっす。

m_pCommanderView->SyncScrollV(nScrolled);
m_pCommanderView->SetDrawSwitch(bDrawSwitchOld);
// カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く
if (prevCaretPos == currCaretPos && nScrolled == 0) {
Copy link
Contributor

Choose a reason for hiding this comment

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

メモ:カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合

Copy link
Contributor Author

Choose a reason for hiding this comment

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

せっかくなのでコメントを入れる事にします。

return;
}
m_pCommanderView->RedrawAll();
Copy link
Contributor

Choose a reason for hiding this comment

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

メモ:これがCPU使用率を上げてしまう、問題のあるコードです。

スクロール操作で再描画する必要がある領域はスクロール前に表示されていなかった被スクロール領域とスクロールバーだけなので一般的に描画領域の一部ですが、このコードではあえて全域を再描画しています。

Copy link
Contributor Author

@beru beru Sep 5, 2020

Choose a reason for hiding this comment

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

描画処理の最適化は本当は出来たら良いんですが、もう今の実装ごちゃごちゃしてて読み進めて理解して整理したり書き換えるの大変ですね。

大きく変更して改善(描画のパフォーマンスを劇的に上げるとか)しないとテキストエディタとして使い物にならないかっていうとそんな事も無いと思うので、今のままでも良いかなとか個人的に思ってます。

}
return;
Expand All @@ -769,11 +775,17 @@ void CViewCommander::Command_1PageDown( bool bSelect, CLayoutYInt nScrollNum )
if( nScrollNum <= 0 ){
nScrollNum = m_pCommanderView->GetTextArea().m_nViewRowNum - 1;
}
GetCaret().Cursor_UPDOWN( nScrollNum, bSelect );
// Sep. 11, 2004 genta 同期スクロール処理のため
// m_pCommanderView->RedrawAllではなくScrollAtを使うように
m_pCommanderView->SyncScrollV( m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum ));
auto& caret = GetCaret();
auto prevCaretPos = caret.GetCaretLayoutPos();
caret.Cursor_UPDOWN( nScrollNum, bSelect );
auto currCaretPos = caret.GetCaretLayoutPos();
CLayoutInt nScrolled = m_pCommanderView->ScrollAtV( nViewTopLine + nScrollNum );
m_pCommanderView->SyncScrollV(nScrolled);
m_pCommanderView->SetDrawSwitch(bDrawSwitchOld);
// カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く
if (prevCaretPos == currCaretPos && nScrolled == 0) {
return;
}
m_pCommanderView->RedrawAll();
}

Expand Down