]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextctrl.cpp
Fix a number of problems with tracking rectangles by avoiding rebuilding them when...
[wxWidgets.git] / src / richtext / richtextctrl.cpp
index 37a98dcd6a713165dff5487817ee982662c20ea8..bf06f72f309d7581073f5482dfd17ca1458709ad 100644 (file)
@@ -409,7 +409,7 @@ void wxRichTextCtrl::OnLeftUp(wxMouseEvent& event)
                         if (!urlTarget.IsEmpty())
                         {
                             wxMouseEvent mouseEvent(event);
                         if (!urlTarget.IsEmpty())
                         {
                             wxMouseEvent mouseEvent(event);
-                            
+
                             long startPos = 0, endPos = 0;
                             wxRichTextObject* obj = GetBuffer().GetLeafObjectAtPosition(position);
                             if (obj)
                             long startPos = 0, endPos = 0;
                             wxRichTextObject* obj = GetBuffer().GetLeafObjectAtPosition(position);
                             if (obj)
@@ -417,12 +417,12 @@ void wxRichTextCtrl::OnLeftUp(wxMouseEvent& event)
                                 startPos = obj->GetRange().GetStart();
                                 endPos = obj->GetRange().GetEnd();
                             }
                                 startPos = obj->GetRange().GetStart();
                                 endPos = obj->GetRange().GetEnd();
                             }
-                            
+
                             wxTextUrlEvent urlEvent(GetId(), mouseEvent, startPos, endPos);
                             InitCommandEvent(urlEvent);
                             wxTextUrlEvent urlEvent(GetId(), mouseEvent, startPos, endPos);
                             InitCommandEvent(urlEvent);
-                            
+
                             urlEvent.SetString(urlTarget);
                             urlEvent.SetString(urlTarget);
-                            
+
                             GetEventHandler()->ProcessEvent(urlEvent);
                         }
                     }
                             GetEventHandler()->ProcessEvent(urlEvent);
                         }
                     }
@@ -513,7 +513,7 @@ void wxRichTextCtrl::OnRightClick(wxMouseEvent& WXUNUSED(event))
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
-    
+
     GetEventHandler()->ProcessEvent(cmdEvent);
 }
 
     GetEventHandler()->ProcessEvent(cmdEvent);
 }
 
@@ -525,7 +525,7 @@ void wxRichTextCtrl::OnLeftDClick(wxMouseEvent& WXUNUSED(event))
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
-    
+
     if (!GetEventHandler()->ProcessEvent(cmdEvent))
     {
         SelectWord(GetCaretPosition()+1);
     if (!GetEventHandler()->ProcessEvent(cmdEvent))
     {
         SelectWord(GetCaretPosition()+1);
@@ -540,7 +540,7 @@ void wxRichTextCtrl::OnMiddleClick(wxMouseEvent& event)
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
-    
+
     if (!GetEventHandler()->ProcessEvent(cmdEvent))
         event.Skip();
 }
     if (!GetEventHandler()->ProcessEvent(cmdEvent))
         event.Skip();
 }
@@ -1047,7 +1047,7 @@ bool wxRichTextCtrl::ScrollIntoView(long position, int keyCode)
 
     // Going down
     if (keyCode == WXK_DOWN || keyCode == WXK_NUMPAD_DOWN ||
 
     // Going down
     if (keyCode == WXK_DOWN || keyCode == WXK_NUMPAD_DOWN ||
-        keyCode == WXK_RIGHT || keyCode == WXK_NUMPAD_DOWN ||
+        keyCode == WXK_RIGHT || keyCode == WXK_NUMPAD_RIGHT ||
         keyCode == WXK_END || keyCode == WXK_NUMPAD_END ||
         keyCode == WXK_PAGEDOWN || keyCode == WXK_NUMPAD_PAGEDOWN)
     {
         keyCode == WXK_END || keyCode == WXK_NUMPAD_END ||
         keyCode == WXK_PAGEDOWN || keyCode == WXK_NUMPAD_PAGEDOWN)
     {
@@ -2039,7 +2039,7 @@ wxRichTextCtrl::HitTest(const wxPoint& pt,
         return wxTE_HT_BEFORE;
     else if ((hit & wxRICHTEXT_HITTEST_AFTER) && (hit & wxRICHTEXT_HITTEST_OUTSIDE))
         return wxTE_HT_BEYOND;
         return wxTE_HT_BEFORE;
     else if ((hit & wxRICHTEXT_HITTEST_AFTER) && (hit & wxRICHTEXT_HITTEST_OUTSIDE))
         return wxTE_HT_BEYOND;
-    else if (hit & wxRICHTEXT_HITTEST_BEFORE|wxRICHTEXT_HITTEST_AFTER)
+    else if (hit & (wxRICHTEXT_HITTEST_BEFORE|wxRICHTEXT_HITTEST_AFTER))
         return wxTE_HT_ON_TEXT;
 
     return wxTE_HT_UNKNOWN;
         return wxTE_HT_ON_TEXT;
 
     return wxTE_HT_UNKNOWN;
@@ -2064,30 +2064,21 @@ void wxRichTextCtrl::DoSetValue(const wxString& value, int flags)
 {
     Clear();
 
 {
     Clear();
 
-    // if the text is long enough, it's faster to just set it instead of first
-    // comparing it with the old one (chances are that it will be different
-    // anyhow, this comparison is there to avoid flicker for small single-line
-    // edit controls mostly)
-    if ( (value.length() > 0x400) || (value != GetValue()) )
+    if (!value.IsEmpty())
     {
     {
+        // Remove empty paragraph
+        GetBuffer().Clear();
         DoWriteText(value);
 
         // for compatibility, don't move the cursor when doing SetValue()
         SetInsertionPoint(0);
     }
         DoWriteText(value);
 
         // for compatibility, don't move the cursor when doing SetValue()
         SetInsertionPoint(0);
     }
-    else // same text
+    else
     {
     {
-        if ( flags & SetValue_SendEvent )
-        {
-            // still send an event for consistency
+        // still send an event for consistency
+        if (flags & SetValue_SendEvent)
             SendTextUpdatedEvent();
             SendTextUpdatedEvent();
-        }
     }
     }
-
-    // we should reset the modified flag even if the value didn't really change
-
-    // mark the control as being not dirty - we changed its text, not the
-    // user
     DiscardEdits();
 }
 
     DiscardEdits();
 }