-
Notifications
You must be signed in to change notification settings - Fork 163
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 ); | ||
m_pCommanderView->SyncScrollV(nScrolled); | ||
m_pCommanderView->SetDrawSwitch(bDrawSwitchOld); | ||
// カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合、描画を省く | ||
if (prevCaretPos == currCaretPos && nScrolled == 0) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. メモ:カーソル位置が変化しなかった、かつ、スクロール行数が0だった場合 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. せっかくなのでコメントを入れる事にします。 |
||
return; | ||
} | ||
m_pCommanderView->RedrawAll(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. メモ:これがCPU使用率を上げてしまう、問題のあるコードです。 スクロール操作で再描画する必要がある領域はスクロール前に表示されていなかった被スクロール領域とスクロールバーだけなので一般的に描画領域の一部ですが、このコードではあえて全域を再描画しています。 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 描画処理の最適化は本当は出来たら良いんですが、もう今の実装ごちゃごちゃしてて読み進めて理解して整理したり書き換えるの大変ですね。 大きく変更して改善(描画のパフォーマンスを劇的に上げるとか)しないとテキストエディタとして使い物にならないかっていうとそんな事も無いと思うので、今のままでも良いかなとか個人的に思ってます。 |
||
} | ||
return; | ||
|
@@ -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(); | ||
} | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
やや好みの問題ですが、正確には
CLayoutYInt nScrolled
と思います。めんどうなら
auto nScrolled
でもよいです。There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そうなんですか?
CEditView::ScrollAtV
の戻り値の型はCLayoutInt
ですが、どうしてCLayoutYInt
にする方が正確なんでしょうか?There was a problem hiding this comment.
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 を区別するようにしたいと考えています。「好みの問題」と言ってるように、いまその基準に合わせる必然はないっす。