From 746b1c3470de094ca1d2bdc51aba65c98e55c87e Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Wed, 5 May 2021 15:26:21 +0900 Subject: [PATCH] Fix osdn.net #42179: Thicken the caret in overwrite mode --- Externals/crystaledit/editlib/ccrystaleditview.cpp | 1 + Externals/crystaledit/editlib/ccrystaleditview.h | 1 - Externals/crystaledit/editlib/ccrystaltextview.cpp | 15 ++++++++++++--- Externals/crystaledit/editlib/ccrystaltextview.h | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Externals/crystaledit/editlib/ccrystaleditview.cpp b/Externals/crystaledit/editlib/ccrystaleditview.cpp index 53871662d..f532f55ca 100644 --- a/Externals/crystaledit/editlib/ccrystaleditview.cpp +++ b/Externals/crystaledit/editlib/ccrystaleditview.cpp @@ -1145,6 +1145,7 @@ void CCrystalEditView:: OnEditSwitchOvrmode () { m_bOvrMode = !m_bOvrMode; + UpdateCaret (); } void CCrystalEditView:: diff --git a/Externals/crystaledit/editlib/ccrystaleditview.h b/Externals/crystaledit/editlib/ccrystaleditview.h index 5254ce717..70e00e7c8 100644 --- a/Externals/crystaledit/editlib/ccrystaleditview.h +++ b/Externals/crystaledit/editlib/ccrystaleditview.h @@ -68,7 +68,6 @@ protected: bool m_bSelectionPushed; CPoint m_ptSavedSelStart, m_ptSavedSelEnd; private : - bool m_bOvrMode; CPoint m_ptDropPos; bool m_bAutoIndent; diff --git a/Externals/crystaledit/editlib/ccrystaltextview.cpp b/Externals/crystaledit/editlib/ccrystaltextview.cpp index e1b16644a..85f766b48 100644 --- a/Externals/crystaledit/editlib/ccrystaltextview.cpp +++ b/Externals/crystaledit/editlib/ccrystaltextview.cpp @@ -492,7 +492,7 @@ CCrystalTextView::CCrystalTextView () , m_bRectangularSelection(false) , m_bColumnSelection(false) , m_nDragSelTimer(0) -, m_bOverrideCaret(false) +, m_bOvrMode(false) , m_nLastFindWhatLen(0) , m_nPrintPages(0) , m_nPrintLineHeight(0) @@ -2783,8 +2783,17 @@ UpdateCaret () CalculateActualOffset (m_ptCursorPos.y, m_ptCursorPos.x) >= m_nOffsetChar) { int nCaretHeight = GetLineVisible(m_ptCursorPos.y) ? GetLineHeight () : 0; - if (m_bOverrideCaret) //UPDATE - CreateSolidCaret(GetCharWidth(), nCaretHeight); + if (m_bOvrMode) //UPDATE + { + int nCaretWidth = GetCharWidth (); + if (m_ptCursorPos.x < GetLineLength (m_ptCursorPos.y)) + { + const TCHAR* pszLine = GetLineChars (m_ptCursorPos.y); + if (pszLine[m_ptCursorPos.x] != '\t') + nCaretWidth *= GetCharCellCountFromChar (pszLine + m_ptCursorPos.x); + } + CreateSolidCaret (nCaretWidth, nCaretHeight); + } else CreateSolidCaret (2, nCaretHeight); diff --git a/Externals/crystaledit/editlib/ccrystaltextview.h b/Externals/crystaledit/editlib/ccrystaltextview.h index f50eea458..a65ad55e5 100644 --- a/Externals/crystaledit/editlib/ccrystaltextview.h +++ b/Externals/crystaledit/editlib/ccrystaltextview.h @@ -228,7 +228,7 @@ public : protected : CPoint WordToRight (CPoint pt); CPoint WordToLeft (CPoint pt); - bool m_bOverrideCaret; + bool m_bOvrMode; bool m_bSingle; CCrystalTextBuffer *m_pTextBuffer; -- 2.11.0