Add wxIconEx

This simplifies loading DPI-aware icons.

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman
2025-11-04 15:48:19 +01:00
parent 79ec083650
commit fd16ef2909
6 changed files with 197 additions and 116 deletions

39
src/icon.cpp Normal file
View File

@@ -0,0 +1,39 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2025 Amebis
*/
#include "pch.h"
static wxSize GetDPIHelper(const wxWindowBase* w)
{
wxSize dpi;
if ( w )
dpi = w->GetDPI();
if ( !dpi.x || !dpi.y )
dpi = wxDisplay().GetPPI();
if ( !dpi.x || !dpi.y )
dpi = wxDisplay::GetStdPPI();
return dpi;
}
wxIconEx::wxIconEx(const wxString& name,
wxBitmapType type,
int desiredWidth, int desiredHeight,
wxWindowBase *window)
{
wxSize dpi = GetDPIHelper(window);
wxSize baseline = wxDisplay::GetStdPPI();
if (desiredWidth != wxDefaultCoord)
desiredWidth = wxMulDivInt32(desiredWidth, dpi.x, baseline.x);
if (desiredHeight != wxDefaultCoord)
desiredHeight = wxMulDivInt32(desiredHeight, dpi.y, baseline.y);
LoadFile(name, type, desiredWidth, desiredHeight);
SetScaleFactor((double)dpi.y / (double)baseline.y);
}