diff --git a/contrib/src/stc/ScintillaWX.cpp b/contrib/src/stc/ScintillaWX.cpp index 50bfac2f18..10859100d6 100644 --- a/contrib/src/stc/ScintillaWX.cpp +++ b/contrib/src/stc/ScintillaWX.cpp @@ -467,8 +467,9 @@ void ScintillaWX::DoVScroll(int type, int pos) { ScrollTo(topLineNew); } - -void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown) { +void ScintillaWX::DoMouseWheel(int rotation, int delta, + int linesPerAction, int ctrlDown, + bool isPageScroll ) { int topLineNew = topLine; int lines; @@ -485,7 +486,10 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int lines = wheelRotation / delta; wheelRotation -= lines * delta; if (lines != 0) { - lines *= linesPerAction; + if (isPageScroll) + lines = lines * LinesOnScreen(); // lines is either +1 or -1 + else + lines *= linesPerAction; topLineNew -= lines; ScrollTo(topLineNew); } diff --git a/contrib/src/stc/ScintillaWX.h b/contrib/src/stc/ScintillaWX.h index 3174e9efc3..5f87911952 100644 --- a/contrib/src/stc/ScintillaWX.h +++ b/contrib/src/stc/ScintillaWX.h @@ -125,7 +125,7 @@ public: void DoButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); void DoButtonUp(Point pt, unsigned int curTime, bool ctrl); void DoButtonMove(Point pt); - void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown); + void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll); void DoAddChar(int key); int DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed); void DoTick() { Tick(); } diff --git a/contrib/src/stc/stc.cpp b/contrib/src/stc/stc.cpp index 0a8ccd6bc1..e44ed9856f 100644 --- a/contrib/src/stc/stc.cpp +++ b/contrib/src/stc/stc.cpp @@ -1912,7 +1912,8 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { m_swx->DoMouseWheel(evt.GetWheelRotation(), evt.GetWheelDelta(), evt.GetLinesPerAction(), - evt.ControlDown()); + evt.ControlDown(), + evt.IsPageScroll()); } diff --git a/contrib/src/stc/stc.cpp.in b/contrib/src/stc/stc.cpp.in index fd17cb2e76..9e3083e7d2 100644 --- a/contrib/src/stc/stc.cpp.in +++ b/contrib/src/stc/stc.cpp.in @@ -365,7 +365,8 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { m_swx->DoMouseWheel(evt.GetWheelRotation(), evt.GetWheelDelta(), evt.GetLinesPerAction(), - evt.ControlDown()); + evt.ControlDown(), + evt.IsPageScroll()); } diff --git a/docs/latex/wx/mouseevt.tex b/docs/latex/wx/mouseevt.tex index 6cb90ed0ff..a26d2b4c76 100644 --- a/docs/latex/wx/mouseevt.tex +++ b/docs/latex/wx/mouseevt.tex @@ -14,15 +14,15 @@ drawbacks: the LEAVE\_WINDOW event might be received some time after the mouse left the window and the state variables for it may have changed during this time. -{\bf NB:} Note the difference between methods like -\helpref{LeftDown}{wxmouseeventleftdown} and -\helpref{LeftIsDown}{wxmouseeventleftisdown}: the format returns {\tt TRUE} +{\bf NB:} Note the difference between methods like +\helpref{LeftDown}{wxmouseeventleftdown} and +\helpref{LeftIsDown}{wxmouseeventleftisdown}: the format returns {\tt TRUE} when the event corresponds to the left mouse button click while the latter returns {\tt TRUE} if the left mouse button is currently being pressed. For -example, when the user is dragging the mouse you can use +example, when the user is dragging the mouse you can use \helpref{LeftIsDown}{wxmouseeventleftisdown} to test whether the left mouse button is (still) depressed. Also, by convention, if -\helpref{LeftDown}{wxmouseeventleftdown} returns {\tt TRUE}, +\helpref{LeftDown}{wxmouseeventleftdown} returns {\tt TRUE}, \helpref{LeftIsDown}{wxmouseeventleftisdown} will also return {\tt TRUE} in wxWindows whatever the underlying GUI behaviour is (which is platform-dependent). The same applies, of course, to other mouse buttons as @@ -291,6 +291,13 @@ Returns Y coordinate of the physical mouse event position. Returns TRUE if the event was a mouse button event (not necessarily a button down event - that may be tested using {\it ButtonDown}). +\membersection{wxMouseEvent::IsPageScroll} + +\constfunc{bool}{IsPageScroll}{\void} + +Returns TRUE if the system has been setup to do page scrolling with +the mouse wheel instead of line scrolling. + \membersection{wxMouseEvent::Leaving}\label{wxmouseeventleaving} \constfunc{bool}{Leaving}{\void} diff --git a/include/wx/event.h b/include/wx/event.h index c5d9a283b7..2c80ffb207 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -741,6 +741,9 @@ public: // wheel action. Defaults to one. int GetLinesPerAction() const { return m_linesPerAction; } + // Is the system set to do page scrolling? + bool IsPageScroll() const { return m_linesPerAction == UINT_MAX; } + virtual wxEvent *Clone() const { return new wxMouseEvent(*this); } public: @@ -1492,7 +1495,7 @@ public: m_checked = m_enabled = m_setEnabled = - m_setText = + m_setText = m_setChecked = FALSE; } wxUpdateUIEvent(const wxUpdateUIEvent & event) diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index 489db5bbf7..ae4107a1fa 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -1084,10 +1084,6 @@ void wxScrollHelper::HandleOnMouseLeave(wxMouseEvent& event) #if wxUSE_MOUSEWHEEL -#ifndef WHEEL_PAGESCROLL -#define WHEEL_PAGESCROLL (UINT_MAX) // signifies to scroll a page -#endif - void wxScrollHelper::HandleOnMouseWheel(wxMouseEvent& event) { m_wheelRotation += event.GetWheelRotation(); @@ -1103,7 +1099,7 @@ void wxScrollHelper::HandleOnMouseWheel(wxMouseEvent& event) newEvent.SetOrientation(wxVERTICAL); newEvent.m_eventObject = m_win; - if (event.GetLinesPerAction() == WHEEL_PAGESCROLL) + if (event.IsPageScroll()) { if (lines > 0) newEvent.m_eventType = wxEVT_SCROLLWIN_PAGEUP; diff --git a/src/stc/ScintillaWX.cpp b/src/stc/ScintillaWX.cpp index 50bfac2f18..10859100d6 100644 --- a/src/stc/ScintillaWX.cpp +++ b/src/stc/ScintillaWX.cpp @@ -467,8 +467,9 @@ void ScintillaWX::DoVScroll(int type, int pos) { ScrollTo(topLineNew); } - -void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown) { +void ScintillaWX::DoMouseWheel(int rotation, int delta, + int linesPerAction, int ctrlDown, + bool isPageScroll ) { int topLineNew = topLine; int lines; @@ -485,7 +486,10 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int lines = wheelRotation / delta; wheelRotation -= lines * delta; if (lines != 0) { - lines *= linesPerAction; + if (isPageScroll) + lines = lines * LinesOnScreen(); // lines is either +1 or -1 + else + lines *= linesPerAction; topLineNew -= lines; ScrollTo(topLineNew); } diff --git a/src/stc/ScintillaWX.h b/src/stc/ScintillaWX.h index 3174e9efc3..5f87911952 100644 --- a/src/stc/ScintillaWX.h +++ b/src/stc/ScintillaWX.h @@ -125,7 +125,7 @@ public: void DoButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); void DoButtonUp(Point pt, unsigned int curTime, bool ctrl); void DoButtonMove(Point pt); - void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown); + void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll); void DoAddChar(int key); int DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed); void DoTick() { Tick(); } diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index 0a8ccd6bc1..e44ed9856f 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -1912,7 +1912,8 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { m_swx->DoMouseWheel(evt.GetWheelRotation(), evt.GetWheelDelta(), evt.GetLinesPerAction(), - evt.ControlDown()); + evt.ControlDown(), + evt.IsPageScroll()); } diff --git a/src/stc/stc.cpp.in b/src/stc/stc.cpp.in index fd17cb2e76..9e3083e7d2 100644 --- a/src/stc/stc.cpp.in +++ b/src/stc/stc.cpp.in @@ -365,7 +365,8 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { m_swx->DoMouseWheel(evt.GetWheelRotation(), evt.GetWheelDelta(), evt.GetLinesPerAction(), - evt.ControlDown()); + evt.ControlDown(), + evt.IsPageScroll()); }