summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-08-23 13:17:28 +0300
committerAndrei Karas <akaras@inbox.ru>2013-08-24 21:08:16 +0300
commitc6519e4cf281c2b9dade62c806647930868c4abc (patch)
tree771f9d1c5f3e118c5679c306c091945605c1b5b3
parent37b4963329a6fb4dc39d8bbcb9fc8bd785e8a7e2 (diff)
downloadplus-c6519e4cf281c2b9dade62c806647930868c4abc.tar.gz
plus-c6519e4cf281c2b9dade62c806647930868c4abc.tar.bz2
plus-c6519e4cf281c2b9dade62c806647930868c4abc.tar.xz
plus-c6519e4cf281c2b9dade62c806647930868c4abc.zip
fix window title and icon in SDL2.
-rw-r--r--src/client.cpp100
-rw-r--r--src/client.h2
-rw-r--r--src/utils/sdl2helper.cpp10
-rw-r--r--src/utils/sdl2helper.h8
-rw-r--r--src/utils/sdlhelper.cpp12
-rw-r--r--src/utils/sdlhelper.h9
6 files changed, 86 insertions, 55 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 090591ff4..f615ec2d2 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -106,6 +106,7 @@
#include "utils/paths.h"
#include "utils/physfstools.h"
#include "utils/process.h"
+#include "utils/sdlhelper.h"
#include "utils/translation/translationmanager.h"
@@ -483,14 +484,7 @@ void Client::gameInit()
SMALL_VERSION);
}
-#ifdef USE_SDL2
- // +++ need use SDL_SetWindowTitle
-#else
- SDL_WM_SetCaption(mCaption.c_str(), nullptr);
-#endif
-
const ResourceManager *const resman = ResourceManager::getInstance();
-
if (!resman->setWriteDir(mLocalDataDir))
{
logger->error(strprintf("%s couldn't be set as home directory! "
@@ -563,44 +557,6 @@ void Client::gameInit()
resman->addToSearchPath(mLocalDataDir, false);
TranslationManager::loadCurrentLang();
- std::string iconFile = branding.getValue("appIcon", "icons/manaplus");
-#ifdef WIN32
- iconFile.append(".ico");
-#else
- iconFile.append(".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);
- // Attempt to load icon from .ico file
- HICON icon = (HICON) LoadImage(nullptr, iconFile.c_str(),
- IMAGE_ICON, 64, 64, LR_LOADFROMFILE);
- // If it's failing, we load the default resource file.
- if (!icon)
- icon = LoadIcon(GetModuleHandle(nullptr), "A");
-
- if (icon)
- SetClassLong(pInfo.window, GCL_HICON, reinterpret_cast<LONG>(icon));
-#else
- mIcon = IMG_Load(iconFile.c_str());
- if (mIcon)
- {
-#ifdef USE_SDL2
- SDL_SetSurfaceAlphaMod(mIcon, 255);
-#else
- SDL_SetAlpha(mIcon, SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
-#endif
-#ifdef USE_SDL2
- // +++ need use SDL_SetWindowIcon
-#else
- SDL_WM_SetIcon(mIcon, nullptr);
-#endif
- }
-#endif
-
#if defined(USE_OPENGL) && !defined(ANDROID) && !defined(__APPLE__)
if (!mOptions.safeMode && mOptions.test.empty()
&& !config.getBoolValue("videodetected"))
@@ -633,6 +589,9 @@ void Client::gameInit()
applyGrabMode();
applyGamma();
+ SDL::SetWindowTitle(mainGraphics->getWindow(), mCaption.c_str());
+ setIcon();
+
mainGraphics->_beginDraw();
Theme::selectSkin();
@@ -2945,11 +2904,8 @@ void Client::setIsMinimized(const bool n)
if (!n && client->mNewMessageFlag)
{
client->mNewMessageFlag = false;
-#ifdef USE_SDL2
- // +++ need use SDL_SetWindowTitle
-#else
- SDL_WM_SetCaption(client->mCaption.c_str(), nullptr);
-#endif
+ SDL::SetWindowTitle(mainGraphics->getWindow(),
+ client->mCaption.c_str());
}
}
@@ -2962,11 +2918,8 @@ void Client::newChatMessage()
if (!client->mNewMessageFlag && client->mIsMinimized)
{
// show * on window caption
-#ifdef USE_SDL2
- // +++ need use SDL_SetWindowTitle
-#else
- SDL_WM_SetCaption(("*" + client->mCaption).c_str(), nullptr);
-#endif
+ SDL::SetWindowTitle(mainGraphics->getWindow(),
+ ("*" + client->mCaption).c_str());
client->mNewMessageFlag = true;
}
}
@@ -3119,3 +3072,40 @@ Window *Client::openErrorDialog(const std::string &header,
SOUND_ERROR, false, modal);
}
}
+
+void Client::setIcon()
+{
+ std::string iconFile = branding.getValue("appIcon", "icons/manaplus");
+#ifdef WIN32
+ iconFile.append(".ico");
+#else
+ iconFile.append(".png");
+#endif
+ iconFile = ResourceManager::getInstance()->getPath(iconFile);
+ logger->log("Loading icon from file: %s", iconFile.c_str());
+
+#ifdef WIN32
+ static SDL_SysWMinfo pInfo;
+ SDL_GetWMInfo(&pInfo);
+ // Attempt to load icon from .ico file
+ HICON icon = (HICON) LoadImage(nullptr, iconFile.c_str(),
+ IMAGE_ICON, 64, 64, LR_LOADFROMFILE);
+ // If it's failing, we load the default resource file.
+ if (!icon)
+ icon = LoadIcon(GetModuleHandle(nullptr), "A");
+
+ if (icon)
+ SetClassLong(pInfo.window, GCL_HICON, reinterpret_cast<LONG>(icon));
+#else
+ mIcon = IMG_Load(iconFile.c_str());
+ if (mIcon)
+ {
+#ifdef USE_SDL2
+ SDL_SetSurfaceAlphaMod(mIcon, SDL_ALPHA_OPAQUE);
+#else
+ SDL_SetAlpha(mIcon, SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
+#endif
+ SDL::SetWindowIcon(mainGraphics->getWindow(), mIcon);
+ }
+#endif
+}
diff --git a/src/client.h b/src/client.h
index 44a71b460..318dbb14b 100644
--- a/src/client.h
+++ b/src/client.h
@@ -380,6 +380,8 @@ private:
void checkConfigVersion();
+ void setIcon();
+
static Client *mInstance;
static void bindTextDomain(const char *const name, const char *const path);
diff --git a/src/utils/sdl2helper.cpp b/src/utils/sdl2helper.cpp
index 7cf624a2c..1ae8b087f 100644
--- a/src/utils/sdl2helper.cpp
+++ b/src/utils/sdl2helper.cpp
@@ -37,4 +37,14 @@ bool SDL::getAllVideoModes(StringVect &modeList)
return true;
}
+void SDL::SetWindowTitle(SDL_Window *const window, const char *const title)
+{
+ SDL_SetWindowTitle(window, title);
+}
+
+void SDL::SetWindowIcon(SDL_Window *const window, SDL_Surface *const icon)
+{
+ SDL_SetWindowIcon(window, icon);
+}
+
#endif // USE_SDL2
diff --git a/src/utils/sdl2helper.h b/src/utils/sdl2helper.h
index 101c965b8..bf3c57f0c 100644
--- a/src/utils/sdl2helper.h
+++ b/src/utils/sdl2helper.h
@@ -26,9 +26,17 @@
#include "localconsts.h"
+struct SDL_Surface;
+struct SDL_Window;
+
namespace SDL
{
bool getAllVideoModes(StringVect &modeList);
+
+ void SetWindowTitle(SDL_Window *const window, const char *const title);
+
+ void SetWindowIcon(SDL_Window *const window, SDL_Surface *const icon);
+
} // namespace SDL
#endif // USE_SDL2
diff --git a/src/utils/sdlhelper.cpp b/src/utils/sdlhelper.cpp
index 064989e93..9d28f6c96 100644
--- a/src/utils/sdlhelper.cpp
+++ b/src/utils/sdlhelper.cpp
@@ -61,4 +61,16 @@ bool SDL::getAllVideoModes(StringVect &modeList)
}
}
+void SDL::SetWindowTitle(SDL_Surface *const window A_UNUSED,
+ const char *const title)
+{
+ SDL_WM_SetCaption(title, nullptr);
+}
+
+void SDL::SetWindowIcon(SDL_Surface *const window A_UNUSED,
+ SDL_Surface *const icon)
+{
+ SDL_WM_SetIcon(icon, nullptr);
+}
+
#endif // USE_SDL2
diff --git a/src/utils/sdlhelper.h b/src/utils/sdlhelper.h
index f81cd449d..9d122f934 100644
--- a/src/utils/sdlhelper.h
+++ b/src/utils/sdlhelper.h
@@ -29,9 +29,18 @@
#include "localconsts.h"
+struct SDL_Surface;
+
namespace SDL
{
bool getAllVideoModes(StringVect &modeList);
+
+ void SetWindowTitle(SDL_Surface *const window,
+ const char *const title);
+
+ void SetWindowIcon(SDL_Surface *const window A_UNUSED,
+ SDL_Surface *const icon);
+
} // namespace SDL
#endif // USE_SDL2