Commit 0bdf5bac authored by Emmeran's avatar Emmeran
Browse files

added option to allow zooming around the crosshair instead of the center; can...

added option to allow zooming around the crosshair instead of the center; can be enabled via options or by holding alt while using the mousewheel
parent 638decaf
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -66,6 +66,7 @@ BEGIN_EVENT_TABLE( EDA_DRAW_FRAME, EDA_BASE_FRAME )
    EVT_MENU_OPEN( EDA_DRAW_FRAME::OnMenuOpen )
    EVT_MENU_OPEN( EDA_DRAW_FRAME::OnMenuOpen )
    EVT_ACTIVATE( EDA_DRAW_FRAME::OnActivate )
    EVT_ACTIVATE( EDA_DRAW_FRAME::OnActivate )
    EVT_MENU_RANGE( ID_ZOOM_IN, ID_ZOOM_REDRAW, EDA_DRAW_FRAME::OnZoom )
    EVT_MENU_RANGE( ID_ZOOM_IN, ID_ZOOM_REDRAW, EDA_DRAW_FRAME::OnZoom )
    EVT_MENU_RANGE( ID_OFFCENTER_ZOOM_IN, ID_OFFCENTER_ZOOM_OUT, EDA_DRAW_FRAME::OnZoom )
    EVT_MENU_RANGE( ID_POPUP_ZOOM_START_RANGE, ID_POPUP_ZOOM_END_RANGE,
    EVT_MENU_RANGE( ID_POPUP_ZOOM_START_RANGE, ID_POPUP_ZOOM_END_RANGE,
                    EDA_DRAW_FRAME::OnZoom )
                    EDA_DRAW_FRAME::OnZoom )
    EVT_MENU_RANGE( ID_POPUP_GRID_LEVEL_1000, ID_POPUP_GRID_USER,
    EVT_MENU_RANGE( ID_POPUP_GRID_LEVEL_1000, ID_POPUP_GRID_USER,
+25 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ static const int CURSOR_SIZE = 12; ///< Cursor size in pixels
#define CLIP_BOX_PADDING 2
#define CLIP_BOX_PADDING 2


// keys to store options in config:
// keys to store options in config:
#define ENBL_ZOOM_NO_CENTER_KEY wxT( "ZoomNoCenter" )
#define ENBL_MIDDLE_BUTT_PAN_KEY wxT( "MiddleButtonPAN" )
#define ENBL_MIDDLE_BUTT_PAN_KEY wxT( "MiddleButtonPAN" )
#define MIDDLE_BUTT_PAN_LIMITED_KEY wxT( "MiddleBtnPANLimited" )
#define MIDDLE_BUTT_PAN_LIMITED_KEY wxT( "MiddleBtnPANLimited" )
#define ENBL_AUTO_PAN_KEY wxT( "AutoPAN" )
#define ENBL_AUTO_PAN_KEY wxT( "AutoPAN" )
@@ -102,6 +103,7 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
    m_canStartBlock = -1;       // Command block can start if >= 0
    m_canStartBlock = -1;       // Command block can start if >= 0
    m_abortRequest = false;
    m_abortRequest = false;
    m_enableMiddleButtonPan = false;
    m_enableMiddleButtonPan = false;
    m_enableZoomNoCenter = false;
    m_panScrollbarLimits = false;
    m_panScrollbarLimits = false;
    m_enableAutoPan = true;
    m_enableAutoPan = true;
    m_ignoreMouseEvents = false;
    m_ignoreMouseEvents = false;
@@ -113,6 +115,7 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
    if( wxGetApp().GetSettings() )
    if( wxGetApp().GetSettings() )
    {
    {
        wxGetApp().GetSettings()->Read( ENBL_MIDDLE_BUTT_PAN_KEY, &m_enableMiddleButtonPan, false );
        wxGetApp().GetSettings()->Read( ENBL_MIDDLE_BUTT_PAN_KEY, &m_enableMiddleButtonPan, false );
        wxGetApp().GetSettings()->Read( ENBL_ZOOM_NO_CENTER_KEY, &m_enableZoomNoCenter, false );
        wxGetApp().GetSettings()->Read( MIDDLE_BUTT_PAN_LIMITED_KEY, &m_panScrollbarLimits, false );
        wxGetApp().GetSettings()->Read( MIDDLE_BUTT_PAN_LIMITED_KEY, &m_panScrollbarLimits, false );
        wxGetApp().GetSettings()->Read( ENBL_AUTO_PAN_KEY, &m_enableAutoPan, true );
        wxGetApp().GetSettings()->Read( ENBL_AUTO_PAN_KEY, &m_enableAutoPan, true );
    }
    }
@@ -137,6 +140,7 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
EDA_DRAW_PANEL::~EDA_DRAW_PANEL()
EDA_DRAW_PANEL::~EDA_DRAW_PANEL()
{
{
    wxGetApp().GetSettings()->Write( ENBL_MIDDLE_BUTT_PAN_KEY, m_enableMiddleButtonPan );
    wxGetApp().GetSettings()->Write( ENBL_MIDDLE_BUTT_PAN_KEY, m_enableMiddleButtonPan );
    wxGetApp().GetSettings()->Write( ENBL_ZOOM_NO_CENTER_KEY, m_enableZoomNoCenter );
    wxGetApp().GetSettings()->Write( MIDDLE_BUTT_PAN_LIMITED_KEY, m_panScrollbarLimits );
    wxGetApp().GetSettings()->Write( MIDDLE_BUTT_PAN_LIMITED_KEY, m_panScrollbarLimits );
    wxGetApp().GetSettings()->Write( ENBL_AUTO_PAN_KEY, m_enableAutoPan );
    wxGetApp().GetSettings()->Write( ENBL_AUTO_PAN_KEY, m_enableAutoPan );
}
}
@@ -154,6 +158,23 @@ BASE_SCREEN* EDA_DRAW_PANEL::GetScreen()
    return parentFrame->GetScreen();
    return parentFrame->GetScreen();
}
}


