]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/stc/ScintillaWX.cpp
implemented wxTE_RIGHT, wxTE_CENTRE for wxGTK2 (patch 957687)
[wxWidgets.git] / contrib / src / stc / ScintillaWX.cpp
index 6acb7805d1a7996cc1e8831ecf9099f809d7442f..485b612cc995a46a6413af7844b4438f6a70b0b8 100644 (file)
@@ -19,6 +19,7 @@
 #include "ExternalLexer.h"
 #include "wx/stc/stc.h"
 #include "PlatWX.h"
+#include <wx/textbuf.h>
 
 //----------------------------------------------------------------------
 // Helper classes
@@ -57,11 +58,6 @@ void  wxSTCDropTarget::OnLeave() {
 #endif
 
 
-#ifdef __WXGTK__
-#undef wxSTC_USE_POPUP
-#define wxSTC_USE_POPUP 0
-#endif
-
 #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
 #include <wx/popupwin.h>
 #define wxSTCCallTipBase wxPopupWindow
@@ -84,7 +80,7 @@ public:
 
     bool AcceptsFocus() const { return FALSE; }
 
-    void OnPaint(wxPaintEvent& evt) {
+    void OnPaint(wxPaintEvent& WXUNUSED(evt)) {
         wxPaintDC dc(this);
         Surface* surfaceWindow = Surface::Allocate();
         surfaceWindow->Init(&dc, m_ct->wDraw.GetID());
@@ -145,7 +141,7 @@ ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) {
 
 
 ScintillaWX::~ScintillaWX() {
-    SetTicking(false);
+    Finalise();
 }
 
 //----------------------------------------------------------------------
@@ -159,11 +155,18 @@ void ScintillaWX::Initialise() {
     dropTarget->SetScintilla(this);
     stc->SetDropTarget(dropTarget);
 #endif
+#ifdef __WXMAC__
+    vs.extraFontFlag = false;  // UseAntiAliasing
+#else
+    vs.extraFontFlag = true;   // UseAntiAliasing
+#endif
 }
 
 
 void ScintillaWX::Finalise() {
     ScintillaBase::Finalise();
+    SetTicking(false);
+    SetIdle(false);
 }
 
 
@@ -198,6 +201,21 @@ void ScintillaWX::StartDrag() {
 }
 
 
+bool ScintillaWX::SetIdle(bool on) {
+    if (idler.state != on) {
+        // connect or disconnect the EVT_IDLE handler
+        if (on) 
+            stc->Connect(-1, wxEVT_IDLE,
+                         (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle);
+        else
+            stc->Disconnect(-1, wxEVT_IDLE,
+                            (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle);
+        idler.state = on;
+    }
+    return idler.state;
+}
+
+    
 void ScintillaWX::SetTicking(bool on) {
     wxSTCTimer* steTimer;
     if (timer.ticking != on) {
@@ -218,11 +236,13 @@ void ScintillaWX::SetTicking(bool on) {
 
 
 void ScintillaWX::SetMouseCapture(bool on) {
-    if (on && !capturedMouse)
-        stc->CaptureMouse();
-    else if (!on && capturedMouse && stc->HasCapture())
-        stc->ReleaseMouse();
-    capturedMouse = on;
+    if (mouseDownCaptures) {
+        if (on && !capturedMouse)
+            stc->CaptureMouse();
+        else if (!on && capturedMouse && stc->HasCapture())
+            stc->ReleaseMouse();
+        capturedMouse = on;
+    }
 }
 
 
@@ -384,7 +404,7 @@ void ScintillaWX::Paste() {
 void ScintillaWX::CopyToClipboard(const SelectionText& st) {
     if (wxTheClipboard->Open()) {
         wxTheClipboard->UsePrimarySelection(FALSE);
-        wxString text = stc2wx(st.s, st.len);
+        wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len));
         wxTheClipboard->SetData(new wxTextDataObject(text));
         wxTheClipboard->Close();
     }
@@ -522,14 +542,15 @@ void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) {
     dc->BeginDrawing();
     ClipChildren(*dc, rcPaint);
     Paint(surfaceWindow, rcPaint);
-    dc->EndDrawing();
 
     delete surfaceWindow;
     if (paintState == paintAbandoned) {
-        // Painting area was insufficient to cover new styling or brace highlight positions
+        // Painting area was insufficient to cover new styling or brace
+        // highlight positions
         FullPaint();
     }
     paintState = notPainting;
+    dc->EndDrawing();
 }
 
 
@@ -651,7 +672,7 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) {
     // Set the current position to the mouse click point and
     // then paste in the PRIMARY selection, if any.  wxGTK only.
     int newPos = PositionFromLocation(pt);
-    MovePositionTo(newPos, 0, 1);
+    MovePositionTo(newPos, noSel, true);
 
     pdoc->BeginUndoAction();
     wxTextDataObject data;
@@ -774,6 +795,15 @@ void ScintillaWX::DoOnListBox() {
     AutoCompleteCompleted();
 }
 
+void ScintillaWX::DoOnIdle(wxIdleEvent& evt) {
+
+    if ( Idle() )
+        evt.RequestMore();
+    else
+        SetIdle(false);
+}
 //----------------------------------------------------------------------
 
 #if wxUSE_DRAG_AND_DROP
@@ -831,22 +861,10 @@ void ScintillaWX::DoDragLeave() {
 #endif
 //----------------------------------------------------------------------
 
-// Redraw all of text area. This paint will not be abandoned.
+// Force the whole window to be repainted
 void ScintillaWX::FullPaint() {
-    paintState = painting;
-    rcPaint = GetClientRectangle();
-    paintingAllText = true;
-    wxClientDC dc(stc);
-    Surface* surfaceWindow = Surface::Allocate();
-    surfaceWindow->Init(&dc, wMain.GetID());
-
-    dc.BeginDrawing();
-    ClipChildren(dc, rcPaint);
-    Paint(surfaceWindow, rcPaint);
-    dc.EndDrawing();
-
-    delete surfaceWindow;
-    paintState = notPainting;
+    stc->Refresh(false);
+    stc->Update();
 }
 
 
@@ -878,5 +896,15 @@ void ScintillaWX::ClipChildren(wxDC& WXUNUSED(dc), PRectangle WXUNUSED(rect)) {
 }
 #endif
 
+
+void ScintillaWX::SetUseAntiAliasing(bool useAA) {
+    vs.extraFontFlag = useAA;
+    InvalidateStyleRedraw();
+}
+
+bool ScintillaWX::GetUseAntiAliasing() {
+    return vs.extraFontFlag;
+}
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------