annotate libvo/w32_common.c @ 32714:5248e989612a

Remove libswscale subdirectory. libswscale has been moved to FFmpeg since some time and only kept in the MPlayer repository for historical reasons and difficulty in moving code complete with history between Subversion repositories. FFmpeg now contains libswscale directly without indirection through an svn:externals property, so no reason to keep libswscale in MPlayer remains.
author diego
date Thu, 20 Jan 2011 09:41:43 +0000
parents c41773445d3b
children 56ab5d4f13e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
1 /*
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
2 * This file is part of MPlayer.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
3 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
5 * it under the terms of the GNU General Public License as published by
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
7 * (at your option) any later version.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
8 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
12 * GNU General Public License for more details.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
13 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
14 * You should have received a copy of the GNU General Public License along
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
17 */
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28179
diff changeset
18
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
19 #include <stdio.h>
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
20 #include <limits.h>
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
21 #include <windows.h>
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
22 #include <windowsx.h>
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
23
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
24 #include "osdep/keycodes.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
25 #include "input/input.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
26 #include "input/mouse.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
27 #include "mp_msg.h"
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
28 #include "video_out.h"
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
29 #include "aspect.h"
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
30 #include "w32_common.h"
22823
98eaf29b5dee Code cleanup: don't include a .c file in mplayer.c and fix a few
rathann
parents: 22423
diff changeset
31 #include "mp_fifo.h"
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
32
18081
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
33 #ifndef MONITOR_DEFAULTTOPRIMARY
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
34 #define MONITOR_DEFAULTTOPRIMARY 1
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
35 #endif
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
36
28920
49b76e202f98 "MPlayer - The Movie Player" should be used as the player name.
diego
parents: 28678
diff changeset
37 static const char classname[] = "MPlayer - The Movie Player";
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
38 int vo_vm = 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
39
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
40 // last non-fullscreen extends
25946
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
41 static int prev_width;
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
42 static int prev_height;
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
43 static int prev_x;
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
44 static int prev_y;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
45
25946
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
46 static uint32_t o_dwidth;
04f280a9f4f4 Make some variables static.
reimar
parents: 25945
diff changeset
47 static uint32_t o_dheight;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
48
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
49 static HINSTANCE hInstance;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
50 #define vo_window vo_w32_window
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
51 HWND vo_window = 0;
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
52 /** HDC used when rendering to a device instead of window */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
53 static HDC dev_hdc;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
54 static int event_flags;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
55 static int mon_cnt;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
56
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
57 static HMONITOR (WINAPI* myMonitorFromWindow)(HWND, DWORD);
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
58 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO);
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
59 static BOOL (WINAPI* myEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
60
31017
fca6cfc4d5ca rename 'struct keymap' -> 'struct mp_keymap'
siretart
parents: 30467
diff changeset
61 static const struct mp_keymap vk_map[] = {
28137
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
62 // special keys
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
63 {VK_ESCAPE, KEY_ESC}, {VK_BACK, KEY_BS}, {VK_TAB, KEY_TAB}, {VK_CONTROL, KEY_CTRL},
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
64
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
65 // cursor keys
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
66 {VK_LEFT, KEY_LEFT}, {VK_UP, KEY_UP}, {VK_RIGHT, KEY_RIGHT}, {VK_DOWN, KEY_DOWN},
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
67
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
68 // navigation block
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
69 {VK_INSERT, KEY_INSERT}, {VK_DELETE, KEY_DELETE}, {VK_HOME, KEY_HOME}, {VK_END, KEY_END},
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
70 {VK_PRIOR, KEY_PAGE_UP}, {VK_NEXT, KEY_PAGE_DOWN},
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
71
28179
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
72 // F-keys
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
73 {VK_F1, KEY_F+1}, {VK_F2, KEY_F+2}, {VK_F3, KEY_F+3}, {VK_F4, KEY_F+4},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
74 {VK_F5, KEY_F+5}, {VK_F6, KEY_F+6}, {VK_F7, KEY_F+7}, {VK_F8, KEY_F+8},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
75 {VK_F9, KEY_F+9}, {VK_F10, KEY_F+10}, {VK_F11, KEY_F+11}, {VK_F1, KEY_F+12},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
76 // numpad
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
77 {VK_NUMPAD0, KEY_KP0}, {VK_NUMPAD1, KEY_KP1}, {VK_NUMPAD2, KEY_KP2},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
78 {VK_NUMPAD3, KEY_KP3}, {VK_NUMPAD4, KEY_KP4}, {VK_NUMPAD5, KEY_KP5},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
79 {VK_NUMPAD6, KEY_KP6}, {VK_NUMPAD7, KEY_KP7}, {VK_NUMPAD8, KEY_KP8},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
80 {VK_NUMPAD9, KEY_KP9}, {VK_DECIMAL, KEY_KPDEC},
39fc19c00428 Support F- and numpad keys for w32_common based vos.
reimar
parents: 28137
diff changeset
81
28137
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
82 {0, 0}
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
83 };
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
84
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
85 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
86 RECT r;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
87 POINT p;
28137
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
88 int mpkey;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
89 switch (message) {
25944
8a1c062707ff Do not uselessly erase background, OpenGL will take care of drawing everything.
reimar
parents: 25942
diff changeset
90 case WM_ERASEBKGND: // no need to erase background seperately
8a1c062707ff Do not uselessly erase background, OpenGL will take care of drawing everything.
reimar
parents: 25942
diff changeset
91 return 1;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
92 case WM_PAINT:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
93 event_flags |= VO_EVENT_EXPOSE;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
94 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
95 case WM_MOVE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
96 p.x = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
97 p.y = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
98 ClientToScreen(vo_window, &p);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
99 vo_dx = p.x;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
100 vo_dy = p.y;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
101 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
102 case WM_SIZE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
103 event_flags |= VO_EVENT_RESIZE;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
104 GetClientRect(vo_window, &r);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
105 vo_dwidth = r.right;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
106 vo_dheight = r.bottom;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
107 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
108 case WM_WINDOWPOSCHANGING:
29517
a2617c70b295 Disable -keepaspect with -wid in w32_common code.
reimar
parents: 29263
diff changeset
109 if (vo_keepaspect && !vo_fs && WinID < 0) {
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
110 WINDOWPOS *wpos = lParam;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
111 int xborder, yborder;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
112 r.left = r.top = 0;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
113 r.right = wpos->cx;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
114 r.bottom = wpos->cy;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
115 AdjustWindowRect(&r, GetWindowLong(vo_window, GWL_STYLE), 0);
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
116 xborder = (r.right - r.left) - wpos->cx;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
117 yborder = (r.bottom - r.top) - wpos->cy;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
118 wpos->cx -= xborder; wpos->cy -= yborder;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
119 aspect_fit(&wpos->cx, &wpos->cy, wpos->cx, wpos->cy);
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
120 wpos->cx += xborder; wpos->cy += yborder;
25918
35698e5aa40c Implement keepaspect for Windows OpenGL vos.
reimar
parents: 25787
diff changeset
121 }
18927
278eaf3ed5d8 Convince windows to allow window sizes > screen size
reimar
parents: 18116
diff changeset
122 return 0;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
123 case WM_CLOSE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
124 mplayer_put_key(KEY_CLOSE_WIN);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
125 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
126 case WM_SYSCOMMAND:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
127 switch (wParam) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
128 case SC_SCREENSAVE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
129 case SC_MONITORPOWER:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
130 mp_msg(MSGT_VO, MSGL_V, "vo: win32: killing screensaver\n");
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
131 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
132 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
133 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
134 case WM_KEYDOWN:
28137
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
135 mpkey = lookup_keymap_table(vk_map, wParam);
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
136 if (mpkey)
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
137 mplayer_put_key(mpkey);
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
138 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
139 case WM_CHAR:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
140 mplayer_put_key(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
141 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
142 case WM_LBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
143 if (!vo_nomouse_input && (vo_fs || (wParam & MK_CONTROL))) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
144 mplayer_put_key(MOUSE_BTN0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
145 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
146 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
147 if (!vo_fs) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
148 ReleaseCapture();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
149 SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
150 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
151 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
152 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
153 case WM_MBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
154 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
155 mplayer_put_key(MOUSE_BTN1);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
156 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
157 case WM_RBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
158 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
159 mplayer_put_key(MOUSE_BTN2);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
160 break;
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
161 case WM_MOUSEMOVE:
31049
b40e41324173 Avoid duplicating mouse-movement command-generation code.
reimar
parents: 31047
diff changeset
162 vo_mouse_movement(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
163 break;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
164 case WM_MOUSEWHEEL:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
165 if (!vo_nomouse_input) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
166 int x = GET_WHEEL_DELTA_WPARAM(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
167 if (x > 0)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
168 mplayer_put_key(MOUSE_BTN3);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
169 else
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
170 mplayer_put_key(MOUSE_BTN4);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
171 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
172 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
173 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
174
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
175 return DefWindowProc(hWnd, message, wParam, lParam);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
176 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
177
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
178 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
179 * \brief Dispatch incoming window events and handle them.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
180 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
181 * This function should be placed inside libvo's function "check_events".
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
182 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
183 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
184 * vo_dwidth: new window client area width
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
185 * vo_dheight: new window client area height
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
186 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
187 * \return int with these flags possibly set, take care to handle in the right order
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
188 * if it matters in your driver:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
189 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
190 * VO_EVENT_RESIZE = The window was resized. If necessary reinit your
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
191 * driver render context accordingly.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
192 * VO_EVENT_EXPOSE = The window was exposed. Call e.g. flip_frame() to redraw
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
193 * the window if the movie is paused.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
194 */
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
195 int vo_w32_check_events(void) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
196 MSG msg;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
197 event_flags = 0;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
198 while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
199 TranslateMessage(&msg);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
200 DispatchMessage(&msg);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
201 }
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
202 if (WinID >= 0) {
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
203 BOOL res;
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
204 RECT r;
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
205 res = GetClientRect(vo_window, &r);
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
206 if (res && (r.right != vo_dwidth || r.bottom != vo_dheight)) {
28040
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
207 vo_dwidth = r.right; vo_dheight = r.bottom;
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
208 event_flags |= VO_EVENT_RESIZE;
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
209 }
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
210 res = GetClientRect(WinID, &r);
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
211 if (res && (r.right != vo_dwidth || r.bottom != vo_dheight))
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
212 MoveWindow(vo_window, 0, 0, r.right, r.bottom, FALSE);
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
213 if (!IsWindow(WinID))
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
214 // Window has probably been closed, e.g. due to program crash
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
215 mplayer_put_key(KEY_CLOSE_WIN);
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
216 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
217
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
218 return event_flags;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
219 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
220
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
221 static BOOL CALLBACK mon_enum(HMONITOR hmon, HDC hdc, LPRECT r, LPARAM p) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
222 // this defaults to the last screen if specified number does not exist
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
223 xinerama_x = r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
224 xinerama_y = r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
225 vo_screenwidth = r->right - r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
226 vo_screenheight = r->bottom - r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
227 if (mon_cnt == xinerama_screen)
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
228 return FALSE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
229 mon_cnt++;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
230 return TRUE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
231 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
232
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
233 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
234 * \brief Update screen information.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
235 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
236 * This function should be called in libvo's "control" callback
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
237 * with parameter VOCTRL_UPDATE_SCREENINFO.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
238 * Note that this also enables the new API where geometry and aspect
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
239 * calculations are done in video_out.c:config_video_out
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
240 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
241 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
242 * xinerama_x
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
243 * xinerama_y
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
244 * vo_screenwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
245 * vo_screenheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
246 */
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
247 void w32_update_xinerama_info(void) {
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
248 xinerama_x = xinerama_y = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
249 if (xinerama_screen < -1) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
250 int tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
251 xinerama_x = GetSystemMetrics(SM_XVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
252 xinerama_y = GetSystemMetrics(SM_YVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
253 tmp = GetSystemMetrics(SM_CXVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
254 if (tmp) vo_screenwidth = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
255 tmp = GetSystemMetrics(SM_CYVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
256 if (tmp) vo_screenheight = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
257 } else if (xinerama_screen == -1 && myMonitorFromWindow && myGetMonitorInfo) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
258 MONITORINFO mi;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
259 HMONITOR m = myMonitorFromWindow(vo_window, MONITOR_DEFAULTTOPRIMARY);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
260 mi.cbSize = sizeof(mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
261 myGetMonitorInfo(m, &mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
262 xinerama_x = mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
263 xinerama_y = mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
264 vo_screenwidth = mi.rcMonitor.right - mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
265 vo_screenheight = mi.rcMonitor.bottom - mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
266 } else if (xinerama_screen > 0 && myEnumDisplayMonitors) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
267 mon_cnt = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
268 myEnumDisplayMonitors(NULL, NULL, mon_enum, 0);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
269 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
270 aspect_save_screenres(vo_screenwidth, vo_screenheight);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
271 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
272
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
273 static void updateScreenProperties(void) {
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
274 DEVMODE dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
275 dm.dmSize = sizeof dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
276 dm.dmDriverExtra = 0;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
277 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
278 if (!EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &dm)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
279 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to enumerate display settings!\n");
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
280 return;
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
281 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
282
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
283 vo_screenwidth = dm.dmPelsWidth;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
284 vo_screenheight = dm.dmPelsHeight;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
285 vo_depthonscreen = dm.dmBitsPerPel;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
286 w32_update_xinerama_info();
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
287 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
288
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
289 static void changeMode(void) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
290 DEVMODE dm;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
291 dm.dmSize = sizeof dm;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
292 dm.dmDriverExtra = 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
293
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
294 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
295 dm.dmBitsPerPel = vo_depthonscreen;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
296 dm.dmPelsWidth = vo_screenwidth;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
297 dm.dmPelsHeight = vo_screenheight;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
298
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
299 if (vo_vm) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
300 int bestMode = -1;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
301 int bestScore = INT_MAX;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
302 int i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
303 for (i = 0; EnumDisplaySettings(0, i, &dm); ++i) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
304 int score = (dm.dmPelsWidth - o_dwidth) * (dm.dmPelsHeight - o_dheight);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
305 if (dm.dmBitsPerPel != vo_depthonscreen) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
306 if (dm.dmPelsWidth < o_dwidth) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
307 if (dm.dmPelsHeight < o_dheight) continue;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
308
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
309 if (score < bestScore) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
310 bestScore = score;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
311 bestMode = i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
312 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
313 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
314
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
315 if (bestMode != -1)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
316 EnumDisplaySettings(0, bestMode, &dm);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
317
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
318 ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
319 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
320 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
321
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
322 static void resetMode(void) {
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
323 if (vo_vm)
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
324 ChangeDisplaySettings(0, 0);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
325 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
326
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
327 static int createRenderingContext(void) {
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
328 HWND layer = HWND_NOTOPMOST;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
329 RECT r;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
330 int style = (vo_border && !vo_fs) ?
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
331 (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
332
32525
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
333 if (WinID >= 0)
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
334 return 1;
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
335
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
336 if (vo_fs || vo_ontop) layer = HWND_TOPMOST;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
337 if (vo_fs) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
338 changeMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
339 while (ShowCursor(0) >= 0) /**/ ;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
340 } else {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
341 resetMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
342 while (ShowCursor(1) < 0) /**/ ;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
343 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
344 updateScreenProperties();
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
345 ShowWindow(vo_window, SW_HIDE);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
346 SetWindowLong(vo_window, GWL_STYLE, style);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
347 if (vo_fs) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
348 prev_width = vo_dwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
349 prev_height = vo_dheight;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
350 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
351 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
352 vo_dwidth = vo_screenwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
353 vo_dheight = vo_screenheight;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
354 vo_dx = xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
355 vo_dy = xinerama_y;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
356 } else {
23587
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
357 // make sure there are no "stale" resize events
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
358 // that would set vo_d* to wrong values
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
359 vo_w32_check_events();
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
360 vo_dwidth = prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
361 vo_dheight = prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
362 vo_dx = prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
363 vo_dy = prev_y;
20657
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
364 // HACK around what probably is a windows focus bug:
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
365 // when pressing 'f' on the console, then 'f' again to
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
366 // return to windowed mode, any input into the video
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
367 // window is lost forever.
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
368 SetFocus(vo_window);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
369 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
370 r.left = vo_dx;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
371 r.right = r.left + vo_dwidth;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
372 r.top = vo_dy;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
373 r.bottom = r.top + vo_dheight;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
374 AdjustWindowRect(&r, style, 0);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
375 SetWindowPos(vo_window, layer, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_SHOWWINDOW);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
376 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
377 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
378
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
379 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
380 * \brief Configure and show window on the screen.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
381 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
382 * This function should be called in libvo's "config" callback.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
383 * It configures a window and shows it on the screen.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
384 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
385 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
386 * vo_fs
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
387 * vo_vm
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
388 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
389 * \return 1 - Success, 0 - Failure
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
390 */
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
391 int vo_w32_config(uint32_t width, uint32_t height, uint32_t flags) {
32532
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
392 PIXELFORMATDESCRIPTOR pfd;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
393 int pf;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
394 HDC vo_hdc = vo_w32_get_dc(vo_window);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
395
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
396 memset(&pfd, 0, sizeof pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
397 pfd.nSize = sizeof pfd;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
398 pfd.nVersion = 1;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
399 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
32533
c41773445d3b gl/win32: select a stereo pixel format for window when
reimar
parents: 32532
diff changeset
400 if (flags & VOFLAG_STEREO)
c41773445d3b gl/win32: select a stereo pixel format for window when
reimar
parents: 32532
diff changeset
401 pfd.dwFlags |= PFD_STEREO;
32532
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
402 pfd.iPixelType = PFD_TYPE_RGBA;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
403 pfd.cColorBits = 24;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
404 pfd.iLayerType = PFD_MAIN_PLANE;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
405 pf = ChoosePixelFormat(vo_hdc, &pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
406 if (!pf) {
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
407 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n");
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
408 vo_w32_release_dc(vo_window, vo_hdc);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
409 return 0;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
410 }
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
411
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
412 SetPixelFormat(vo_hdc, pf, &pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
413 vo_w32_release_dc(vo_window, vo_hdc);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
414
30467
9b7b4eeea093 Add support for VOFLAG_HIDDEN to the w32 backend.
reimar
parents: 30466
diff changeset
415 // we already have a fully initialized window, so nothing needs to be done
9b7b4eeea093 Add support for VOFLAG_HIDDEN to the w32 backend.
reimar
parents: 30466
diff changeset
416 if (flags & VOFLAG_HIDDEN)
31126
2fef741f9ecc Fix return value (it was missing completely).
reimar
parents: 31125
diff changeset
417 return 1;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
418 // store original size for videomode switching
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
419 o_dwidth = width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
420 o_dheight = height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
421
28038
174c85faada7 Do not override the vo_dwidth/vo_dheight values in vo_w32_config
reimar
parents: 27941
diff changeset
422 if (WinID < 0) {
28039
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
423 // the desired size is ignored in wid mode, it always matches the window size.
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
424 prev_width = vo_dwidth = width;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
425 prev_height = vo_dheight = height;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
426 prev_x = vo_dx;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
427 prev_y = vo_dy;
28038
174c85faada7 Do not override the vo_dwidth/vo_dheight values in vo_w32_config
reimar
parents: 27941
diff changeset
428 }
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
429
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
430 vo_fs = flags & VOFLAG_FULLSCREEN;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
431 vo_vm = flags & VOFLAG_MODESWITCHING;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
432 return createRenderingContext();
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
433 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
434
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
435 /**
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
436 * \brief return the name of the selected device if it is indepedant
31127
aab85e35de52 Do not return pointer to on-stack memory.
reimar
parents: 31126
diff changeset
437 * \return pointer to string, must be freed.
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
438 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
439 static char *get_display_name(void) {
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
440 DISPLAY_DEVICE disp;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
441 disp.cb = sizeof(disp);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
442 EnumDisplayDevices(NULL, vo_adapter_num, &disp, 0);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
443 if (disp.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
444 return NULL;
31127
aab85e35de52 Do not return pointer to on-stack memory.
reimar
parents: 31126
diff changeset
445 return strdup(disp.DeviceName);
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
446 }
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
447
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
448 /**
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
449 * \brief Initialize w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
450 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
451 * The first function that should be called from the w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
452 * It handles window creation on the screen with proper title and attributes.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
453 * It also initializes the framework's internal variables. The function should
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
454 * be called after your own preinit initialization and you shouldn't do any
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
455 * window management on your own.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
456 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
457 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
458 * vo_w32_window
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
459 * vo_depthonscreen
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
460 * vo_screenwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
461 * vo_screenheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
462 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
463 * \return 1 = Success, 0 = Failure
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
464 */
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
465 int vo_w32_init(void) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
466 HICON mplayerIcon = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
467 char exedir[MAX_PATH];
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
468 HINSTANCE user32;
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
469 char *dev;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
470
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
471 if (vo_window)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
472 return 1;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
473
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
474 hInstance = GetModuleHandle(0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
475
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
476 if (GetModuleFileName(0, exedir, MAX_PATH))
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
477 mplayerIcon = ExtractIcon(hInstance, exedir, 0);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
478 if (!mplayerIcon)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
479 mplayerIcon = LoadIcon(0, IDI_APPLICATION);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
480
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
481 {
25944
8a1c062707ff Do not uselessly erase background, OpenGL will take care of drawing everything.
reimar
parents: 25942
diff changeset
482 WNDCLASSEX wcex = { sizeof wcex, CS_OWNDC | CS_DBLCLKS, WndProc, 0, 0, hInstance, mplayerIcon, LoadCursor(0, IDC_ARROW), NULL, 0, classname, mplayerIcon };
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
483
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
484 if (!RegisterClassEx(&wcex)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
485 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to register window class!\n");
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
486 return 0;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
487 }
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
488 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
489
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
490 if (WinID >= 0)
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
491 {
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
492 RECT r;
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
493 GetClientRect(WinID, &r);
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
494 vo_dwidth = r.right; vo_dheight = r.bottom;
25934
f0e227951c06 Make sure the -wid window does not get notified when we destroy our attached child window.
reimar
parents: 25933
diff changeset
495 vo_window = CreateWindowEx(WS_EX_NOPARENTNOTIFY, classname, classname,
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
496 WS_CHILD | WS_VISIBLE,
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
497 0, 0, vo_dwidth, vo_dheight, WinID, 0, hInstance, 0);
27870
31a44a9c8687 Fix Windows OpenGL -wid:
reimar
parents: 25946
diff changeset
498 EnableWindow(vo_window, 0);
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
499 } else
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
500 vo_window = CreateWindowEx(0, classname, classname,
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
501 vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP,
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
502 CW_USEDEFAULT, 0, 100, 100, 0, 0, hInstance, 0);
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
503 if (!vo_window) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
504 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to create window!\n");
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
505 return 0;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
506 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
507
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
508 myMonitorFromWindow = NULL;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
509 myGetMonitorInfo = NULL;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
510 myEnumDisplayMonitors = NULL;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
511 user32 = GetModuleHandle("user32.dll");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
512 if (user32) {
25787
143989c7a3bf Avoid some pointer conversion warnings (the code is messy but not wrong)
reimar
parents: 25785
diff changeset
513 myMonitorFromWindow = (void *)GetProcAddress(user32, "MonitorFromWindow");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
514 myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
515 myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
516 }
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
517 dev_hdc = 0;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
518 dev = get_display_name();
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
519 if (dev) dev_hdc = CreateDC(dev, NULL, NULL, NULL);
31127
aab85e35de52 Do not return pointer to on-stack memory.
reimar
parents: 31126
diff changeset
520 free(dev);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
521 updateScreenProperties();
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
522
30466
cd3f6962fcfd Set the PixelFormat right after creating the window and set it only once.
reimar
parents: 29904
diff changeset
523 mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, vo_depthonscreen);
cd3f6962fcfd Set the PixelFormat right after creating the window and set it only once.
reimar
parents: 29904
diff changeset
524
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
525 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
526 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
527
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
528 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
529 * \brief Toogle fullscreen / windowed mode.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
530 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
531 * Should be called on VOCTRL_FULLSCREEN event. The window is
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
532 * always resized after this call, so the rendering context
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
533 * should be reinitialized with the new dimensions.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
534 * It is unspecified if vo_check_events will create a resize
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
535 * event in addition or not.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
536 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
537 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
538 * vo_dwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
539 * vo_dheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
540 * vo_fs
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
541 */
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
542
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
543 void vo_w32_fullscreen(void) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
544 vo_fs = !vo_fs;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
545
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
546 createRenderingContext();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
547 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
548
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
549 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
550 * \brief Toogle window border attribute.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
551 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
552 * Should be called on VOCTRL_BORDER event.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
553 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
554 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
555 * vo_border
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
556 */
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
557 void vo_w32_border(void) {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
558 vo_border = !vo_border;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
559 createRenderingContext();
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
560 }
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
561
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
562 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
563 * \brief Toogle window ontop attribute.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
564 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
565 * Should be called on VOCTRL_ONTOP event.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
566 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
567 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
568 * vo_ontop
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
569 */
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
570 void vo_w32_ontop( void )
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
571 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
572 vo_ontop = !vo_ontop;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
573 if (!vo_fs) {
25719
a6cc5f6799cb Fix the bug where the window would become smaller each time vo_ontop is toggled.
reimar
parents: 24315
diff changeset
574 createRenderingContext();
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
575 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
576 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
577
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
578 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
579 * \brief Uninitialize w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
580 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
581 * Should be called last in video driver's uninit function. First release
27941
ae133248dd9b cosmetics: typo fixes
diego
parents: 27920
diff changeset
582 * anything built on top of the created window e.g. rendering context inside
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
583 * and call vo_w32_uninit at the end.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
584 */
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
585 void vo_w32_uninit(void) {
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
586 mp_msg(MSGT_VO, MSGL_V, "vo: win32: uninit\n");
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
587 resetMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
588 ShowCursor(1);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
589 vo_depthonscreen = 0;
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
590 if (dev_hdc) DeleteDC(dev_hdc);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
591 dev_hdc = 0;
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
592 DestroyWindow(vo_window);
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
593 vo_window = 0;
11479
5d76d070b44b change vo_w32_fullscreen to behave like vo_x11_fullscreen patch by Reimar Doeffinger <someone-guy at gmx.de>
faust3
parents: 10880
diff changeset
594 UnregisterClass(classname, 0);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
595 }
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
596
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
597 /**
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
598 * \brief get a device context to draw in
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
599 *
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
600 * \param wnd window the DC should belong to if it makes sense
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
601 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
602 HDC vo_w32_get_dc(HWND wnd) {
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
603 if (dev_hdc) return dev_hdc;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
604 return GetDC(wnd);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
605 }
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
606
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
607 /**
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
608 * \brief release a device context
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
609 *
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
610 * \param wnd window the DC probably belongs to
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
611 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
612 void vo_w32_release_dc(HWND wnd, HDC dc) {
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
613 if (dev_hdc) return;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
614 ReleaseDC(wnd, dc);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
615 }