Fix macOS tree icons

Now that we have backported HiDPI support,
we need to actually use it because the old
imagelist functions are explicitly not going
to work on HiDPI systems anymore

Fixes https://gitlab.com/kicad/code/kicad/-/issues/17265
This commit is contained in:
Jon Evans 2024-03-04 22:15:23 -05:00
parent 7933dee274
commit 34a6e605de
2 changed files with 52 additions and 4 deletions

View File

@ -68,11 +68,59 @@ PROJECT_TREE::~PROJECT_TREE()
void PROJECT_TREE::LoadIcons()
{
// KiCad for macOS currently has backported high-DPI support for this control
// that is not in a released version of wxWidgets 3.2 yet. This can become the
// main codepath once wxWidgets 3.4 is released.
#ifdef __WXMAC__
wxVector<wxBitmapBundle> images;
images.push_back( KiBitmapBundle( BITMAPS::project ) ); // TREE_LEGACY_PROJECT
images.push_back( KiBitmapBundle( BITMAPS::project_kicad ) ); // TREE_JSON_PROJECT
images.push_back( KiBitmapBundle( BITMAPS::icon_eeschema_24 ) ); // TREE_LEGACY_SCHEMATIC
images.push_back( KiBitmapBundle( BITMAPS::icon_eeschema_24 ) ); // TREE_SEXPR_SCHEMATIC
images.push_back( KiBitmapBundle( BITMAPS::icon_pcbnew_24 ) ); // TREE_LEGACY_PCB
images.push_back( KiBitmapBundle( BITMAPS::icon_pcbnew_24 ) ); // TREE_SEXPR_PCB
images.push_back( KiBitmapBundle( BITMAPS::icon_gerbview_24 ) ); // TREE_GERBER
images.push_back( KiBitmapBundle( BITMAPS::file_gerber_job ) ); // TREE_GERBER_JOB_FILE (.gbrjob)
images.push_back( KiBitmapBundle( BITMAPS::file_html ) ); // TREE_HTML
images.push_back( KiBitmapBundle( BITMAPS::file_pdf ) ); // TREE_PDF
images.push_back( KiBitmapBundle( BITMAPS::editor ) ); // TREE_TXT
images.push_back( KiBitmapBundle( BITMAPS::editor ) ); // TREE_MD
images.push_back( KiBitmapBundle( BITMAPS::netlist ) ); // TREE_NET
images.push_back( KiBitmapBundle( BITMAPS::file_cir ) ); // TREE_NET_SPICE
images.push_back( KiBitmapBundle( BITMAPS::unknown ) ); // TREE_UNKNOWN
images.push_back( KiBitmapBundle( BITMAPS::directory ) ); // TREE_DIRECTORY
images.push_back( KiBitmapBundle( BITMAPS::icon_cvpcb_24 ) ); // TREE_CMP_LINK
images.push_back( KiBitmapBundle( BITMAPS::tools ) ); // TREE_REPORT
images.push_back( KiBitmapBundle( BITMAPS::file_pos ) ); // TREE_POS
images.push_back( KiBitmapBundle( BITMAPS::file_drl ) ); // TREE_DRILL
images.push_back( KiBitmapBundle( BITMAPS::file_drl ) ); // TREE_DRILL_NC (similar TREE_DRILL)
images.push_back( KiBitmapBundle( BITMAPS::file_drl ) ); // TREE_DRILL_XNC (similar TREE_DRILL)
images.push_back( KiBitmapBundle( BITMAPS::file_svg ) ); // TREE_SVG
images.push_back( KiBitmapBundle( BITMAPS::icon_pagelayout_editor_24 ) ); // TREE_PAGE_LAYOUT_DESCR
images.push_back( KiBitmapBundle( BITMAPS::module ) ); // TREE_FOOTPRINT_FILE
images.push_back( KiBitmapBundle( BITMAPS::library ) ); // TREE_SCHEMATIC_LIBFILE
images.push_back( KiBitmapBundle( BITMAPS::library ) ); // TREE_SEXPR_SYMBOL_LIB_FILE
images.push_back( KiBitmapBundle( BITMAPS::editor ) ); // DESIGN_RULES
images.push_back( KiBitmapBundle( BITMAPS::zip ) ); // ZIP_ARCHIVE
SetImages( images );
wxVector<wxBitmapBundle> stateImages;
stateImages.push_back( wxBitmapBundle() ); // GIT_STATUS_UNTRACKED
stateImages.push_back( KiBitmapBundle( BITMAPS::git_good_check ) ); // GIT_STATUS_CURRENT
stateImages.push_back( KiBitmapBundle( BITMAPS::git_modified ) ); // GIT_STATUS_MODIFIED
stateImages.push_back( KiBitmapBundle( BITMAPS::git_add ) ); // GIT_STATUS_ADDED
stateImages.push_back( KiBitmapBundle( BITMAPS::git_delete ) ); // GIT_STATUS_DELETED
stateImages.push_back( KiBitmapBundle( BITMAPS::git_out_of_date ) ); // GIT_STATUS_BEHIND
stateImages.push_back( KiBitmapBundle( BITMAPS::git_changed_ahead ) ); // GIT_STATUS_AHEAD
stateImages.push_back( KiBitmapBundle( BITMAPS::git_conflict ) ); // GIT_STATUS_CONFLICTED
SetStateImages( stateImages );
#else
delete m_imageList;
// Make an image list containing small icons
int size = 24;
// Make an image list containing small icons
m_imageList = new wxImageList( size, size, true,
static_cast<int>( TREE_FILE_TYPE::MAX ) );
@ -127,6 +175,7 @@ void PROJECT_TREE::LoadIcons()
m_statusImageList->Add( KiBitmap( BITMAPS::git_conflict, size ) ); // GIT_STATUS_CONFLICTED
SetStateImageList( m_statusImageList );
#endif
}

View File

@ -60,10 +60,9 @@ PROJECT_TREE_ITEM::PROJECT_TREE_ITEM( TREE_FILE_TYPE type, const wxString& data,
void PROJECT_TREE_ITEM::SetState( int state )
{
wxImageList* imglist = m_parent->GetImageList();
int treeEnumMax = static_cast<int>( TREE_FILE_TYPE::MAX );
if( !imglist || state < 0 || state >= imglist->GetImageCount() / ( treeEnumMax - 2 ) )
if( state < 0 || state >= m_parent->GetImageCount() / ( treeEnumMax - 2 ) )
return;
m_state = state;