From a7c8ff3aaaa7903db4bd126cb3504a8bf441034e Mon Sep 17 00:00:00 2001
From: Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>
Date: Wed, 26 Jan 2011 01:09:02 +0100
Subject: Made the windows app able to load .ico files at runtime.

Now the icon extension is computed against the os.
This means that the 'icons/mana' appIcon branding parameter
will now load icons/mana.png files for unices and mac,
and icons/mana.ico for Windows.

Reviewed-by: Trapdoor.

Resolves: Mana-Mantis: #135.
---
 src/client.cpp | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/client.cpp b/src/client.cpp
index 0039ce025..d17ea73bc 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -352,15 +352,30 @@ Client::Client(const Options &options):
 
     //resman->selectSkin();
 
+    std::string iconFile = branding.getValue("appIcon", "icons/mana");
+#ifdef WIN32
+    iconFile += ".ico";
+#else
+    iconFile += ".png";
+#endif
+    iconFile = resman->getPath(iconFile);
+    logger->log("Loading icon from file: %s", iconFile.c_str());
+
 #ifdef WIN32
     static SDL_SysWMinfo pInfo;
     SDL_GetWMInfo(&pInfo);
-    HICON icon = LoadIcon(GetModuleHandle(NULL), "A");
+    // Attempt to load icon from .ico file
+    HICON icon = (HICON) LoadImage(NULL,
+                                   iconFile.c_str(),
+                                   IMAGE_ICON, 64, 64, LR_LOADFROMFILE);
+    // If it's failing, we load the default resource file.
+    if (!icon)
+        icon = LoadIcon(GetModuleHandle(NULL), "A");
+
     if (icon)
         SetClassLong(pInfo.window, GCL_HICON, (LONG) icon);
 #else
-    mIcon = IMG_Load(resman->getPath(
-            branding.getValue("appIcon", "icons/manaplus.png")).c_str());
+    mIcon = IMG_Load(iconFile.c_str());
     if (mIcon)
     {
         SDL_SetAlpha(mIcon, SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
-- 
cgit v1.2.3-70-g09d2