]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CIrrDeviceWin32.cpp
Add OpenGL3 renderer
[irrlicht.git] / source / Irrlicht / CIrrDeviceWin32.cpp
index f53a76db737c6644292d274c562b94ced23d498f..1033f9edccbed22795d60f7edddb91af81887d2c 100644 (file)
@@ -2,7 +2,6 @@
 // This file is part of the "Irrlicht Engine".\r
 // For conditions of distribution and use, see copyright notice in irrlicht.h\r
 \r
-#include "IrrCompileConfig.h"\r
 \r
 #ifdef _IRR_COMPILE_WITH_WINDOWS_DEVICE_\r
 \r
@@ -12,7 +11,6 @@
 \r
 #include "CIrrDeviceWin32.h"\r
 #include "IEventReceiver.h"\r
-#include "irrList.h"\r
 #include "os.h"\r
 \r
 #include "CTimer.h"\r
 #include "IGUISpriteBank.h"\r
 #include <winuser.h>\r
 #include "SExposedVideoData.h"\r
+\r
 #if defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)\r
 #include <mmsystem.h>\r
 #include <regstr.h>\r
 #ifdef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_\r
 #define DIRECTINPUT_VERSION 0x0800\r
 #include <dinput.h>\r
-#ifdef _MSC_VER\r
-#pragma comment(lib, "dinput8.lib")\r
-#pragma comment(lib, "dxguid.lib")\r
-#endif\r
-#else\r
-#ifdef _MSC_VER\r
-#pragma comment(lib, "winmm.lib")\r
-#endif\r
 #endif\r
 #endif\r
 \r
