OSDN Git Service

Fix osdn.net #42179: Thicken the caret in overwrite mode
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 5 May 2021 06:26:21 +0000 (15:26 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 5 May 2021 06:26:21 +0000 (15:26 +0900)
Externals/crystaledit/editlib/ccrystaleditview.cpp
Externals/crystaledit/editlib/ccrystaleditview.h
Externals/crystaledit/editlib/ccrystaltextview.cpp
Externals/crystaledit/editlib/ccrystaltextview.h

index 5387166..f532f55 100644 (file)
@@ -1145,6 +1145,7 @@ void CCrystalEditView::
 OnEditSwitchOvrmode ()
 {
   m_bOvrMode = !m_bOvrMode;
+  UpdateCaret ();
 }
 
 void CCrystalEditView::
index 5254ce7..70e00e7 100644 (file)
@@ -68,7 +68,6 @@ protected:
     bool m_bSelectionPushed;
     CPoint m_ptSavedSelStart, m_ptSavedSelEnd;
 private :
-    bool m_bOvrMode;
     CPoint m_ptDropPos;
     bool m_bAutoIndent;
 
index e1b1664..85f766b 100644 (file)
@@ -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);
 
index f50eea4..a65ad55 100644 (file)
@@ -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;