annotate libvo/w32_common.c @ 34697:ac6b38cd0d45

Rename sub window video window. It was a bad idea to name the video window "sub window" at the time the GUI was written. The term "sub window" does make sense from the programmer's point of view, but it doesn't make any sense at all from the user's point of view, because the sub window simply is the window where the video will be displayed. Moreover, since the term "sub" is generally short for "subtitles", the renaming makes the code much easier to understand.
author ib
date Sat, 03 Mar 2012 16:45:15 +0000
parents 3f409c370881
children
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:
33562
56ab5d4f13e2 w32_common: also generate VO_EVENT_MOVE.
reimar
parents: 32533
diff changeset
96 event_flags |= VO_EVENT_MOVE;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
97 p.x = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
98 p.y = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
99 ClientToScreen(vo_window, &p);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
100 vo_dx = p.x;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
101 vo_dy = p.y;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
102 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
103 case WM_SIZE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
104 event_flags |= VO_EVENT_RESIZE;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
105 GetClientRect(vo_window, &r);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
106 vo_dwidth = r.right;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
107 vo_dheight = r.bottom;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
108 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
109 case WM_WINDOWPOSCHANGING:
29517
a2617c70b295 Disable -keepaspect with -wid in w32_common code.
reimar
parents: 29263
diff changeset
110 if (vo_keepaspect && !vo_fs && WinID < 0) {
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
111 WINDOWPOS *wpos = lParam;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
112 int xborder, yborder;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
113 r.left = r.top = 0;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
114 r.right = wpos->cx;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
115 r.bottom = wpos->cy;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
116 AdjustWindowRect(&r, GetWindowLong(vo_window, GWL_STYLE), 0);
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
117 xborder = (r.right - r.left) - wpos->cx;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
118 yborder = (r.bottom - r.top) - wpos->cy;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
119 wpos->cx -= xborder; wpos->cy -= yborder;
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
120 aspect_fit(&wpos->cx, &wpos->cy, wpos->cx, wpos->cy);
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
121 wpos->cx += xborder; wpos->cy += yborder;
25918
35698e5aa40c Implement keepaspect for Windows OpenGL vos.
reimar
parents: 25787
diff changeset
122 }
18927
278eaf3ed5d8 Convince windows to allow window sizes > screen size
reimar
parents: 18116
diff changeset
123 return 0;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
124 case WM_CLOSE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
125 mplayer_put_key(KEY_CLOSE_WIN);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
126 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
127 case WM_SYSCOMMAND:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
128 switch (wParam) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
129 case SC_SCREENSAVE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
130 case SC_MONITORPOWER:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
131 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
132 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
133 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
134 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
135 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
136 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
137 if (mpkey)
28bf0d126da2 Add and use a special lookup function to do table-based translation to MPlayer keycodes.
reimar
parents: 28040
diff changeset
138 mplayer_put_key(mpkey);
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
139 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
140 case WM_CHAR:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
141 mplayer_put_key(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
142 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
143 case WM_LBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
144 if (!vo_nomouse_input && (vo_fs || (wParam & MK_CONTROL))) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
145 mplayer_put_key(MOUSE_BTN0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
146 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
147 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
148 if (!vo_fs) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
149 ReleaseCapture();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
150 SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
151 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
152 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
153 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
154 case WM_MBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
155 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
156 mplayer_put_key(MOUSE_BTN1);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
157 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
158 case WM_RBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
159 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
160 mplayer_put_key(MOUSE_BTN2);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
161 break;
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
162 case WM_MOUSEMOVE:
31049
b40e41324173 Avoid duplicating mouse-movement command-generation code.
reimar
parents: 31047
diff changeset
163 vo_mouse_movement(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
164 break;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
165 case WM_MOUSEWHEEL:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
166 if (!vo_nomouse_input) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
167 int x = GET_WHEEL_DELTA_WPARAM(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
168 if (x > 0)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
169 mplayer_put_key(MOUSE_BTN3);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
170 else
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
171 mplayer_put_key(MOUSE_BTN4);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
172 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
173 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
174 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
175
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
176 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
177 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
178
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
179 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
180 * \brief Dispatch incoming window events and handle them.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
181 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
182 * This function should be placed inside libvo's function "check_events".
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
183 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
184 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
185 * vo_dwidth: new window client area width
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
186 * vo_dheight: new window client area height
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
187 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
188 * \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
189 * if it matters in your driver:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
190 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
191 * VO_EVENT_RESIZE = The window was resized. If necessary reinit your
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
192 * driver render context accordingly.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
193 * 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
194 * the window if the movie is paused.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
195 */
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
196 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
197 MSG msg;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
198 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
199 while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
200 TranslateMessage(&msg);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
201 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
202 }
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
203 if (WinID >= 0) {
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
204 BOOL res;
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
205 RECT r;
33568
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
206 POINT p;
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
207 res = GetClientRect(vo_window, &r);
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
208 if (res && (r.right != vo_dwidth || r.bottom != vo_dheight)) {
28040
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
209 vo_dwidth = r.right; vo_dheight = r.bottom;
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
210 event_flags |= VO_EVENT_RESIZE;
9081df26c512 More robust w32 -wid size handling
reimar
parents: 28039
diff changeset
211 }
33568
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
212 p.x = 0; p.y = 0;
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
213 ClientToScreen(vo_window, &p);
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
214 if (p.x != vo_dx || p.y != vo_dy) {
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
215 vo_dx = p.x; vo_dy = p.y;
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
216 event_flags |= VO_EVENT_MOVE;
276ab400eb1c Generate VO_EVENT_MOVE also with -wid.
reimar
parents: 33562
diff changeset
217 }
31125
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
218 res = GetClientRect(WinID, &r);
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
219 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
220 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
221 if (!IsWindow(WinID))
ff79dd5474f8 Handle -wid Window being closed for direct3d and gl vos on Windows.
reimar
parents: 31049
diff changeset
222 // 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
223 mplayer_put_key(KEY_CLOSE_WIN);
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
224 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
225
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
226 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
227 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
228
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
229 static BOOL CALLBACK mon_enum(HMONITOR hmon, HDC hdc, LPRECT r, LPARAM p) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
230 // this defaults to the last screen if specified number does not exist
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
231 xinerama_x = r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
232 xinerama_y = r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
233 vo_screenwidth = r->right - r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
234 vo_screenheight = r->bottom - r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
235 if (mon_cnt == xinerama_screen)
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
236 return FALSE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
237 mon_cnt++;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
238 return TRUE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
239 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
240
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
241 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
242 * \brief Update screen information.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
243 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
244 * This function should be called in libvo's "control" callback
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
245 * with parameter VOCTRL_UPDATE_SCREENINFO.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
246 * Note that this also enables the new API where geometry and aspect
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
247 * calculations are done in video_out.c:config_video_out
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
248 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
249 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
250 * xinerama_x
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
251 * xinerama_y
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
252 * vo_screenwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
253 * vo_screenheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
254 */
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
255 void w32_update_xinerama_info(void) {
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
256 xinerama_x = xinerama_y = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
257 if (xinerama_screen < -1) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
258 int tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
259 xinerama_x = GetSystemMetrics(SM_XVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
260 xinerama_y = GetSystemMetrics(SM_YVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
261 tmp = GetSystemMetrics(SM_CXVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
262 if (tmp) vo_screenwidth = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
263 tmp = GetSystemMetrics(SM_CYVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
264 if (tmp) vo_screenheight = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
265 } else if (xinerama_screen == -1 && myMonitorFromWindow && myGetMonitorInfo) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
266 MONITORINFO mi;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
267 HMONITOR m = myMonitorFromWindow(vo_window, MONITOR_DEFAULTTOPRIMARY);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
268 mi.cbSize = sizeof(mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
269 myGetMonitorInfo(m, &mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
270 xinerama_x = mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
271 xinerama_y = mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
272 vo_screenwidth = mi.rcMonitor.right - mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
273 vo_screenheight = mi.rcMonitor.bottom - mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
274 } else if (xinerama_screen > 0 && myEnumDisplayMonitors) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
275 mon_cnt = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
276 myEnumDisplayMonitors(NULL, NULL, mon_enum, 0);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
277 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
278 aspect_save_screenres(vo_screenwidth, vo_screenheight);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
279 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
280
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
281 static void updateScreenProperties(void) {
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
282 DEVMODE dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
283 dm.dmSize = sizeof dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
284 dm.dmDriverExtra = 0;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
285 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
286 if (!EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &dm)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
287 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
288 return;
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
289 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
290
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
291 vo_screenwidth = dm.dmPelsWidth;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
292 vo_screenheight = dm.dmPelsHeight;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
293 vo_depthonscreen = dm.dmBitsPerPel;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
294 w32_update_xinerama_info();
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
295 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
296
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
297 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
298 DEVMODE dm;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
299 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
300 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
301
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
302 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
303 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
304 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
305 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
306
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
307 if (vo_vm) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
308 int bestMode = -1;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
309 int bestScore = INT_MAX;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
310 int i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
311 for (i = 0; EnumDisplaySettings(0, i, &dm); ++i) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
312 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
313 if (dm.dmBitsPerPel != vo_depthonscreen) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
314 if (dm.dmPelsWidth < o_dwidth) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
315 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
316
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
317 if (score < bestScore) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
318 bestScore = score;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
319 bestMode = i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
320 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
321 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
322
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
323 if (bestMode != -1)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
324 EnumDisplaySettings(0, bestMode, &dm);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
325
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
326 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
327 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
328 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
329
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
330 static void resetMode(void) {
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
331 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
332 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
333 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
334
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
335 static int createRenderingContext(void) {
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
336 HWND layer = HWND_NOTOPMOST;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
337 RECT r;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
338 int style = (vo_border && !vo_fs) ?
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
339 (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
340
32525
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
341 if (WinID >= 0)
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
342 return 1;
11b0a82d018c Simplify: Use early return instead of large if block.
reimar
parents: 32524
diff changeset
343
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
344 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
345 if (vo_fs) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
346 changeMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
347 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
348 } else {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
349 resetMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
350 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
351 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
352 updateScreenProperties();
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
353 ShowWindow(vo_window, SW_HIDE);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
354 SetWindowLong(vo_window, GWL_STYLE, style);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
355 if (vo_fs) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
356 prev_width = vo_dwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
357 prev_height = vo_dheight;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
358 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
359 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
360 vo_dwidth = vo_screenwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
361 vo_dheight = vo_screenheight;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
362 vo_dx = xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
363 vo_dy = xinerama_y;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
364 } else {
23587
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
365 // make sure there are no "stale" resize events
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
366 // that would set vo_d* to wrong values
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
367 vo_w32_check_events();
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
368 vo_dwidth = prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
369 vo_dheight = prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
370 vo_dx = prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
371 vo_dy = prev_y;
20657
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
372 // HACK around what probably is a windows focus bug:
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
373 // when pressing 'f' on the console, then 'f' again to
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
374 // return to windowed mode, any input into the video
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
375 // window is lost forever.
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
376 SetFocus(vo_window);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
377 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
378 r.left = vo_dx;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
379 r.right = r.left + vo_dwidth;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
380 r.top = vo_dy;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
381 r.bottom = r.top + vo_dheight;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
382 AdjustWindowRect(&r, style, 0);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
383 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
384 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
385 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
386
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
387 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
388 * \brief Configure and show window on the screen.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
389 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
390 * This function should be called in libvo's "config" callback.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
391 * It configures a window and shows it on the screen.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
392 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
393 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
394 * vo_fs
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
395 * vo_vm
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
396 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
397 * \return 1 - Success, 0 - Failure
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
398 */
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
399 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
400 PIXELFORMATDESCRIPTOR pfd;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
401 int pf;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
402 HDC vo_hdc = vo_w32_get_dc(vo_window);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
403
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
404 memset(&pfd, 0, sizeof pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
405 pfd.nSize = sizeof pfd;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
406 pfd.nVersion = 1;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
407 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
408 if (flags & VOFLAG_STEREO)
c41773445d3b gl/win32: select a stereo pixel format for window when
reimar
parents: 32532
diff changeset
409 pfd.dwFlags |= PFD_STEREO;
32532
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
410 pfd.iPixelType = PFD_TYPE_RGBA;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
411 pfd.cColorBits = 24;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
412 pfd.iLayerType = PFD_MAIN_PLANE;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
413 pf = ChoosePixelFormat(vo_hdc, &pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
414 if (!pf) {
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
415 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
416 vo_w32_release_dc(vo_window, vo_hdc);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
417 return 0;
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
418 }
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
419
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
420 SetPixelFormat(vo_hdc, pf, &pfd);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
421 vo_w32_release_dc(vo_window, vo_hdc);
d3e318fd8899 Move setting of pixel format from init to config.
reimar
parents: 32525
diff changeset
422
30467
9b7b4eeea093 Add support for VOFLAG_HIDDEN to the w32 backend.
reimar
parents: 30466
diff changeset
423 // 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
424 if (flags & VOFLAG_HIDDEN)
31126
2fef741f9ecc Fix return value (it was missing completely).
reimar
parents: 31125
diff changeset
425 return 1;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
426 // store original size for videomode switching
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
427 o_dwidth = width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
428 o_dheight = height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
429
28038
174c85faada7 Do not override the vo_dwidth/vo_dheight values in vo_w32_config
reimar
parents: 27941
diff changeset
430 if (WinID < 0) {
28039
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
431 // the desired size is ignored in wid mode, it always matches the window size.
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
432 prev_width = vo_dwidth = width;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
433 prev_height = vo_dheight = height;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
434 prev_x = vo_dx;
a95ac8f0336e Reindent after previous commit
reimar
parents: 28038
diff changeset
435 prev_y = vo_dy;
34293
3f409c370881 Make -title and -use-filename-title work on Windows.
reimar
parents: 33568
diff changeset
436 if (vo_wintitle)
3f409c370881 Make -title and -use-filename-title work on Windows.
reimar
parents: 33568
diff changeset
437 SetWindowText(vo_w32_window, vo_wintitle);
28038
174c85faada7 Do not override the vo_dwidth/vo_dheight values in vo_w32_config
reimar
parents: 27941
diff changeset
438 }
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
439
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
440 vo_fs = flags & VOFLAG_FULLSCREEN;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
441 vo_vm = flags & VOFLAG_MODESWITCHING;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
442 return createRenderingContext();
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
443 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
444
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
445 /**
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
446 * \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
447 * \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
448 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
449 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
450 DISPLAY_DEVICE disp;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
451 disp.cb = sizeof(disp);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
452 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
453 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
454 return NULL;
31127
aab85e35de52 Do not return pointer to on-stack memory.
reimar
parents: 31126
diff changeset
455 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
456 }
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
457
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
458 /**
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
459 * \brief Initialize w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
460 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
461 * The first function that should be called from the w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
462 * It handles window creation on the screen with proper title and attributes.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
463 * It also initializes the framework's internal variables. The function should
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
464 * 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
465 * window management on your own.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
466 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
467 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
468 * vo_w32_window
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
469 * vo_depthonscreen
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
470 * vo_screenwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
471 * vo_screenheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
472 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
473 * \return 1 = Success, 0 = Failure
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
474 */
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
475 int vo_w32_init(void) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
476 HICON mplayerIcon = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
477 char exedir[MAX_PATH];
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
478 HINSTANCE user32;
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
479 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
480
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
481 if (vo_window)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
482 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
483
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
484 hInstance = GetModuleHandle(0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28920
diff changeset
485
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
486 if (GetModuleFileName(0, exedir, MAX_PATH))
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
487 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
488 if (!mplayerIcon)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
489 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
490
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
491 {
25944
8a1c062707ff Do not uselessly erase background, OpenGL will take care of drawing everything.
reimar
parents: 25942
diff changeset
492 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
493
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
494 if (!RegisterClassEx(&wcex)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
495 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
496 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
497 }
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
498 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
499
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
500 if (WinID >= 0)
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
501 {
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
502 RECT r;
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
503 GetClientRect(WinID, &r);
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
504 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
505 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
506 WS_CHILD | WS_VISIBLE,
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
507 0, 0, vo_dwidth, vo_dheight, WinID, 0, hInstance, 0);
27870
31a44a9c8687 Fix Windows OpenGL -wid:
reimar
parents: 25946
diff changeset
508 EnableWindow(vo_window, 0);
25933
9b395b94d6a7 Hack: Create a child window for Windows OpenGL with -wid, since (esp. nVidia)
reimar
parents: 25918
diff changeset
509 } else
32524
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
510 vo_window = CreateWindowEx(0, classname, classname,
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
511 vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP,
4bfaa9fc1c16 Some indentation fixes.
reimar
parents: 31127
diff changeset
512 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
513 if (!vo_window) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
514 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
515 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
516 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
517
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
518 myMonitorFromWindow = NULL;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
519 myGetMonitorInfo = NULL;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
520 myEnumDisplayMonitors = NULL;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
521 user32 = GetModuleHandle("user32.dll");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
522 if (user32) {
25787
143989c7a3bf Avoid some pointer conversion warnings (the code is messy but not wrong)
reimar
parents: 25785
diff changeset
523 myMonitorFromWindow = (void *)GetProcAddress(user32, "MonitorFromWindow");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
524 myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
525 myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
526 }
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
527 dev_hdc = 0;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
528 dev = get_display_name();
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
529 if (dev) dev_hdc = CreateDC(dev, NULL, NULL, NULL);
31127
aab85e35de52 Do not return pointer to on-stack memory.
reimar
parents: 31126
diff changeset
530 free(dev);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
531 updateScreenProperties();
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
532
30466
cd3f6962fcfd Set the PixelFormat right after creating the window and set it only once.
reimar
parents: 29904
diff changeset
533 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
534
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
535 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
536 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
537
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
538 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
539 * \brief Toogle fullscreen / windowed mode.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
540 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
541 * Should be called on VOCTRL_FULLSCREEN event. The window is
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
542 * always resized after this call, so the rendering context
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
543 * should be reinitialized with the new dimensions.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
544 * It is unspecified if vo_check_events will create a resize
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
545 * event in addition or not.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
546 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
547 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
548 * vo_dwidth
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
549 * vo_dheight
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
550 * vo_fs
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
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
553 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
554 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
555
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
556 createRenderingContext();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
557 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
558
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
559 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
560 * \brief Toogle window border attribute.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
561 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
562 * Should be called on VOCTRL_BORDER event.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
563 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
564 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
565 * vo_border
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
566 */
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
567 void vo_w32_border(void) {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
568 vo_border = !vo_border;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
569 createRenderingContext();
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
570 }
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
571
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
572 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
573 * \brief Toogle window ontop attribute.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
574 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
575 * Should be called on VOCTRL_ONTOP event.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
576 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
577 * Global libvo variables changed:
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
578 * vo_ontop
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
579 */
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
580 void vo_w32_ontop( void )
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
581 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
582 vo_ontop = !vo_ontop;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
583 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
584 createRenderingContext();
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
585 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
586 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
587
27920
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
588 /**
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
589 * \brief Uninitialize w32_common framework.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
590 *
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
591 * Should be called last in video driver's uninit function. First release
27941
ae133248dd9b cosmetics: typo fixes
diego
parents: 27920
diff changeset
592 * 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
593 * and call vo_w32_uninit at the end.
81571689eba3 Doxygen documentation for w32_common.c
reimar
parents: 27870
diff changeset
594 */
25785
bda4125e24bf Fix some function types from unspecified to empty argument list
reimar
parents: 25719
diff changeset
595 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
596 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
597 resetMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
598 ShowCursor(1);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
599 vo_depthonscreen = 0;
29904
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
600 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
601 dev_hdc = 0;
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
602 DestroyWindow(vo_window);
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
603 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
604 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
605 }
29904
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 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
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 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
611 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
612 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
613 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
614 return GetDC(wnd);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
615 }
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
616
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
617 /**
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
618 * \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
619 *
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
620 * \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
621 */
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
622 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
623 if (dev_hdc) return;
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
624 ReleaseDC(wnd, dc);
f529a2bb299d Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents: 29517
diff changeset
625 }