diff --git a/common/gal/cairo/cairo_gal.cpp b/common/gal/cairo/cairo_gal.cpp index 1c68aa54a6..bc97df090c 100644 --- a/common/gal/cairo/cairo_gal.cpp +++ b/common/gal/cairo/cairo_gal.cpp @@ -61,6 +61,8 @@ CAIRO_GAL::CAIRO_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); + Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); + Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); #if defined _WIN32 || defined _WIN64 Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CAIRO_GAL::skipMouseEvent ) ); #endif diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp index 39cd64adb6..710730785a 100644 --- a/common/gal/opengl/opengl_gal.cpp +++ b/common/gal/opengl/opengl_gal.cpp @@ -90,6 +90,8 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener, Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); Connect( wxEVT_LEFT_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); + Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); + Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); #if defined _WIN32 || defined _WIN64 Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( OPENGL_GAL::skipMouseEvent ) ); #endif diff --git a/common/view/wx_view_controls.cpp b/common/view/wx_view_controls.cpp index e3b75799b2..a4b56d0052 100644 --- a/common/view/wx_view_controls.cpp +++ b/common/view/wx_view_controls.cpp @@ -42,9 +42,9 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) : WX_VIEW_CONTROLS::onMotion ), NULL, this ); m_parentPanel->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( WX_VIEW_CONTROLS::onWheel ), NULL, this ); - m_parentPanel->Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( + m_parentPanel->Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this ); - m_parentPanel->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( + m_parentPanel->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( WX_VIEW_CONTROLS::onButton ), NULL, this ); #if defined _WIN32 || defined _WIN64 m_parentPanel->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( @@ -55,10 +55,6 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) : void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& event ) { - // workaround for wxmsw.. - //if( event.Entering() ) - //m_parentPanel->SetFocus(); - if( event.Dragging() && m_isDragPanning ) { VECTOR2D mousePoint( event.GetX(), event.GetY() ); @@ -77,8 +73,28 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& event ) { const double wheelPanSpeed = 0.001; - if( event.ControlDown() ) + if( event.ControlDown() || event.ShiftDown() ) { + // Scrolling + VECTOR2D scrollVec = m_view->ToWorld( m_view->GetScreenPixelSize() * + ( (double) event.GetWheelRotation() * wheelPanSpeed ), false ); + double scrollSpeed; + + if( abs( scrollVec.x ) > abs( scrollVec.y ) ) + scrollSpeed = scrollVec.x; + else + scrollSpeed = scrollVec.y; + + VECTOR2D t = m_view->GetScreenPixelSize(); + VECTOR2D delta( event.ControlDown() ? -scrollSpeed : 0.0, + event.ShiftDown() ? -scrollSpeed : 0.0 ); + + m_view->SetCenter( m_view->GetCenter() + delta ); + m_parentPanel->Refresh(); + } + else + { + // Zooming wxLongLong timeStamp = wxGetLocalTimeMillis(); double timeDiff = timeStamp.ToDouble() - m_timeStamp.ToDouble(); @@ -96,29 +112,10 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& event ) zoomScale = ( event.GetWheelRotation() > 0.0 ) ? 1.05 : 0.95; } - VECTOR2D anchor = m_view->ToWorld( VECTOR2D( event.GetX(), event.GetY() ) ); m_view->SetScale( m_view->GetScale() * zoomScale, anchor ); m_parentPanel->Refresh(); } - else - { - VECTOR2D scrollVec = m_view->ToWorld( m_view->GetScreenPixelSize() * - ( (double) event.GetWheelRotation() * wheelPanSpeed ), false ); - double scrollSpeed; - - if( abs( scrollVec.x ) > abs( scrollVec.y ) ) - scrollSpeed = scrollVec.x; - else - scrollSpeed = scrollVec.y; - - VECTOR2D t = m_view->GetScreenPixelSize(); - VECTOR2D delta( event.ShiftDown() ? scrollSpeed : 0.0, - !event.ShiftDown() ? scrollSpeed : 0.0 ); - - m_view->SetCenter( m_view->GetCenter() + delta ); - m_parentPanel->Refresh(); - } event.Skip(); } @@ -126,13 +123,13 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& event ) void WX_VIEW_CONTROLS::onButton( wxMouseEvent& event ) { - if( event.RightDown() ) + if( event.MiddleDown() ) { m_isDragPanning = true; m_dragStartPoint = VECTOR2D( event.GetX(), event.GetY() ); m_lookStartPoint = m_view->GetCenter(); } - else if( event.RightUp() ) + else if( event.MiddleUp() ) { m_isDragPanning = false; }