]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextctrl.cpp
Made all bitmaps 16x16
[wxWidgets.git] / src / richtext / richtextctrl.cpp
index c59cbfb85192290c17a4a53f8cfdf3b9c357a2e3..636c49443972f05c48317d86accc05b5cd23aee8 100644 (file)
@@ -128,7 +128,11 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va
         SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
     }
 
+    GetBuffer().Reset();
     GetBuffer().SetRichTextCtrl(this);
+    
+    SetCaret(new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16));
+    GetCaret()->Show();
 
     if (style & wxTE_READONLY)
         SetEditable(false);
@@ -153,7 +157,7 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va
     SetBackgroundStyle(wxBG_STYLE_CUSTOM);
 
     // Tell the sizers to use the given or best size
-    SetBestFittingSize(size);
+    SetInitialSize(size);
 
 #if wxRICHTEXT_BUFFERED_PAINTING
     // Create a buffer
@@ -220,7 +224,7 @@ void wxRichTextCtrl::Thaw()
 /// Clear all text
 void wxRichTextCtrl::Clear()
 {
-    m_buffer.Reset();
+    m_buffer.ResetAndClearCommands();
     m_buffer.SetDirty(true);
     m_caretPosition = -1;
     m_caretPositionForDefaultStyle = -2;
@@ -240,7 +244,7 @@ void wxRichTextCtrl::Clear()
 /// Painting
 void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
 {
-    if (GetCaret())
+    if (GetCaret() && GetCaret()->IsVisible())
         GetCaret()->Hide();
 
     {
@@ -259,7 +263,11 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
         // Paint the background
         PaintBackground(dc);
 
-        wxRect drawingArea(GetLogicalPoint(wxPoint(0, 0)), GetClientSize());
+        // wxRect drawingArea(GetLogicalPoint(wxPoint(0, 0)), GetClientSize());
+
+        wxRect drawingArea(GetUpdateRegion().GetBox());
+        drawingArea.SetPosition(GetLogicalPoint(drawingArea.GetPosition()));
+
         wxRect availableSpace(GetClientSize());
         if (GetBuffer().GetDirty())
         {
@@ -271,7 +279,7 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
         GetBuffer().Draw(dc, GetBuffer().GetRange(), GetInternalSelectionRange(), drawingArea, 0 /* descent */, 0 /* flags */);
     }
 
-    if (GetCaret())
+    if (GetCaret() && !GetCaret()->IsVisible())
         GetCaret()->Show();
 
     PositionCaret();
@@ -284,21 +292,24 @@ void wxRichTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(event))
 
 void wxRichTextCtrl::OnSetFocus(wxFocusEvent& WXUNUSED(event))
 {
-    wxCaret* caret = new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16);
-    SetCaret(caret);
-    caret->Show();
-    PositionCaret();
+    if (GetCaret())
+    {
+        if (!GetCaret()->IsVisible())
+            GetCaret()->Show();
+        PositionCaret();
+    }
 
-    if (!IsFrozen())
-        Refresh(false);
+    // if (!IsFrozen())
+    //    Refresh(false);
 }
 
 void wxRichTextCtrl::OnKillFocus(wxFocusEvent& WXUNUSED(event))
 {
-    SetCaret(NULL);
+    if (GetCaret() && GetCaret()->IsVisible())
+        GetCaret()->Hide();
 
-    if (!IsFrozen())
-        Refresh(false);
+    // if (!IsFrozen())
+    //    Refresh(false);
 }
 
 /// Left-click
@@ -415,13 +426,11 @@ void wxRichTextCtrl::OnMoveMouse(wxMouseEvent& event)
             {
                 if (attr.HasFlag(wxTEXT_ATTR_URL))
                 {
-                    if (GetCursor() != m_urlCursor)
-                        SetCursor(m_urlCursor);
+                    SetCursor(m_urlCursor);
                 }
                 else if (!attr.HasFlag(wxTEXT_ATTR_URL))
                 {
-                    if (GetCursor() != m_textCursor)
-                        SetCursor(m_textCursor);
+                    SetCursor(m_textCursor);
                 }
             }
         }
@@ -553,6 +562,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
             
             GetEventHandler()->ProcessEvent(textEvent);
         }
+        Update();
     }
     else if (event.GetKeyCode() == WXK_BACK)
     {
@@ -572,7 +582,6 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
 
         EndBatchUndo();
 
-        // Shouldn't this be in Do()?
         if (GetLastPosition() == -1)
         {
             GetBuffer().Reset();
@@ -583,6 +592,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
         }
 
         ScrollIntoView(m_caretPosition, WXK_LEFT);
+        Update();
     }
     else if (event.GetKeyCode() == WXK_DELETE)
     {
@@ -601,7 +611,6 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
 
         EndBatchUndo();
 
-        // Shouldn't this be in Do()?
         if (GetLastPosition() == -1)
         {
             GetBuffer().Reset();
@@ -610,6 +619,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
             PositionCaret();
             SetDefaultStyleToCursorStyle();
         }
+        Update();
     }
     else
     {
@@ -758,6 +768,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
 
                 SetDefaultStyleToCursorStyle();
                 ScrollIntoView(m_caretPosition, WXK_RIGHT);
+                Update();
             }
         }
     }
@@ -2942,6 +2953,18 @@ long wxRichTextCtrl::GetFirstVisiblePosition() const
         return 0;
 }
 
+/// Get the first visible point in the window
+wxPoint wxRichTextCtrl::GetFirstVisiblePoint() const
+{
+    int ppuX, ppuY;
+    int startXUnits, startYUnits;
+
+    GetScrollPixelsPerUnit(& ppuX, & ppuY);
+    GetViewStart(& startXUnits, & startYUnits);
+
+    return wxPoint(startXUnits * ppuX, startYUnits * ppuY);
+}
+
 /// The adjusted caret position is the character position adjusted to take
 /// into account whether we're at the start of a paragraph, in which case
 /// style information should be taken from the next position, not current one.