From 9b9337da0c597d9ba18f731a4e641bda25437224 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 19 Jul 2002 21:11:31 +0000 Subject: [PATCH] Moved the check for page scrolling with the wheel into wxMouseEvent so it wouldn't have to be duplicated everywhere. Also fixed wxSTC so it can handle wheel page scrolling too. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16218 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- contrib/src/stc/ScintillaWX.cpp | 10 +++++++--- contrib/src/stc/ScintillaWX.h | 2 +- contrib/src/stc/stc.cpp | 3 ++- contrib/src/stc/stc.cpp.in | 3 ++- docs/latex/wx/mouseevt.tex | 17 ++++++++++++----- include/wx/event.h | 5 ++++- src/generic/scrlwing.cpp | 6 +----- src/stc/ScintillaWX.cpp | 10 +++++++--- src/stc/ScintillaWX.h | 2 +- src/stc/stc.cpp | 3 ++- src/stc/stc.cpp.in | 3 ++- 11 files changed, 41 insertions(+), 23 deletions(-) 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()); } -- 2.45.2