]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextctrl.cpp
Define wxLongLong_t for Intel compiler.
[wxWidgets.git] / src / richtext / richtextctrl.cpp
index 3e0b4c7a4a69e66b325a058702c3afa35ec593a6..7657356d3527b925f81e7f5e08ea43c465d2f407 100644 (file)
 #include "wx/app.h"
 WX_CHECK_BUILD_OPTIONS("wxRichTextCtrl")
 
 #include "wx/app.h"
 WX_CHECK_BUILD_OPTIONS("wxRichTextCtrl")
 
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_RETURN, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_CHARACTER, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_DELETE, wxRichTextEvent );
-
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, wxRichTextEvent );
-
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_PROPERTIES_CHANGED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, wxRichTextEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_LEFT_CLICK, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_MIDDLE_CLICK, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_RIGHT_CLICK, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_LEFT_DCLICK, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_RETURN, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_CHARACTER, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_DELETE, wxRichTextEvent );
+
+wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLESHEET_REPLACING, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLESHEET_REPLACED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLESHEET_CHANGING, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLESHEET_CHANGED, wxRichTextEvent );
+
+wxDEFINE_EVENT( wxEVT_RICHTEXT_CONTENT_INSERTED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_CONTENT_DELETED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_STYLE_CHANGED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_PROPERTIES_CHANGED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_SELECTION_CHANGED, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_BUFFER_RESET, wxRichTextEvent );
+wxDEFINE_EVENT( wxEVT_RICHTEXT_FOCUS_OBJECT_CHANGED, wxRichTextEvent );
 
 #if wxRICHTEXT_USE_OWN_CARET
 
 
 #if wxRICHTEXT_USE_OWN_CARET
 
@@ -149,6 +149,8 @@ private:
     wxRichTextCaretTimer m_timer;
     wxRichTextCtrl* m_richTextCtrl;
     bool          m_refreshEnabled;
     wxRichTextCaretTimer m_timer;
     wxRichTextCtrl* m_richTextCtrl;
     bool          m_refreshEnabled;
+    wxPen         m_caretPen;
+    wxBrush       m_caretBrush;
 };
 #endif
 
 };
 #endif
 