wxPoint EDA_DRAW_PANEL::ToDeviceXY( const wxPoint& pos )
{
	wxPoint ret;
	INSTALL_UNBUFFERED_DC( dc, this );
	ret.x = dc.LogicalToDeviceX( pos.x );
	ret.y = dc.LogicalToDeviceY( pos.y );
	return ret;
}

wxPoint EDA_DRAW_PANEL::ToLogicalXY( const wxPoint& pos )
{
	wxPoint ret;
	INSTALL_UNBUFFERED_DC( dc, this );
	ret.x = dc.DeviceToLogicalX( pos.x );
	ret.y = dc.DeviceToLogicalY( pos.y );
	return ret;
}


void EDA_DRAW_PANEL::DrawCrossHair( wxDC* aDC, EDA_COLOR_T aColor )
void EDA_DRAW_PANEL::DrawCrossHair( wxDC* aDC, EDA_COLOR_T aColor )
{
{
@@ -856,6 +877,8 @@ void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
            cmd.SetId( ID_PAN_UP );
            cmd.SetId( ID_PAN_UP );
        else if( event.ControlDown() && !event.ShiftDown() )
        else if( event.ControlDown() && !event.ShiftDown() )
            cmd.SetId( ID_PAN_LEFT );
            cmd.SetId( ID_PAN_LEFT );
        else if( event.AltDown() || m_enableZoomNoCenter)
            cmd.SetId( ID_OFFCENTER_ZOOM_IN );
        else
        else
            cmd.SetId( ID_POPUP_ZOOM_IN );
            cmd.SetId( ID_POPUP_ZOOM_IN );
    }
    }
@@ -865,6 +888,8 @@ void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
            cmd.SetId( ID_PAN_DOWN );
            cmd.SetId( ID_PAN_DOWN );
        else if( event.ControlDown() && !event.ShiftDown() )
        else if( event.ControlDown() && !event.ShiftDown() )
            cmd.SetId( ID_PAN_RIGHT );
            cmd.SetId( ID_PAN_RIGHT );
        else if( event.AltDown() || m_enableZoomNoCenter)
            cmd.SetId( ID_OFFCENTER_ZOOM_OUT );
        else
        else
            cmd.SetId( ID_POPUP_ZOOM_OUT );
            cmd.SetId( ID_POPUP_ZOOM_OUT );
    }
    }
+25 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@
#include <base_units.h>
#include <base_units.h>





void EDA_DRAW_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointer )
void EDA_DRAW_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointer )
{
{
    AdjustScrollBars( aCenterPoint );
    AdjustScrollBars( aCenterPoint );
@@ -53,6 +54,18 @@ void EDA_DRAW_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointe
    m_canvas->Update();
    m_canvas->Update();
}
}


void EDA_DRAW_FRAME::RedrawScreen2( const wxPoint& posBefore )
{
	wxPoint dPos = posBefore - m_canvas->GetClientSize() / 2; // relative screen position to center before zoom
	wxPoint newScreenPos = m_canvas->ToDeviceXY( GetScreen()->GetCrossHairPosition() ); // screen position of crosshair after zoom
	wxPoint newCenter = m_canvas->ToLogicalXY( newScreenPos - dPos );

    AdjustScrollBars( newCenter );

    m_canvas->Refresh();
    m_canvas->Update();
}



