From dad60f99c097c61446e4294bfea1b0bb24a60ca9 Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Tue, 26 Aug 2025 06:04:30 -0700 Subject: [PATCH] More GDI conservation --- common/tool/action_menu.cpp | 10 ++++++++++ common/widgets/layer_presentation.cpp | 1 + 2 files changed, 11 insertions(+) diff --git a/common/tool/action_menu.cpp b/common/tool/action_menu.cpp index 65eceb9963..380c78e712 100644 --- a/common/tool/action_menu.cpp +++ b/common/tool/action_menu.cpp @@ -66,9 +66,18 @@ ACTION_MENU::~ACTION_MENU() Disconnect( wxEVT_COMMAND_MENU_SELECTED, wxMenuEventHandler( ACTION_MENU::OnMenuEvent ), nullptr, this ); Disconnect( wxEVT_IDLE, wxIdleEventHandler( ACTION_MENU::OnIdle ), nullptr, this ); + // Explicitly release the GDI resources + for( auto subitem : GetMenuItems() ) + subitem->SetBitmap( wxNullBitmap ); + // Set parent to NULL to prevent submenus from unregistering from a nonexistent object for( ACTION_MENU* menu : m_submenus ) + { + for( auto menuItem : GetMenuItems() ) + menuItem->SetBitmap( wxNullBitmap ); + menu->SetParent( nullptr ); + } ACTION_MENU* parent = dynamic_cast( GetParent() ); @@ -108,6 +117,7 @@ void ACTION_MENU::DisplayTitle( bool aDisplay ) // Destroy the menu entry keeping the title.. wxMenuItem* item = FindItemByPosition( 0 ); wxASSERT( item->GetItemLabelText() == GetTitle() ); + item->SetBitmap( wxNullBitmap ); Destroy( item ); // ..and separator diff --git a/common/widgets/layer_presentation.cpp b/common/widgets/layer_presentation.cpp index b212e60bed..eae8ba3979 100644 --- a/common/widgets/layer_presentation.cpp +++ b/common/widgets/layer_presentation.cpp @@ -57,6 +57,7 @@ void LAYER_PRESENTATION::DrawColorSwatch( wxBitmap& aLayerbmp, const COLOR4D& aB bmpDC.SetBrush( *wxTRANSPARENT_BRUSH ); bmpDC.SetPen( *wxBLACK_PEN ); bmpDC.DrawRectangle( 0, 0, aLayerbmp.GetWidth(), aLayerbmp.GetHeight() ); + bmpDC.SelectObject( wxNullBitmap ); }