Fix flicking issues on non-double-buffered platforms.

This commit is contained in:
Jeff Young 2018-07-19 21:08:31 +01:00
parent 3a67300001
commit ba0c823673
5 changed files with 61 additions and 45 deletions

View File

@ -47,6 +47,7 @@
// static members (static to remember last state):
int DIALOG_PLOT_SCHEMATIC::m_pageSizeSelect = PAGE_SIZE_AUTO;
int DIALOG_PLOT_SCHEMATIC::m_HPGLPaperSizeSelect = PAGE_SIZE_AUTO;
void SCH_EDIT_FRAME::PlotSchematic( wxCommandEvent& event )
@ -63,12 +64,13 @@ void SCH_EDIT_FRAME::PlotSchematic( wxCommandEvent& event )
DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC( SCH_EDIT_FRAME* parent ) :
DIALOG_PLOT_SCHEMATIC_BASE( parent ),
m_parent( parent ),
m_plotFormat( PLOT_FORMAT_UNDEFINED ),
m_defaultLineWidth( parent, m_lineWidthLabel, m_lineWidthCtrl, m_lineWidthUnits, true ),
m_penWidth( parent, m_penWidthLabel, m_penWidthCtrl, m_penWidthUnits, true )
{
m_parent = parent;
m_configChanged = false;
m_config = Kiface().KifaceSettings();
m_configChanged = false;
m_browseButton->SetBitmap( KiBitmap( folder_xpm ) );
@ -204,43 +206,48 @@ void DIALOG_PLOT_SCHEMATIC::OnUpdateUI( wxUpdateUIEvent& event )
{
PlotFormat fmt = GetPlotFileFormat();
wxArrayString paperSizes;
paperSizes.push_back( _( "Schematic size" ) );
int selection;
if( fmt == PLOT_FORMAT_HPGL )
if( fmt != m_plotFormat )
{
paperSizes.push_back( _( "A4" ) );
paperSizes.push_back( _( "A3" ) );
paperSizes.push_back( _( "A2" ) );
paperSizes.push_back( _( "A1" ) );
paperSizes.push_back( _( "A0" ) );
paperSizes.push_back( _( "A" ) );
paperSizes.push_back( _( "B" ) );
paperSizes.push_back( _( "C" ) );
paperSizes.push_back( _( "D" ) );
paperSizes.push_back( _( "E" ) );
m_plotFormat = fmt;
selection = m_HPGLPaperSizeSelect;
wxArrayString paperSizes;
paperSizes.push_back( _( "Schematic size" ) );
int selection;
if( fmt == PLOT_FORMAT_HPGL )
{
paperSizes.push_back( _( "A4" ) );
paperSizes.push_back( _( "A3" ) );
paperSizes.push_back( _( "A2" ) );
paperSizes.push_back( _( "A1" ) );
paperSizes.push_back( _( "A0" ) );
paperSizes.push_back( _( "A" ) );
paperSizes.push_back( _( "B" ) );
paperSizes.push_back( _( "C" ) );
paperSizes.push_back( _( "D" ) );
paperSizes.push_back( _( "E" ) );
selection = m_HPGLPaperSizeSelect;
}
else
{
paperSizes.push_back( _( "A4" ) );
paperSizes.push_back( _( "A" ) );
selection = m_pageSizeSelect;
}
m_paperSizeOption->Set( paperSizes );
m_paperSizeOption->SetSelection( selection );
m_defaultLineWidth.Enable( fmt == PLOT_FORMAT_POST || fmt == PLOT_FORMAT_PDF
|| fmt == PLOT_FORMAT_SVG );
m_plotOriginTitle->Enable( fmt == PLOT_FORMAT_HPGL );
m_plotOriginOpt->Enable( fmt == PLOT_FORMAT_HPGL );
m_penWidth.Enable( fmt == PLOT_FORMAT_HPGL );
}
else
{
paperSizes.push_back( _( "A4" ) );
paperSizes.push_back( _( "A" ) );
selection = m_pageSizeSelect;
}
m_paperSizeOption->Set( paperSizes );
m_paperSizeOption->SetSelection( selection );
m_defaultLineWidth.Enable( fmt == PLOT_FORMAT_POST || fmt == PLOT_FORMAT_PDF
|| fmt == PLOT_FORMAT_SVG );
m_plotOriginTitle->Enable( fmt == PLOT_FORMAT_HPGL );
m_plotOriginOpt->Enable( fmt == PLOT_FORMAT_HPGL );
m_penWidth.Enable( fmt == PLOT_FORMAT_HPGL );
}

View File

@ -49,10 +49,9 @@ private:
SCH_EDIT_FRAME* m_parent;
wxConfigBase* m_config;
bool m_configChanged; // true if a project config param has changed
static int m_pageSizeSelect; // Static to keep last option for some format:
// Static to keep last option:
// use default size or force A or A4 size
int m_HPGLPaperSizeSelect; // for HPGL format only: last selected paper size
PlotFormat m_plotFormat;
static int m_pageSizeSelect; // Static to keep last option for some format
static int m_HPGLPaperSizeSelect; // for HPGL format only: last selected paper size
double m_HPGLPenSize; // for HPGL format only: pen size
UNIT_BINDER m_defaultLineWidth;

View File

@ -48,6 +48,7 @@ class GBR_NETLIST_METADATA;
* of the radio buttons in the plot panel/windows.
*/
enum PlotFormat {
PLOT_FORMAT_UNDEFINED = -1,
PLOT_FIRST_FORMAT = 0,
PLOT_FORMAT_HPGL = PLOT_FIRST_FORMAT,
PLOT_FORMAT_GERBER,

View File

@ -54,6 +54,8 @@ private:
long m_NetFiltering;
static wxString m_netNameShowFilter; // the filter to show nets (default * "*").
// static to keep this pattern for an entire Pcbnew session
int m_cornerSmoothingType;
UNIT_BINDER m_cornerRadius;
UNIT_BINDER m_clearance;
UNIT_BINDER m_minWidth;
@ -96,6 +98,7 @@ int InvokeCopperZonesEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings )
DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS* aSettings ) :
DIALOG_COPPER_ZONE_BASE( aParent ),
m_cornerSmoothingType( ZONE_SETTINGS::SMOOTHING_UNDEFINED ),
m_cornerRadius( aParent, m_cornerRadiusLabel, m_cornerRadiusCtrl, m_cornerRadiusUnits, true, 0 ),
m_clearance( aParent, m_clearanceLabel, m_clearanceCtrl, m_clearanceUnits, true, 0, ZONE_CLEARANCE_MAX_VALUE_MIL*IU_PER_MILS ),
m_minWidth( aParent, m_minWidthLabel, m_minWidthCtrl, m_minWidthUnits, true, ZONE_THICKNESS_MIN_VALUE_MIL*IU_PER_MILS ),
@ -183,10 +186,15 @@ void DIALOG_COPPER_ZONE::OnUpdateUI( wxUpdateUIEvent& )
m_bNoNetWarning->Show( m_ListNetNameSelection->GetSelection() == 0 );
if( m_cornerSmoothingChoice->GetSelection() == ZONE_SETTINGS::SMOOTHING_CHAMFER )
m_cornerRadiusLabel->SetLabel( _( "Chamfer distance:" ) );
else
m_cornerRadiusLabel->SetLabel( _( "Fillet radius:" ) );
if( m_cornerSmoothingType != m_cornerSmoothingChoice->GetSelection() )
{
m_cornerSmoothingType = m_cornerSmoothingChoice->GetSelection();
if( m_cornerSmoothingChoice->GetSelection() == ZONE_SETTINGS::SMOOTHING_CHAMFER )
m_cornerRadiusLabel->SetLabel( _( "Chamfer distance:" ) );
else
m_cornerRadiusLabel->SetLabel( _( "Fillet radius:" ) );
}
}

View File

@ -51,7 +51,8 @@ class ZONE_SETTINGS
{
public:
enum {
SMOOTHING_NONE,
SMOOTHING_UNDEFINED = -1,
SMOOTHING_NONE = 0,
SMOOTHING_CHAMFER,
SMOOTHING_FILLET,
SMOOTHING_LAST