diff --git a/common/drawframe.cpp b/common/drawframe.cpp index a8857896c2..88f73d7c44 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -234,8 +234,12 @@ void EDA_DRAW_FRAME::SkipNextLeftButtonReleaseEvent() void EDA_DRAW_FRAME::OnToggleGridState( wxCommandEvent& aEvent ) { SetGridVisibility( !IsGridVisible() ); + if( m_galCanvasActive ) + { m_galCanvas->GetGAL()->SetGridVisibility( IsGridVisible() ); + m_galCanvas->GetView()->MarkTargetDirty( KiGfx::TARGET_NONCACHED ); + } RefreshCanvas(); } @@ -392,11 +396,12 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event ) if( m_galCanvasActive ) { - KiGfx::GAL* gal = m_galCanvas->GetGAL(); - gal->SetGridSize( VECTOR2D( screen->GetGrid().m_Size.x, screen->GetGrid().m_Size.y ) ); + m_galCanvas->GetGAL()->SetGridSize( VECTOR2D( screen->GetGrid().m_Size.x, + screen->GetGrid().m_Size.y ) ); + m_galCanvas->GetView()->MarkTargetDirty( KiGfx::TARGET_NONCACHED ); } - Refresh(); + RefreshCanvas(); } @@ -1011,6 +1016,8 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); - m_galCanvas->SetFocus(); m_galCanvasActive = aEnable; + + if( aEnable ) + m_galCanvas->SetFocus(); } diff --git a/include/view/view.h b/include/view/view.h index f5eb6b13ca..29cb5ecb0e 100644 --- a/include/view/view.h +++ b/include/view/view.h @@ -267,7 +267,12 @@ public: */ inline void SetLayerVisible( int aLayer, bool aVisible = true ) { - m_layers[aLayer].enabled = aVisible; + if( m_layers[aLayer].enabled != aVisible ) + { + // Target has to be redrawn after changing its visibility + MarkTargetDirty( m_layers[aLayer].target ); + m_layers[aLayer].enabled = aVisible; + } } /** diff --git a/pcbnew/class_pcb_layer_widget.cpp b/pcbnew/class_pcb_layer_widget.cpp index 3ac5b7f640..07b46f4fa9 100644 --- a/pcbnew/class_pcb_layer_widget.cpp +++ b/pcbnew/class_pcb_layer_widget.cpp @@ -393,7 +393,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( LAYER_NUM aLayer, bool isVisible, bool is brd->SetVisibleLayers( visibleLayers ); - EDA_DRAW_PANEL_GAL *galCanvas = myframe->GetGalCanvas(); + EDA_DRAW_PANEL_GAL* galCanvas = myframe->GetGalCanvas(); if( galCanvas ) { KiGfx::VIEW* view = galCanvas->GetView(); @@ -401,12 +401,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( LAYER_NUM aLayer, bool isVisible, bool is } if( isFinal ) - { - if( myframe->IsGalCanvasActive() ) - galCanvas->Refresh(); - else - myframe->RefreshCanvas(); - } + myframe->RefreshCanvas(); } void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, EDA_COLOR_T aColor )