Add wxMouseEvent::GetColumnsPerAction().

This is similar to the existing GetLinesPerAction() but is for, surprise,
columns.

Also change the documentation to say that the value returned by both of these
methods is 3 under "most platforms" as some wxOSX currently uses 1 and not 3.

Closes #15239.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74156 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-06-10 15:53:29 +00:00
parent 4775836d37
commit 5833988cb7
11 changed files with 47 additions and 2 deletions

View File

@@ -670,6 +670,7 @@ All (GUI):
- Add wxWindow::BeginRepositioningChildren() and EndRepositioningChildren().
- Fix wxStyledTextCtrl::SetInsertionPointEnd() (troelsk).
- Add wxFileDialog::GetCurrentlySelectedFilename() (Carl Godkin).
- Add wxMouseEvent::GetColumnsPerAction() (toiffel).
wxGTK:

View File

@@ -1747,9 +1747,13 @@ public:
wxMouseWheelAxis GetWheelAxis() const { return m_wheelAxis; }
// Returns the configured number of lines (or whatever) to be scrolled per
// wheel action. Defaults to one.
// wheel action. Defaults to three.
int GetLinesPerAction() const { return m_linesPerAction; }
// Returns the configured number of columns (or whatever) to be scrolled per
// wheel action. Defaults to three.
int GetColumnsPerAction() const { return m_columnsPerAction; }
// Is the system set to do page scrolling?
bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); }
@@ -1770,6 +1774,7 @@ public:
int m_wheelRotation;
int m_wheelDelta;
int m_linesPerAction;
int m_columnsPerAction;
protected:
void Assign(const wxMouseEvent& evt);

View File

@@ -86,6 +86,9 @@
#ifndef SPI_GETWHEELSCROLLLINES
#define SPI_GETWHEELSCROLLLINES 104
#endif
#ifndef SPI_GETWHEELSCROLLCHARS
#define SPI_GETWHEELSCROLLCHARS 108
#endif
#endif // wxUSE_MOUSEWHEEL
// Needed by window.cpp

View File

@@ -2725,10 +2725,26 @@ public:
/**
Returns the configured number of lines (or whatever) to be scrolled per
wheel action. Defaults to three.
wheel action.
Default value under most platforms is three.
@see GetColumnsPerAction()
*/
int GetLinesPerAction() const;
/**
Returns the configured number of columns (or whatever) to be scrolled per
wheel action.
Default value under most platforms is three.
@see GetLinesPerAction()
@since 2.9.5
*/
int GetColumnsPerAction() const;
/**
Returns the logical mouse position in pixels (i.e.\ translated according to the
translation set for the DC, which usually indicates that the window has been

View File

@@ -565,6 +565,7 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType)
m_wheelRotation = 0;
m_wheelDelta = 0;
m_linesPerAction = 0;
m_columnsPerAction = 0;
}
void wxMouseEvent::Assign(const wxMouseEvent& event)
@@ -587,6 +588,7 @@ void wxMouseEvent::Assign(const wxMouseEvent& event)
m_wheelRotation = event.m_wheelRotation;
m_wheelDelta = event.m_wheelDelta;
m_linesPerAction = event.m_linesPerAction;
m_columnsPerAction = event.m_columnsPerAction;
m_wheelAxis = event.m_wheelAxis;
}

View File

@@ -1649,6 +1649,7 @@ window_scroll_event(GtkWidget*, GdkEventScroll* gdk_event, wxWindow* win)
// FIXME: Get these values from GTK or GDK
event.m_linesPerAction = 3;
event.m_columnsPerAction = 3;
event.m_wheelDelta = 120;
// Determine the scroll direction.

View File

@@ -1332,6 +1332,7 @@ template<typename T> void InitMouseEvent(wxWindowGTK *win,
if (event.GetEventType() == wxEVT_MOUSEWHEEL)
{
event.m_linesPerAction = 3;
event.m_columnsPerAction = 3;
event.m_wheelDelta = 120;
if (((GdkEventButton*)gdk_event)->button == 4)
event.m_wheelRotation = 120;

View File

@@ -5607,7 +5607,20 @@ wxWindowMSW::HandleMouseWheel(wxMouseWheelAxis axis,
}
}
static int s_columnsPerRotation = -1;
if ( s_columnsPerRotation == -1 )
{
if ( !::SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0,
&s_columnsPerRotation, 0))
{
// this setting is not supported on Windows 2000/XP, so use the value of 1
// http://msdn.microsoft.com/en-us/library/ms997498.aspx
s_columnsPerRotation = 1;
}
}
event.m_linesPerAction = s_linesPerRotation;
event.m_columnsPerAction = s_columnsPerRotation;
return HandleWindowEvent(event);
#else // !wxUSE_MOUSEWHEEL

View File

@@ -542,6 +542,7 @@ WXDLLEXPORT void SetupMouseEvent( wxMouseEvent &wxevent , wxMacCarbonEvent &cEve
wxevent.m_wheelRotation = delta;
wxevent.m_wheelDelta = 1;
wxevent.m_linesPerAction = 1;
wxevent.m_columnsPerAction = 1;
if ( axis == kEventMouseWheelAxisX )
wxevent.m_wheelAxis = wxMOUSE_WHEEL_HORIZONTAL;
}

View File

@@ -682,6 +682,7 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve
wxevent.m_wheelDelta = 10;
wxevent.m_linesPerAction = 1;
wxevent.m_columnsPerAction = 1;
if ( fabs(deltaX) > fabs(deltaY) )
{

View File

@@ -1486,6 +1486,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent,
button = xevent->xbutton.button;
wxevent.m_linesPerAction = 3;
wxevent.m_columnsPerAction = 3;
wxevent.m_wheelDelta = WHEEL_DELTA;
// Button 4 means mousewheel up, 5 means down