mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
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();
|
||||
wxTheApp->Bind(DOLPHIN_EVT_LOCAL_INI_CHANGED, &wxCheatsWindow::OnLocalGameIniModified, this);
|
||||
|
||||
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
||||
SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER);
|
||||
Center();
|
||||
|
@ -85,9 +85,7 @@ CRenderFrame::CRenderFrame(wxFrame* parent, wxWindowID id, const wxString& title
|
||||
: wxFrame(parent, id, title, pos, size, style)
|
||||
{
|
||||
// Give it an icon
|
||||
wxIcon IconTemp;
|
||||
IconTemp.CopyFromBitmap(WxUtils::LoadScaledResourceBitmap("Dolphin", this));
|
||||
SetIcon(IconTemp);
|
||||
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||
|
||||
DragAcceptFiles(true);
|
||||
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");
|
||||
|
||||
CreateGUI();
|
||||
{
|
||||
wxIcon icon;
|
||||
icon.CopyFromBitmap(WxUtils::LoadScaledResourceBitmap("Dolphin", this));
|
||||
SetIcon(icon);
|
||||
}
|
||||
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||
|
||||
{
|
||||
std::string temp;
|
||||
|
@ -70,6 +70,7 @@ NetPlayDialog::NetPlayDialog(wxWindow* const parent, const CGameListCtrl* const
|
||||
{
|
||||
Bind(wxEVT_THREAD, &NetPlayDialog::OnThread, this);
|
||||
CreateGUI();
|
||||
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||
Center();
|
||||
|
||||
// Remember the window size and position for NetWindow
|
||||
|
@ -28,6 +28,10 @@
|
||||
|
||||
#include "DolphinWX/WxUtils.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
namespace WxUtils
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
|
||||
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 geometry;
|
||||
|
@ -36,6 +36,9 @@ wxBitmap CreateDisabledButtonBitmap(const wxBitmap& original);
|
||||
void AddToolbarButton(wxToolBar* toolbar, int toolID, const wxString& label, const wxBitmap& bitmap,
|
||||
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.
|
||||
// Matches GetSystemMetrics(SM_XVIRTUALSCREEN), etc on Windows.
|
||||
wxRect GetVirtualScreenGeometry();
|
||||
|
Loading…
Reference in New Issue
Block a user