diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14681c35ef..8d7b4b8c47 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -805,7 +805,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux|FreeBSD|OpenBSD")
install(FILES Data/dolphin-emu.svg
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps)
install(FILES Data/dolphin-emu.png
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps)
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps)
install(FILES Data/dolphin-emu.desktop
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
# Install manpages
diff --git a/Data/dolphin-emu.png b/Data/dolphin-emu.png
index bb0ca33dab..c9d5b6836a 100644
Binary files a/Data/dolphin-emu.png and b/Data/dolphin-emu.png differ
diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt
index 52af9c951d..8bbbca495d 100644
--- a/Source/Core/DolphinQt2/CMakeLists.txt
+++ b/Source/Core/DolphinQt2/CMakeLists.txt
@@ -102,6 +102,7 @@ set(SRCS
QtUtils/ImageConverter.cpp
QtUtils/ListTabWidget.cpp
QtUtils/WindowActivationEventFilter.cpp
+ QtUtils/WinIconHelper.cpp
QtUtils/WrapInScrollArea.cpp
QtUtils/AspectRatioWidget.cpp
Settings/AdvancedPane.cpp
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
index 3fe5e2613d..07f04607bd 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
@@ -248,6 +248,7 @@
+
@@ -310,6 +311,7 @@
+
@@ -414,4 +416,4 @@
-
+
\ No newline at end of file
diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp
index f77e23a663..4733fc9944 100644
--- a/Source/Core/DolphinQt2/MainWindow.cpp
+++ b/Source/Core/DolphinQt2/MainWindow.cpp
@@ -85,7 +85,7 @@
MainWindow::MainWindow(std::unique_ptr boot_parameters) : QMainWindow(nullptr)
{
setWindowTitle(QString::fromStdString(Common::scm_rev_str));
- setWindowIcon(QIcon(Resources::GetMisc(Resources::LOGO_SMALL)));
+ setWindowIcon(Resources::GetAppIcon());
setUnifiedTitleAndToolBarOnMac(true);
setAcceptDrops(true);
diff --git a/Source/Core/DolphinQt2/QtUtils/WinIconHelper.cpp b/Source/Core/DolphinQt2/QtUtils/WinIconHelper.cpp
new file mode 100644
index 0000000000..c076a9c250
--- /dev/null
+++ b/Source/Core/DolphinQt2/QtUtils/WinIconHelper.cpp
@@ -0,0 +1,94 @@
+// Copyright 2018 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include "DolphinQt2/QtUtils/WinIconHelper.h"
+
+#ifdef _WIN32
+
+#include
+
+// The following code is adapted from qpixmap_win.cpp (c) The Qt Company Ltd. (https://qt.io)
+// Licensed under the GNU GPL v3
+static inline BITMAPINFO GetBMI(int width, int height, bool topToBottom)
+{
+ BITMAPINFO bmi = {};
+ auto& bih = bmi.bmiHeader;
+
+ bih.biSize = sizeof(BITMAPINFOHEADER);
+ bih.biWidth = width;
+ bih.biHeight = topToBottom ? -height : height;
+ bih.biPlanes = 1;
+ bih.biBitCount = 32;
+ bih.biCompression = BI_RGB;
+ bih.biSizeImage = width * height * 4;
+
+ return bmi;
+}
+
+static QPixmap PixmapFromHICON(HICON icon)
+{
+ HDC screenDevice = GetDC(0);
+ HDC hdc = CreateCompatibleDC(screenDevice);
+ ReleaseDC(0, screenDevice);
+ ICONINFO iconinfo;
+ const bool result = GetIconInfo(icon, &iconinfo); // x and y Hotspot describes the icon center
+ if (!result)
+ {
+ qErrnoWarning("QPixmap::fromWinHICON(), failed to GetIconInfo()");
+ DeleteDC(hdc);
+ return QPixmap();
+ }
+ const int w = iconinfo.xHotspot * 2;
+ const int h = iconinfo.yHotspot * 2;
+ BITMAPINFO bitmapInfo = GetBMI(w, h, false);
+ DWORD* bits;
+ HBITMAP winBitmap = CreateDIBSection(hdc, &bitmapInfo, DIB_RGB_COLORS, (VOID**)&bits, NULL, 0);
+ HGDIOBJ oldhdc = reinterpret_cast(SelectObject(hdc, winBitmap));
+ DrawIconEx(hdc, 0, 0, icon, iconinfo.xHotspot * 2, iconinfo.yHotspot * 2, 0, 0, DI_NORMAL);
+
+ QImage image(w, h, QImage::Format_ARGB32_Premultiplied);
+ if (image.isNull())
+ return {};
+
+ BITMAPINFO bmi = GetBMI(w, h, true);
+
+ QScopedArrayPointer data(new uchar[bmi.bmiHeader.biSizeImage]);
+ if (!GetDIBits(hdc, winBitmap, 0, h, data.data(), &bmi, DIB_RGB_COLORS))
+ return {};
+
+ for (int y = 0; y < image.height(); ++y)
+ {
+ void* dest = static_cast(image.scanLine(y));
+ const void* src = data.data() + y * image.bytesPerLine();
+ memcpy(dest, src, image.bytesPerLine());
+ }
+
+ // dispose resources created by iconinfo call
+ DeleteObject(iconinfo.hbmMask);
+ DeleteObject(iconinfo.hbmColor);
+ SelectObject(hdc, oldhdc); // restore state
+ DeleteObject(winBitmap);
+ DeleteDC(hdc);
+ return QPixmap::fromImage(image);
+}
+
+QIcon WinIconHelper::GetNativeIcon()
+{
+ QIcon icon;
+ for (int size : {16, 32, 48, 256})
+ {
+ HANDLE h = LoadImageW(GetModuleHandleW(nullptr), L"\"DOLPHIN\"", IMAGE_ICON, size, size,
+ LR_CREATEDIBSECTION);
+
+ if (h && h != INVALID_HANDLE_VALUE)
+ {
+ auto* icon_handle = static_cast(h);
+ icon.addPixmap(PixmapFromHICON(icon_handle));
+ }
+ }
+
+ return icon;
+}
+
+#endif
diff --git a/Source/Core/DolphinQt2/QtUtils/WinIconHelper.h b/Source/Core/DolphinQt2/QtUtils/WinIconHelper.h
new file mode 100644
index 0000000000..8648704f3a
--- /dev/null
+++ b/Source/Core/DolphinQt2/QtUtils/WinIconHelper.h
@@ -0,0 +1,16 @@
+// Copyright 2018 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#ifdef _WIN32
+
+#include
+
+namespace WinIconHelper
+{
+QIcon GetNativeIcon();
+};
+
+#endif
diff --git a/Source/Core/DolphinQt2/Resources.cpp b/Source/Core/DolphinQt2/Resources.cpp
index 3698f92810..d24f8cc184 100644
--- a/Source/Core/DolphinQt2/Resources.cpp
+++ b/Source/Core/DolphinQt2/Resources.cpp
@@ -14,6 +14,10 @@
#include "DolphinQt2/Resources.h"
#include "DolphinQt2/Settings.h"
+#ifdef _WIN32
+#include "DolphinQt2/QtUtils/WinIconHelper.h"
+#endif
+
QList Resources::m_platforms;
QList Resources::m_countries;
QList Resources::m_ratings;
@@ -128,3 +132,17 @@ QPixmap Resources::GetMisc(int id)
{
return m_misc[id];
}
+
+QIcon Resources::GetAppIcon()
+{
+ QIcon icon;
+
+#ifdef _WIN32
+ icon = WinIconHelper::GetNativeIcon();
+#else
+ icon.addPixmap(GetScaledPixmap("dolphin_logo"));
+ icon.addPixmap(GetScaledPixmap("Dolphin"));
+#endif
+
+ return icon;
+}
diff --git a/Source/Core/DolphinQt2/Resources.h b/Source/Core/DolphinQt2/Resources.h
index bb93d4ce61..31730d6f3a 100644
--- a/Source/Core/DolphinQt2/Resources.h
+++ b/Source/Core/DolphinQt2/Resources.h
@@ -28,6 +28,7 @@ public:
static QIcon GetScaledIcon(const std::string& name);
static QIcon GetScaledThemeIcon(const std::string& name);
+ static QIcon GetAppIcon();
static QPixmap GetScaledPixmap(const std::string& name);
static QPixmap GetScaledThemePixmap(const std::string& name);