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

メモリDCを利用しない場合はアンダーライン描画を行描画の直後に行う事でちらつきを抑える #1616

Merged
merged 2 commits into from
Apr 22, 2021
Merged
Changes from 1 commit
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
26 changes: 18 additions & 8 deletions sakura_core/view/CEditView_Paint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,7 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp
sPos.ForwardLayoutLineRef(1); //レイアウト行++
}
}else{
auto caretY = GetCaret().GetCaretLayoutPos().GetY2();
SColorStrategyInfo sInfo(gr);
sInfo.m_pDispPos = &sPos;
sInfo.m_pcView = this;
Expand All @@ -788,6 +789,8 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp
//描画X位置リセット
sPos.ResetDrawCol();

auto nLayoutLine = sPos.GetLayoutLineRef();

//1行描画
bool bDispResult = DrawLogicLine(
&sInfo,
Expand All @@ -812,6 +815,14 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp
DeleteObject(hdcBgImg);
}
}
// メモリDCを利用しない場合はアンダーライン描画を行描画の直後に行う事でちらつきを抑える
if (!bUseMemoryDC && nLayoutLine == caretY)
{
if (m_pcEditWnd->GetActivePane() == m_nMyIndex) {
/* アクティブペインは、アンダーライン描画 */
GetCaret().m_cUnderLine.CaretUnderLineON(true, false);
}
}
}
}

Expand Down Expand Up @@ -844,16 +855,15 @@ void CEditView::OnPaint2( HDC _hdc, PAINTSTRUCT *pPs, BOOL bDrawFromComptibleBmp
pPs->rcPaint.top,
SRCCOPY
);
// From Here 2007.09.09 Moca 互換BMPによる画面バッファ
// アンダーライン描画をメモリDCからのコピー前処理から後に移動
if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){
Copy link
Contributor

Choose a reason for hiding this comment

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

修正3箇所中の2個目、ここがメモリDCを使う場合の処理に見えます。

  1. メモリDCを使わない場合の処理を追加。
  2. スコープ外にあった処理を移動(追加)
  3. スコープ外にあった処理を移動(削除)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

コメントありがとうございます。ちょっと紛らわしいですが、2. と 3. は合わせて移動的な変更でした。
メモリDC使わない場合のアンダーライン描画を行描画ループの中に追加したので、元のアンダーライン描画はメモリDCを使う場合にのみ実行するようにしました。そしてちょうど上の方にそのif文の記述があったのでそのスコープ内にさっさと引っ越しさせました。

/* アクティブペインは、アンダーライン描画 */
GetCaret().m_cUnderLine.CaretUnderLineON( true, false );
}
// To Here 2007.09.09 Moca
}

// From Here 2007.09.09 Moca 互換BMPによる画面バッファ
// アンダーライン描画をメモリDCからのコピー前処理から後に移動
if ( m_pcEditWnd->GetActivePane() == m_nMyIndex ){
/* アクティブペインは、アンダーライン描画 */
GetCaret().m_cUnderLine.CaretUnderLineON( true, false );
}
// To Here 2007.09.09 Moca

/* 03/02/18 対括弧の強調表示(描画) ai */
DrawBracketPair( true );

Expand Down