From 3b2f80c205c590fa4f28fcad3f98e1bb647cac72 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 7 Jan 2012 15:09:29 +0000 Subject: [PATCH 1/1] Set Z-position correctly for wxEVT_JOY_ZMOVE events. Z-move events don't have (x, y) position, but they do have Z-position which needs to be set. Also don't use (x, y) position for these events in the sample. See #748. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70279 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + interface/wx/event.h | 4 +++ samples/joytest/joytest.cpp | 64 ++++++++++++++++++++----------------- src/msw/window.cpp | 5 ++- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 0d8742cfae..d36572119a 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -475,6 +475,7 @@ MSW: - Fixed regression with initial focus in the dialogs in 2.9.3. - Added support for wxEXEC_MAKE_GROUP_LEADER to wxExecute (tteras). - Set wxMenu being closed in wxEVT_MENU_CLOSE events (Marcin Malich). +- Fix coordinates and Z-position for joystick events (Markus Juergens). OSX: diff --git a/interface/wx/event.h b/interface/wx/event.h index cb1b2aeb63..639f8bdb59 100644 --- a/interface/wx/event.h +++ b/interface/wx/event.h @@ -1662,11 +1662,15 @@ public: /** Returns the x, y position of the joystick event. + + These coordinates are valid for all the events except wxEVT_JOY_ZMOVE. */ wxPoint GetPosition() const; /** Returns the z position of the joystick event. + + This method can only be used for wxEVT_JOY_ZMOVE events. */ int GetZPosition() const; diff --git a/samples/joytest/joytest.cpp b/samples/joytest/joytest.cpp index 6bf7bc96c3..0e4c851ca1 100644 --- a/samples/joytest/joytest.cpp +++ b/samples/joytest/joytest.cpp @@ -119,35 +119,39 @@ MyCanvas::~MyCanvas() void MyCanvas::OnJoystickEvent(wxJoystickEvent& event) { - wxClientDC dc(this); - - wxPoint pt(event.GetPosition()); - - // if negative positions are possible then shift everything up - int xmin = wxGetApp().m_minX; - int xmax = wxGetApp().m_maxX; - int ymin = wxGetApp().m_minY; - int ymax = wxGetApp().m_maxY; - if (xmin < 0) { - xmax += abs(xmin); - pt.x += abs(xmin); - } - if (ymin < 0) { - ymax += abs(ymin); - pt.y += abs(ymin); - } - - // Scale to canvas size - int cw, ch; - GetSize(&cw, &ch); - - pt.x = (long) (((double)pt.x/(double)xmax) * cw); - pt.y = (long) (((double)pt.y/(double)ymax) * ch); - - if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown()) + // We don't have valid (x, y) coordinates for z-move events. + if ( !event.IsZMove() ) { - dc.SetPen(*wxBLACK_PEN); - dc.DrawLine(xpos, ypos, pt.x, pt.y); + wxClientDC dc(this); + + wxPoint pt(event.GetPosition()); + + // if negative positions are possible then shift everything up + int xmin = wxGetApp().m_minX; + int xmax = wxGetApp().m_maxX; + int ymin = wxGetApp().m_minY; + int ymax = wxGetApp().m_maxY; + if (xmin < 0) { + xmax += abs(xmin); + pt.x += abs(xmin); + } + if (ymin < 0) { + ymax += abs(ymin); + pt.y += abs(ymin); + } + + // Scale to canvas size + int cw, ch; + GetSize(&cw, &ch); + + pt.x = (long) (((double)pt.x/(double)xmax) * cw); + pt.y = (long) (((double)pt.y/(double)ymax) * ch); + + if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown()) + { + dc.SetPen(*wxBLACK_PEN); + dc.DrawLine(xpos, ypos, pt.x, pt.y); + } } xpos = pt.x; @@ -156,9 +160,9 @@ void MyCanvas::OnJoystickEvent(wxJoystickEvent& event) #if wxUSE_STATUSBAR wxString buf; if (event.ButtonDown()) - buf.Printf(wxT("Joystick (%d, %d) #%i Fire!"), pt.x, pt.y, event.GetButtonChange()); + buf.Printf(wxT("Joystick (%d, %d) #%i Fire!"), xpos, ypos, event.GetButtonChange()); else - buf.Printf(wxT("Joystick (%d, %d) "), pt.x, pt.y); + buf.Printf(wxT("Joystick (%d, %d) "), xpos, ypos); /* for(int i = 0; i < nButtons; ++i) diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 03416b3402..6b6a0504c3 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -5950,7 +5950,10 @@ bool wxWindowMSW::HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags) } wxJoystickEvent event(eventType, buttons, joystick, change); - event.SetPosition(wxPoint(x, y)); + if ( eventType == wxEVT_JOY_ZMOVE ) + event.SetZPosition(x); + else + event.SetPosition(wxPoint(x, y)); event.SetEventObject(this); return HandleWindowEvent(event); -- 2.45.2