////////////////////////////////////////////////////////////////////////////
// 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
#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
#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)
}
~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);
dropTarget->SetScintilla(this);
stc->SetDropTarget(dropTarget);
#endif
- vs.extraFontFlag = true;
+#ifdef __WXMAC__
+ vs.extraFontFlag = false; // UseAntiAliasing
+#else
+ vs.extraFontFlag = true; // UseAntiAliasing
+#endif
}
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
- FullPaint(dc);
+ // Painting area was insufficient to cover new styling or brace
+ // highlight positions
+ FullPaint();
}
paintState = notPainting;
+ dc->EndDrawing();
}
#endif
//----------------------------------------------------------------------
-// Redraw all of text area. This paint will not be abandoned.
-void ScintillaWX::FullPaint(wxDC *dc) {
- wxCHECK_RET(dc != NULL, wxT("Invalid wxDC in ScintillaWX::FillPaint"));
- paintState = painting;
- rcPaint = GetClientRectangle();
- paintingAllText = true;
- Surface* surfaceWindow = Surface::Allocate();
- surfaceWindow->Init(dc, wMain.GetID());
-
- dc->BeginDrawing();
- ClipChildren(*dc, rcPaint);
- Paint(surfaceWindow, rcPaint);
- dc->EndDrawing();
-
- delete surfaceWindow;
- paintState = notPainting;
+// Force the whole window to be repainted
+void ScintillaWX::FullPaint() {
+ stc->Refresh(false);
+ stc->Update();
}
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);
}