@@ -514,7 +505,7 @@ bool SJoystickWin32Control::activateJoysticks(core::array<SJoystickInfo> & joyst
        for(joystick = 0; joystick < joystickInfo.size(); ++joystick)\r
        {\r
                char logString[256];\r
-               (void)sprintf(logString, "Found joystick %d, %d axes, %d buttons '%s'",\r
+               snprintf_irr(logString, sizeof(logString), "Found joystick %d, %d axes, %d buttons '%s'",\r
                        joystick, joystickInfo[joystick].Axes,\r
                        joystickInfo[joystick].Buttons, joystickInfo[joystick].Name.c_str());\r
                os::Printer::log(logString, ELL_INFORMATION);\r
@@ -528,166 +519,6 @@ bool SJoystickWin32Control::activateJoysticks(core::array<SJoystickInfo> & joyst
 }\r
 } // end namespace irr\r
 \r
-// Get the codepage from the locale language id\r
-// Based on the table from http://www.science.co.il/Language/Locale-Codes.asp?s=decimal\r
-static unsigned int LocaleIdToCodepage(unsigned int lcid)\r
-{\r
-       switch ( lcid )\r
-       {\r
-               case 1098:  // Telugu\r
-               case 1095:  // Gujarati\r
-               case 1094:  // Punjabi\r
-               case 1103:  // Sanskrit\r
-               case 1111:  // Konkani\r
-               case 1114:  // Syriac\r
-               case 1099:  // Kannada\r
-               case 1102:  // Marathi\r
-               case 1125:  // Divehi\r
-               case 1067:  // Armenian\r
-               case 1081:  // Hindi\r
-               case 1079:  // Georgian\r
-               case 1097:  // Tamil\r
-                       return 0;\r
-               case 1054:  // Thai\r
-                       return 874;\r
-               case 1041:  // Japanese\r
-                       return 932;\r
-               case 2052:  // Chinese (PRC)\r
-               case 4100:  // Chinese (Singapore)\r
-                       return 936;\r
-               case 1042:  // Korean\r
-                       return 949;\r
-               case 5124:  // Chinese (Macau S.A.R.)\r
-               case 3076:  // Chinese (Hong Kong S.A.R.)\r
-               case 1028:  // Chinese (Taiwan)\r
-                       return 950;\r
-               case 1048:  // Romanian\r
-               case 1060:  // Slovenian\r
-               case 1038:  // Hungarian\r
-               case 1051:  // Slovak\r
-               case 1045:  // Polish\r
-               case 1052:  // Albanian\r
-               case 2074:  // Serbian (Latin)\r
-               case 1050:  // Croatian\r
-               case 1029:  // Czech\r
-                       return 1250;\r
-               case 1104:  // Mongolian (Cyrillic)\r
-               case 1071:  // FYRO Macedonian\r
-               case 2115:  // Uzbek (Cyrillic)\r
-               case 1058:  // Ukrainian\r
-               case 2092:  // Azeri (Cyrillic)\r
-               case 1092:  // Tatar\r
-               case 1087:  // Kazakh\r
-               case 1059:  // Belarusian\r
-               case 1088:  // Kyrgyz (Cyrillic)\r
-               case 1026:  // Bulgarian\r
-               case 3098:  // Serbian (Cyrillic)\r
-               case 1049:  // Russian\r
-                       return 1251;\r
-               case 8201:  // English (Jamaica)\r
-               case 3084:  // French (Canada)\r
-               case 1036:  // French (France)\r
-               case 5132:  // French (Luxembourg)\r
-               case 5129:  // English (New Zealand)\r
-               case 6153:  // English (Ireland)\r
-               case 1043:  // Dutch (Netherlands)\r
-               case 9225:  // English (Caribbean)\r
-               case 4108:  // French (Switzerland)\r
-               case 4105:  // English (Canada)\r
-               case 1110:  // Galician\r
-               case 10249:  // English (Belize)\r
-               case 3079:  // German (Austria)\r
-               case 6156:  // French (Monaco)\r
-               case 12297:  // English (Zimbabwe)\r
-               case 1069:  // Basque\r
-               case 2067:  // Dutch (Belgium)\r
-               case 2060:  // French (Belgium)\r
-               case 1035:  // Finnish\r
-               case 1080:  // Faroese\r
-               case 1031:  // German (Germany)\r
-               case 3081:  // English (Australia)\r
-               case 1033:  // English (United States)\r
-               case 2057:  // English (United Kingdom)\r
-               case 1027:  // Catalan\r
-               case 11273:  // English (Trinidad)\r
-               case 7177:  // English (South Africa)\r
-               case 1030:  // Danish\r
-               case 13321:  // English (Philippines)\r
-               case 15370:  // Spanish (Paraguay)\r
-               case 9226:  // Spanish (Colombia)\r
-               case 5130:  // Spanish (Costa Rica)\r
-               case 7178:  // Spanish (Dominican Republic)\r
-               case 12298:  // Spanish (Ecuador)\r
-               case 17418:  // Spanish (El Salvador)\r
-               case 4106:  // Spanish (Guatemala)\r
-               case 18442:  // Spanish (Honduras)\r
-               case 3082:  // Spanish (International Sort)\r
-               case 13322:  // Spanish (Chile)\r
-               case 19466:  // Spanish (Nicaragua)\r
-               case 2058:  // Spanish (Mexico)\r
-               case 10250:  // Spanish (Peru)\r
-               case 20490:  // Spanish (Puerto Rico)\r
-               case 1034:  // Spanish (Traditional Sort)\r
-               case 14346:  // Spanish (Uruguay)\r
-               case 8202:  // Spanish (Venezuela)\r
-               case 1089:  // Swahili\r
-               case 1053:  // Swedish\r
-               case 2077:  // Swedish (Finland)\r
-               case 5127:  // German (Liechtenstein)\r
-               case 1078:  // Afrikaans\r
-               case 6154:  // Spanish (Panama)\r
-               case 4103:  // German (Luxembourg)\r
-               case 16394:  // Spanish (Bolivia)\r
-               case 2055:  // German (Switzerland)\r
-               case 1039:  // Icelandic\r
-               case 1057:  // Indonesian\r
-               case 1040:  // Italian (Italy)\r
-               case 2064:  // Italian (Switzerland)\r
-               case 2068:  // Norwegian (Nynorsk)\r
-               case 11274:  // Spanish (Argentina)\r
-               case 1046:  // Portuguese (Brazil)\r
-               case 1044:  // Norwegian (Bokmal)\r
-               case 1086:  // Malay (Malaysia)\r
-               case 2110:  // Malay (Brunei Darussalam)\r
-               case 2070:  // Portuguese (Portugal)\r
-                       return 1252;\r
-               case 1032:  // Greek\r
-                       return 1253;\r
-               case 1091:  // Uzbek (Latin)\r
-               case 1068:  // Azeri (Latin)\r
-               case 1055:  // Turkish\r
-                       return 1254;\r
-               case 1037:  // Hebrew\r
-                       return 1255;\r
-               case 5121:  // Arabic (Algeria)\r
-               case 15361:  // Arabic (Bahrain)\r
-               case 9217:  // Arabic (Yemen)\r
-               case 3073:  // Arabic (Egypt)\r
-               case 2049:  // Arabic (Iraq)\r
-               case 11265:  // Arabic (Jordan)\r
-               case 13313:  // Arabic (Kuwait)\r
-               case 12289:  // Arabic (Lebanon)\r
-               case 4097:  // Arabic (Libya)\r
-               case 6145:  // Arabic (Morocco)\r
-               case 8193:  // Arabic (Oman)\r
-               case 16385:  // Arabic (Qatar)\r
-               case 1025:  // Arabic (Saudi Arabia)\r
-               case 10241:  // Arabic (Syria)\r
-               case 14337:  // Arabic (U.A.E.)\r
-               case 1065:  // Farsi\r
-               case 1056:  // Urdu\r
-               case 7169:  // Arabic (Tunisia)\r
-                       return 1256;\r
-               case 1061:  // Estonian\r
-               case 1062:  // Latvian\r
-               case 1063:  // Lithuanian\r
-                       return 1257;\r
-               case 1066:  // Vietnamese\r
-                       return 1258;\r
-       }\r
-       return 65001;   // utf-8\r
-}\r
-\r
 namespace\r
 {\r
        struct SEnvMapper\r
@@ -699,7 +530,6 @@ namespace
        irr::core::array<SEnvMapper> EnvMap;\r
 \r
        HKL KEYBOARD_INPUT_HKL=0;\r
-       unsigned int KEYBOARD_INPUT_CODEPAGE = 1252;\r
 }\r
 \r
 irr::CIrrDeviceWin32* getDeviceFromHWnd(HWND hWnd)\r
@@ -718,9 +548,6 @@ irr::CIrrDeviceWin32* getDeviceFromHWnd(HWND hWnd)
 \r
 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
-       #ifndef WM_MOUSEWHEEL\r
-       #define WM_MOUSEWHEEL 0x020A\r
-       #endif\r
        #ifndef WHEEL_DELTA\r
        #define WHEEL_DELTA 120\r
        #endif\r
@@ -787,12 +614,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
                // middle and extra buttons\r
                if (wParam & MK_MBUTTON)\r
                        event.MouseInput.ButtonStates |= irr::EMBSM_MIDDLE;\r
-#if(_WIN32_WINNT >= 0x0500)\r
                if (wParam & MK_XBUTTON1)\r
                        event.MouseInput.ButtonStates |= irr::EMBSM_EXTRA1;\r
                if (wParam & MK_XBUTTON2)\r
                        event.MouseInput.ButtonStates |= irr::EMBSM_EXTRA2;\r
-#endif\r
                event.MouseInput.Wheel = 0.f;\r
 \r
                // wheel\r
@@ -853,22 +678,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
                        event.KeyInput.Key = (irr::EKEY_CODE)wParam;\r
                        event.KeyInput.PressedDown = (message==WM_KEYDOWN || message == WM_SYSKEYDOWN);\r
 \r
-                       const UINT MY_MAPVK_VSC_TO_VK_EX = 3; // MAPVK_VSC_TO_VK_EX should be in SDK according to MSDN, but isn't in mine.\r
                        if ( event.KeyInput.Key == irr::KEY_SHIFT )\r
                        {\r
-                               // this will fail on systems before windows NT/2000/XP, not sure _what_ will return there instead.\r
-                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MY_MAPVK_VSC_TO_VK_EX );\r
+                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MAPVK_VSC_TO_VK_EX );\r
                        }\r
                        if ( event.KeyInput.Key == irr::KEY_CONTROL )\r
                        {\r
-                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MY_MAPVK_VSC_TO_VK_EX );\r
+                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MAPVK_VSC_TO_VK_EX );\r
                                // some keyboards will just return LEFT for both - left and right keys. So also check extend bit.\r
                                if (lParam & 0x1000000)\r
                                        event.KeyInput.Key = irr::KEY_RCONTROL;\r
                        }\r
                        if ( event.KeyInput.Key == irr::KEY_MENU )\r
                        {\r
-                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MY_MAPVK_VSC_TO_VK_EX );\r
+                               event.KeyInput.Key = (irr::EKEY_CODE)MapVirtualKey( ((lParam>>16) & 255), MAPVK_VSC_TO_VK_EX );\r
                                if (lParam & 0x1000000)\r
                                        event.KeyInput.Key = irr::KEY_RMENU;\r
                        }\r
