#define param2 -1 // wxWindow's 2nd param is ID
#endif
+#include <wx/dcbuffer.h>
+
class wxSTCCallTip : public wxSTCCallTipBase {
public:
wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx)
: wxSTCCallTipBase(parent, param2),
- m_ct(ct), m_swx(swx)
+ m_ct(ct), m_swx(swx), m_cx(-1), m_cy(-1)
{
}
~wxSTCCallTip() {
+#if wxUSE_POPUPWIN && wxSTC_USE_POPUP && defined(__WXGTK__)
+ wxRect rect = GetRect();
+ rect.x = m_cx;
+ rect.y = m_cy;
+ GetParent()->Refresh(false, &rect);
+#endif
}
bool AcceptsFocus() const { return FALSE; }
void OnPaint(wxPaintEvent& WXUNUSED(evt)) {
- wxPaintDC dc(this);
+ wxBufferedPaintDC dc(this);
Surface* surfaceWindow = Surface::Allocate();
surfaceWindow->Init(&dc, m_ct->wDraw.GetID());
m_ct->PaintCT(surfaceWindow);
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO) {
- if (x != -1)
+ if (x != -1) {
+ m_cx = x;
GetParent()->ClientToScreen(&x, NULL);
- if (y != -1)
+ }
+ if (y != -1) {
+ m_cy = y;
GetParent()->ClientToScreen(NULL, &y);
+ }
wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags);
}
#endif
+ wxPoint GetMyPosition() {
+ return wxPoint(m_cx, m_cy);
+ }
+
private:
CallTip* m_ct;
ScintillaWX* m_swx;
+ int m_cx, m_cy;
DECLARE_EVENT_TABLE()
};
END_EVENT_TABLE()
+//----------------------------------------------------------------------
+
+static wxTextFileType wxConvertEOLMode(int scintillaMode)
+{
+ wxTextFileType type;
+
+ switch (scintillaMode) {
+ case wxSTC_EOL_CRLF:
+ type = wxTextFileType_Dos;
+ break;
+
+ case wxSTC_EOL_CR:
+ type = wxTextFileType_Mac;
+ break;
+
+ case wxSTC_EOL_LF:
+ type = wxTextFileType_Unix;
+ break;
+
+ default:
+ type = wxTextBuffer::typeDefault;
+ break;
+ }
+ return type;
+}
+
+
//----------------------------------------------------------------------
// Constructor/Destructor
wxTheClipboard->Close();
}
if (gotData) {
- wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText());
+ wxString text = wxTextBuffer::Translate(data.GetText(),
+ wxConvertEOLMode(pdoc->eolMode));
+ wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text);
int len = strlen(buf);
pdoc->InsertString(currentPos, buf, len);
SetEmptySelection(currentPos + len);
wxTheClipboard->Close();
}
if (gotData) {
- wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText());
+ wxString text = wxTextBuffer::Translate(data.GetText(),
+ wxConvertEOLMode(pdoc->eolMode));
+ wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text);
int len = strlen(buf);
pdoc->InsertString(currentPos, buf, len);
SetEmptySelection(currentPos + len);
bool ScintillaWX::DoDropText(long x, long y, const wxString& data) {
SetDragPosition(invalidPosition);
+ wxString text = wxTextBuffer::Translate(data,
+ wxConvertEOLMode(pdoc->eolMode));
+
// Send an event to allow the drag details to be changed
wxStyledTextEvent evt(wxEVT_STC_DO_DROP, stc->GetId());
evt.SetEventObject(stc);
evt.SetX(x);
evt.SetY(y);
evt.SetPosition(PositionFromLocation(Point(x,y)));
- evt.SetDragText(data);
+ evt.SetDragText(text);
stc->GetEventHandler()->ProcessEvent(evt);
dragResult = evt.GetDragResult();
rgn.Subtract(childRect);
}
if (ct.inCallTipMode) {
- wxRect childRect = ((wxWindow*)ct.wCallTip.GetID())->GetRect();
+ wxSTCCallTip* tip = (wxSTCCallTip*)ct.wCallTip.GetID();
+ wxRect childRect = tip->GetRect();
+#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
+ childRect.SetPosition(tip->GetMyPosition());
+#endif
rgn.Subtract(childRect);
}