WX: Replace SetIcon with SetIcons(wxIconBundle)
Setting a single icon at a single resolution doesn't scale well, Windows requires a 16x16 icon for the window and a 32x32/48x48 for the taskbar. Providing all icons produces less pixellated results at HiDPI.
This commit is contained in:
parent
27d295ec7e
commit
c4f5ced37c
|
@ -61,6 +61,7 @@ wxCheatsWindow::wxCheatsWindow(wxWindow* const parent)
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
wxTheApp->Bind(DOLPHIN_EVT_LOCAL_INI_CHANGED, &wxCheatsWindow::OnLocalGameIniModified, this);
|
wxTheApp->Bind(DOLPHIN_EVT_LOCAL_INI_CHANGED, &wxCheatsWindow::OnLocalGameIniModified, this);
|
||||||
|
|
||||||
|
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||||
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
||||||
SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER);
|
SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER);
|
||||||
Center();
|
Center();
|
||||||
|
|
|
@ -85,9 +85,7 @@ CRenderFrame::CRenderFrame(wxFrame* parent, wxWindowID id, const wxString& title
|
||||||
: wxFrame(parent, id, title, pos, size, style)
|
: wxFrame(parent, id, title, pos, size, style)
|
||||||
{
|
{
|
||||||
// Give it an icon
|
// Give it an icon
|
||||||
wxIcon IconTemp;
|
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||||
IconTemp.CopyFromBitmap(WxUtils::LoadScaledResourceBitmap("Dolphin", this));
|
|
||||||
SetIcon(IconTemp);
|
|
||||||
|
|
||||||
DragAcceptFiles(true);
|
DragAcceptFiles(true);
|
||||||
Bind(wxEVT_DROP_FILES, &CRenderFrame::OnDropFiles, this);
|
Bind(wxEVT_DROP_FILES, &CRenderFrame::OnDropFiles, this);
|
||||||
|
|
|
@ -43,11 +43,7 @@ NetPlaySetupFrame::NetPlaySetupFrame(wxWindow* const parent, const CGameListCtrl
|
||||||
IniFile::Section& netplay_section = *inifile.GetOrCreateSection("NetPlay");
|
IniFile::Section& netplay_section = *inifile.GetOrCreateSection("NetPlay");
|
||||||
|
|
||||||
CreateGUI();
|
CreateGUI();
|
||||||
{
|
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||||
wxIcon icon;
|
|
||||||
icon.CopyFromBitmap(WxUtils::LoadScaledResourceBitmap("Dolphin", this));
|
|
||||||
SetIcon(icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string temp;
|
std::string temp;
|
||||||
|
|
|
@ -70,6 +70,7 @@ NetPlayDialog::NetPlayDialog(wxWindow* const parent, const CGameListCtrl* const
|
||||||
{
|
{
|
||||||
Bind(wxEVT_THREAD, &NetPlayDialog::OnThread, this);
|
Bind(wxEVT_THREAD, &NetPlayDialog::OnThread, this);
|
||||||
CreateGUI();
|
CreateGUI();
|
||||||
|
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||||
Center();
|
Center();
|
||||||
|
|
||||||
// Remember the window size and position for NetWindow
|
// Remember the window size and position for NetWindow
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
|
|
||||||
#include "DolphinWX/WxUtils.h"
|
#include "DolphinWX/WxUtils.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace WxUtils
|
namespace WxUtils
|
||||||
{
|
{
|
||||||
// Launch a file according to its mime type
|
// Launch a file according to its mime type
|
||||||
|
@ -81,6 +85,50 @@ void AddToolbarButton(wxToolBar* toolbar, int toolID, const wxString& label, con
|
||||||
wxITEM_NORMAL, shortHelp);
|
wxITEM_NORMAL, shortHelp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxIconBundle GetDolphinIconBundle()
|
||||||
|
{
|
||||||
|
static wxIconBundle s_bundle;
|
||||||
|
if (!s_bundle.IsEmpty())
|
||||||
|
return s_bundle;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
// Convert the Windows ICO file into a wxIconBundle by tearing it apart into each individual
|
||||||
|
// sub-icon using the Win32 API. This is necessary because WX uses its own wxIcons internally
|
||||||
|
// which (unlike QIcon in Qt) only contain 1 image per icon, hence why wxIconBundle exists.
|
||||||
|
HINSTANCE dolphin = GetModuleHandleW(nullptr);
|
||||||
|
for (int size : {16, 32, 48, 256})
|
||||||
|
{
|
||||||
|
// Extract resource from embedded DolphinWX.rc
|
||||||
|
HANDLE win32_icon =
|
||||||
|
LoadImageW(dolphin, L"\"DOLPHIN\"", IMAGE_ICON, size, size, LR_CREATEDIBSECTION);
|
||||||
|
if (win32_icon && win32_icon != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
wxIcon icon;
|
||||||
|
icon.CreateFromHICON(reinterpret_cast<HICON>(win32_icon));
|
||||||
|
s_bundle.AddIcon(icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
for (const char* fname : {"Dolphin.png", "dolphin_logo.png", "dolphin_logo@2x.png"})
|
||||||
|
{
|
||||||
|
wxImage image{StrToWxStr(File::GetSysDirectory() + RESOURCES_DIR DIR_SEP + fname),
|
||||||
|
wxBITMAP_TYPE_PNG};
|
||||||
|
if (image.IsOk())
|
||||||
|
{
|
||||||
|
wxIcon icon;
|
||||||
|
icon.CopyFromBitmap(image);
|
||||||
|
s_bundle.AddIcon(icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return s_bundle;
|
||||||
|
}
|
||||||
|
|
||||||
wxRect GetVirtualScreenGeometry()
|
wxRect GetVirtualScreenGeometry()
|
||||||
{
|
{
|
||||||
wxRect geometry;
|
wxRect geometry;
|
||||||
|
|
|
@ -36,6 +36,9 @@ wxBitmap CreateDisabledButtonBitmap(const wxBitmap& original);
|
||||||
void AddToolbarButton(wxToolBar* toolbar, int toolID, const wxString& label, const wxBitmap& bitmap,
|
void AddToolbarButton(wxToolBar* toolbar, int toolID, const wxString& label, const wxBitmap& bitmap,
|
||||||
const wxString& shortHelp);
|
const wxString& shortHelp);
|
||||||
|
|
||||||
|
// Gets a complete set of window icons at all relevant sizes, use with wxTopLevelWindow::SetIcons
|
||||||
|
wxIconBundle GetDolphinIconBundle();
|
||||||
|
|
||||||
// Get the dimensions of the virtual desktop that spans all monitors.
|
// Get the dimensions of the virtual desktop that spans all monitors.
|
||||||
// Matches GetSystemMetrics(SM_XVIRTUALSCREEN), etc on Windows.
|
// Matches GetSystemMetrics(SM_XVIRTUALSCREEN), etc on Windows.
|
||||||
wxRect GetVirtualScreenGeometry();
|
wxRect GetVirtualScreenGeometry();
|
||||||
|
|
Loading…
Reference in New Issue