Mercurial > mplayer.hg
annotate libvo/w32_common.c @ 35418:cedb0ba2b5c6
Move the code to set guiInfo's Track, Chapter and Angle start values.
Set them before checking whether there is any media opened, because
with no media opened we clear the counters.
author | ib |
---|---|
date | Thu, 29 Nov 2012 14:11:03 +0000 |
parents | 3f409c370881 |
children |
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 | 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 | 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 | 41 static int prev_width; |
42 static int prev_height; | |
43 static int prev_x; | |
44 static int prev_y; | |
18079
f57317460375
fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents:
17126
diff
changeset
|
45 |
25946 | 46 static uint32_t o_dwidth; |
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 | 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 | 54 static int event_flags; |
18116 | 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 | 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 | 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 | 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 | 110 if (vo_keepaspect && !vo_fs && WinID < 0) { |
32524 | 111 WINDOWPOS *wpos = lParam; |
112 int xborder, yborder; | |
113 r.left = r.top = 0; | |
114 r.right = wpos->cx; | |
115 r.bottom = wpos->cy; | |
116 AdjustWindowRect(&r, GetWindowLong(vo_window, GWL_STYLE), 0); | |
117 xborder = (r.right - r.left) - wpos->cx; | |
118 yborder = (r.bottom - r.top) - wpos->cy; | |
119 wpos->cx -= xborder; wpos->cy -= yborder; | |
120 aspect_fit(&wpos->cx, &wpos->cy, wpos->cx, wpos->cy); | |
121 wpos->cx += xborder; wpos->cy += yborder; | |
25918 | 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 | 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 | 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 | 179 /** |
180 * \brief Dispatch incoming window events and handle them. | |
181 * | |
182 * This function should be placed inside libvo's function "check_events". | |
183 * | |
184 * Global libvo variables changed: | |
185 * vo_dwidth: new window client area width | |
186 * vo_dheight: new window client area height | |
187 * | |
188 * \return int with these flags possibly set, take care to handle in the right order | |
189 * if it matters in your driver: | |
190 * | |
191 * VO_EVENT_RESIZE = The window was resized. If necessary reinit your | |
192 * driver render context accordingly. | |
193 * VO_EVENT_EXPOSE = The window was exposed. Call e.g. flip_frame() to redraw | |
194 * the window if the movie is paused. | |
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 | 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 | 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 | 209 vo_dwidth = r.right; vo_dheight = r.bottom; |
210 event_flags |= VO_EVENT_RESIZE; | |
211 } | |
33568 | 212 p.x = 0; p.y = 0; |
213 ClientToScreen(vo_window, &p); | |
214 if (p.x != vo_dx || p.y != vo_dy) { | |
215 vo_dx = p.x; vo_dy = p.y; | |
216 event_flags |= VO_EVENT_MOVE; | |
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 | 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 | 229 static BOOL CALLBACK mon_enum(HMONITOR hmon, HDC hdc, LPRECT r, LPARAM p) { |
230 // this defaults to the last screen if specified number does not exist | |
231 xinerama_x = r->left; | |
232 xinerama_y = r->top; | |
233 vo_screenwidth = r->right - r->left; | |
234 vo_screenheight = r->bottom - r->top; | |
235 if (mon_cnt == xinerama_screen) | |
236 return FALSE; | |
237 mon_cnt++; | |
238 return TRUE; | |
239 } | |
240 | |
27920 | 241 /** |
242 * \brief Update screen information. | |
243 * | |
244 * This function should be called in libvo's "control" callback | |
245 * with parameter VOCTRL_UPDATE_SCREENINFO. | |
246 * Note that this also enables the new API where geometry and aspect | |
247 * calculations are done in video_out.c:config_video_out | |
248 * | |
249 * Global libvo variables changed: | |
250 * xinerama_x | |
251 * xinerama_y | |
252 * vo_screenwidth | |
253 * vo_screenheight | |
254 */ | |
21631 | 255 void w32_update_xinerama_info(void) { |
18116 | 256 xinerama_x = xinerama_y = 0; |
257 if (xinerama_screen < -1) { | |
258 int tmp; | |
259 xinerama_x = GetSystemMetrics(SM_XVIRTUALSCREEN); | |
260 xinerama_y = GetSystemMetrics(SM_YVIRTUALSCREEN); | |
261 tmp = GetSystemMetrics(SM_CXVIRTUALSCREEN); | |
262 if (tmp) vo_screenwidth = tmp; | |
263 tmp = GetSystemMetrics(SM_CYVIRTUALSCREEN); | |
264 if (tmp) vo_screenheight = tmp; | |
265 } else if (xinerama_screen == -1 && myMonitorFromWindow && myGetMonitorInfo) { | |
266 MONITORINFO mi; | |
267 HMONITOR m = myMonitorFromWindow(vo_window, MONITOR_DEFAULTTOPRIMARY); | |
268 mi.cbSize = sizeof(mi); | |
269 myGetMonitorInfo(m, &mi); | |
270 xinerama_x = mi.rcMonitor.left; | |
271 xinerama_y = mi.rcMonitor.top; | |
272 vo_screenwidth = mi.rcMonitor.right - mi.rcMonitor.left; | |
273 vo_screenheight = mi.rcMonitor.bottom - mi.rcMonitor.top; | |
274 } else if (xinerama_screen > 0 && myEnumDisplayMonitors) { | |
275 mon_cnt = 0; | |
276 myEnumDisplayMonitors(NULL, NULL, mon_enum, 0); | |
277 } | |
278 aspect_save_screenres(vo_screenwidth, vo_screenheight); | |
279 } | |
280 | |
25785
bda4125e24bf
Fix some function types from unspecified to empty argument list
reimar
parents:
25719
diff
changeset
|
281 static void updateScreenProperties(void) { |
14747 | 282 DEVMODE dm; |
283 dm.dmSize = sizeof dm; | |
284 dm.dmDriverExtra = 0; | |
285 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; | |
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 | 289 } |
290 | |
291 vo_screenwidth = dm.dmPelsWidth; | |
292 vo_screenheight = dm.dmPelsHeight; | |
293 vo_depthonscreen = dm.dmBitsPerPel; | |
21631 | 294 w32_update_xinerama_info(); |
14747 | 295 } |
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 | 325 |
32524 | 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 | 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 | 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 | 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 | 362 vo_dx = xinerama_x; |
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 | 372 // HACK around what probably is a windows focus bug: |
373 // when pressing 'f' on the console, then 'f' again to | |
374 // return to windowed mode, any input into the video | |
375 // window is lost forever. | |
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 | 387 /** |
388 * \brief Configure and show window on the screen. | |
389 * | |
390 * This function should be called in libvo's "config" callback. | |
391 * It configures a window and shows it on the screen. | |
392 * | |
393 * Global libvo variables changed: | |
394 * vo_fs | |
395 * vo_vm | |
396 * | |
397 * \return 1 - Success, 0 - Failure | |
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 | 400 PIXELFORMATDESCRIPTOR pfd; |
401 int pf; | |
402 HDC vo_hdc = vo_w32_get_dc(vo_window); | |
403 | |
404 memset(&pfd, 0, sizeof pfd); | |
405 pfd.nSize = sizeof pfd; | |
406 pfd.nVersion = 1; | |
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 | 410 pfd.iPixelType = PFD_TYPE_RGBA; |
411 pfd.cColorBits = 24; | |
412 pfd.iLayerType = PFD_MAIN_PLANE; | |
413 pf = ChoosePixelFormat(vo_hdc, &pfd); | |
414 if (!pf) { | |
415 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n"); | |
416 vo_w32_release_dc(vo_window, vo_hdc); | |
417 return 0; | |
418 } | |
419 | |
420 SetPixelFormat(vo_hdc, pf, &pfd); | |
421 vo_w32_release_dc(vo_window, vo_hdc); | |
422 | |
30467 | 423 // we already have a fully initialized window, so nothing needs to be done |
424 if (flags & VOFLAG_HIDDEN) | |
31126 | 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 | 431 // the desired size is ignored in wid mode, it always matches the window size. |
432 prev_width = vo_dwidth = width; | |
433 prev_height = vo_dheight = height; | |
434 prev_x = vo_dx; | |
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 | 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 | 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 | 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 | 459 * \brief Initialize w32_common framework. |
460 * | |
461 * The first function that should be called from the w32_common framework. | |
462 * It handles window creation on the screen with proper title and attributes. | |
463 * It also initializes the framework's internal variables. The function should | |
464 * be called after your own preinit initialization and you shouldn't do any | |
465 * window management on your own. | |
466 * | |
467 * Global libvo variables changed: | |
468 * vo_w32_window | |
469 * vo_depthonscreen | |
470 * vo_screenwidth | |
471 * vo_screenheight | |
472 * | |
473 * \return 1 = Success, 0 = Failure | |
474 */ | |
21631 | 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 | 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 | 510 vo_window = CreateWindowEx(0, classname, classname, |
511 vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP, | |
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 | 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 | 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 | 530 free(dev); |
14747 | 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 | 538 /** |
539 * \brief Toogle fullscreen / windowed mode. | |
540 * | |
541 * Should be called on VOCTRL_FULLSCREEN event. The window is | |
542 * always resized after this call, so the rendering context | |
543 * should be reinitialized with the new dimensions. | |
544 * It is unspecified if vo_check_events will create a resize | |
545 * event in addition or not. | |
546 * | |
547 * Global libvo variables changed: | |
548 * vo_dwidth | |
549 * vo_dheight | |
550 * vo_fs | |
551 */ | |
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 | 559 /** |
560 * \brief Toogle window border attribute. | |
561 * | |
562 * Should be called on VOCTRL_BORDER event. | |
563 * | |
564 * Global libvo variables changed: | |
565 * vo_border | |
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 | 572 /** |
573 * \brief Toogle window ontop attribute. | |
574 * | |
575 * Should be called on VOCTRL_ONTOP event. | |
576 * | |
577 * Global libvo variables changed: | |
578 * vo_ontop | |
579 */ | |
11542 | 580 void vo_w32_ontop( void ) |
581 { | |
582 vo_ontop = !vo_ontop; | |
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 | 585 } |
586 } | |
587 | |
27920 | 588 /** |
589 * \brief Uninitialize w32_common framework. | |
590 * | |
591 * Should be called last in video driver's uninit function. First release | |
27941 | 592 * anything built on top of the created window e.g. rendering context inside |
27920 | 593 * and call vo_w32_uninit at the end. |
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 } |