From aceed2b0a4c82a046490ff88e6d08f78a3f16466 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 17 Aug 2020 13:55:56 +0100 Subject: [PATCH] Cleaner look for colour swatches and the undefined colour. --- common/dialogs/dialog_color_picker.cpp | 221 +++++++------------- common/dialogs/dialog_color_picker.h | 12 +- common/dialogs/dialog_color_picker_base.cpp | 12 +- common/dialogs/dialog_color_picker_base.fbp | 18 +- common/dialogs/panel_color_settings.cpp | 2 +- common/settings/app_settings.cpp | 59 +++--- common/widgets/color_swatch.cpp | 86 +++++--- include/settings/app_settings.h | 7 + include/widgets/color_swatch.h | 32 ++- pcbnew/layer_widget.cpp | 4 +- pcbnew/widgets/appearance_controls.cpp | 71 +++---- pcbnew/zone_settings.cpp | 5 +- 12 files changed, 248 insertions(+), 281 deletions(-) diff --git a/common/dialogs/dialog_color_picker.cpp b/common/dialogs/dialog_color_picker.cpp index 439d8dc772..d99406a177 100644 --- a/common/dialogs/dialog_color_picker.cpp +++ b/common/dialogs/dialog_color_picker.cpp @@ -21,9 +21,14 @@ #include "dialog_color_picker.h" #include #include +#include +#include +#include #define ALPHA_MAX 100 // the max value returned by the alpha (opacity) slider +using KIGFX::COLOR4D; + // Configure the spin controls contained inside the dialog void configureSpinCtrl( wxSpinCtrl* aCtrl ) { @@ -35,10 +40,11 @@ void configureSpinCtrl( wxSpinCtrl* aCtrl ) } -DIALOG_COLOR_PICKER::DIALOG_COLOR_PICKER( wxWindow* aParent, KIGFX::COLOR4D& aCurrentColor, - bool aAllowOpacityControl, CUSTOM_COLORS_LIST* aUserColors, - const KIGFX::COLOR4D& aDefaultColor ) - : DIALOG_COLOR_PICKER_BASE( aParent ) +DIALOG_COLOR_PICKER::DIALOG_COLOR_PICKER( wxWindow* aParent, COLOR4D& aCurrentColor, + bool aAllowOpacityControl, + CUSTOM_COLORS_LIST* aUserColors, + const COLOR4D& aDefaultColor ) : + DIALOG_COLOR_PICKER_BASE( aParent ) { m_allowMouseEvents = false; m_allowOpacityCtrl = aAllowOpacityControl; @@ -58,8 +64,10 @@ DIALOG_COLOR_PICKER::DIALOG_COLOR_PICKER( wxWindow* aParent, KIGFX::COLOR4D& aCu m_newColor4D.a = 1.0; } - if( m_ActivePage >= 0 ) - m_notebook->SetSelection( (unsigned) m_ActivePage ); + APP_SETTINGS_BASE* cfg = Kiface().KifaceSettings(); + wxASSERT( cfg ); + + m_notebook->SetSelection( cfg->m_ColorPicker.default_tab ); // Build the defined colors panel: initDefinedColors( aUserColors ); @@ -71,87 +79,44 @@ DIALOG_COLOR_PICKER::DIALOG_COLOR_PICKER( wxWindow* aParent, KIGFX::COLOR4D& aCu * The underlying action is the same, but we change the label here because the action from * the point of view of the user is slightly different. */ - if( aDefaultColor == KIGFX::COLOR4D::UNSPECIFIED ) + if( aDefaultColor == COLOR4D::UNSPECIFIED ) m_resetToDefault->SetLabel( _( "Clear Color" ) ); m_sdbSizerOK->SetDefault(); } -int DIALOG_COLOR_PICKER::m_ActivePage = 0; // the active notebook page, stored during a session - DIALOG_COLOR_PICKER::~DIALOG_COLOR_PICKER() { + APP_SETTINGS_BASE* cfg = Kiface().KifaceSettings(); + wxASSERT( cfg ); + + cfg->m_ColorPicker.default_tab = m_notebook->GetSelection(); + delete m_bitmapRGB; delete m_bitmapHSV; - m_ActivePage = m_notebook->GetSelection(); - - for( auto button : m_buttonsColor ) - button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, - wxCommandEventHandler( DIALOG_COLOR_PICKER::buttColorClick ), NULL, this ); + for( wxStaticBitmap* swatch : m_colorSwatches ) + { + swatch->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, + wxMouseEventHandler( DIALOG_COLOR_PICKER::buttColorClick ), + NULL, this ); + } } -void DIALOG_COLOR_PICKER::setIconColor( wxStaticBitmap* aStaticBitmap, KIGFX::COLOR4D& aColor4D ) +void DIALOG_COLOR_PICKER::updatePreview( wxStaticBitmap* aStaticBitmap, COLOR4D& aColor4D ) { - // Draw the icon that shows the aColor4D, - // with colors according to the color 4D rgb and alpha - // for alpha = 1 (no tranparency, the icon is a full rgb color rect - // for alpha = 0 (100% tranparency, the icon is a grid of rgb color - // and background color small sub rect - wxMemoryDC bitmapDC; - wxSize size = aStaticBitmap->GetSize(); - wxBitmap newBm( size ); - bitmapDC.SelectObject( newBm ); - wxPen pen( aColor4D.ToColour() ); - wxBrush brush( aColor4D.ToColour() ); - - // clear background (set bg color to aColor4D ) - bitmapDC.SetBackground( brush ); - bitmapDC.Clear(); - - - // Draw the alpha subrect - int stepx = size.x/8; - int stepy = size.y/8; - - // build the alpha color for icon: - // the alpha color is the initial color modified to be - // the initial color for transparency = 0 ( alpha = 1 ) - // and white color for transparency = 1( alpha = 0 ) - KIGFX::COLOR4D bgcolor( GetBackgroundColour() ); - KIGFX::COLOR4D alphacolor = aColor4D; - alphacolor.r = ( alphacolor.r * aColor4D.a ) + ( bgcolor.r * (1-aColor4D.a) ); - alphacolor.g = ( alphacolor.g * aColor4D.a ) + ( bgcolor.g * (1-aColor4D.a) ); - alphacolor.b = ( alphacolor.b * aColor4D.a ) + ( bgcolor.b * (1-aColor4D.a) ); - - pen.SetColour( alphacolor.ToColour() ); - brush.SetColour( alphacolor.ToColour() ); - bitmapDC.SetPen( pen ); - bitmapDC.SetBrush( brush ); - - for( int ii = 0; ii < size.x/stepx; ii+=2 ) - { - for( int jj = 0; jj < size.y/stepy; jj+= 2 ) - { - wxPoint pos( stepx*ii + stepx/2, stepy*jj + stepy/2 ); - bitmapDC.DrawRectangle( pos, wxSize( stepx, stepy ) ); - } - } - + wxBitmap newBm = COLOR_SWATCH::MakeBitmap( aColor4D, COLOR4D::WHITE, aStaticBitmap->GetSize(), + ConvertDialogToPixels( CHECKERBOARD_SIZE_DU ) ); aStaticBitmap->SetBitmap( newBm ); - - // Deselect the Tool Bitmap from DC, in order to delete the MemoryDC - // safely without deleting the bitmap - bitmapDC.SelectObject( wxNullBitmap ); } bool DIALOG_COLOR_PICKER::TransferDataToWindow() { // Draw all bitmaps, with colors according to the color 4D - setIconColor( m_OldColorRect, m_previousColor4D ); + updatePreview( m_OldColorRect, m_previousColor4D ); SetEditVals( ALL_CHANGED, false ); drawAll(); @@ -175,9 +140,6 @@ void DIALOG_COLOR_PICKER::initDefinedColors( CUSTOM_COLORS_LIST* aPredefinedColo { #define ID_COLOR_BLACK 2000 // colors_id = ID_COLOR_BLACK a ID_COLOR_BLACK + NBCOLORS-1 - // Size of color swatches - const int w = 32, h = 32; - // Colors are built from the colorRefs() table (size NBCOLORS). // The look is better when colorRefs() order is displayed in a grid matrix // of 6 row and 5 columns, first filling a row, and after the next column. @@ -188,53 +150,44 @@ void DIALOG_COLOR_PICKER::initDefinedColors( CUSTOM_COLORS_LIST* aPredefinedColo int grid_row = 0; int table_row_count = 6; + wxSize swatchSize = ConvertDialogToPixels( SWATCH_SIZE_LARGE_DU ); + wxSize checkerboardSize = ConvertDialogToPixels( CHECKERBOARD_SIZE_DU ); + + auto addSwatch = + [&]( int aId, COLOR4D aColor, const wxString& aColorName ) + { + wxBitmap bitmap = COLOR_SWATCH::MakeBitmap( aColor, COLOR4D::WHITE, swatchSize, + checkerboardSize ); + wxStaticBitmap* swatch = new wxStaticBitmap( m_panelDefinedColors, aId, bitmap ); + + m_fgridColor->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxStaticText* label = new wxStaticText( m_panelDefinedColors, wxID_ANY, aColorName, + wxDefaultPosition, wxDefaultSize, 0 ); + m_fgridColor->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 15 ); + + m_colorSwatches.push_back( swatch ); + + swatch->Connect( wxEVT_LEFT_DOWN, + wxMouseEventHandler( DIALOG_COLOR_PICKER::buttColorClick ), + NULL, this ); + }; + // If no predefined list is given, build the default predefined colors: if( aPredefinedColors ) { for( unsigned jj = 0; jj < aPredefinedColors->size() && jj < NBCOLORS; ++jj ) { CUSTOM_COLOR_ITEM* item = & *aPredefinedColors->begin() + jj; - int butt_ID = ID_COLOR_BLACK + jj; - wxMemoryDC iconDC; - wxBitmap ButtBitmap( w, h ); - wxBrush brush; + int butt_ID = ID_COLOR_BLACK + jj; - iconDC.SelectObject( ButtBitmap ); - - KIGFX::COLOR4D buttcolor = item->m_Color; - - iconDC.SetPen( *wxBLACK_PEN ); - brush.SetColour( buttcolor.ToColour() ); - brush.SetStyle( wxBRUSHSTYLE_SOLID ); - - iconDC.SetBrush( brush ); - iconDC.SetBackground( *wxGREY_BRUSH ); - iconDC.Clear(); - iconDC.DrawRoundedRectangle( 0, 0, w, h, (double) h / 3 ); - - wxBitmapButton* bitmapButton = new wxBitmapButton( m_panelDefinedColors, butt_ID, ButtBitmap, - wxDefaultPosition, wxSize( w+8, h+6 ) ); - m_fgridColor->Add( bitmapButton, 0, - wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | - wxLEFT | wxBOTTOM, 5 ); - - wxStaticText* label = new wxStaticText( m_panelDefinedColors, -1, - item->m_ColorName, - wxDefaultPosition, wxDefaultSize, 0 ); - m_fgridColor->Add( label, 1, - wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | - wxLEFT | wxRIGHT | wxBOTTOM, 5 ); - m_buttonsColor.push_back( bitmapButton ); - - m_Color4DList.push_back( buttcolor ); - - bitmapButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, - wxCommandEventHandler( DIALOG_COLOR_PICKER::buttColorClick ), NULL, this ); + addSwatch( butt_ID, item->m_Color, item->m_ColorName ); + m_Color4DList.push_back( item->m_Color ); } } else { - m_Color4DList.assign( NBCOLORS, KIGFX::COLOR4D( 0.0, 0.0, 0.0, 1.0 ) ); + m_Color4DList.assign( NBCOLORS, COLOR4D( 0.0, 0.0, 0.0, 1.0 ) ); for( int jj = 0; jj < NBCOLORS; ++jj, grid_col++ ) { @@ -244,42 +197,12 @@ void DIALOG_COLOR_PICKER::initDefinedColors( CUSTOM_COLORS_LIST* aPredefinedColo grid_row++; } - int ii = grid_row + (grid_col*table_row_count); // The index in colorRefs() + int ii = grid_row + (grid_col*table_row_count); // The index in colorRefs() + int butt_ID = ID_COLOR_BLACK + ii; + COLOR4D buttcolor = COLOR4D( colorRefs()[ii].m_Numcolor ); - int butt_ID = ID_COLOR_BLACK + ii; - wxMemoryDC iconDC; - wxBitmap ButtBitmap( w, h ); - wxBrush brush; - - iconDC.SelectObject( ButtBitmap ); - - KIGFX::COLOR4D buttcolor = KIGFX::COLOR4D( colorRefs()[ii].m_Numcolor ); + addSwatch( butt_ID, buttcolor, wxGetTranslation( colorRefs()[ii].m_ColorName ) ); m_Color4DList[ butt_ID - ID_COLOR_BLACK ] = buttcolor; - - iconDC.SetPen( *wxBLACK_PEN ); - brush.SetColour( buttcolor.ToColour() ); - brush.SetStyle( wxBRUSHSTYLE_SOLID ); - - iconDC.SetBrush( brush ); - iconDC.SetBackground( *wxGREY_BRUSH ); - iconDC.Clear(); - iconDC.DrawRoundedRectangle( 0, 0, w, h, (double) h / 3 ); - - wxBitmapButton* bitmapButton = new wxBitmapButton( m_panelDefinedColors, butt_ID, ButtBitmap, - wxDefaultPosition, wxSize( w+8, h+6 ) ); - m_fgridColor->Add( bitmapButton, 0, - wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | - wxLEFT | wxBOTTOM, 5 ); - - wxStaticText* label = new wxStaticText( m_panelDefinedColors, -1, - wxGetTranslation( colorRefs()[ii].m_ColorName ), - wxDefaultPosition, wxDefaultSize, 0 ); - m_fgridColor->Add( label, 1, - wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | - wxLEFT | wxRIGHT | wxBOTTOM, 5 ); - m_buttonsColor.push_back( bitmapButton ); - bitmapButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, - wxCommandEventHandler( DIALOG_COLOR_PICKER::buttColorClick ), NULL, this ); } } } @@ -306,7 +229,7 @@ void DIALOG_COLOR_PICKER::createRGBBitmap() // Reserve room to draw cursors inside the bitmap half_size -= m_cursorsSize/2; - KIGFX::COLOR4D color; + COLOR4D color; // Red blue area in X Z 3d axis double inc = 1.0 / half_size; @@ -391,9 +314,9 @@ void DIALOG_COLOR_PICKER::createHSVBitmap() // Reserve room to draw cursors inside the bitmap half_size -= m_cursorsSize/2; - double hue, sat; - KIGFX::COLOR4D color; - int sq_radius = half_size*half_size; + double hue, sat; + COLOR4D color; + int sq_radius = half_size*half_size; for( int xx = -half_size; xx < half_size; xx++ ) { @@ -575,7 +498,7 @@ void DIALOG_COLOR_PICKER::drawAll() m_NewColorRect->Freeze(); // Avoid flicker m_HsvBitmap->Freeze(); m_RgbBitmap->Freeze(); - setIconColor( m_NewColorRect, m_newColor4D ); + updatePreview( m_NewColorRect, m_newColor4D ); drawHSVPalette(); drawRGBPalette(); m_NewColorRect->Thaw(); @@ -587,10 +510,10 @@ void DIALOG_COLOR_PICKER::drawAll() } -void DIALOG_COLOR_PICKER::buttColorClick( wxCommandEvent& event ) +void DIALOG_COLOR_PICKER::buttColorClick( wxMouseEvent& event ) { int id = event.GetId(); - KIGFX::COLOR4D color( m_Color4DList[id - ID_COLOR_BLACK] );//EDA_COLOR_T( id - ID_COLOR_BLACK ) ); + COLOR4D color( m_Color4DList[id - ID_COLOR_BLACK] ); m_newColor4D.r = color.r; m_newColor4D.g = color.g; m_newColor4D.b = color.b; @@ -775,7 +698,7 @@ void DIALOG_COLOR_PICKER::OnChangeAlpha( wxScrollEvent& event ) double alpha = (double)event.GetPosition() / ALPHA_MAX; m_newColor4D.a = alpha; m_NewColorRect->Freeze(); // Avoid flicker - setIconColor( m_NewColorRect, m_newColor4D ); + updatePreview( m_NewColorRect, m_newColor4D ); m_NewColorRect->Thaw(); m_NewColorRect->Refresh(); } @@ -857,9 +780,5 @@ void DIALOG_COLOR_PICKER::OnResetButton( wxCommandEvent& aEvent ) m_newColor4D.ToHSV( m_hue, m_sat, m_val, true ); SetEditVals( ALL_CHANGED, false ); - // When the default is UNSPECIFIED, this is the Clear Color button, which should accept - if( m_defaultColor == KIGFX::COLOR4D::UNSPECIFIED ) - AcceptAndClose(); - else - drawAll(); + drawAll(); } diff --git a/common/dialogs/dialog_color_picker.h b/common/dialogs/dialog_color_picker.h index fb8188f470..7d375bb690 100644 --- a/common/dialogs/dialog_color_picker.h +++ b/common/dialogs/dialog_color_picker.h @@ -28,6 +28,9 @@ #include #include "dialog_color_picker_base.h" +class COLOR_SWATCH; + + /** a class to handle a custom color (predefined color) for * the color picker dialog */ @@ -83,8 +86,6 @@ public: KIGFX::COLOR4D GetColor() { return m_newColor4D; }; - static int m_ActivePage; ///< the active notebook page, stored during a session - private: /* When the dialog is created, the mouse cursor can be on the RGB or HSV palette selector * Because this dialog is created by clicking double clicking on a widget, the left mouse @@ -116,7 +117,7 @@ private: wxBitmap* m_bitmapRGB; ///< the basic RGB palette wxBitmap* m_bitmapHSV; ///< the basic HUV palette - std::vector m_buttonsColor; ///< list of defined colors buttons + std::vector m_colorSwatches; ///< list of defined colors buttons void SetEditVals( CHANGED_COLOR aChanged, bool aCheckTransparency ); void drawAll(); @@ -125,10 +126,9 @@ private: void drawHSVPalette(); ///< draws the HSV color circle void createRGBBitmap(); ///< generate the bitmap that shows the RVB color space void drawRGBPalette(); ///< draws the RVB color space - void drawRGBCursors(); ///> repaint a static bitmap with the aColor4D color - void setIconColor( wxStaticBitmap* aStaticBitmap, KIGFX::COLOR4D& aColor4D ); + void updatePreview( wxStaticBitmap* aStaticBitmap, KIGFX::COLOR4D& aColor4D ); ///< Event handler from wxSlider: brightness (value) control void OnChangeBrightness( wxScrollEvent& event ) override; @@ -164,7 +164,7 @@ private: bool setHSvaluesFromCursor( wxPoint aMouseCursor ); ///> Event handler for defined color buttons - void buttColorClick( wxCommandEvent& event ); + void buttColorClick( wxMouseEvent& event ); ///> called when creating the dialog bool TransferDataToWindow() override; diff --git a/common/dialogs/dialog_color_picker_base.cpp b/common/dialogs/dialog_color_picker_base.cpp index e06b2cd8bf..c4d3cba3f2 100644 --- a/common/dialogs/dialog_color_picker_base.cpp +++ b/common/dialogs/dialog_color_picker_base.cpp @@ -135,7 +135,7 @@ DIALOG_COLOR_PICKER_BASE::DIALOG_COLOR_PICKER_BASE( wxWindow* parent, wxWindowID m_panelDefinedColors = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_SizerDefinedColors = new wxBoxSizer( wxVERTICAL ); - m_fgridColor = new wxFlexGridSizer( 0, 10, 0, 0 ); + m_fgridColor = new wxFlexGridSizer( 0, 10, 25, 5 ); m_fgridColor->AddGrowableCol( 1 ); m_fgridColor->AddGrowableCol( 3 ); m_fgridColor->AddGrowableCol( 5 ); @@ -145,7 +145,7 @@ DIALOG_COLOR_PICKER_BASE::DIALOG_COLOR_PICKER_BASE( wxWindow* parent, wxWindowID m_fgridColor->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_SizerDefinedColors->Add( m_fgridColor, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 ); + m_SizerDefinedColors->Add( m_fgridColor, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 10 ); m_panelDefinedColors->SetSizer( m_SizerDefinedColors ); @@ -184,15 +184,15 @@ DIALOG_COLOR_PICKER_BASE::DIALOG_COLOR_PICKER_BASE( wxWindow* parent, wxWindowID m_staticTextOldColor = new wxStaticText( this, wxID_ANY, _("Preview (old/new):"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextOldColor->Wrap( -1 ); - bButtonsSizer->Add( m_staticTextOldColor, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bButtonsSizer->Add( m_staticTextOldColor, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); m_OldColorRect = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_OldColorRect->SetMinSize( wxSize( 30,22 ) ); + m_OldColorRect->SetMinSize( wxSize( 24,24 ) ); bButtonsSizer->Add( m_OldColorRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_NewColorRect = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_NewColorRect->SetMinSize( wxSize( 30,22 ) ); + m_NewColorRect->SetMinSize( wxSize( 24,24 ) ); bButtonsSizer->Add( m_NewColorRect, 0, wxALIGN_CENTER_VERTICAL, 5 ); @@ -202,7 +202,7 @@ DIALOG_COLOR_PICKER_BASE::DIALOG_COLOR_PICKER_BASE( wxWindow* parent, wxWindowID m_colorValue = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_colorValue->SetMinSize( wxSize( 176,-1 ) ); - bButtonsSizer->Add( m_colorValue, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + bButtonsSizer->Add( m_colorValue, 0, wxALIGN_CENTER_VERTICAL, 5 ); bButtonsSizer->Add( 20, 0, 0, wxEXPAND, 5 ); diff --git a/common/dialogs/dialog_color_picker_base.fbp b/common/dialogs/dialog_color_picker_base.fbp index f2b61d6280..4d1ca75767 100644 --- a/common/dialogs/dialog_color_picker_base.fbp +++ b/common/dialogs/dialog_color_picker_base.fbp @@ -1212,21 +1212,21 @@ wxVERTICAL protected - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM - 0 + 10 + wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 1 10 wxBOTH 1,3,5,7,9 - 0 + 5 m_fgridColor wxFLEX_GROWMODE_SPECIFIED protected 0 - 0 + 25 @@ -1463,7 +1463,7 @@ none 5 - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT 0 1 @@ -1560,7 +1560,7 @@ 0 - 30,22 + 24,24 1 m_OldColorRect 1 @@ -1618,7 +1618,7 @@ 0 - 30,22 + 24,24 1 m_NewColorRect 1 @@ -1650,7 +1650,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL 0 1 diff --git a/common/dialogs/panel_color_settings.cpp b/common/dialogs/panel_color_settings.cpp index cfe84fb2c7..2aa983a460 100644 --- a/common/dialogs/panel_color_settings.cpp +++ b/common/dialogs/panel_color_settings.cpp @@ -215,7 +215,7 @@ void PANEL_COLOR_SETTINGS::createSwatch( int aLayer, const wxString& aName ) COLOR4D backgroundColor = m_currentSettings->GetColor( m_backgroundLayer ); COLOR_SWATCH* swatch = new COLOR_SWATCH( m_colorsListWindow, color, id, backgroundColor, - defaultColor, true ); + defaultColor, SWATCH_MEDIUM ); swatch->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); m_colorsGridSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxLEFT, 5 ); diff --git a/common/settings/app_settings.cpp b/common/settings/app_settings.cpp index 9f98d4b33e..06855872a1 100644 --- a/common/settings/app_settings.cpp +++ b/common/settings/app_settings.cpp @@ -36,6 +36,7 @@ APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaV m_CrossProbing(), m_FindReplace(), m_Graphics(), + m_ColorPicker(), m_LibTree(), m_Printing(), m_System(), @@ -63,58 +64,66 @@ APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaV #ifdef __WXMAC__ // Cairo renderer doesn't handle Retina displays so default to OpenGL - m_params.emplace_back( new PARAM( "graphics.canvas_type", &m_Graphics.canvas_type, - EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ) ); + m_params.emplace_back( new PARAM( "graphics.canvas_type", + &m_Graphics.canvas_type, EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ) ); #else - m_params.emplace_back( new PARAM( "graphics.canvas_type", &m_Graphics.canvas_type, - EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO ) ); + m_params.emplace_back( new PARAM( "graphics.canvas_type", + &m_Graphics.canvas_type, EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO ) ); #endif - m_params.emplace_back( - new PARAM( "lib_tree.column_width", &m_LibTree.column_width, 360 ) ); + m_params.emplace_back( new PARAM( "color_picker.default_tab", + &m_ColorPicker.default_tab, 0 ) ); - m_params.emplace_back( - new PARAM( "printing.background", &m_Printing.background, false ) ); + m_params.emplace_back( new PARAM( "lib_tree.column_width", + &m_LibTree.column_width, 360 ) ); - m_params.emplace_back( new PARAM( "printing.monochrome", &m_Printing.monochrome, true ) ); + m_params.emplace_back( new PARAM( "printing.background", + &m_Printing.background, false ) ); - m_params.emplace_back( new PARAM( "printing.scale", &m_Printing.scale, 1.0 ) ); + m_params.emplace_back( new PARAM( "printing.monochrome", + &m_Printing.monochrome, true ) ); - m_params.emplace_back( - new PARAM( "printing.use_theme", &m_Printing.use_theme, false ) ); + m_params.emplace_back( new PARAM( "printing.scale", + &m_Printing.scale, 1.0 ) ); - m_params.emplace_back( - new PARAM( "printing.color_theme", &m_Printing.color_theme, "" ) ); + m_params.emplace_back( new PARAM( "printing.use_theme", + &m_Printing.use_theme, false ) ); + + m_params.emplace_back( new PARAM( "printing.color_theme", + &m_Printing.color_theme, "" ) ); m_params.emplace_back( new PARAM( "printing.title_block", &m_Printing.title_block, false ) ); - m_params.emplace_back( new PARAM_LIST( "printing.layers", &m_Printing.layers, {} ) ); + m_params.emplace_back( new PARAM_LIST( "printing.layers", + &m_Printing.layers, {} ) ); m_params.emplace_back( new PARAM( "system.first_run_shown", &m_System.first_run_shown, false ) ); - m_params.emplace_back( new PARAM( "system.max_undo_items", &m_System.max_undo_items, 0 ) ); + m_params.emplace_back( new PARAM( "system.max_undo_items", + &m_System.max_undo_items, 0 ) ); m_params.emplace_back( new PARAM_LIST( "system.file_history", &m_System.file_history, {} ) ); - m_params.emplace_back( new PARAM( "system.units", &m_System.units, - static_cast( EDA_UNITS::MILLIMETRES ) ) ); + m_params.emplace_back( new PARAM( "system.units", + &m_System.units, static_cast( EDA_UNITS::MILLIMETRES ) ) ); - m_params.emplace_back( new PARAM( "appearance.color_theme", &m_ColorTheme, "user" ) ); + m_params.emplace_back( new PARAM( "appearance.color_theme", + &m_ColorTheme, "user" ) ); addParamsForWindow( &m_Window, "window" ); - m_params.emplace_back( new PARAM( - "cross_probing.center_on_items", &m_CrossProbing.center_on_items, true ) ); + m_params.emplace_back( new PARAM( "cross_probing.center_on_items", + &m_CrossProbing.center_on_items, true ) ); - m_params.emplace_back( - new PARAM( "cross_probing.zoom_to_fit", &m_CrossProbing.zoom_to_fit, true ) ); + m_params.emplace_back( new PARAM( "cross_probing.zoom_to_fit", + &m_CrossProbing.zoom_to_fit, true ) ); - m_params.emplace_back( new PARAM( - "cross_probing.auto_highlight", &m_CrossProbing.auto_highlight, true ) ); + m_params.emplace_back( new PARAM( "cross_probing.auto_highlight", + &m_CrossProbing.auto_highlight, true ) ); } diff --git a/common/widgets/color_swatch.cpp b/common/widgets/color_swatch.cpp index 6e7ed9e3f1..a82e4d7388 100644 --- a/common/widgets/color_swatch.cpp +++ b/common/widgets/color_swatch.cpp @@ -31,9 +31,6 @@ wxDEFINE_EVENT(COLOR_SWATCH_CHANGED, wxCommandEvent); using KIGFX::COLOR4D; -const static wxSize PALETTE_SWATCH_SIZE_DU( 8, 6 ); -const static wxSize DIALOG_SWATCH_SIZE_DU( 24, 10 ); - // See selcolor.cpp: extern COLOR4D DisplayColorFrame( wxWindow* aParent, COLOR4D aOldColor ); @@ -43,49 +40,83 @@ extern COLOR4D DisplayColorFrame( wxWindow* aParent, COLOR4D aOldColor ); * * @param aWindow - window used as context for device-independent size */ -wxBitmap COLOR_SWATCH::MakeBitmap( COLOR4D aColor, COLOR4D aBackground, wxSize aSize ) +wxBitmap COLOR_SWATCH::MakeBitmap( COLOR4D aColor, COLOR4D aBackground, wxSize aSize, + wxSize aCheckerboardSize ) { wxBitmap bitmap( aSize ); wxBrush brush; + wxPen pen; wxMemoryDC iconDC; iconDC.SelectObject( bitmap ); - brush.SetStyle( wxBRUSHSTYLE_SOLID ); - brush.SetColour( aBackground.WithAlpha(1.0).ToColour() ); - iconDC.SetBrush( brush ); - iconDC.DrawRectangle( 0, 0, aSize.x, aSize.y ); if( aColor == COLOR4D::UNSPECIFIED ) { - aColor = aBackground.Inverted(); - brush.SetStyle( wxBRUSHSTYLE_BDIAGONAL_HATCH ); - } + bool rowCycle = true; - brush.SetColour( aColor.ToColour() ); - iconDC.SetBrush( brush ); - iconDC.DrawRectangle( 0, 0, aSize.x, aSize.y ); + for( int x = 0; x < aSize.x; x += aCheckerboardSize.x ) + { + bool colCycle = rowCycle; + + for( int y = 0; y < aSize.y; y += aCheckerboardSize.y ) + { + COLOR4D color = colCycle ? COLOR4D( LIGHTGRAY ) : COLOR4D( WHITE ); + brush.SetColour( color.ToColour() ); + pen.SetColour( color.ToColour() ); + + iconDC.SetBrush( brush ); + iconDC.SetPen( pen ); + iconDC.DrawRectangle( x, y, x + aCheckerboardSize.x, y + aCheckerboardSize.y ); + + colCycle = !colCycle; + } + + rowCycle = !rowCycle; + } + } + else + { + brush.SetColour( aBackground.WithAlpha(1.0).ToColour() ); + pen.SetColour( aBackground.WithAlpha(1.0).ToColour() ); + + iconDC.SetBrush( brush ); + iconDC.SetPen( pen ); + iconDC.DrawRectangle( 0, 0, aSize.x, aSize.y ); + + brush.SetColour( aColor.ToColour() ); + pen.SetColour( aColor.ToColour() ); + + iconDC.SetBrush( brush ); + iconDC.SetPen( pen ); + iconDC.DrawRectangle( 0, 0, aSize.x, aSize.y ); + } return bitmap; } COLOR_SWATCH::COLOR_SWATCH( wxWindow* aParent, COLOR4D aColor, int aID, COLOR4D aBackground, - const COLOR4D aDefault, bool aForDialog ) : + const COLOR4D aDefault, SWATCH_SIZE aSwatchSize ) : wxPanel( aParent, aID ), m_color( aColor ), m_background( aBackground ), m_default( aDefault ) { - if( aForDialog ) - m_size = ConvertDialogToPixels( DIALOG_SWATCH_SIZE_DU ); - else - m_size = ConvertDialogToPixels( PALETTE_SWATCH_SIZE_DU ); + switch( aSwatchSize ) + { + case SWATCH_MEDIUM: m_size = ConvertDialogToPixels( SWATCH_SIZE_MEDIUM_DU ); break; + case SWATCH_SMALL: m_size = ConvertDialogToPixels( SWATCH_SIZE_SMALL_DU ); break; + case SWATCH_LARGE: m_size = ConvertDialogToPixels( SWATCH_SIZE_LARGE_DU ); break; + } + + m_checkerboardSize = ConvertDialogToPixels( CHECKERBOARD_SIZE_DU ); auto sizer = new wxBoxSizer( wxHORIZONTAL ); SetSizer( sizer ); - wxBitmap bitmap = COLOR_SWATCH::MakeBitmap( aColor, aBackground, m_size ); + wxBitmap bitmap = COLOR_SWATCH::MakeBitmap( aColor, aBackground, m_size, + m_checkerboardSize ); m_swatch = new wxStaticBitmap( this, aID, bitmap ); sizer->Add( m_swatch, 0, 0 ); @@ -99,17 +130,19 @@ COLOR_SWATCH::COLOR_SWATCH( wxWindow *aParent, wxWindowID aID, const wxPoint &aP wxPanel( aParent, aID, aPos, aSize, aStyle ) { if( aSize == wxDefaultSize ) - m_size = ConvertDialogToPixels( DIALOG_SWATCH_SIZE_DU ); + m_size = ConvertDialogToPixels( SWATCH_SIZE_MEDIUM_DU ); else m_size = aSize; + m_checkerboardSize = ConvertDialogToPixels( CHECKERBOARD_SIZE_DU ); + SetSize( m_size ); auto sizer = new wxBoxSizer( wxHORIZONTAL ); SetSizer( sizer ); - wxBitmap bitmap = COLOR_SWATCH::MakeBitmap( KIGFX::COLOR4D::UNSPECIFIED, - KIGFX::COLOR4D::UNSPECIFIED, m_size ); + wxBitmap bitmap = COLOR_SWATCH::MakeBitmap( COLOR4D::UNSPECIFIED, COLOR4D::UNSPECIFIED, + m_size, m_checkerboardSize ); m_swatch = new wxStaticBitmap( this, aID, bitmap ); sizer->Add( m_swatch, 0, 0 ); @@ -178,8 +211,7 @@ void COLOR_SWATCH::SetSwatchColor( COLOR4D aColor, bool sendEvent ) { m_color = aColor; - wxBitmap bm = MakeBitmap( m_color == COLOR4D::UNSPECIFIED ? m_default : m_color, - m_background, m_size ); + wxBitmap bm = MakeBitmap( m_color, m_background, m_size, m_checkerboardSize ); m_swatch->SetBitmap( bm ); if( sendEvent ) @@ -196,7 +228,7 @@ void COLOR_SWATCH::SetDefaultColor( COLOR4D aColor ) void COLOR_SWATCH::SetSwatchBackground( COLOR4D aBackground ) { m_background = aBackground; - wxBitmap bm = MakeBitmap( m_color, m_background, m_size ); + wxBitmap bm = MakeBitmap( m_color, m_background, m_size, m_checkerboardSize ); m_swatch->SetBitmap( bm ); } @@ -221,7 +253,7 @@ void COLOR_SWATCH::GetNewSwatchColor() { m_color = newColor; - wxBitmap bm = MakeBitmap( newColor, m_background, m_size ); + wxBitmap bm = MakeBitmap( newColor, m_background, m_size, m_checkerboardSize ); m_swatch->SetBitmap( bm ); sendSwatchChangeEvent( *this ); diff --git a/include/settings/app_settings.h b/include/settings/app_settings.h index 44d8a3a764..147f3471d3 100644 --- a/include/settings/app_settings.h +++ b/include/settings/app_settings.h @@ -108,6 +108,11 @@ public: int canvas_type; }; + struct COLOR_PICKER + { + int default_tab; + }; + struct LIB_TREE { int column_width; @@ -145,6 +150,8 @@ public: GRAPHICS m_Graphics; + COLOR_PICKER m_ColorPicker; + LIB_TREE m_LibTree; PRINTING m_Printing; diff --git a/include/widgets/color_swatch.h b/include/widgets/color_swatch.h index abd91693c7..270c21835b 100644 --- a/include/widgets/color_swatch.h +++ b/include/widgets/color_swatch.h @@ -31,6 +31,20 @@ #include +enum SWATCH_SIZE +{ + SWATCH_SMALL, + SWATCH_MEDIUM, + SWATCH_LARGE +}; + + +const static wxSize SWATCH_SIZE_SMALL_DU( 8, 6 ); +const static wxSize SWATCH_SIZE_MEDIUM_DU( 24, 10 ); +const static wxSize SWATCH_SIZE_LARGE_DU( 24, 16 ); +const static wxSize CHECKERBOARD_SIZE_DU( 3, 3 ); + + /** * Class representing a simple color swatch, of the kind used to * set layer colors @@ -47,7 +61,7 @@ public: * @param aID id to use when sending swatch events */ COLOR_SWATCH( wxWindow* aParent, KIGFX::COLOR4D aColor, int aID, KIGFX::COLOR4D aBackground, - const KIGFX::COLOR4D aDefault, bool aForDialog ); + const KIGFX::COLOR4D aDefault, SWATCH_SIZE aSwatchType ); /** * constructor for wxFormBuilder @@ -82,7 +96,8 @@ public: */ void GetNewSwatchColor(); - static wxBitmap MakeBitmap( KIGFX::COLOR4D aColor, KIGFX::COLOR4D aBackground, wxSize aSize ); + static wxBitmap MakeBitmap( KIGFX::COLOR4D aColor, KIGFX::COLOR4D aBackground, wxSize aSize, + wxSize aCheckerboardSize ); private: void setupEvents(); @@ -92,19 +107,14 @@ private: */ void rePostEvent( wxEvent& aEvt ); - ///> The current colour of the swatch - KIGFX::COLOR4D m_color; + KIGFX::COLOR4D m_color; + KIGFX::COLOR4D m_background; + KIGFX::COLOR4D m_default; - ///> The background colour to show the swatch over - KIGFX::COLOR4D m_background; - - ///> The default color for the swatch - KIGFX::COLOR4D m_default; - - ///> Handle of the actual swatch shown wxStaticBitmap* m_swatch; wxSize m_size; + wxSize m_checkerboardSize; }; diff --git a/pcbnew/layer_widget.cpp b/pcbnew/layer_widget.cpp index 40fb7fc854..34119f3858 100644 --- a/pcbnew/layer_widget.cpp +++ b/pcbnew/layer_widget.cpp @@ -331,7 +331,7 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec ) col = COLUMN_COLORBM; auto bmb = new COLOR_SWATCH( m_LayerScrolledWindow, aSpec.color, encodeId( col, aSpec.id ), - getBackgroundLayerColor(), aSpec.defaultColor, false ); + getBackgroundLayerColor(), aSpec.defaultColor, SWATCH_SMALL ); bmb->Bind( wxEVT_LEFT_DOWN, &LAYER_WIDGET::OnLeftDownLayers, this ); bmb->Bind( COLOR_SWATCH_CHANGED, &LAYER_WIDGET::OnLayerSwatchChanged, this ); bmb->SetToolTip( _("Left double click or middle click for color change, right click for menu" ) ); @@ -431,7 +431,7 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec ) if( aSpec.color != COLOR4D::UNSPECIFIED ) { auto bmb = new COLOR_SWATCH( m_RenderScrolledWindow, aSpec.color, encodeId( col, aSpec.id ), - getBackgroundLayerColor(), aSpec.defaultColor, false ); + getBackgroundLayerColor(), aSpec.defaultColor, SWATCH_SMALL ); bmb->Bind( COLOR_SWATCH_CHANGED, &LAYER_WIDGET::OnRenderSwatchChanged, this ); bmb->SetToolTip( _( "Left double click or middle click for color change" ) ); m_RenderFlexGridSizer->wxSizer::Insert( index+col, bmb, 0, flags ); diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index 3f5df9aa75..32593b7d38 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -530,7 +530,8 @@ void APPEARANCE_CONTROLS::rebuildLayers() ROW_ICON_PROVIDER::STATE::OFF, layer ); COLOR_SWATCH* swatch = new COLOR_SWATCH( panel, COLOR4D::UNSPECIFIED, layer, - bgColor, theme->GetColor( layer ), false ); + bgColor, theme->GetColor( layer ), + SWATCH_SMALL ); swatch->SetToolTip( _( "Left double click or middle click for color change, " "right click for menu" ) ); @@ -989,7 +990,7 @@ void APPEARANCE_CONTROLS::rebuildObjects() if( color != COLOR4D::UNSPECIFIED ) { COLOR_SWATCH* swatch = new COLOR_SWATCH( m_windowObjects, color, layer, - bgColor, defColor, false ); + bgColor, defColor, SWATCH_SMALL ); swatch->SetToolTip( _( "Left double click or middle click for color change, " "right click for menu" ) ); @@ -1195,13 +1196,10 @@ void APPEARANCE_CONTROLS::rebuildNets() COLOR4D::UNSPECIFIED; setting->ctl_color = new COLOR_SWATCH( setting->ctl_panel, color, id, bgColor, - COLOR4D::UNSPECIFIED, false ); + COLOR4D::UNSPECIFIED, SWATCH_SMALL ); setting->ctl_color->SetToolTip( _( "Left double click or middle click for color " "change, right click for menu" ) ); - if( color == COLOR4D::UNSPECIFIED ) - setting->ctl_color->Hide(); - setting->ctl_color->Bind( COLOR_SWATCH_CHANGED, [&]( wxCommandEvent& aEvent ) { @@ -1211,9 +1209,6 @@ void APPEARANCE_CONTROLS::rebuildNets() netColors[net] = s->GetSwatchColor(); - if( s->GetSwatchColor() == COLOR4D::UNSPECIFIED ) - s->Hide(); - m_frame->GetCanvas()->GetView()->UpdateAllLayersColor(); m_frame->GetCanvas()->RedrawRatsnest(); @@ -1234,13 +1229,14 @@ void APPEARANCE_CONTROLS::rebuildNets() aNet->GetShortNetname() ); setting->ctl_text->Wrap( -1 ); - int flags = wxALIGN_CENTER_VERTICAL | wxRIGHT; + sizer->Add( setting->ctl_color, 0, wxALIGN_CENTER_VERTICAL, 5 ); + sizer->AddSpacer( 7 ); + sizer->Add( setting->ctl_visibility, 0, wxALIGN_CENTER_VERTICAL, 5 ); + sizer->AddSpacer( 3 ); + sizer->Add( setting->ctl_text, 1, wxALIGN_CENTER_VERTICAL, 5 ); - sizer->Add( setting->ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 ); - sizer->Add( setting->ctl_visibility, 0, flags, 5 ); - sizer->Add( setting->ctl_text, 1, flags, 5 ); - - m_netsOuterSizer->Add( setting->ctl_panel, 0, wxEXPAND, 0 ); + m_netsOuterSizer->Add( setting->ctl_panel, 0, wxEXPAND, 5 ); + m_netsOuterSizer->AddSpacer( 1 ); setting->ctl_visibility->Bind( TOGGLE_CHANGED, [&]( wxCommandEvent& aEvent ) @@ -1292,7 +1288,7 @@ void APPEARANCE_CONTROLS::rebuildNets() }; auto appendNetclass = - [&]( int aId, const NETCLASSPTR& aClass, bool isDefault = false ) + [&]( int aId, const NETCLASSPTR& aClass ) { wxString name = aClass->GetName(); @@ -1307,16 +1303,12 @@ void APPEARANCE_CONTROLS::rebuildNets() COLOR4D::UNSPECIFIED; setting->ctl_color = new COLOR_SWATCH( setting->ctl_panel, color, aId, bgColor, - COLOR4D::UNSPECIFIED, false ); + COLOR4D::UNSPECIFIED, SWATCH_SMALL ); setting->ctl_color->SetToolTip( _( "Left double click or middle click for color " - "change, right click for menu" ) ); + "change, right click for menu" ) ); - if( !isDefault || color == COLOR4D::UNSPECIFIED ) - setting->ctl_color->Hide(); - - if( !isDefault ) - setting->ctl_color->Bind( COLOR_SWATCH_CHANGED, - &APPEARANCE_CONTROLS::onNetclassColorChanged, this ); + setting->ctl_color->Bind( COLOR_SWATCH_CHANGED, + &APPEARANCE_CONTROLS::onNetclassColorChanged, this ); setting->ctl_visibility = new BITMAP_TOGGLE( setting->ctl_panel, aId, KiBitmap( visibility_xpm ), @@ -1329,31 +1321,29 @@ void APPEARANCE_CONTROLS::rebuildNets() setting->ctl_text = new wxStaticText( setting->ctl_panel, aId, name ); setting->ctl_text->Wrap( -1 ); - int flags = wxALIGN_CENTER_VERTICAL | wxRIGHT; + sizer->Add( setting->ctl_color, 0, wxALIGN_CENTER_VERTICAL, 5 ); + sizer->AddSpacer( 7 ); + sizer->Add( setting->ctl_visibility, 0, wxALIGN_CENTER_VERTICAL, 5 ); + sizer->AddSpacer( 3 ); + sizer->Add( setting->ctl_text, 1, wxALIGN_CENTER_VERTICAL, 5 ); - sizer->Add( setting->ctl_color, 0, flags | wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 ); - sizer->Add( setting->ctl_visibility, 0, flags, 5 ); - sizer->Add( setting->ctl_text, 1, flags, 5 ); - - m_netclassOuterSizer->Add( setting->ctl_panel, 0, wxEXPAND, 0 ); + m_netclassOuterSizer->Add( setting->ctl_panel, 0, wxEXPAND, 5 ); + m_netclassOuterSizer->AddSpacer( 1 ); setting->ctl_visibility->Bind( TOGGLE_CHANGED, &APPEARANCE_CONTROLS::onNetclassVisibilityChanged, this ); auto menuHandler = - [&, name, isDefault]( wxMouseEvent& aEvent ) + [&, name]( wxMouseEvent& aEvent ) { m_contextMenuNetclass = name; wxMenu menu; - if( !isDefault ) - { - menu.Append( new wxMenuItem( &menu, ID_SET_NET_COLOR, - _( "Set netclass color" ), wxEmptyString, - wxITEM_NORMAL ) ); - } + menu.Append( new wxMenuItem( &menu, ID_SET_NET_COLOR, + _( "Set netclass color" ), wxEmptyString, + wxITEM_NORMAL ) ); menu.Append( new wxMenuItem( &menu, ID_HIGHLIGHT_NET, wxString::Format( _( "Highlight nets in %s" ), name ), @@ -1378,10 +1368,7 @@ void APPEARANCE_CONTROLS::rebuildNets() setting->ctl_panel->Bind( wxEVT_RIGHT_DOWN, menuHandler ); setting->ctl_visibility->Bind( wxEVT_RIGHT_DOWN, menuHandler ); - - if( !isDefault ) - setting->ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler ); - + setting->ctl_color->Bind( wxEVT_RIGHT_DOWN, menuHandler ); setting->ctl_text->Bind( wxEVT_RIGHT_DOWN, menuHandler ); }; @@ -1416,7 +1403,7 @@ void APPEARANCE_CONTROLS::rebuildNets() NETCLASSPTR defaultClass = board->GetDesignSettings().GetNetClasses().GetDefault(); m_netclassIdMap[idx] = defaultClass->GetName(); - appendNetclass( idx++, defaultClass, true ); + appendNetclass( idx++, defaultClass ); for( const wxString& name : names ) { diff --git a/pcbnew/zone_settings.cpp b/pcbnew/zone_settings.cpp index 28c700c236..6a23b587fb 100644 --- a/pcbnew/zone_settings.cpp +++ b/pcbnew/zone_settings.cpp @@ -185,6 +185,8 @@ const static wxSize LAYER_BITMAP_SIZE( 28, 28 ); // wxCocoa impl unhappy if thi const static wxSize LAYER_BITMAP_SIZE( 24, 16 ); #endif +const static wxSize CHECKERBOARD_SIZE( 8, 8 ); + // A helper for setting up a dialog list for specifying zone layers. Used by all three // zone settings dialogs. @@ -219,7 +221,8 @@ void ZONE_SETTINGS::SetupLayersList( wxDataViewListCtrl* aList, PCB_BASE_FRAME* textWidth = std::max( textWidth, GetTextSize( layerName, aList ).x ); COLOR4D layerColor = aFrame->GetColorSettings()->GetColor( layerID ); - auto bitmap = COLOR_SWATCH::MakeBitmap( layerColor, backgroundColor, LAYER_BITMAP_SIZE ); + auto bitmap = COLOR_SWATCH::MakeBitmap( layerColor, backgroundColor, LAYER_BITMAP_SIZE, + CHECKERBOARD_SIZE ); wxIcon icon; icon.CopyFromBitmap( bitmap );