@@ -878,23 +701,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
                        event.KeyInput.Shift = ((allKeys[VK_SHIFT] & 0x80)!=0);\r
                        event.KeyInput.Control = ((allKeys[VK_CONTROL] & 0x80)!=0);\r
 \r
-                       // Handle unicode and deadkeys in a way that works since Windows 95 and nt4.0\r
-                       // Using ToUnicode instead would be shorter, but would to my knowledge not run on 95 and 98.\r
-                       WORD keyChars[2];\r
+                       // Handle unicode and deadkeys\r
+                       WCHAR keyChars[2];\r
                        UINT scanCode = HIWORD(lParam);\r
-                       int conversionResult = ToAsciiEx(static_cast<UINT>(wParam),scanCode,allKeys,keyChars,0,KEYBOARD_INPUT_HKL);\r
+                       int conversionResult = ToUnicodeEx(static_cast<UINT>(wParam),scanCode,allKeys,keyChars,2,0,KEYBOARD_INPUT_HKL);\r
                        if (conversionResult == 1)\r
-                       {\r
-                               WORD unicodeChar;\r
-                               MultiByteToWideChar(\r
-                                               KEYBOARD_INPUT_CODEPAGE,\r
-                                               MB_PRECOMPOSED, // default\r
-                                               (LPCSTR)keyChars,\r
-                                               sizeof(keyChars),\r
-                                               (WCHAR*)&unicodeChar,\r
-                                               1 );\r
-                               event.KeyInput.Char = unicodeChar;\r
-                       }\r
+                               event.KeyInput.Char = keyChars[0];\r
                        else\r
                                event.KeyInput.Char = 0;\r
 \r
@@ -907,7 +719,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
                                dev->postEventFromUser(event);\r
 \r
                        if (message == WM_SYSKEYDOWN || message == WM_SYSKEYUP)\r
-                               return DefWindowProc(hWnd, message, wParam, lParam);\r
+                               return DefWindowProcW(hWnd, message, wParam, lParam);\r
                        else\r
                                return 0;\r
                }\r
@@ -935,29 +747,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 \r
                break;\r
 \r
-       case WM_ACTIVATE:\r
-               // we need to take care for screen changes, e.g. Alt-Tab\r
-               dev = getDeviceFromHWnd(hWnd);\r
-               if (dev && dev->isFullscreen())\r
-               {\r
-                       if ((wParam&0xFF)==WA_INACTIVE)\r
-                       {\r
-                               // If losing focus we minimize the app to show other one\r
-                               ShowWindow(hWnd,SW_MINIMIZE);\r
-                               // and switch back to default resolution\r
-                               dev->switchToFullScreen(true);\r
-                       }\r
-                       else\r
-                       {\r
-                               // Otherwise we retore the fullscreen Irrlicht app\r
-                               SetForegroundWindow(hWnd);\r
-                               ShowWindow(hWnd, SW_RESTORE);\r
-                               // and set the fullscreen resolution again\r
-                               dev->switchToFullScreen();\r
-                       }\r
-               }\r
-               break;\r
-\r
        case WM_USER:\r
                event.EventType = irr::EET_USER_EVENT;\r
                event.UserEvent.UserData1 = static_cast<size_t>(wParam);\r
@@ -982,10 +771,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
        case WM_INPUTLANGCHANGE:\r
                // get the new codepage used for keyboard input\r
                KEYBOARD_INPUT_HKL = GetKeyboardLayout(0);\r
-               KEYBOARD_INPUT_CODEPAGE = LocaleIdToCodepage( LOWORD(KEYBOARD_INPUT_HKL) );\r
                return 0;\r
        }\r
-       return DefWindowProc(hWnd, message, wParam, lParam);\r
+       return DefWindowProcW(hWnd, message, wParam, lParam);\r
 }\r
 \r
 \r
@@ -994,8 +782,9 @@ namespace irr
 \r
 //! constructor\r
 CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)\r
-: CIrrDeviceStub(params), HWnd(0), ChangedToFullScreen(false), Resized(false),\r
-       ExternalWindow(false), Win32CursorControl(0), JoyControl(0)\r
+: CIrrDeviceStub(params), HWnd(0), Resized(false),\r
+       ExternalWindow(false), Win32CursorControl(0), JoyControl(0),\r
+       WindowMaximized(params.WindowMaximized)\r
 {\r
        #ifdef _DEBUG\r
        setDebugName("CIrrDeviceWin32");\r
@@ -1010,21 +799,14 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
        // get handle to exe file\r
        HINSTANCE hInstance = GetModuleHandle(0);\r
 \r
-       // Store original desktop mode.\r
-\r
-       memset(&DesktopMode, 0, sizeof(DesktopMode));\r
-       DesktopMode.dmSize = sizeof(DesktopMode);\r
-\r
-       EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DesktopMode);\r
-\r
        // create the window if we need to and we do not use the null device\r
        if (!CreationParams.WindowId && CreationParams.DriverType != video::EDT_NULL)\r
        {\r
-               const fschar_t* ClassName = __TEXT("CIrrDeviceWin32");\r
+               const wchar_t* ClassName = L"CIrrDeviceWin32";\r
 \r
                // Register Class\r
-               WNDCLASSEX wcex;\r
-               wcex.cbSize                     = sizeof(WNDCLASSEX);\r
+               WNDCLASSEXW wcex;\r
+               wcex.cbSize                     = sizeof(WNDCLASSEXW);\r
                wcex.style                      = CS_HREDRAW | CS_VREDRAW;\r
                wcex.lpfnWndProc        = WndProc;\r
                wcex.cbClsExtra         = 0;\r
@@ -1038,9 +820,9 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
                wcex.hIconSm            = 0;\r
 \r
                // if there is an icon, load it\r
-               wcex.hIcon = (HICON)LoadImage(hInstance, __TEXT("irrlicht.ico"), IMAGE_ICON, 0,0, LR_LOADFROMFILE | LR_DEFAULTSIZE);\r
+               wcex.hIcon = (HICON)LoadImageW(hInstance, L"irrlicht.ico", IMAGE_ICON, 0,0, LR_LOADFROMFILE | LR_DEFAULTSIZE);\r
 \r
-               RegisterClassEx(&wcex);\r
+               RegisterClassExW(&wcex);\r
 \r
                // calculate client size\r
 \r
@@ -1050,7 +832,7 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
                clientSize.right = CreationParams.WindowSize.Width;\r
                clientSize.bottom = CreationParams.WindowSize.Height;\r
 \r
-               DWORD style = getWindowStyle(CreationParams.Fullscreen, CreationParams.WindowResizable);\r
+               DWORD style = getWindowStyle(CreationParams.Fullscreen, CreationParams.WindowResizable > 0 ? true : false);\r
                AdjustWindowRect(&clientSize, style, FALSE);\r
 \r
                const s32 realWidth = clientSize.right - clientSize.left;\r
@@ -1075,7 +857,7 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
                }\r
 \r
                // create window\r
-               HWnd = CreateWindow( ClassName, __TEXT(""), style, windowLeft, windowTop,\r
+               HWnd = CreateWindowW( ClassName, L"", style, windowLeft, windowTop,\r
                                        realWidth, realHeight, NULL, NULL, hInstance, NULL);\r
                if (!HWnd)\r
                {\r
@@ -1137,12 +919,13 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
                SetForegroundWindow(HWnd);\r
        }\r
 \r
-       // get the codepage used for keyboard input\r
        KEYBOARD_INPUT_HKL = GetKeyboardLayout(0);\r
-       KEYBOARD_INPUT_CODEPAGE = LocaleIdToCodepage( LOWORD(KEYBOARD_INPUT_HKL) );\r
 \r
        // inform driver about the window size etc.\r
        resizeIfNecessary();\r
+\r
+       if (params.WindowMaximized)\r
+               maximizeWindow();\r
 }\r
 \r
 \r
@@ -1160,8 +943,6 @@ CIrrDeviceWin32::~CIrrDeviceWin32()
                        break;\r
                }\r
        }\r
-\r
-       switchToFullScreen(true);\r
 }\r
 \r
 \r
@@ -1228,27 +1009,9 @@ void CIrrDeviceWin32::createDriver()
                os::Printer::log("OpenGL-ES2 driver was not compiled in.", ELL_ERROR);\r
 #endif\r
                break;\r
-       case EDT_WEBGL1:\r
+       case video::EDT_WEBGL1:\r
                os::Printer::log("WebGL1 driver not supported on Win32 device.", ELL_ERROR);\r
                break;\r
-       case video::EDT_SOFTWARE:\r
-#ifdef _IRR_COMPILE_WITH_SOFTWARE_\r
-               switchToFullScreen();\r
-\r
-               VideoDriver = video::createSoftwareDriver(CreationParams.WindowSize, CreationParams.Fullscreen, FileSystem, this);\r
-#else\r
-               os::Printer::log("Software driver was not compiled in.", ELL_ERROR);\r
-#endif\r
-               break;\r
-       case video::EDT_BURNINGSVIDEO:\r
-#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_\r
-               switchToFullScreen();\r
-\r
-               VideoDriver = video::createBurningVideoDriver(CreationParams, FileSystem, this);\r
-#else\r
-               os::Printer::log("Burning's Video driver was not compiled in.", ELL_ERROR);\r
-#endif\r
-               break;\r
        case video::EDT_NULL:\r
                VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize);\r
                break;\r
@@ -1310,12 +1073,12 @@ void CIrrDeviceWin32::resizeIfNecessary()
 \r
        if (r.right < 2 || r.bottom < 2)\r
        {\r
-               sprintf(tmp, "Ignoring resize operation to (%ld %ld)", r.right, r.bottom);\r
+               snprintf_irr(tmp, sizeof(tmp), "Ignoring resize operation to (%ld %ld)", r.right, r.bottom);\r
                os::Printer::log(tmp);\r
        }\r
        else\r
        {\r
-               sprintf(tmp, "Resizing window (%ld %ld)", r.right, r.bottom);\r
+               snprintf_irr(tmp, sizeof(tmp), "Resizing window (%ld %ld)", r.right, r.bottom);\r
                os::Printer::log(tmp);\r
 \r
                getVideoDriver()->OnResize(irr::core::dimension2du((u32)r.right, (u32)r.bottom));\r
@@ -1349,54 +1112,6 @@ void CIrrDeviceWin32::setWindowCaption(const wchar_t* text)
 }\r
 \r
 \r
-//! presents a surface in the client area\r
-bool CIrrDeviceWin32::present(video::IImage* image, void* windowId, core::rect<s32>* src)\r
-{\r
-       HWND hwnd = HWnd;\r
-       if ( windowId )\r
-               hwnd = reinterpret_cast<HWND>(windowId);\r
-\r
-       HDC dc = GetDC(hwnd);\r
-\r
-       if ( dc )\r
-       {\r
-               RECT rect;\r
-               GetClientRect(hwnd, &rect);\r
-               const void* memory = (const void *)image->getData();\r
-\r
-               BITMAPV4HEADER bi;\r
-               ZeroMemory (&bi, sizeof(bi));\r
-               bi.bV4Size = sizeof(BITMAPINFOHEADER);\r
-               bi.bV4BitCount = (WORD)image->getBitsPerPixel();\r
-               bi.bV4Planes = 1;\r
-               bi.bV4Width = image->getDimension().Width;\r
-               bi.bV4Height = -((s32)image->getDimension().Height);\r
-               bi.bV4V4Compression = BI_BITFIELDS;\r
-               bi.bV4AlphaMask = image->getAlphaMask();\r
-               bi.bV4RedMask = image->getRedMask();\r
-               bi.bV4GreenMask = image->getGreenMask();\r
-               bi.bV4BlueMask = image->getBlueMask();\r
-\r
-               if ( src )\r
-               {\r
-                       StretchDIBits(dc, 0,0, rect.right, rect.bottom,\r
-                                       src->UpperLeftCorner.X, src->UpperLeftCorner.Y,\r
-                                       src->getWidth(), src->getHeight(),\r
-                                       memory, (const BITMAPINFO*)(&bi), DIB_RGB_COLORS, SRCCOPY);\r
-               }\r
-               else\r
-               {\r
-                       StretchDIBits(dc, 0,0, rect.right, rect.bottom,\r
-                                       0, 0, image->getDimension().Width, image->getDimension().Height,\r
-                                       memory, (const BITMAPINFO*)(&bi), DIB_RGB_COLORS, SRCCOPY);\r
-               }\r
-\r
-               ReleaseDC(hwnd, dc);\r
-       }\r
-       return true;\r
-}\r
-\r
-\r
 //! notifies the device that it should close itself\r
 void CIrrDeviceWin32::closeDevice()\r
 {\r
@@ -1407,9 +1122,9 @@ void CIrrDeviceWin32::closeDevice()
                PostQuitMessage(0);\r
                PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE);\r
                DestroyWindow(HWnd);\r
-               const fschar_t* ClassName = __TEXT("CIrrDeviceWin32");\r
+               const wchar_t* ClassName = L"CIrrDeviceWin32";\r
                HINSTANCE hInstance = GetModuleHandle(0);\r
-               UnregisterClass(ClassName, hInstance);\r
+               UnregisterClassW(ClassName, hInstance);\r
        }\r
        Close=true;\r
 }\r
@@ -1442,68 +1157,37 @@ bool CIrrDeviceWin32::isWindowMinimized() const
 }\r
 \r
 \r
+//! returns last state from maximizeWindow() and restoreWindow()\r
+bool CIrrDeviceWin32::isWindowMaximized() const\r
+{\r
+       return WindowMaximized;\r
+}\r
+\r
+\r
 //! switches to fullscreen\r
-bool CIrrDeviceWin32::switchToFullScreen(bool reset)\r
+bool CIrrDeviceWin32::switchToFullScreen()\r
 {\r
        if (!CreationParams.Fullscreen)\r
                return true;\r
 \r
-       if (reset)\r
-       {\r
-               if (ChangedToFullScreen)\r
-               {\r
-                       return (ChangeDisplaySettings(&DesktopMode,0)==DISP_CHANGE_SUCCESSFUL);\r
-               }\r
-               else\r
-                       return true;\r
-       }\r
-\r
-       // use default values from current setting\r
+       // No border, title bar, etc. is already set up through getWindowStyle()\r
+       // We only set the window size to match the monitor.\r
 \r
-       DEVMODE dm;\r
-       memset(&dm, 0, sizeof(dm));\r
-       dm.dmSize = sizeof(dm);\r
-\r
-       EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);\r
-       dm.dmPelsWidth = CreationParams.WindowSize.Width;\r
-       dm.dmPelsHeight = CreationParams.WindowSize.Height;\r
-       dm.dmBitsPerPel = CreationParams.Bits;\r
-       dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;\r
-\r
-       LONG res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);\r
-       if (res != DISP_CHANGE_SUCCESSFUL)\r
-       { // try again without forcing display frequency\r
-               dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;\r
-               res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);\r
+       MONITORINFO mi;\r
+       mi.cbSize = sizeof(mi);\r
+       if (GetMonitorInfo(MonitorFromWindow(HWnd,MONITOR_DEFAULTTOPRIMARY),&mi))\r
+       {\r
+               UINT flags = SWP_NOCOPYBITS|SWP_NOOWNERZORDER|SWP_FRAMECHANGED;\r
+               SetWindowPos(HWnd, HWND_TOP, mi.rcMonitor.left, mi.rcMonitor.top,\r
+                       mi.rcMonitor.right - mi.rcMonitor.left,\r
+                       mi.rcMonitor.bottom - mi.rcMonitor.top, flags);\r
        }\r
-\r
-       bool ret = false;\r
-       switch(res)\r
+       else\r
        {\r
-       case DISP_CHANGE_SUCCESSFUL:\r
-               ChangedToFullScreen = true;\r
-               ret = true;\r
-               break;\r
-       case DISP_CHANGE_RESTART:\r
-               os::Printer::log("Switch to fullscreen: The computer must be restarted in order for the graphics mode to work.", ELL_ERROR);\r
-               break;\r
-       case DISP_CHANGE_BADFLAGS:\r
-               os::Printer::log("Switch to fullscreen: An invalid set of flags was passed in.", ELL_ERROR);\r
-               break;\r
-       case DISP_CHANGE_BADPARAM:\r
-               os::Printer::log("Switch to fullscreen: An invalid parameter was passed in. This can include an invalid flag or combination of flags.", ELL_ERROR);\r
-               break;\r
-       case DISP_CHANGE_FAILED:\r
-               os::Printer::log("Switch to fullscreen: The display driver failed the specified graphics mode.", ELL_ERROR);\r
-               break;\r
-       case DISP_CHANGE_BADMODE:\r
-               os::Printer::log("Switch to fullscreen: The graphics mode is not supported.", ELL_ERROR);\r
-               break;\r
-       default:\r
-               os::Printer::log("An unknown error occurred while changing to fullscreen.", ELL_ERROR);\r
-               break;\r
+               CreationParams.Fullscreen = false;\r
        }\r
-       return ret;\r
+\r
+       return CreationParams.Fullscreen;\r
 }\r
 \r
 \r
@@ -1513,256 +1197,17 @@ CIrrDeviceWin32::CCursorControl* CIrrDeviceWin32::getWin32CursorControl()
        return Win32CursorControl;\r
 }\r
 \r
-\r
-//! \return Returns a pointer to a list with all video modes supported\r
-//! by the gfx adapter.\r
-video::IVideoModeList* CIrrDeviceWin32::getVideoModeList()\r
-{\r
-       if (!VideoModeList->getVideoModeCount())\r
-       {\r
-               // enumerate video modes.\r
-               DWORD i=0;\r
-               DEVMODE mode;\r
-               memset(&mode, 0, sizeof(mode));\r
-               mode.dmSize = sizeof(mode);\r
-\r
-               while (EnumDisplaySettings(NULL, i, &mode))\r
-               {\r
-                       VideoModeList->addMode(core::dimension2d<u32>(mode.dmPelsWidth, mode.dmPelsHeight),\r
-                               mode.dmBitsPerPel);\r
-\r
-                       ++i;\r
-               }\r
-\r
-               if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &mode))\r
-                       VideoModeList->setDesktop(mode.dmBitsPerPel, core::dimension2d<u32>(mode.dmPelsWidth, mode.dmPelsHeight));\r
-       }\r
-\r
-       return VideoModeList;\r
-}\r
-\r
-typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);\r
-// Needed for old windows apis\r
-// depending on the SDK version and compilers some defines might be available\r
-// or not\r
-#ifndef PRODUCT_ULTIMATE\r
-#define PRODUCT_ULTIMATE       0x00000001\r
-#define PRODUCT_HOME_BASIC     0x00000002\r
-#define PRODUCT_HOME_PREMIUM   0x00000003\r
-#define PRODUCT_ENTERPRISE     0x00000004\r
-#define PRODUCT_HOME_BASIC_N   0x00000005\r
-#define PRODUCT_BUSINESS       0x00000006\r
-#define PRODUCT_STARTER                0x0000000B\r
-#endif\r
-#ifndef PRODUCT_ULTIMATE_N\r
-#define PRODUCT_BUSINESS_N     0x00000010\r
-#define PRODUCT_HOME_PREMIUM_N 0x0000001A\r
-#define PRODUCT_ENTERPRISE_N   0x0000001B\r
-#define PRODUCT_ULTIMATE_N     0x0000001C\r
-#endif\r
-#ifndef PRODUCT_STARTER_N\r
-#define PRODUCT_STARTER_N      0x0000002F\r
-#endif\r
-#ifndef PRODUCT_PROFESSIONAL\r
-#define PRODUCT_PROFESSIONAL   0x00000030\r
-#define PRODUCT_PROFESSIONAL_N 0x00000031\r
-#endif\r
-#ifndef PRODUCT_ULTIMATE_E\r
-#define PRODUCT_STARTER_E      0x00000042\r
-#define PRODUCT_HOME_BASIC_E   0x00000043\r
-#define PRODUCT_HOME_PREMIUM_E 0x00000044\r
-#define PRODUCT_PROFESSIONAL_E 0x00000045\r
-#define PRODUCT_ENTERPRISE_E   0x00000046\r
-#define PRODUCT_ULTIMATE_E     0x00000047\r
-#endif\r
-\r
 void CIrrDeviceWin32::getWindowsVersion(core::stringc& out)\r
 {\r
-       OSVERSIONINFOEX osvi;\r
-       PGPI pGPI;\r
-       BOOL bOsVersionInfoEx;\r
-\r
-       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));\r
-       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);\r
+       OSVERSIONINFO osvi;\r
 \r
-       bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);\r
-       if (!bOsVersionInfoEx)\r
-       {\r
-               osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\r
-               if (! GetVersionEx((OSVERSIONINFO *) &osvi))\r
-                       return;\r
-       }\r
+       ZeroMemory(&osvi, sizeof(OSVERSIONINFO));\r
+       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\r
+       GetVersionEx(&osvi);\r
 \r
