1/* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21*/ 22#include "SDL_config.h" 23 24#ifndef _SDL_lowvideo_h 25#define _SDL_lowvideo_h 26 27#define WIN32_LEAN_AND_MEAN 1 28#include <windows.h> 29 30#ifndef SetClassLongPtr 31#define SetClassLongPtr SetClassLong 32#endif 33#ifndef GetWindowLongPtr 34#define GetWindowLongPtr GetWindowLong 35#endif 36#ifndef SetWindowLongPtr 37#define SetWindowLongPtr SetWindowLong 38#endif 39#ifndef GWLP_WNDPROC 40#define GWLP_WNDPROC GWL_WNDPROC 41#endif 42#ifndef GWLP_HINSTANCE 43#define GWLP_HINSTANCE GWL_HINSTANCE 44#endif 45#ifndef GCLP_HICON 46#define GCLP_HICON GCL_HICON 47#endif 48 49#include "../SDL_sysvideo.h" 50 51/* Hidden "this" pointer for the video functions */ 52#define _THIS SDL_VideoDevice *this 53 54#define FULLSCREEN() \ 55 ((SDL_VideoSurface->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) 56 57#define WINDIB_FULLSCREEN() \ 58( \ 59 SDL_VideoSurface && \ 60 FULLSCREEN() && \ 61 (((SDL_VideoSurface->flags & SDL_OPENGL ) == SDL_OPENGL ) || \ 62 ((SDL_strcmp(this->name, "windib") == 0) || \ 63 (SDL_strcmp(this->name, "gapi") == 0))) \ 64) 65#define DDRAW_FULLSCREEN() \ 66( \ 67 SDL_VideoSurface && \ 68 FULLSCREEN() && \ 69 ((SDL_VideoSurface->flags & SDL_OPENGL ) != SDL_OPENGL ) && \ 70 (SDL_strcmp(this->name, "directx") == 0) \ 71) 72 73#define DINPUT_FULLSCREEN() \ 74( \ 75 FULLSCREEN() && \ 76 (strcmp(this->name, "directx") == 0) \ 77) 78 79#define DINPUT() (strcmp(this->name, "directx") == 0) 80 81/* The main window -- and a function to set it for the audio */ 82#ifdef _WIN32_WCE 83extern LPWSTR SDL_Appname; 84#else 85extern LPSTR SDL_Appname; 86#endif 87extern HINSTANCE SDL_Instance; 88extern HWND SDL_Window; 89extern BOOL SDL_windowid; 90 91/* Variables and functions exported to other parts of the native video 92 subsystem (SDL_sysevents.c) 93*/ 94extern void WIN_FlushMessageQueue(); 95 96/* Called by windows message loop when application is activated */ 97extern void (*WIN_Activate)(_THIS, BOOL active, BOOL minimized); 98 99/* Called by windows message loop when system palette is available */ 100extern void (*WIN_RealizePalette)(_THIS); 101 102/* Called by windows message loop when the system palette changes */ 103extern void (*WIN_PaletteChanged)(_THIS, HWND window); 104 105/* Called by windows message loop when a portion of the screen needs update */ 106extern void (*WIN_WinPAINT)(_THIS, HDC hdc); 107 108/* Called by windows message loop when the message isn't handled */ 109extern LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 110 111/* The window cursor (from SDL_sysmouse.c) */ 112extern HCURSOR SDL_hcursor; 113 114/* The bounds of the window in screen coordinates */ 115extern RECT SDL_bounds; 116 117/* The position of the window in windowed mode */ 118extern int SDL_windowX; 119extern int SDL_windowY; 120 121/* Flag -- SDL is performing a resize, rather than the user */ 122extern int SDL_resizing; 123 124/* Flag -- the mouse is in relative motion mode */ 125extern int mouse_relative; 126 127/* The GDI fullscreen mode currently active */ 128#ifndef NO_CHANGEDISPLAYSETTINGS 129extern DEVMODE SDL_desktop_mode; 130extern DEVMODE SDL_fullscreen_mode; 131#endif 132 133/* The system gamma ramp for GDI modes */ 134extern WORD *gamma_saved; 135 136/* This is really from SDL_dx5audio.c */ 137extern void DX5_SoundFocus(HWND window); 138 139/* DJM: This is really from SDL_sysevents.c, we need it in 140 GDL_CreateWindow as well */ 141LRESULT CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 142 143#ifdef _WIN64 144#define SDL_ToUnicode ToUnicode 145#else 146/* JFP: Implementation of ToUnicode() that works on 9x/ME/2K/XP */ 147typedef int (WINAPI *ToUnicodeFN)(UINT, UINT, const BYTE *, LPWSTR, int, UINT); 148 149extern ToUnicodeFN SDL_ToUnicode; 150#endif 151 152#endif /* SDL_lowvideo_h */ 153