Decouple 3D view dirty marking and refresh
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8154
This commit is contained in:
parent
d48adf9c77
commit
619a353c5e
|
@ -87,10 +87,13 @@ public:
|
||||||
/**
|
/**
|
||||||
* Update the 3D view, if the viewer is opened by this frame.
|
* Update the 3D view, if the viewer is opened by this frame.
|
||||||
*
|
*
|
||||||
|
* @param aMarkDirty alerts the 3D view that data is stale (it may not refresh instantly)
|
||||||
|
* @param aRefresh will tell the 3D view to refresh immediately
|
||||||
* @param aTitle is the new title of the 3D frame, or nullptr to do not change the
|
* @param aTitle is the new title of the 3D frame, or nullptr to do not change the
|
||||||
* frame title
|
* frame title
|
||||||
*/
|
*/
|
||||||
virtual void Update3DView( bool aReloadRequest, const wxString* aTitle = nullptr );
|
virtual void Update3DView( bool aMarkDirty, bool aRefresh,
|
||||||
|
const wxString* aTitle = nullptr );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to load \a aFootprintId from the footprint library table.
|
* Attempt to load \a aFootprintId from the footprint library table.
|
||||||
|
|
|
@ -397,8 +397,8 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry, bool a
|
||||||
|
|
||||||
if( aSetDirtyBit )
|
if( aSetDirtyBit )
|
||||||
frame->OnModify();
|
frame->OnModify();
|
||||||
else if( frame->GetDisplayOptions().m_Live3DRefresh )
|
else
|
||||||
frame->Update3DView( true );
|
frame->Update3DView( true, frame->GetDisplayOptions().m_Live3DRefresh );
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -736,7 +736,7 @@ void FOOTPRINT_EDIT_FRAME::ShowChangedLanguage()
|
||||||
void FOOTPRINT_EDIT_FRAME::OnModify()
|
void FOOTPRINT_EDIT_FRAME::OnModify()
|
||||||
{
|
{
|
||||||
PCB_BASE_FRAME::OnModify();
|
PCB_BASE_FRAME::OnModify();
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
m_treePane->GetLibTree()->RefreshLibTree();
|
m_treePane->GetLibTree()->RefreshLibTree();
|
||||||
|
|
||||||
if( !GetTitle().StartsWith( "*" ) )
|
if( !GetTitle().StartsWith( "*" ) )
|
||||||
|
|
|
@ -84,7 +84,7 @@ void FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary( LIB_ID aFPID )
|
||||||
if( m_zoomSelectBox->GetSelection() == 0 )
|
if( m_zoomSelectBox->GetSelection() == 0 )
|
||||||
Zoom_Automatique( false );
|
Zoom_Automatique( false );
|
||||||
|
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
|
|
||||||
GetScreen()->ClrModify();
|
GetScreen()->ClrModify();
|
||||||
|
|
||||||
|
|
|
@ -1064,7 +1064,7 @@ bool FOOTPRINT_EDIT_FRAME::RevertFootprint()
|
||||||
|
|
||||||
Zoom_Automatique( false );
|
Zoom_Automatique( false );
|
||||||
|
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
|
|
||||||
ClearUndoRedoList();
|
ClearUndoRedoList();
|
||||||
GetScreen()->ClrModify();
|
GetScreen()->ClrModify();
|
||||||
|
|
|
@ -695,7 +695,7 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& aEvent )
|
||||||
updateView();
|
updateView();
|
||||||
|
|
||||||
GetCanvas()->Refresh();
|
GetCanvas()->Refresh();
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
// The m_fpList has now the focus, in order to be able to use arrow keys
|
// The m_fpList has now the focus, in order to be able to use arrow keys
|
||||||
|
@ -974,11 +974,11 @@ bool FOOTPRINT_VIEWER_FRAME::ShowModal( wxString* aFootprint, wxWindow* aParent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void FOOTPRINT_VIEWER_FRAME::Update3DView( bool aForceReload, const wxString* aTitle )
|
void FOOTPRINT_VIEWER_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
|
||||||
{
|
{
|
||||||
wxString title = wxString::Format( _( "3D Viewer" ) + wxT( " \u2014 %s" ),
|
wxString title = wxString::Format( _( "3D Viewer" ) + wxT( " \u2014 %s" ),
|
||||||
getCurFootprintName() );
|
getCurFootprintName() );
|
||||||
PCB_BASE_FRAME::Update3DView( aForceReload, &title );
|
PCB_BASE_FRAME::Update3DView( aMarkDirty, aRefresh, &title );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1065,7 +1065,7 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode )
|
||||||
if( footprint )
|
if( footprint )
|
||||||
GetBoard()->Add( footprint, ADD_MODE::APPEND );
|
GetBoard()->Add( footprint, ADD_MODE::APPEND );
|
||||||
|
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
|
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,14 +154,8 @@ private:
|
||||||
*/
|
*/
|
||||||
void SelectAndViewFootprint( int aMode );
|
void SelectAndViewFootprint( int aMode );
|
||||||
|
|
||||||
/**
|
/// @copydoc PCB_BASE_FRAME::Update3DView
|
||||||
* Updates the 3D view and 3D frame title.
|
void Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle = nullptr ) override;
|
||||||
*
|
|
||||||
* Must be called after a footprint selection.
|
|
||||||
*
|
|
||||||
* @param aForceReload true to reload data immediately.
|
|
||||||
*/
|
|
||||||
void Update3DView( bool aForceReload, const wxString* aTitle = nullptr ) override;
|
|
||||||
|
|
||||||
void SaveCopyInUndoList( EDA_ITEM*, UNDO_REDO ) override {}
|
void SaveCopyInUndoList( EDA_ITEM*, UNDO_REDO ) override {}
|
||||||
void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO ) override {}
|
void SaveCopyInUndoList( const PICKED_ITEMS_LIST&, UNDO_REDO ) override {}
|
||||||
|
|
|
@ -565,16 +565,11 @@ void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
|
||||||
* Function Update3DView
|
|
||||||
* must be called after a footprint selection
|
|
||||||
* Updates the 3D view and 3D frame title.
|
|
||||||
*/
|
|
||||||
void FOOTPRINT_WIZARD_FRAME::Update3DView( bool aForceReload, const wxString* aTitle )
|
|
||||||
{
|
{
|
||||||
wxString frm3Dtitle;
|
wxString frm3Dtitle;
|
||||||
frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), m_wizardName );
|
frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), m_wizardName );
|
||||||
PCB_BASE_FRAME::Update3DView( aForceReload, &frm3Dtitle );
|
PCB_BASE_FRAME::Update3DView( aMarkDirty, aRefresh, &frm3Dtitle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -194,15 +194,8 @@ private:
|
||||||
*/
|
*/
|
||||||
void ParametersUpdated( wxGridEvent& event );
|
void ParametersUpdated( wxGridEvent& event );
|
||||||
|
|
||||||
/**
|
/// @copydoc PCB_BASE_FRAME::Update3DView
|
||||||
* Must be called after a footprint selection.
|
void Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle = nullptr ) override;
|
||||||
*
|
|
||||||
* Updates the 3D view and 3D frame title.
|
|
||||||
*
|
|
||||||
* @param aForceReload true to reload data immediately.
|
|
||||||
* @param aTitle (optional) the window title to set for the viewer.
|
|
||||||
*/
|
|
||||||
void Update3DView( bool aForceReload, const wxString* aTitle ) override;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Not used here but needed by PCB_BASE_EDIT_FRAME.
|
* Not used here but needed by PCB_BASE_EDIT_FRAME.
|
||||||
|
|
|
@ -170,7 +170,7 @@ bool FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard( FOOTPRINT* aFootprint )
|
||||||
ToggleSearchTree();
|
ToggleSearchTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
UpdateView();
|
UpdateView();
|
||||||
GetCanvas()->Refresh();
|
GetCanvas()->Refresh();
|
||||||
m_treePane->GetLibTree()->RefreshLibTree(); // update any previously-highlighted items
|
m_treePane->GetLibTree()->RefreshLibTree(); // update any previously-highlighted items
|
||||||
|
|
|
@ -88,7 +88,7 @@ EDA_3D_VIEWER* PCB_BASE_FRAME::Get3DViewerFrame()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PCB_BASE_FRAME::Update3DView( bool aReloadRequest, const wxString* aTitle )
|
void PCB_BASE_FRAME::Update3DView( bool aMarkDirty, bool aRefresh, const wxString* aTitle )
|
||||||
{
|
{
|
||||||
EDA_3D_VIEWER* draw3DFrame = Get3DViewerFrame();
|
EDA_3D_VIEWER* draw3DFrame = Get3DViewerFrame();
|
||||||
|
|
||||||
|
@ -97,10 +97,11 @@ void PCB_BASE_FRAME::Update3DView( bool aReloadRequest, const wxString* aTitle )
|
||||||
if( aTitle )
|
if( aTitle )
|
||||||
draw3DFrame->SetTitle( *aTitle );
|
draw3DFrame->SetTitle( *aTitle );
|
||||||
|
|
||||||
if( aReloadRequest )
|
if( aMarkDirty )
|
||||||
draw3DFrame->ReloadRequest();
|
draw3DFrame->ReloadRequest();
|
||||||
|
|
||||||
draw3DFrame->Redraw();
|
if( aRefresh )
|
||||||
|
draw3DFrame->Redraw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1203,8 +1203,7 @@ void PCB_EDIT_FRAME::OnModify( )
|
||||||
{
|
{
|
||||||
PCB_BASE_FRAME::OnModify();
|
PCB_BASE_FRAME::OnModify();
|
||||||
|
|
||||||
if( GetDisplayOptions().m_Live3DRefresh )
|
Update3DView( true, GetDisplayOptions().m_Live3DRefresh );
|
||||||
Update3DView( true );
|
|
||||||
|
|
||||||
if( !GetTitle().StartsWith( "*" ) )
|
if( !GetTitle().StartsWith( "*" ) )
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
|
@ -1215,7 +1214,7 @@ void PCB_EDIT_FRAME::OnModify( )
|
||||||
|
|
||||||
void PCB_EDIT_FRAME::HardRedraw()
|
void PCB_EDIT_FRAME::HardRedraw()
|
||||||
{
|
{
|
||||||
Update3DView( true );
|
Update3DView( true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <dialogs/dialog_constraints_reporter.h>
|
#include <dialogs/dialog_constraints_reporter.h>
|
||||||
#include <kicad_string.h>
|
#include <kicad_string.h>
|
||||||
#include "board_inspection_tool.h"
|
#include "board_inspection_tool.h"
|
||||||
|
#include <pcbnew_settings.h>
|
||||||
#include <widgets/appearance_controls.h>
|
#include <widgets/appearance_controls.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -713,7 +714,8 @@ int BOARD_INSPECTION_TOOL::CrossProbePcbToSch( const TOOL_EVENT& aEvent )
|
||||||
else
|
else
|
||||||
m_frame->SendMessageToEESCHEMA( nullptr );
|
m_frame->SendMessageToEESCHEMA( nullptr );
|
||||||
|
|
||||||
m_frame->Update3DView( false );
|
// Update 3D viewer highlighting
|
||||||
|
m_frame->Update3DView( false, frame()->GetPcbNewSettings()->m_Display.m_Live3DRefresh );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -732,13 +734,14 @@ int BOARD_INSPECTION_TOOL::HighlightItem( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
m_probingSchToPcb = false;
|
m_probingSchToPcb = false;
|
||||||
|
|
||||||
bool request3DviewRedraw = true;
|
bool request3DviewRedraw = frame()->GetPcbNewSettings()->m_Display.m_Live3DRefresh;
|
||||||
|
|
||||||
if( item && item->Type() != PCB_FOOTPRINT_T )
|
if( item && item->Type() != PCB_FOOTPRINT_T )
|
||||||
request3DviewRedraw = false;
|
request3DviewRedraw = false;
|
||||||
|
|
||||||
|
// Update 3D viewer highlighting
|
||||||
if( request3DviewRedraw )
|
if( request3DviewRedraw )
|
||||||
m_frame->Update3DView( false );
|
m_frame->Update3DView( false, true );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,7 +171,7 @@ int FOOTPRINT_EDITOR_CONTROL::NewFootprint( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
m_frame->UpdateView();
|
m_frame->UpdateView();
|
||||||
m_frame->Update3DView( true );
|
m_frame->Update3DView( true, true );
|
||||||
|
|
||||||
m_frame->SyncLibraryTree( false );
|
m_frame->SyncLibraryTree( false );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -232,7 +232,7 @@ int FOOTPRINT_EDITOR_CONTROL::CreateFootprint( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
m_frame->UpdateView();
|
m_frame->UpdateView();
|
||||||
canvas()->Refresh();
|
canvas()->Refresh();
|
||||||
m_frame->Update3DView( true );
|
m_frame->Update3DView( true, true );
|
||||||
|
|
||||||
m_frame->SyncLibraryTree( false );
|
m_frame->SyncLibraryTree( false );
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ int PCB_VIEWER_TOOLS::Show3DViewer( const TOOL_EVENT& aEvent )
|
||||||
|| frame()->IsType( FRAME_FOOTPRINT_VIEWER_MODAL )
|
|| frame()->IsType( FRAME_FOOTPRINT_VIEWER_MODAL )
|
||||||
|| frame()->IsType( FRAME_FOOTPRINT_WIZARD ) )
|
|| frame()->IsType( FRAME_FOOTPRINT_WIZARD ) )
|
||||||
{
|
{
|
||||||
frame()->Update3DView( true );
|
frame()->Update3DView( true, true );
|
||||||
|
|
||||||
// A stronger version of Raise() which promotes the window to its parent's level.
|
// A stronger version of Raise() which promotes the window to its parent's level.
|
||||||
KIPLATFORM::UI::ReparentQuasiModal( draw3DFrame );
|
KIPLATFORM::UI::ReparentQuasiModal( draw3DFrame );
|
||||||
|
@ -222,10 +222,10 @@ int PCB_VIEWER_TOOLS::MeasureTool( const TOOL_EVENT& aEvent )
|
||||||
controls.ShowCursor( true );
|
controls.ShowCursor( true );
|
||||||
controls.SetAutoPan( false );
|
controls.SetAutoPan( false );
|
||||||
controls.CaptureCursor( false );
|
controls.CaptureCursor( false );
|
||||||
|
|
||||||
auto setCursor =
|
auto setCursor =
|
||||||
[&]()
|
[&]()
|
||||||
{
|
{
|
||||||
frame()->GetCanvas()->SetCurrentCursor( KICURSOR::MEASURE );
|
frame()->GetCanvas()->SetCurrentCursor( KICURSOR::MEASURE );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue