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