-       switch (osvi.dwPlatformId)\r
-       {\r
-       case VER_PLATFORM_WIN32_NT:\r
-               if (osvi.dwMajorVersion <= 4)\r
-                       out.append("Microsoft Windows NT ");\r
-               else\r
-               if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)\r
-                       out.append("Microsoft Windows 2000 ");\r
-               else\r
-               if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)\r
-                       out.append("Microsoft Windows XP ");\r
-               else\r
-               if (osvi.dwMajorVersion == 6 )\r
-               {\r
-                       if (osvi.dwMinorVersion == 0)\r
-                       {\r
-                               if (osvi.wProductType == VER_NT_WORKSTATION)\r
-                                       out.append("Microsoft Windows Vista ");\r
-                               else\r
-                                       out.append("Microsoft Windows Server 2008 ");\r
-                       }\r
-                       else if (osvi.dwMinorVersion == 1)\r
-                       {\r
-                               if (osvi.wProductType == VER_NT_WORKSTATION)\r
-                                       out.append("Microsoft Windows 7 ");\r
-                               else\r
-                                       out.append("Microsoft Windows Server 2008 R2 ");\r
-                       }\r
-                       else if (osvi.dwMinorVersion == 2)\r
-                       {\r
-                               out.append("Microsoft Windows 8 or later ");\r
-                       }\r
-               }\r
-\r
-               if (bOsVersionInfoEx)\r
-               {\r
-                       if (osvi.dwMajorVersion == 6)\r
-                       {\r
-                               DWORD dwType;\r
-                               pGPI = (PGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");\r
-                               pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);\r
-\r
-                               switch (dwType)\r
-                               {\r
-                               case PRODUCT_ULTIMATE:\r
-                               case PRODUCT_ULTIMATE_E:\r
-                               case PRODUCT_ULTIMATE_N:\r
-                                       out.append("Ultimate Edition ");\r
-                                       break;\r
-                               case PRODUCT_PROFESSIONAL:\r
-                               case PRODUCT_PROFESSIONAL_E:\r
-                               case PRODUCT_PROFESSIONAL_N:\r
-                                       out.append("Professional Edition ");\r
-                                       break;\r
-                               case PRODUCT_HOME_BASIC:\r
-                               case PRODUCT_HOME_BASIC_E:\r
-                               case PRODUCT_HOME_BASIC_N:\r
-                                       out.append("Home Basic Edition ");\r
-                                       break;\r
-                               case PRODUCT_HOME_PREMIUM:\r
-                               case PRODUCT_HOME_PREMIUM_E:\r
-                               case PRODUCT_HOME_PREMIUM_N:\r
-                                       out.append("Home Premium Edition ");\r
-                                       break;\r
-                               case PRODUCT_ENTERPRISE:\r
-                               case PRODUCT_ENTERPRISE_E:\r
-                               case PRODUCT_ENTERPRISE_N:\r
-                                       out.append("Enterprise Edition ");\r
-                                       break;\r
-                               case PRODUCT_BUSINESS:\r
-                               case PRODUCT_BUSINESS_N:\r
-                                       out.append("Business Edition ");\r
-                                       break;\r
-                               case PRODUCT_STARTER:\r
-                               case PRODUCT_STARTER_E:\r
-                               case PRODUCT_STARTER_N:\r
-                                       out.append("Starter Edition ");\r
-                                       break;\r
-                               }\r
-                       }\r
-#ifdef VER_SUITE_ENTERPRISE\r
-                       else\r
-                       if (osvi.wProductType == VER_NT_WORKSTATION)\r
-                       {\r
-#ifndef __BORLANDC__\r
-                               if( osvi.wSuiteMask & VER_SUITE_PERSONAL )\r
-                                       out.append("Personal ");\r
-                               else\r
-                                       out.append("Professional ");\r
-#endif\r
-                       }\r
-                       else if (osvi.wProductType == VER_NT_SERVER)\r
-                       {\r
-                               if( osvi.wSuiteMask & VER_SUITE_DATACENTER )\r
-                                       out.append("DataCenter Server ");\r
-                               else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )\r
-                                       out.append("Advanced Server ");\r
-                               else\r
-                                       out.append("Server ");\r
-                       }\r
-#endif\r
-               }\r
-               else\r
-               {\r
-                       HKEY hKey;\r
-                       char szProductType[80];\r
-                       DWORD dwBufLen;\r
-\r
-                       RegOpenKeyEx( HKEY_LOCAL_MACHINE,\r
-                                       __TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"),\r
-                                       0, KEY_QUERY_VALUE, &hKey );\r
-                       RegQueryValueEx( hKey, __TEXT("ProductType"), NULL, NULL,\r
-                                       (LPBYTE) szProductType, &dwBufLen);\r
-                       RegCloseKey( hKey );\r
-\r
-                       \r
-                       if (irr::core::stringc("WINNT").equals_ignore_case(szProductType))\r
-                               out.append("Professional ");\r
-                       if (irr::core::stringc("LANMANNT").equals_ignore_case(szProductType))\r
-                               out.append("Server ");\r
-                       if (irr::core::stringc("SERVERNT").equals_ignore_case(szProductType))\r
-                               out.append("Advanced Server ");\r
-               }\r
-\r
-               // Display version, service pack (if any), and build number.\r
-\r
-               char tmp[255];\r
-\r
-               if (osvi.dwMajorVersion <= 4 )\r
-               {\r
-                       sprintf(tmp, "version %lu.%lu %s (Build %lu)",\r
-                                       osvi.dwMajorVersion,\r
-                                       osvi.dwMinorVersion,\r
-                                       irr::core::stringc(osvi.szCSDVersion).c_str(),\r
-                                       osvi.dwBuildNumber & 0xFFFF);\r
-               }\r
-               else\r
-               {\r
-                       sprintf(tmp, "%s (Build %lu)", irr::core::stringc(osvi.szCSDVersion).c_str(),\r
-                       osvi.dwBuildNumber & 0xFFFF);\r
-               }\r
-\r
-               out.append(tmp);\r
-               break;\r
-\r
-       case VER_PLATFORM_WIN32_WINDOWS:\r
-\r
-               if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)\r
-               {\r
-                       out.append("Microsoft Windows 95 ");\r
-                       if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )\r
-                               out.append("OSR2 " );\r
-               }\r
-\r
-               if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)\r
-               {\r
-                       out.append("Microsoft Windows 98 ");\r
-                       if ( osvi.szCSDVersion[1] == 'A' )\r
-                               out.append( "SE " );\r
-               }\r
-\r
-               if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)\r
-                       out.append("Microsoft Windows Me ");\r
-\r
-               break;\r
-\r
-       case VER_PLATFORM_WIN32s:\r
-               out.append("Microsoft Win32s ");\r
-               break;\r
-       }\r
+       char tmp[255];\r
+       snprintf(tmp, sizeof(tmp), "Microsoft Windows %lu.%lu %s", osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.szCSDVersion);\r
+       out.append(tmp);\r
 }\r
 \r
 //! Notifies the device, that it has been resized\r
