X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cadea444a0071f2fc92d1a98eed40766dbfbc473..f53b1c1e6f5546e9916debbf5f93c652edca0ef6:/contrib/src/stc/ScintillaWX.cpp diff --git a/contrib/src/stc/ScintillaWX.cpp b/contrib/src/stc/ScintillaWX.cpp index 62ac066fb9..de7f683e54 100644 --- a/contrib/src/stc/ScintillaWX.cpp +++ b/contrib/src/stc/ScintillaWX.cpp @@ -1,6 +1,6 @@ //////////////////////////////////////////////////////////////////////////// // Name: ScintillaWX.cxx -// Purpose: A wxWindows implementation of Scintilla. A class derived +// Purpose: A wxWidgets implementation of Scintilla. A class derived // from ScintillaBase that uses the "wx platform" defined in // PlatformWX.cxx This class is one end of a bridge between // the wx world and the Scintilla world. It needs a peer @@ -67,6 +67,8 @@ void wxSTCDropTarget::OnLeave() { #define param2 -1 // wxWindow's 2nd param is ID #endif +#include + class wxSTCCallTip : public wxSTCCallTipBase { public: wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx) @@ -76,12 +78,17 @@ public: } ~wxSTCCallTip() { +#if wxUSE_POPUPWIN && wxSTC_USE_POPUP && defined(__WXGTK__) + wxRect rect = GetRect(); + GetParent()->ScreenToClient(&rect.x, &rect.y); + 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); @@ -547,7 +554,7 @@ void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) { if (paintState == paintAbandoned) { // Painting area was insufficient to cover new styling or brace // highlight positions - FullPaint(dc); + FullPaint(); } paintState = notPainting; dc->EndDrawing(); @@ -862,7 +869,7 @@ void ScintillaWX::DoDragLeave() { //---------------------------------------------------------------------- // Force the whole window to be repainted -void ScintillaWX::FullPaint(wxDC *dc) { +void ScintillaWX::FullPaint() { stc->Refresh(false); stc->Update(); } @@ -885,7 +892,11 @@ void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) { rgn.Subtract(childRect); } if (ct.inCallTipMode) { - wxRect childRect = ((wxWindow*)ct.wCallTip.GetID())->GetRect(); + wxWindow* tip = (wxWindow*)ct.wCallTip.GetID(); + wxRect childRect = tip->GetRect(); +#if wxUSE_POPUPWIN && wxSTC_USE_POPUP + tip->GetParent()->ScreenToClient(&childRect.x, &childRect.y); +#endif rgn.Subtract(childRect); }