1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "System/Platform/WindowManagerHelper.h"
#include "Rendering/GlobalRendering.h"
#include <SDL_syswm.h>
#include <windows.h>
namespace WindowManagerHelper {
void BlockCompositing(SDL_Window* window)
{
#ifndef HEADLESS
// only available in WinVista+
HMODULE dwmapiDllHandle = LoadLibrary("dwmapi.dll");
if (dwmapiDllHandle != nullptr) {
typedef HRESULT (*DwmEnableCompositionFunction)(UINT uCompositionAction);
auto DwmEnableComposition = (DwmEnableCompositionFunction) ::GetProcAddress(dwmapiDllHandle, "DwmEnableComposition");
if (DwmEnableComposition != nullptr) {
static const unsigned int DWM_EC_DISABLECOMPOSITION = 0U;
DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
}
FreeLibrary(dwmapiDllHandle);
}
#endif
}
int GetWindowState(SDL_Window* window)
{
int state = 0;
#ifndef HEADLESS
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
struct SDL_SysWMinfo info;
SDL_VERSION(&info.version);
SDL_GetWindowWMInfo(globalRendering->window, &info);
if (GetWindowPlacement(info.info.win.window, &wp)) {
if (wp.showCmd == SW_SHOWMAXIMIZED)
state = SDL_WINDOW_MAXIMIZED;
if (wp.showCmd == SW_SHOWMINIMIZED)
state = SDL_WINDOW_MINIMIZED;
}
#endif
return state;
}
}; // namespace WindowManagerHelper
|