Updated Scintilla to 1.52 (on the trunk this time too)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20296 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-04-19 20:00:02 +00:00
parent ce8897bbff
commit 9e730a7876
160 changed files with 13340 additions and 4404 deletions

View File

@@ -67,26 +67,28 @@ void wxSTCDropTarget::OnLeave() {
#define param2 wxBORDER_NONE // popup's 2nd param is flags
#else
#define wxSTCCallTipBase wxWindow
#define param2 -1 // wxWindows 2nd param is ID
#define param2 -1 // wxWindow's 2nd param is ID
#endif
class wxSTCCallTip : public wxSTCCallTipBase {
public:
wxSTCCallTip(wxWindow* parent, CallTip* ct)
: wxSTCCallTipBase(parent, param2)
wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx)
: wxSTCCallTipBase(parent, param2),
m_ct(ct), m_swx(swx)
{
m_ct = ct;
}
~wxSTCCallTip() {
if (HasCapture()) ReleaseMouse();
}
bool AcceptsFocus() const { return FALSE; }
void OnPaint(wxPaintEvent& evt) {
wxPaintDC dc(this);
Surface* surfaceWindow = Surface::Allocate();
surfaceWindow->Init(&dc);
surfaceWindow->Init(&dc, m_ct->wDraw.GetID());
m_ct->PaintCT(surfaceWindow);
surfaceWindow->Release();
delete surfaceWindow;
}
@@ -95,6 +97,13 @@ public:
event.Skip();
}
void OnLeftDown(wxMouseEvent& event) {
wxPoint pt = event.GetPosition();
Point p(pt.x, pt.y);
m_ct->MouseClick(p);
m_swx->CallTipClick();
}
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y,
int width, int height,
@@ -105,32 +114,18 @@ public:
GetParent()->ClientToScreen(NULL, &y);
wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags);
}
virtual bool Show( bool show = TRUE ) {
bool retval = wxSTCCallTipBase::Show(show);
if (show)
CaptureMouse();
else
if (HasCapture()) ReleaseMouse();
return retval;
}
void OnLeftDown(wxMouseEvent& ) {
Show(FALSE);
}
#endif
private:
CallTip* m_ct;
CallTip* m_ct;
ScintillaWX* m_swx;
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase)
EVT_PAINT(wxSTCCallTip::OnPaint)
EVT_SET_FOCUS(wxSTCCallTip::OnFocus)
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown)
#endif
END_EVENT_TABLE()
@@ -139,6 +134,7 @@ END_EVENT_TABLE()
ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) {
capturedMouse = false;
wMain = win;
stc = win;
wheelRotation = 0;
@@ -220,15 +216,16 @@ void ScintillaWX::SetTicking(bool on) {
void ScintillaWX::SetMouseCapture(bool on) {
if (on && !stc->HasCapture())
if (on && !capturedMouse)
stc->CaptureMouse();
else if (!on && stc->HasCapture())
else if (!on && capturedMouse && stc->HasCapture())
stc->ReleaseMouse();
capturedMouse = on;
}
bool ScintillaWX::HaveMouseCapture() {
return stc->HasCapture();
return capturedMouse;
}
@@ -387,8 +384,10 @@ bool ScintillaWX::CanPaste() {
}
void ScintillaWX::CreateCallTipWindow(PRectangle) {
ct.wCallTip = new wxSTCCallTip(stc, &ct);
ct.wDraw = ct.wCallTip;
if (! ct.wCallTip.Created() ) {
ct.wCallTip = new wxSTCCallTip(stc, &ct, this);
ct.wDraw = ct.wCallTip;
}
}
@@ -436,37 +435,37 @@ long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lPar
switch (iMessage) {
case SCI_CALLTIPSHOW: {
// NOTE: This is copied here from scintilla/src/ScintillaBase.cxx
// because of the little tweak that needs done below. When updating
// new versions double check that this is still needed, and that any
// new code there is copied here too.
// because of the little tweak that needs done below for wxGTK.
// When updating new versions double check that this is still
// needed, and that any new code there is copied here too.
Point pt = LocationFromPosition(wParam);
char* defn = reinterpret_cast<char *>(lParam);
AutoCompleteCancel();
if (!ct.wCallTip.Created()) {
Point pt = LocationFromPosition(wParam);
pt.y += vs.lineHeight;
PRectangle rc = ct.CallTipStart(currentPos, pt,
reinterpret_cast<char *>(lParam),
vs.styles[STYLE_DEFAULT].fontName,
vs.styles[STYLE_DEFAULT].sizeZoomed,
IsUnicodeMode());
// If the call-tip window would be out of the client
// space, adjust so it displays above the text.
PRectangle rcClient = GetClientRectangle();
if (rc.bottom > rcClient.bottom) {
pt.y += vs.lineHeight;
PRectangle rc = ct.CallTipStart(currentPos, pt,
defn,
vs.styles[STYLE_DEFAULT].fontName,
vs.styles[STYLE_DEFAULT].sizeZoomed,
IsUnicodeMode(),
wMain);
// If the call-tip window would be out of the client
// space, adjust so it displays above the text.
PRectangle rcClient = GetClientRectangle();
if (rc.bottom > rcClient.bottom) {
#ifdef __WXGTK__
int offset = int(vs.lineHeight * 1.25) + rc.Height();
int offset = int(vs.lineHeight * 1.25) + rc.Height();
#else
int offset = vs.lineHeight + rc.Height();
int offset = vs.lineHeight + rc.Height();
#endif
rc.top -= offset;
rc.bottom -= offset;
}
// Now display the window.
CreateCallTipWindow(rc);
ct.wCallTip.SetPositionRelative(rc, wMain);
ct.wCallTip.Show();
rc.top -= offset;
rc.bottom -= offset;
}
}
// Now display the window.
CreateCallTipWindow(rc);
ct.wCallTip.SetPositionRelative(rc, wMain);
ct.wCallTip.Show();
break;
}
default:
return ScintillaBase::WndProc(iMessage, wParam, lParam);
@@ -483,22 +482,22 @@ void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) {
paintState = painting;
Surface* surfaceWindow = Surface::Allocate();
surfaceWindow->Init(dc);
PRectangle rcPaint = PRectangleFromwxRect(rect);
surfaceWindow->Init(dc, wMain.GetID());
rcPaint = PRectangleFromwxRect(rect);
PRectangle rcClient = GetClientRectangle();
paintingAllText = rcPaint.Contains(rcClient);
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();
}
paintState = notPainting;
#ifdef __WXGTK__
// On wxGTK the editor window paints can overwrite the listbox...
if (ac.Active())
((wxWindow*)ac.lb.GetID())->Refresh(TRUE);
#endif
}
@@ -775,16 +774,18 @@ void ScintillaWX::DoDragLeave() {
// Redraw all of text area. This paint will not be abandoned.
void ScintillaWX::FullPaint() {
paintState = painting;
rcPaint = GetTextRectangle();
rcPaint = GetClientRectangle();
paintingAllText = true;
wxClientDC dc(stc);
Surface* surfaceWindow = Surface::Allocate();
surfaceWindow->Init(&dc);
surfaceWindow->Init(&dc, wMain.GetID());
dc.BeginDrawing();
ClipChildren(dc, rcPaint);
Paint(surfaceWindow, rcPaint);
dc.EndDrawing();
delete surfaceWindow;
// stc->Refresh(FALSE);
paintState = notPainting;
}
@@ -798,6 +799,21 @@ void ScintillaWX::DoScrollToColumn(int column) {
HorizontalScrollTo(column * vs.spaceWidth);
}
void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) {
#ifdef __WXGTK__
wxRegion rgn(wxRectFromPRectangle(rect));
if (ac.Active()) {
wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect();
rgn.Subtract(childRect);
}
if (ct.inCallTipMode) {
wxRect childRect = ((wxWindow*)ct.wCallTip.GetID())->GetRect();
rgn.Subtract(childRect);
}
dc.SetClippingRegion(rgn);
#endif
}
//----------------------------------------------------------------------