Add centering cursor on zoom to GAL.
This commit is contained in:
parent
901e96126d
commit
fdf5b821f0
|
@ -1062,6 +1062,9 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable )
|
|||
gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) );
|
||||
gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) );
|
||||
|
||||
// Transfer EDA_DRAW_PANEL settings
|
||||
GetGalCanvas()->GetViewControls()->SetEnableZoomNoCenter( m_canvas->GetEnableZoomNoCenter() );
|
||||
|
||||
GetToolManager()->RunAction( "pcbnew.Control.switchCursor" );
|
||||
}
|
||||
else if( m_galCanvasActive )
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <class_draw_panel_gal.h>
|
||||
#include <class_base_screen.h>
|
||||
#include <draw_frame.h>
|
||||
#include <view/view_controls.h>
|
||||
|
||||
#include <kicad_device_context.h>
|
||||
|
||||
|
@ -638,6 +639,15 @@ void EDA_DRAW_PANEL::ReDraw( wxDC* DC, bool erasebg )
|
|||
}
|
||||
|
||||
|
||||
void EDA_DRAW_PANEL::SetEnableZoomNoCenter( bool aEnable )
|
||||
{
|
||||
m_enableZoomNoCenter = aEnable;
|
||||
|
||||
if( GetParent()->IsGalCanvasActive() )
|
||||
GetParent()->GetGalCanvas()->GetViewControls()->SetEnableZoomNoCenter( aEnable );
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_PANEL::DrawBackGround( wxDC* DC )
|
||||
{
|
||||
EDA_COLOR_T axis_color = BLUE;
|
||||
|
|
|
@ -151,8 +151,18 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
|
|||
zoomScale = ( rotation > 0 ) ? 1.05 : 0.95;
|
||||
}
|
||||
|
||||
VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
|
||||
m_view->SetScale( m_view->GetScale() * zoomScale, anchor );
|
||||
if( GetEnableZoomNoCenter() )
|
||||
{
|
||||
VECTOR2D anchor = m_view->ToWorld( VECTOR2D( aEvent.GetX(), aEvent.GetY() ) );
|
||||
m_view->SetScale( m_view->GetScale() * zoomScale, anchor );
|
||||
}
|
||||
else
|
||||
{
|
||||
const VECTOR2I& screenSize = m_view->GetGAL()->GetScreenPixelSize();
|
||||
m_view->SetCenter( GetCursorPosition() );
|
||||
m_view->SetScale( m_view->GetScale() * zoomScale );
|
||||
m_parentPanel->WarpPointer( screenSize.x / 2, screenSize.y / 2 );
|
||||
}
|
||||
}
|
||||
|
||||
aEvent.Skip();
|
||||
|
|
|
@ -148,7 +148,7 @@ public:
|
|||
|
||||
bool GetEnableZoomNoCenter() const { return m_enableZoomNoCenter; }
|
||||
|
||||
void SetEnableZoomNoCenter( bool aEnable ) { m_enableZoomNoCenter = aEnable; }
|
||||
void SetEnableZoomNoCenter( bool aEnable );
|
||||
|
||||
bool GetMiddleButtonPanLimited() const { return m_panScrollbarLimits; }
|
||||
|
||||
|
|
|
@ -161,6 +161,23 @@ public:
|
|||
return m_forceCursorPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function SetEnableZoomNoCenter()
|
||||
* Enables or Disables warping the cursor to the center of the drawing i
|
||||
* panel area when zooming.
|
||||
* @param aEnabled is true if the cursor should not be centered and false if
|
||||
* the cursor should be centered.
|
||||
*/
|
||||
virtual void SetEnableZoomNoCenter( bool aEnable )
|
||||
{
|
||||
m_enableZoomNoCenter = aEnable;
|
||||
}
|
||||
|
||||
virtual bool GetEnableZoomNoCenter() const
|
||||
{
|
||||
return m_enableZoomNoCenter;
|
||||
}
|
||||
|
||||
protected:
|
||||
/// Pointer to controlled VIEW.
|
||||
VIEW* m_view;
|
||||
|
@ -191,6 +208,9 @@ protected:
|
|||
|
||||
/// How fast is panning when in auto mode
|
||||
float m_autoPanSpeed;
|
||||
|
||||
/// If the cursor should be warped to the center of the view area when zooming
|
||||
bool m_enableZoomNoCenter;
|
||||
};
|
||||
} // namespace KIGFX
|
||||
|
||||
|
|
|
@ -84,7 +84,15 @@ int PCBNEW_CONTROL::ZoomInOut( const TOOL_EVENT& aEvent )
|
|||
else if( aEvent.IsAction( &COMMON_ACTIONS::zoomOut ) )
|
||||
zoomScale = 0.7;
|
||||
|
||||
view->SetScale( view->GetScale() * zoomScale, getViewControls()->GetCursorPosition() );
|
||||
if( getViewControls()->GetEnableZoomNoCenter() )
|
||||
view->SetScale( view->GetScale() * zoomScale, getViewControls()->GetCursorPosition() );
|
||||
else
|
||||
{
|
||||
const VECTOR2I& screenSize = view->GetGAL()->GetScreenPixelSize();
|
||||
view->SetCenter( getViewControls()->GetCursorPosition() );
|
||||
view->SetScale( view->GetScale() * zoomScale );
|
||||
m_frame->GetGalCanvas()->WarpPointer( screenSize.x / 2, screenSize.y / 2 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue