void WX_VIEW_CONTROLS::onMagnify( wxMouseEvent& aEvent )
{
    // Scale based on the magnification from our underlying magnification event.
    VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
    m_view->SetScale( m_view->GetScale() * ( aEvent.GetMagnification() + 1.0f ), anchor );

    aEvent.Skip();
}
void EDA_3D_CANVAS::OnMagnify( wxMouseEvent& event )
{
    double magnification = ( event.GetMagnification() + 1.0f );

    GetPrm3DVisu().m_Zoom /= magnification;

    if( GetPrm3DVisu().m_Zoom <= 0.01 )
        GetPrm3DVisu().m_Zoom = 0.01;

    DisplayStatus();
    Refresh( false );
}
void EDA_DRAW_PANEL::OnMagnify( wxMouseEvent& event )
{
    // Scale the panel around our cursor position.
    bool warpCursor = false;

    wxPoint cursorPosition = GetParent()->GetCursorPosition( false );
    wxPoint centerPosition = GetParent()->GetScrollCenterPosition();
    wxPoint vector = centerPosition - cursorPosition;

    double magnification = ( event.GetMagnification() + 1.0f );
    double scaleFactor = GetZoom() / magnification;

    // Scale the vector between the cursor and center point
    vector.x /= magnification;
    vector.y /= magnification;

    SetZoom(scaleFactor);

    // Recenter the window along our scaled vector such that the
    // cursor becomes our scale axis, remaining fixed on screen
    GetParent()->RedrawScreen( cursorPosition + vector, warpCursor );

    event.Skip();
}