annotate libvo/w32_common.c @ 24953:aca7d0259d90

Fix the prevent system idle code. Original code also works, but not as expected. The update function was always called, but it should only be called every 30 seconds.
author ulion
date Tue, 06 Nov 2007 12:40:04 +0000
parents 12f2487fb845
children a6cc5f6799cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
1 #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
2 #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
3 #include <windows.h>
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
4 #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
5
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
6 #include "osdep/keycodes.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
7 #include "input/input.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
8 #include "input/mouse.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
9 #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
10 #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
11 #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
12 #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
13 #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
14
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
15 extern int enable_mouse_movements;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
16
18081
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
17 #ifndef MONITOR_DEFAULTTOPRIMARY
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
18 #define MONITOR_DEFAULTTOPRIMARY 1
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
19 #endif
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
20
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
21 static const char* classname = "MPlayer - Media player for Win32";
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
22 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
23
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
24 // last non-fullscreen extends
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
25 int prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
26 int prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
27 int prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
28 int prev_y;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
29
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
30 uint32_t o_dwidth;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
31 uint32_t o_dheight;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
32
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
33 static HINSTANCE hInstance;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
34 #define vo_window vo_w32_window
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
35 HWND vo_window = 0;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
36 static int event_flags;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
37 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
38
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
39 static HMONITOR (WINAPI* myMonitorFromWindow)(HWND, DWORD);
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
40 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO);
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
41 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
42
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
43 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
44 RECT r;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
45 POINT p;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
46 switch (message) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
47 case WM_PAINT:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
48 event_flags |= VO_EVENT_EXPOSE;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
49 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
50 case WM_MOVE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
51 p.x = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
52 p.y = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
53 ClientToScreen(vo_window, &p);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
54 vo_dx = p.x;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
55 vo_dy = p.y;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
56 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
57 case WM_SIZE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
58 event_flags |= VO_EVENT_RESIZE;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
59 GetClientRect(vo_window, &r);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
60 vo_dwidth = r.right;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
61 vo_dheight = r.bottom;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
62 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
63 case WM_WINDOWPOSCHANGING:
18927
278eaf3ed5d8 Convince windows to allow window sizes > screen size
reimar
parents: 18116
diff changeset
64 return 0;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
65 case WM_CLOSE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
66 mplayer_put_key(KEY_CLOSE_WIN);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
67 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
68 case WM_SYSCOMMAND:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
69 switch (wParam) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
70 case SC_SCREENSAVE:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
71 case SC_MONITORPOWER:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
72 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
73 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
74 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
75 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
76 case WM_KEYDOWN:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
77 switch (wParam) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
78 case VK_LEFT: mplayer_put_key(KEY_LEFT); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
79 case VK_UP: mplayer_put_key(KEY_UP); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
80 case VK_RIGHT: mplayer_put_key(KEY_RIGHT); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
81 case VK_DOWN: mplayer_put_key(KEY_DOWN); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
82 case VK_TAB: mplayer_put_key(KEY_TAB); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
83 case VK_CONTROL: mplayer_put_key(KEY_CTRL); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
84 case VK_BACK: mplayer_put_key(KEY_BS); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
85 case VK_DELETE: mplayer_put_key(KEY_DELETE); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
86 case VK_INSERT: mplayer_put_key(KEY_INSERT); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
87 case VK_HOME: mplayer_put_key(KEY_HOME); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
88 case VK_END: mplayer_put_key(KEY_END); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
89 case VK_PRIOR: mplayer_put_key(KEY_PAGE_UP); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
90 case VK_NEXT: mplayer_put_key(KEY_PAGE_DOWN); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
91 case VK_ESCAPE: mplayer_put_key(KEY_ESC); break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
92 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
93 break;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
94 case WM_CHAR:
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
95 mplayer_put_key(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
96 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
97 case WM_LBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
98 if (!vo_nomouse_input && (vo_fs || (wParam & MK_CONTROL))) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
99 mplayer_put_key(MOUSE_BTN0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
100 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
101 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
102 if (!vo_fs) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
103 ReleaseCapture();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
104 SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
105 return 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
106 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
107 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
108 case WM_MBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
109 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
110 mplayer_put_key(MOUSE_BTN1);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
111 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
112 case WM_RBUTTONDOWN:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
113 if (!vo_nomouse_input)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
114 mplayer_put_key(MOUSE_BTN2);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
115 break;
22423
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
116 case WM_MOUSEMOVE:
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
117 if (enable_mouse_movements) {
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
118 char cmd_str[40];
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
119 snprintf(cmd_str, sizeof(cmd_str), "set_mouse_pos %i %i",
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
120 GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
121 mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
122 }
8f95e2a3c797 Add support for tracking mouse movements.
reimar
parents: 22416
diff changeset
123 break;
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
124 case WM_MOUSEWHEEL:
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
125 if (!vo_nomouse_input) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
126 int x = GET_WHEEL_DELTA_WPARAM(wParam);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
127 if (x > 0)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
128 mplayer_put_key(MOUSE_BTN3);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
129 else
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
130 mplayer_put_key(MOUSE_BTN4);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
131 break;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
132 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
133 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
134
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
135 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
136 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
137
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
138 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
139 MSG msg;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
140 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
141 while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
142 TranslateMessage(&msg);
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
143 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
144 }
22415
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
145 if (WinID >= 0) {
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
146 RECT r;
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
147 GetClientRect(vo_window, &r);
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
148 if (r.right != vo_dwidth || r.bottom != vo_dheight)
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
149 event_flags |= VO_EVENT_RESIZE;
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
150 vo_dwidth = r.right;
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
151 vo_dheight = r.bottom;
c36b8d705d08 Generate resize events when size of -wid window changes.
reimar
parents: 21631
diff changeset
152 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
153
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
154 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
155 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
156
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
157 static BOOL CALLBACK mon_enum(HMONITOR hmon, HDC hdc, LPRECT r, LPARAM p) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
158 // this defaults to the last screen if specified number does not exist
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
159 xinerama_x = r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
160 xinerama_y = r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
161 vo_screenwidth = r->right - r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
162 vo_screenheight = r->bottom - r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
163 if (mon_cnt == xinerama_screen)
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
164 return FALSE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
165 mon_cnt++;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
166 return TRUE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
167 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
168
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
169 void w32_update_xinerama_info(void) {
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
170 xinerama_x = xinerama_y = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
171 if (xinerama_screen < -1) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
172 int tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
173 xinerama_x = GetSystemMetrics(SM_XVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
174 xinerama_y = GetSystemMetrics(SM_YVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
175 tmp = GetSystemMetrics(SM_CXVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
176 if (tmp) vo_screenwidth = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
177 tmp = GetSystemMetrics(SM_CYVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
178 if (tmp) vo_screenheight = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
179 } else if (xinerama_screen == -1 && myMonitorFromWindow && myGetMonitorInfo) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
180 MONITORINFO mi;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
181 HMONITOR m = myMonitorFromWindow(vo_window, MONITOR_DEFAULTTOPRIMARY);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
182 mi.cbSize = sizeof(mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
183 myGetMonitorInfo(m, &mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
184 xinerama_x = mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
185 xinerama_y = mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
186 vo_screenwidth = mi.rcMonitor.right - mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
187 vo_screenheight = mi.rcMonitor.bottom - mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
188 } else if (xinerama_screen > 0 && myEnumDisplayMonitors) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
189 mon_cnt = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
190 myEnumDisplayMonitors(NULL, NULL, mon_enum, 0);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
191 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
192 aspect_save_screenres(vo_screenwidth, vo_screenheight);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
193 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
194
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
195 static void updateScreenProperties() {
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
196 DEVMODE dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
197 dm.dmSize = sizeof dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
198 dm.dmDriverExtra = 0;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
199 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
200 if (!EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &dm)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
201 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
202 return;
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
203 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
204
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
205 vo_screenwidth = dm.dmPelsWidth;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
206 vo_screenheight = dm.dmPelsHeight;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
207 vo_depthonscreen = dm.dmBitsPerPel;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
208 w32_update_xinerama_info();
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
209 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
210
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
211 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
212 DEVMODE dm;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
213 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
214 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
215
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
216 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
217 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
218 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
219 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
220
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
221 if (vo_vm) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
222 int bestMode = -1;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
223 int bestScore = INT_MAX;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
224 int i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
225 for (i = 0; EnumDisplaySettings(0, i, &dm); ++i) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
226 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
227 if (dm.dmBitsPerPel != vo_depthonscreen) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
228 if (dm.dmPelsWidth < o_dwidth) continue;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
229 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
230
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
231 if (score < bestScore) {
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
232 bestScore = score;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
233 bestMode = i;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
234 }
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
235 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
236
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
237 if (bestMode != -1)
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
238 EnumDisplaySettings(0, bestMode, &dm);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
239
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
240 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
241 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
242 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
243
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
244 static void resetMode(void) {
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
245 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
246 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
247 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
248
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
249 static int createRenderingContext(void) {
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
250 HWND layer = HWND_NOTOPMOST;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
251 PIXELFORMATDESCRIPTOR pfd;
24314
20359547f3c3 Remove global vo_hdc, since it is recommended to release a DC as soon as possible.
reimar
parents: 23587
diff changeset
252 HDC vo_hdc = GetDC(vo_window);
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
253 RECT r;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
254 int pf;
18948
c2aee29c80b6 Do not fiddle (too much) with external (WinID) windows
reimar
parents: 18927
diff changeset
255 if (WinID < 0) {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
256 int style = (vo_border && !vo_fs) ?
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
257 (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
258
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
259 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
260 if (vo_fs) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
261 changeMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
262 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
263 } else {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
264 resetMode();
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
265 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
266 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
267 updateScreenProperties();
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
268 ShowWindow(vo_window, SW_HIDE);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
269 SetWindowLong(vo_window, GWL_STYLE, style);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
270 if (vo_fs) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
271 prev_width = vo_dwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
272 prev_height = vo_dheight;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
273 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
274 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
275 vo_dwidth = vo_screenwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
276 vo_dheight = vo_screenheight;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
277 vo_dx = xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
278 vo_dy = xinerama_y;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
279 } else {
23587
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
280 // make sure there are no "stale" resize events
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
281 // that would set vo_d* to wrong values
58bd3640c0c2 Hack around some fullscreen issues with gl under Windows
reimar
parents: 22823
diff changeset
282 vo_w32_check_events();
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
283 vo_dwidth = prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
284 vo_dheight = prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
285 vo_dx = prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
286 vo_dy = prev_y;
20657
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
287 // HACK around what probably is a windows focus bug:
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
288 // when pressing 'f' on the console, then 'f' again to
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
289 // return to windowed mode, any input into the video
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
290 // window is lost forever.
5fe83dd75490 Hack around Windows focus problem with -vo gl
reimar
parents: 20655
diff changeset
291 SetFocus(vo_window);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
292 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
293 r.left = vo_dx;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
294 r.right = r.left + vo_dwidth;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
295 r.top = vo_dy;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
296 r.bottom = r.top + vo_dheight;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
297 AdjustWindowRect(&r, style, 0);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
298 SetWindowPos(vo_window, layer, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_SHOWWINDOW);
18948
c2aee29c80b6 Do not fiddle (too much) with external (WinID) windows
reimar
parents: 18927
diff changeset
299 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
300
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
301 memset(&pfd, 0, sizeof pfd);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
302 pfd.nSize = sizeof pfd;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
303 pfd.nVersion = 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
304 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
305 pfd.iPixelType = PFD_TYPE_RGBA;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
306 pfd.cColorBits = 24;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
307 pfd.iLayerType = PFD_MAIN_PLANE;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
308 pf = ChoosePixelFormat(vo_hdc, &pfd);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
309 if (!pf) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
310 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n");
24315
12f2487fb845 Fix compilation after patch to remove global vo_hdc
reimar
parents: 24314
diff changeset
311 ReleaseDC(vo_window, vo_hdc);
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
312 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
313 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
314
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
315 SetPixelFormat(vo_hdc, pf, &pfd);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
316
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
317 mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, vo_depthonscreen);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
318
24315
12f2487fb845 Fix compilation after patch to remove global vo_hdc
reimar
parents: 24314
diff changeset
319 ReleaseDC(vo_window, vo_hdc);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
320 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
321 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
322
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
323 int vo_w32_config(uint32_t width, uint32_t height, uint32_t flags) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
324 // store original size for videomode switching
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
325 o_dwidth = width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
326 o_dheight = height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
327
18987
1f08622dd297 Fix window size bug when starting with -fs and returning
reimar
parents: 18948
diff changeset
328 prev_width = vo_dwidth = width;
1f08622dd297 Fix window size bug when starting with -fs and returning
reimar
parents: 18948
diff changeset
329 prev_height = vo_dheight = height;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
330 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
331 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
332
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
333 vo_fs = flags & VOFLAG_FULLSCREEN;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
334 vo_vm = flags & VOFLAG_MODESWITCHING;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
335 return createRenderingContext();
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
336 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
337
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 20972
diff changeset
338 int vo_w32_init(void) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
339 HICON mplayerIcon = 0;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
340 char exedir[MAX_PATH];
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
341 HINSTANCE user32;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
342
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
343 if (vo_window)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
344 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
345
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
346 hInstance = GetModuleHandle(0);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
347
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
348 if (GetModuleFileName(0, exedir, MAX_PATH))
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
349 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
350 if (!mplayerIcon)
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
351 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
352
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
353 {
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
354 WNDCLASSEX wcex = { sizeof wcex, CS_OWNDC, WndProc, 0, 0, hInstance, mplayerIcon, LoadCursor(0, IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH), 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
355
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
356 if (!RegisterClassEx(&wcex)) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
357 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
358 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
359 }
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
360 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
361
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
362 if (WinID >= 0)
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
363 vo_window = WinID;
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
364 else {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
365 vo_window = CreateWindowEx(0, classname, classname,
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
366 vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP,
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
367 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
368 if (!vo_window) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
369 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
370 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
371 }
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
372 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
373
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
374 myMonitorFromWindow = NULL;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
375 myGetMonitorInfo = NULL;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
376 myEnumDisplayMonitors = NULL;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
377 user32 = GetModuleHandle("user32.dll");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
378 if (user32) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
379 myMonitorFromWindow = GetProcAddress(user32, "MonitorFromWindow");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
380 myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
381 myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
382 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
383 updateScreenProperties();
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
384
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
385 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
386 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
387
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
388 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
389 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
390
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
391 createRenderingContext();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
392 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
393
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
394 void vo_w32_border() {
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
395 vo_border = !vo_border;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
396 createRenderingContext();
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
397 }
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
398
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
399 void vo_w32_ontop( void )
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
400 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
401 vo_ontop = !vo_ontop;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
402 if (!vo_fs) {
22416
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
403 HWND layer = HWND_NOTOPMOST;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
404 if (vo_ontop) layer = HWND_TOPMOST;
02783a09e1b3 Whitespace-only cosmetics: get rid of all remaining tabs
reimar
parents: 22415
diff changeset
405 SetWindowPos(vo_window, layer, (vo_screenwidth - vo_dwidth) / 2, (vo_screenheight - vo_dheight) / 2, vo_dwidth, vo_dheight, SWP_SHOWWINDOW);
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
406 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
407 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
408
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
409 void vo_w32_uninit() {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
410 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
411 resetMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
412 ShowCursor(1);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
413 vo_depthonscreen = 0;
16288
1cb19a114eb8 DestroyWindow must be used when -wid was not given, so for WinID < 0, not >=0
reimar
parents: 16282
diff changeset
414 if (WinID < 0)
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
415 DestroyWindow(vo_window);
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
416 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
417 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
418 }