@@ -1843,6 +1288,8 @@ void CIrrDeviceWin32::maximizeWindow()
        GetWindowPlacement(HWnd, &wndpl);\r
        wndpl.showCmd = SW_SHOWMAXIMIZED;\r
        SetWindowPlacement(HWnd, &wndpl);\r
+\r
+       WindowMaximized = true;\r
 }\r
 \r
 \r
@@ -1854,6 +1301,8 @@ void CIrrDeviceWin32::restoreWindow()
        GetWindowPlacement(HWnd, &wndpl);\r
        wndpl.showCmd = SW_SHOWNORMAL;\r
        SetWindowPlacement(HWnd, &wndpl);\r
+\r
+       WindowMaximized = false;\r
 }\r
 \r
 core::position2di CIrrDeviceWin32::getWindowPosition()\r
@@ -1882,46 +1331,6 @@ bool CIrrDeviceWin32::activateJoysticks(core::array<SJoystickInfo> & joystickInf
 }\r
 \r
 \r
-//! Set the current Gamma Value for the Display\r
-bool CIrrDeviceWin32::setGammaRamp( f32 red, f32 green, f32 blue, f32 brightness, f32 contrast )\r
-{\r
-       bool r;\r
-       u16 ramp[3][256];\r
-\r
-       calculateGammaRamp( ramp[0], red, brightness, contrast );\r
-       calculateGammaRamp( ramp[1], green, brightness, contrast );\r
-       calculateGammaRamp( ramp[2], blue, brightness, contrast );\r
-\r
-       HDC dc = GetDC(0);\r
-       r = SetDeviceGammaRamp ( dc, ramp ) == TRUE;\r
-       ReleaseDC(HWnd, dc);\r
-       return r;\r
-}\r
-\r
-//! Get the current Gamma Value for the Display\r
-bool CIrrDeviceWin32::getGammaRamp( f32 &red, f32 &green, f32 &blue, f32 &brightness, f32 &contrast )\r
-{\r
-       bool r;\r
-       u16 ramp[3][256];\r
-\r
-       HDC dc = GetDC(0);\r
-       r = GetDeviceGammaRamp ( dc, ramp ) == TRUE;\r
-       ReleaseDC(HWnd, dc);\r
-\r
-       if (r)\r
-       {\r
-               calculateGammaFromRamp(red, ramp[0]);\r
-               calculateGammaFromRamp(green, ramp[1]);\r
-               calculateGammaFromRamp(blue, ramp[2]);\r
-       }\r
-\r
-       brightness = 0.f;\r
-       contrast = 0.f;\r
-\r
-       return r;\r
-}\r
-\r
-\r
 //! Process system events\r
 void CIrrDeviceWin32::handleSystemMessages()\r
 {\r
@@ -1964,63 +1373,6 @@ void CIrrDeviceWin32::clearSystemMessages()
        {}\r
 }\r
 \r
-// shows last error in a messagebox to help internal debugging.\r
-void CIrrDeviceWin32::ReportLastWinApiError()\r
-{\r
-       // (based on code from ovidiucucu from http://www.codeguru.com/forum/showthread.php?t=318721)\r
-       LPCTSTR pszCaption = __TEXT("Windows SDK Error Report");\r
-       DWORD dwError = GetLastError();\r
-\r
-       if(NOERROR == dwError)\r
-       {\r
-               MessageBox(NULL, __TEXT("No error"), pszCaption, MB_OK);\r
-       }\r
-       else\r
-       {\r
-               const DWORD dwFormatControl = FORMAT_MESSAGE_ALLOCATE_BUFFER |\r
-                                                                               FORMAT_MESSAGE_IGNORE_INSERTS |\r
-                                                                               FORMAT_MESSAGE_FROM_SYSTEM;\r
-\r
-               LPVOID pTextBuffer = NULL;\r
-               DWORD dwCount = FormatMessage(dwFormatControl,\r
-                                                                               NULL,\r
-                                                                               dwError,\r
-                                                                               0,\r
-                                                                               (LPTSTR) &pTextBuffer,\r
-                                                                               0,\r
-                                                                               NULL);\r
-               if(0 != dwCount)\r
-               {\r
-                       MessageBox(NULL, (LPCTSTR)pTextBuffer, pszCaption, MB_OK|MB_ICONERROR);\r
-                       LocalFree(pTextBuffer);\r
-               }\r
-               else\r
-               {\r
-                       MessageBox(NULL, __TEXT("Unknown error"), pszCaption, MB_OK|MB_ICONERROR);\r
-               }\r
-       }\r
-}\r
-\r
-// Same function Windows offers in VersionHelpers.h, but we can't use that as it's not available in older sdk's (minimum is SDK 8.1)\r
-bool CIrrDeviceWin32::isWindowsVistaOrGreater()\r
-{\r
-#if (_WIN32_WINNT >= 0x0500)\r
-       OSVERSIONINFOEX osvi;\r
-       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));\r
-       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);\r
-       osvi.dwMajorVersion = 6; //  Windows Vista\r
-\r
-       if ( !GetVersionEx((OSVERSIONINFO*)&osvi) )\r
-       {\r
-               return false;\r
-       }\r
-\r
-       return VerifyVersionInfo(&osvi, VER_MAJORVERSION, VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL)) ? true : false;\r
-#else\r
-    return false;\r
-#endif\r
-}\r
-\r
 // Convert an Irrlicht texture to a Windows cursor\r
 // Based on http://www.codeguru.com/cpp/w-p/win32/cursors/article.php/c4529/\r
 HCURSOR CIrrDeviceWin32::TextureToCursor(HWND hwnd, irr::video::ITexture * tex, const core::rect<s32>& sourceRect, const core::position2d<s32> &hotspot)\r