X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17e05a8e8820139c690bb852dbb7247cd67c4f7a..f675b4f521c6696648674d8901e2d6162ab5e2fb:/src/stc/ScintillaWX.cpp diff --git a/src/stc/ScintillaWX.cpp b/src/stc/ScintillaWX.cpp index b68bde05d3..b8a5352844 100644 --- a/src/stc/ScintillaWX.cpp +++ b/src/stc/ScintillaWX.cpp @@ -11,7 +11,7 @@ // Created: 13-Jan-2000 // RCS-ID: $Id$ // Copyright: (c) 2000 by Total Control Software -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". @@ -103,9 +103,9 @@ public: | wxFRAME_FLOAT_ON_PARENT | wxBORDER_NONE #ifdef __WXMAC__ - | wxPOPUP_WINDOW + | wxPOPUP_WINDOW #endif - ), + ), #endif m_ct(ct), m_swx(swx), m_cx(wxDefaultCoord), m_cy(wxDefaultCoord) { @@ -180,7 +180,7 @@ public: return rv; } #endif - + wxPoint GetMyPosition() { return wxPoint(m_cx, m_cy); @@ -263,11 +263,7 @@ void ScintillaWX::Initialise() { dropTarget->SetScintilla(this); stc->SetDropTarget(dropTarget); #endif // wxUSE_DRAG_AND_DROP -#ifdef __WXMAC__ - vs.extraFontFlag = false; // UseAntiAliasing -#else vs.extraFontFlag = true; // UseAntiAliasing -#endif } @@ -305,7 +301,7 @@ void ScintillaWX::StartDrag() { if (result == wxDragMove && dropWentOutside) ClearSelection(); inDragDrop = ddNone; - SetDragPosition(invalidPosition); + SetDragPosition(SelectionPosition(invalidPosition)); } #endif // wxUSE_DRAG_AND_DROP } @@ -315,11 +311,9 @@ bool ScintillaWX::SetIdle(bool on) { if (idler.state != on) { // connect or disconnect the EVT_IDLE handler if (on) - stc->Connect(wxID_ANY, wxEVT_IDLE, - (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); + stc->Connect(wxID_ANY, wxEVT_IDLE, wxIdleEventHandler(wxStyledTextCtrl::OnIdle)); else - stc->Disconnect(wxID_ANY, wxEVT_IDLE, - (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); + stc->Disconnect(wxID_ANY, wxEVT_IDLE, wxIdleEventHandler(wxStyledTextCtrl::OnIdle)); idler.state = on; } return idler.state; @@ -478,7 +472,7 @@ void ScintillaWX::CancelModes() { void ScintillaWX::Copy() { - if (currentPos != anchor) { + if (!sel.Empty()) { SelectionText st; CopySelectionRange(&st); CopyToClipboard(st); @@ -506,12 +500,13 @@ void ScintillaWX::Paste() { #if wxUSE_UNICODE // free up the old character buffer in case the text is real big - data.SetText(wxEmptyString); + data.SetText(wxEmptyString); text = wxEmptyString; #endif int len = strlen(buf); - pdoc->InsertString(currentPos, buf, len); - SetEmptySelection(currentPos + len); + int caretMain = sel.MainCaret(); + pdoc->InsertString(caretMain, buf, len); + SetEmptySelection(caretMain + len); } #endif // wxUSE_DATAOBJ @@ -523,6 +518,9 @@ void ScintillaWX::Paste() { void ScintillaWX::CopyToClipboard(const SelectionText& st) { #if wxUSE_CLIPBOARD + if ( !st.len ) + return; + wxTheClipboard->UsePrimarySelection(false); if (wxTheClipboard->Open()) { wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len-1)); @@ -583,7 +581,7 @@ void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) { void ScintillaWX::ClaimSelection() { #ifdef __WXGTK__ // Put the selected text in the PRIMARY selection - if (currentPos != anchor) { + if (!sel.Empty()) { SelectionText st; CopySelectionRange(&st); wxTheClipboard->UsePrimarySelection(true); @@ -605,7 +603,7 @@ void ScintillaWX::UpdateSystemCaret() { DestroySystemCaret(); CreateSystemCaret(); } - Point pos = LocationFromPosition(currentPos); + Point pos = PointMainCaret(); ::SetCaretPos(pos.x, pos.y); } #endif @@ -614,8 +612,8 @@ void ScintillaWX::UpdateSystemCaret() { bool ScintillaWX::HasCaretSizeChanged() { #ifdef __WXMSW__ - if (( (0 != vs.caretWidth) && (sysCaretWidth != vs.caretWidth) ) - || (0 != vs.lineHeight) && (sysCaretHeight != vs.lineHeight)) { + if ( (vs.caretWidth && (sysCaretWidth != vs.caretWidth)) + || (vs.lineHeight && (sysCaretHeight != vs.lineHeight)) ) { return true; } #endif @@ -677,12 +675,18 @@ sptr_t ScintillaWX::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) char* defn = reinterpret_cast(lParam); AutoCompleteCancel(); pt.y += vs.lineHeight; - PRectangle rc = ct.CallTipStart(currentPos, pt, + int ctStyle = ct.UseStyleCallTip() ? STYLE_CALLTIP : STYLE_DEFAULT; + if (ct.UseStyleCallTip()) + { + ct.SetForeBack(vs.styles[STYLE_CALLTIP].fore, vs.styles[STYLE_CALLTIP].back); + } + int caretMain = sel.MainCaret(); + PRectangle rc = ct.CallTipStart(caretMain, pt, defn, - vs.styles[STYLE_DEFAULT].fontName, - vs.styles[STYLE_DEFAULT].sizeZoomed, + vs.styles[ctStyle].fontName, + vs.styles[ctStyle].sizeZoomed, CodePage(), - vs.styles[STYLE_DEFAULT].characterSet, + vs.styles[ctStyle].characterSet, wMain); // If the call-tip window would be out of the client // space, adjust so it displays above the text. @@ -860,7 +864,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, noSel, true); + MovePositionTo(newPos, Selection::noSel, true); pdoc->BeginUndoAction(); wxTextDataObject data; @@ -876,8 +880,9 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) { wxConvertEOLMode(pdoc->eolMode)); wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); int len = strlen(buf); - pdoc->InsertString(currentPos, buf, len); - SetEmptySelection(currentPos + len); + int caretMain = sel.MainCaret(); + pdoc->InsertString(caretMain, buf, len); + SetEmptySelection(caretMain + len); } pdoc->EndUndoAction(); NotifyChange(); @@ -1005,7 +1010,7 @@ void ScintillaWX::DoOnIdle(wxIdleEvent& evt) { #if wxUSE_DRAG_AND_DROP bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { - SetDragPosition(invalidPosition); + SetDragPosition(SelectionPosition(invalidPosition)); wxString text = wxTextBuffer::Translate(data, wxConvertEOLMode(pdoc->eolMode)); @@ -1022,7 +1027,7 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { dragResult = evt.GetDragResult(); if (dragResult == wxDragMove || dragResult == wxDragCopy) { - DropAt(evt.GetPosition(), + DropAt(SelectionPosition(evt.GetPosition()), wx2stc(evt.GetDragText()), dragResult == wxDragMove, false); // TODO: rectangular? @@ -1039,7 +1044,7 @@ wxDragResult ScintillaWX::DoDragEnter(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult ScintillaWX::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) { - SetDragPosition(PositionFromLocation(Point(x, y))); + SetDragPosition(SelectionPosition(PositionFromLocation(Point(x, y)))); // Send an event to allow the drag result to be changed wxStyledTextEvent evt(wxEVT_STC_DRAG_OVER, stc->GetId()); @@ -1056,7 +1061,7 @@ wxDragResult ScintillaWX::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) { void ScintillaWX::DoDragLeave() { - SetDragPosition(invalidPosition); + SetDragPosition(SelectionPosition(invalidPosition)); } #endif // wxUSE_DRAG_AND_DROP //---------------------------------------------------------------------- @@ -1106,7 +1111,7 @@ void ScintillaWX::SetUseAntiAliasing(bool useAA) { } bool ScintillaWX::GetUseAntiAliasing() { - return vs.extraFontFlag; + return vs.extraFontFlag != 0; } //----------------------------------------------------------------------