void EDA_DRAW_FRAME::Zoom_Automatique( bool aWarpPointer )
void EDA_DRAW_FRAME::Zoom_Automatique( bool aWarpPointer )
{
{
@@ -111,6 +124,12 @@ void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event )


    switch( id )
    switch( id )
    {
    {
    case ID_OFFCENTER_ZOOM_IN:
        center = m_canvas->ToDeviceXY( screen->GetCrossHairPosition() );
        if( screen->SetPreviousZoom() )
            RedrawScreen2( center );
        break;

    case ID_POPUP_ZOOM_IN:
    case ID_POPUP_ZOOM_IN:
        zoom_at_cursor = true;
        zoom_at_cursor = true;
        center = screen->GetCrossHairPosition();
        center = screen->GetCrossHairPosition();
@@ -121,6 +140,12 @@ void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event )
            RedrawScreen( center, zoom_at_cursor );
            RedrawScreen( center, zoom_at_cursor );
        break;
        break;


    case ID_OFFCENTER_ZOOM_OUT:
        center = m_canvas->ToDeviceXY( screen->GetCrossHairPosition() );
        if( screen->SetNextZoom() )
            RedrawScreen2( center );
        break;

    case ID_POPUP_ZOOM_OUT:
    case ID_POPUP_ZOOM_OUT:
        zoom_at_cursor = true;
        zoom_at_cursor = true;
        center = screen->GetCrossHairPosition();
        center = screen->GetCrossHairPosition();
+2 −0
Original line number Original line Diff line number Diff line
@@ -77,6 +77,7 @@ void DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::initDialog()
    m_TextDisplayOption->SetSelection( m_Parent->m_DisplayModText );
    m_TextDisplayOption->SetSelection( m_Parent->m_DisplayModText );
    m_IsShowPadFill->SetValue( m_Parent->m_DisplayPadFill );
    m_IsShowPadFill->SetValue( m_Parent->m_DisplayPadFill );
    m_IsShowPadNum->SetValue( m_Parent->m_DisplayPadNum );
    m_IsShowPadNum->SetValue( m_Parent->m_DisplayPadNum );
    m_IsZoomNoCenter->SetValue( m_Parent->GetCanvas()->GetEnableZoomNoCenter() );
    m_IsMiddleButtonPan->SetValue( m_Parent->GetCanvas()->GetEnableMiddleButtonPan() );
    m_IsMiddleButtonPan->SetValue( m_Parent->GetCanvas()->GetEnableMiddleButtonPan() );
    m_IsMiddleButtonPanLimited->SetValue( m_Parent->GetCanvas()->GetMiddleButtonPanLimited() );
    m_IsMiddleButtonPanLimited->SetValue( m_Parent->GetCanvas()->GetMiddleButtonPanLimited() );
    m_IsMiddleButtonPanLimited->Enable( m_IsMiddleButtonPan->GetValue() );
    m_IsMiddleButtonPanLimited->Enable( m_IsMiddleButtonPan->GetValue() );
@@ -94,6 +95,7 @@ void DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::UpdateObjectSettings( void )
    m_Parent->m_DisplayModText = m_TextDisplayOption->GetSelection();
    m_Parent->m_DisplayModText = m_TextDisplayOption->GetSelection();
    m_Parent->m_DisplayPadNum  = m_IsShowPadNum->GetValue();
    m_Parent->m_DisplayPadNum  = m_IsShowPadNum->GetValue();
    m_Parent->m_DisplayPadFill = m_IsShowPadFill->GetValue();
    m_Parent->m_DisplayPadFill = m_IsShowPadFill->GetValue();
    m_Parent->GetCanvas()->SetEnableZoomNoCenter( m_IsZoomNoCenter->GetValue() );
    m_Parent->GetCanvas()->SetEnableMiddleButtonPan( m_IsMiddleButtonPan->GetValue() );
    m_Parent->GetCanvas()->SetEnableMiddleButtonPan( m_IsMiddleButtonPan->GetValue() );
    m_Parent->GetCanvas()->SetMiddleButtonPanLimited( m_IsMiddleButtonPanLimited->GetValue() );
    m_Parent->GetCanvas()->SetMiddleButtonPanLimited( m_IsMiddleButtonPanLimited->GetValue() );
    m_Parent->GetCanvas()->Refresh();
    m_Parent->GetCanvas()->Refresh();
+3 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,9 @@ DIALOG_FOOTPRINTS_DISPLAY_OPTIONS_BASE::DIALOG_FOOTPRINTS_DISPLAY_OPTIONS_BASE(
	wxStaticBoxSizer* sbSizerViewOpt;
	wxStaticBoxSizer* sbSizerViewOpt;
	sbSizerViewOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Pan:") ), wxVERTICAL );
	sbSizerViewOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Pan:") ), wxVERTICAL );


	m_IsZoomNoCenter = new wxCheckBox( this, wxID_ANY, _("Zoom off center"), wxDefaultPosition, wxDefaultSize, 0 );
	sbSizerViewOpt->Add( m_IsZoomNoCenter, 0, wxALL|wxEXPAND, 5 );
	
	m_IsMiddleButtonPan = new wxCheckBox( this, wxID_ANY, _("Middle Button PAN Enabled"), wxDefaultPosition, wxDefaultSize, 0 );
	m_IsMiddleButtonPan = new wxCheckBox( this, wxID_ANY, _("Middle Button PAN Enabled"), wxDefaultPosition, wxDefaultSize, 0 );
	sbSizerViewOpt->Add( m_IsMiddleButtonPan, 0, wxALL|wxEXPAND, 5 );
	sbSizerViewOpt->Add( m_IsMiddleButtonPan, 0, wxALL|wxEXPAND, 5 );
	
	
Loading