@@ -691,7 +693,7 @@ void wxRichTextCtrl::OnLeftUp(wxMouseEvent& event)
         if ((hit != wxRICHTEXT_HITTEST_NONE) && !(hit & wxRICHTEXT_HITTEST_OUTSIDE))
         {
             wxRichTextEvent cmdEvent(
         if ((hit != wxRICHTEXT_HITTEST_NONE) && !(hit & wxRICHTEXT_HITTEST_OUTSIDE))
         {
             wxRichTextEvent cmdEvent(
-                wxEVT_COMMAND_RICHTEXT_LEFT_CLICK,
+                wxEVT_RICHTEXT_LEFT_CLICK,
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetPosition(position);
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetPosition(position);
@@ -990,7 +992,7 @@ void wxRichTextCtrl::OnRightClick(wxMouseEvent& event)
     }
 
     wxRichTextEvent cmdEvent(
     }
 
     wxRichTextEvent cmdEvent(
-        wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK,
+        wxEVT_RICHTEXT_RIGHT_CLICK,
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(position);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(position);
@@ -1005,7 +1007,7 @@ void wxRichTextCtrl::OnRightClick(wxMouseEvent& event)
 void wxRichTextCtrl::OnLeftDClick(wxMouseEvent& WXUNUSED(event))
 {
     wxRichTextEvent cmdEvent(
 void wxRichTextCtrl::OnLeftDClick(wxMouseEvent& WXUNUSED(event))
 {
     wxRichTextEvent cmdEvent(
-        wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK,
+        wxEVT_RICHTEXT_LEFT_DCLICK,
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
@@ -1021,7 +1023,7 @@ void wxRichTextCtrl::OnLeftDClick(wxMouseEvent& WXUNUSED(event))
 void wxRichTextCtrl::OnMiddleClick(wxMouseEvent& event)
 {
     wxRichTextEvent cmdEvent(
 void wxRichTextCtrl::OnMiddleClick(wxMouseEvent& event)
 {
     wxRichTextEvent cmdEvent(
-        wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK,
+        wxEVT_RICHTEXT_MIDDLE_CLICK,
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
         GetId());
     cmdEvent.SetEventObject(this);
     cmdEvent.SetPosition(m_caretPosition+1);
@@ -1197,7 +1199,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
         ScrollIntoView(m_caretPosition, WXK_RIGHT);
 
         wxRichTextEvent cmdEvent(
         ScrollIntoView(m_caretPosition, WXK_RIGHT);
 
         wxRichTextEvent cmdEvent(
-            wxEVT_COMMAND_RICHTEXT_RETURN,
+            wxEVT_RICHTEXT_RETURN,
             GetId());
         cmdEvent.SetEventObject(this);
         cmdEvent.SetFlags(flags);
             GetId());
         cmdEvent.SetEventObject(this);
         cmdEvent.SetFlags(flags);
@@ -1207,7 +1209,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
         if (!GetEventHandler()->ProcessEvent(cmdEvent))
         {
             // Generate conventional event
         if (!GetEventHandler()->ProcessEvent(cmdEvent))
         {
             // Generate conventional event
-            wxCommandEvent textEvent(wxEVT_COMMAND_TEXT_ENTER, GetId());
+            wxCommandEvent textEvent(wxEVT_TEXT_ENTER, GetId());
             InitCommandEvent(textEvent);
 
             GetEventHandler()->ProcessEvent(textEvent);
             InitCommandEvent(textEvent);
 
             GetEventHandler()->ProcessEvent(textEvent);
@@ -1277,10 +1279,10 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
 
         ScrollIntoView(m_caretPosition, WXK_LEFT);
 
 
         ScrollIntoView(m_caretPosition, WXK_LEFT);
 
-        // Always send this event; wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED will be sent only if there is an actual deletion.
+        // Always send this event; wxEVT_RICHTEXT_CONTENT_DELETED will be sent only if there is an actual deletion.
         {
             wxRichTextEvent cmdEvent(
         {
             wxRichTextEvent cmdEvent(
-                wxEVT_COMMAND_RICHTEXT_DELETE,
+                wxEVT_RICHTEXT_DELETE,
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetFlags(flags);
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetFlags(flags);
@@ -1316,7 +1318,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event)
                 }
 
                 wxRichTextEvent cmdEvent(
                 }
 
                 wxRichTextEvent cmdEvent(
-                    wxEVT_COMMAND_RICHTEXT_CHARACTER,
+                    wxEVT_RICHTEXT_CHARACTER,
                     GetId());
                 cmdEvent.SetEventObject(this);
                 cmdEvent.SetFlags(flags);
                     GetId());
                 cmdEvent.SetEventObject(this);
                 cmdEvent.SetFlags(flags);
@@ -1501,10 +1503,10 @@ bool wxRichTextCtrl::ProcessBackKey(wxKeyEvent& event, int flags)
 
         ScrollIntoView(m_caretPosition, WXK_LEFT);
 
 
         ScrollIntoView(m_caretPosition, WXK_LEFT);
 
-        // Always send this event; wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED will be sent only if there is an actual deletion.
+        // Always send this event; wxEVT_RICHTEXT_CONTENT_DELETED will be sent only if there is an actual deletion.
         {
             wxRichTextEvent cmdEvent(
         {
             wxRichTextEvent cmdEvent(
-                wxEVT_COMMAND_RICHTEXT_DELETE,
+                wxEVT_RICHTEXT_DELETE,
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetFlags(flags);
                 GetId());
             cmdEvent.SetEventObject(this);
             cmdEvent.SetFlags(flags);
@@ -3757,7 +3759,9 @@ void wxRichTextCtrl::PositionCaret(wxRichTextParagraphLayoutBox* container)
     wxRect caretRect;
     if (GetCaretPositionForIndex(GetCaretPosition(), caretRect, container))
     {
     wxRect caretRect;
     if (GetCaretPositionForIndex(GetCaretPosition(), caretRect, container))
     {
+#if !wxRICHTEXT_USE_OWN_CARET
         caretRect = GetScaledRect(caretRect);
         caretRect = GetScaledRect(caretRect);
+#endif
         int topMargin = (int) (0.5 + GetScale()*GetBuffer().GetTopMargin());
         int bottomMargin = (int) (0.5 + GetScale()*GetBuffer().GetBottomMargin());
         wxPoint newPt = caretRect.GetPosition();
         int topMargin = (int) (0.5 + GetScale()*GetBuffer().GetTopMargin());
         int bottomMargin = (int) (0.5 + GetScale()*GetBuffer().GetBottomMargin());
         wxPoint newPt = caretRect.GetPosition();
@@ -3890,6 +3894,7 @@ bool wxRichTextCtrl::LayoutContent(bool onlyVisibleRect)
 
         PrepareDC(dc);
         dc.SetFont(GetFont());
 
         PrepareDC(dc);
         dc.SetFont(GetFont());
+        dc.SetUserScale(GetScale(), GetScale());
 
         wxRichTextDrawingContext context(& GetBuffer());
         GetBuffer().Defragment(context);
 
         wxRichTextDrawingContext context(& GetBuffer());
         GetBuffer().Defragment(context);
@@ -3897,6 +3902,8 @@ bool wxRichTextCtrl::LayoutContent(bool onlyVisibleRect)
         GetBuffer().Layout(dc, context, availableSpace, availableSpace, flags);
         GetBuffer().Invalidate(wxRICHTEXT_NONE);
 
         GetBuffer().Layout(dc, context, availableSpace, availableSpace, flags);
         GetBuffer().Invalidate(wxRICHTEXT_NONE);
 
+        dc.SetUserScale(1.0, 1.0);
+
         if (!IsFrozen() && !onlyVisibleRect)
             SetupScrollbars();
     }
         if (!IsFrozen() && !onlyVisibleRect)
             SetupScrollbars();
     }
@@ -4549,7 +4556,7 @@ bool wxRichTextCtrl::SetFocusObject(wxRichTextParagraphLayoutBox* obj, bool setC
         SetDefaultStyleToCursorStyle();
 
         wxRichTextEvent cmdEvent(
         SetDefaultStyleToCursorStyle();
 
         wxRichTextEvent cmdEvent(
-            wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED,
+            wxEVT_RICHTEXT_FOCUS_OBJECT_CHANGED,
             GetId());
         cmdEvent.SetEventObject(this);
         cmdEvent.SetPosition(m_caretPosition+1);
             GetId());
         cmdEvent.SetEventObject(this);
         cmdEvent.SetPosition(m_caretPosition+1);
@@ -4772,7 +4779,7 @@ void wxRichTextCaret::DoShow()
 {
     m_flashOn = true;
 
 {
     m_flashOn = true;
 
-    if (!m_timer.IsRunning())
+    if (!m_timer.IsRunning() && GetBlinkTime() > 0)
         m_timer.Start(GetBlinkTime());
 
     Refresh();
         m_timer.Start(GetBlinkTime());
 
     Refresh();
@@ -4796,8 +4803,9 @@ void wxRichTextCaret::DoMove()
         {
             if (m_richTextCtrl && m_refreshEnabled)
             {
         {
             if (m_richTextCtrl && m_refreshEnabled)
             {
-                wxRect rect(GetPosition(), GetSize());
-                m_richTextCtrl->RefreshRect(rect, false);
+                wxRect rect(wxPoint(m_xOld, m_yOld), GetSize());
+                wxRect scaledRect = m_richTextCtrl->GetScaledRect(rect);
+                m_richTextCtrl->RefreshRect(scaledRect, false);
             }
         }
     }
             }
         }
     }
@@ -4848,16 +4856,22 @@ void wxRichTextCaret::Refresh()
     if (m_richTextCtrl && m_refreshEnabled)
     {
         wxRect rect(GetPosition(), GetSize());
     if (m_richTextCtrl && m_refreshEnabled)
     {
         wxRect rect(GetPosition(), GetSize());
-        m_richTextCtrl->RefreshRect(rect, false);
+        wxRect rectScaled = m_richTextCtrl->GetScaledRect(rect);
+        m_richTextCtrl->RefreshRect(rectScaled, false);
     }
 }
 
 void wxRichTextCaret::DoDraw(wxDC *dc)
 {
     }
 }
 
 void wxRichTextCaret::DoDraw(wxDC *dc)
 {
-    dc->SetPen( *wxBLACK_PEN );
-
-    dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH));
-    dc->SetPen(*wxBLACK_PEN);
+    wxBrush brush(m_caretBrush);
+    wxPen pen(m_caretPen);
+    if (m_richTextCtrl && m_richTextCtrl->GetBasicStyle().HasTextColour())
+    {
+        brush = wxBrush(m_richTextCtrl->GetBasicStyle().GetTextColour());
+        pen = wxPen(m_richTextCtrl->GetBasicStyle().GetTextColour());
+    }
+    dc->SetBrush((m_hasFocus ? brush : *wxTRANSPARENT_BRUSH));
+    dc->SetPen(pen);
 
     wxPoint pt(m_x, m_y);
 
 
     wxPoint pt(m_x, m_y);