diff --git a/.gitignore b/.gitignore index 728b0fa26..aa78714af 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ **/Release **/Debug **/*.deb +**/*.aps .vs .vscode bin diff --git a/src/musikbox/Main.cpp b/src/musikbox/Main.cpp index 5df2d7344..b62aea2cb 100644 --- a/src/musikbox/Main.cpp +++ b/src/musikbox/Main.cpp @@ -64,7 +64,8 @@ #include #ifdef WIN32 - #include + #include + #include "resource.h" #undef MOUSE_MOVED #endif @@ -126,6 +127,10 @@ int main(int argc, char* argv[]) { App app("musikbox"); /* must be before layout creation */ +#ifdef WIN32 + app.SetIcon(IDI_ICON1); +#endif + auto prefs = Preferences::ForComponent( musik::core::prefs::components::Settings); @@ -172,7 +177,7 @@ int main(int argc, char* argv[]) app.Run(mainLayout); #ifdef WIN32 - musik::box::win32::HideMainWindow(); + win32::HideMainWindow(); #endif } diff --git a/src/musikbox/cursespp/App.cpp b/src/musikbox/cursespp/App.cpp index baf0b781f..13cf56f40 100755 --- a/src/musikbox/cursespp/App.cpp +++ b/src/musikbox/cursespp/App.cpp @@ -45,7 +45,7 @@ #include #ifdef WIN32 -#include +#include "Win32Util.h" #endif #ifndef WIN32 @@ -73,7 +73,9 @@ static void resizedHandler(int signal) { App::App(const std::string& title) { this->minWidth = this->minHeight = 0; -#ifndef WIN32 +#ifdef WIN32 + this->iconId = 0; +#else setlocale(LC_ALL, ""); std::signal(SIGWINCH, resizedHandler); std::signal(SIGHUP, hangupHandler); @@ -122,6 +124,15 @@ void App::SetMinimumSize(int minWidth, int minHeight) { this->minHeight = std::max(0, minHeight); } +#ifdef WIN32 +void App::SetIcon(int resourceId) { + this->iconId = resourceId; + if (win32::GetMainWindow()) { + win32::SetIcon(resourceId); + } +} +#endif + void App::OnResized() { int cx = Screen::GetWidth(); int cy = Screen::GetHeight(); diff --git a/src/musikbox/cursespp/App.h b/src/musikbox/cursespp/App.h index 7a7da0936..303f7c1fc 100755 --- a/src/musikbox/cursespp/App.h +++ b/src/musikbox/cursespp/App.h @@ -55,6 +55,10 @@ namespace cursespp { void SetMinimumSize(int width, int height); bool IsOverlayVisible() { return this->state.overlay != nullptr; } +#ifdef WIN32 + void SetIcon(int resourceId); +#endif + void Run(ILayoutPtr layout); void ChangeLayout(ILayoutPtr layout); @@ -89,5 +93,9 @@ namespace cursespp { ResizeHandler resizeHandler; bool disableCustomColors; int minWidth, minHeight; + +#ifdef WIN32 + int iconId; +#endif }; } diff --git a/src/musikbox/app/util/Win32Util.cpp b/src/musikbox/cursespp/Win32Util.cpp similarity index 72% rename from src/musikbox/app/util/Win32Util.cpp rename to src/musikbox/cursespp/Win32Util.cpp index ffae34fcf..1317072bd 100644 --- a/src/musikbox/app/util/Win32Util.cpp +++ b/src/musikbox/cursespp/Win32Util.cpp @@ -63,28 +63,44 @@ static void findMainWindow() { } } -namespace musik { - namespace box { - namespace win32 { - void ShowMainWindow() { - findMainWindow(); - if (mainWindow) { - ShowWindow(mainWindow, SW_SHOWNORMAL); - } - } +static HICON loadIcon(int resourceId, int size) { + return (HICON) ::LoadImageA( + GetModuleHandle(nullptr), + MAKEINTRESOURCEA(resourceId), + IMAGE_ICON, + size, + size, + 0); +} - void HideMainWindow() { - findMainWindow(); - if (mainWindow) { - ShowWindow(mainWindow, SW_HIDE); - } +namespace cursespp { + namespace win32 { + void ShowMainWindow() { + findMainWindow(); + if (mainWindow) { + ShowWindow(mainWindow, SW_SHOWNORMAL); } + } - HWND GetMainWindow() { - findMainWindow(); - return mainWindow; + void HideMainWindow() { + findMainWindow(); + if (mainWindow) { + ShowWindow(mainWindow, SW_HIDE); } } + + HWND GetMainWindow() { + findMainWindow(); + return mainWindow; + } + + void SetIcon(int resourceId) { + const HWND hwnd = GetMainWindow(); + const HICON icon16 = loadIcon(resourceId, 16); + const HICON icon32 = loadIcon(resourceId, 48); + SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM) icon16); + SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM) icon32); + } } } diff --git a/src/musikbox/app/util/Win32Util.h b/src/musikbox/cursespp/Win32Util.h similarity index 91% rename from src/musikbox/app/util/Win32Util.h rename to src/musikbox/cursespp/Win32Util.h index 1bd8122a4..fda774ad9 100644 --- a/src/musikbox/app/util/Win32Util.h +++ b/src/musikbox/cursespp/Win32Util.h @@ -38,13 +38,12 @@ #ifdef WIN32 -namespace musik { - namespace box { - namespace win32 { - void ShowMainWindow(); - void HideMainWindow(); - HWND GetMainWindow(); - } +namespace cursespp { + namespace win32 { + void ShowMainWindow(); + void HideMainWindow(); + HWND GetMainWindow(); + void SetIcon(int resourceId); } } diff --git a/src/musikbox/icon.ico b/src/musikbox/icon.ico new file mode 100644 index 000000000..f56d16baf Binary files /dev/null and b/src/musikbox/icon.ico differ diff --git a/src/musikbox/musikbox.rc b/src/musikbox/musikbox.rc new file mode 100644 index 000000000..4c4255c65 Binary files /dev/null and b/src/musikbox/musikbox.rc differ diff --git a/src/musikbox/musikbox.vcxproj b/src/musikbox/musikbox.vcxproj index b0b3f1b9d..f8c113cf4 100755 --- a/src/musikbox/musikbox.vcxproj +++ b/src/musikbox/musikbox.vcxproj @@ -140,7 +140,6 @@ - @@ -165,6 +164,7 @@ + @@ -192,7 +192,6 @@ - @@ -230,7 +229,9 @@ + + @@ -246,6 +247,12 @@ {01869283-4cc3-4da4-a06c-3df6a0de98cc} + + + + + + diff --git a/src/musikbox/musikbox.vcxproj.filters b/src/musikbox/musikbox.vcxproj.filters index 2278d2d5d..54fe15ca2 100755 --- a/src/musikbox/musikbox.vcxproj.filters +++ b/src/musikbox/musikbox.vcxproj.filters @@ -120,9 +120,6 @@ app\overlay - - app\util - app\overlay @@ -132,6 +129,9 @@ app\overlay + + cursespp + @@ -297,9 +297,6 @@ cursespp - - app\util - app\overlay @@ -309,6 +306,10 @@ app\overlay + + + cursespp + @@ -333,4 +334,10 @@ {a84f242d-d70b-49e9-975e-63fc73954a2b} + + + + + + \ No newline at end of file diff --git a/src/musikbox/resource.h b/src/musikbox/resource.h new file mode 100644 index 000000000..404878649 Binary files /dev/null and b/src/musikbox/resource.h differ