annotate libvo/w32_common.c @ 19170:7e689bb31c07

Add simple edit list support to mov demuxer, it supports delay of audio and video tracks at the beginning of the file. E.g. video starts at 0.0s audio at 4.0s. It uses mplayers a/v-delay to achieve sync so please use with -framedrop for fastest sync. More Details in my mail to dev-eng from 2006-07-22.
author atmos4
date Sun, 23 Jul 2006 22:34:02 +0000
parents 1f08622dd297
children 7094d22578d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
1 #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
2 #include <windows.h>
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
3
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
4 #include "osdep/keycodes.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
5 #include "input/input.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
6 #include "input/mouse.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12936
diff changeset
7 #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
8 #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
9 #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
10 #include "w32_common.h"
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
11
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
12 extern void mplayer_put_key(int code);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
13
18081
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
14 #ifndef MONITOR_DEFAULTTOPRIMARY
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
15 #define MONITOR_DEFAULTTOPRIMARY 1
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
16 #endif
192e778f1ba1 define MONITOR_DEFAULTTOPRIMARY if necessary, some mingw version seem to miss it
reimar
parents: 18079
diff changeset
17
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
18 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
19 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
20 HDC vo_hdc = 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
21
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
22 // last non-fullscreen extends
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
23 int prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
24 int prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
25 int prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
26 int prev_y;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
27
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
28 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
29 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
30
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
31 static HINSTANCE hInstance;
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
32 HWND vo_window = 0;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
33 static int cursor = 1;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
34 static int event_flags;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
35 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
36
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
37 static HMONITOR (WINAPI* myMonitorFromWindow)(HWND, DWORD);
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
38 static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO);
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
39 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
40
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
41 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
42 RECT r;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
43 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
44 switch (message) {
17126
e5f2f50744cd WM_PAINT is the "expose" event, not WM_ACTIVATE
reimar
parents: 17115
diff changeset
45 case WM_PAINT:
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
46 event_flags |= VO_EVENT_EXPOSE;
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
47 break;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
48 case WM_MOVE:
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
49 p.x = 0;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
50 p.y = 0;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
51 ClientToScreen(vo_window, &p);
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
52 vo_dx = p.x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
53 vo_dy = p.y;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
54 break;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
55 case WM_SIZE:
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
56 event_flags |= VO_EVENT_RESIZE;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
57 GetClientRect(vo_window, &r);
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
58 vo_dwidth = r.right;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
59 vo_dheight = r.bottom;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
60 break;
18927
278eaf3ed5d8 Convince windows to allow window sizes > screen size
reimar
parents: 18116
diff changeset
61 case WM_WINDOWPOSCHANGING:
278eaf3ed5d8 Convince windows to allow window sizes > screen size
reimar
parents: 18116
diff changeset
62 return 0;
12004
494a93a19242 replace WM_DESTROY with WM_CLOSE to make it possible to play multiple files, patch by Reimar Doeffinger
faust3
parents: 11542
diff changeset
63 case WM_CLOSE:
16892
3470c810527b libvo input cleanup: remove the dependency on libinput,
albeu
parents: 16288
diff changeset
64 mplayer_put_key(KEY_CLOSE_WIN);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
65 break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
66 case WM_SYSCOMMAND:
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
67 switch (wParam) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
68 case SC_SCREENSAVE:
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
69 case SC_MONITORPOWER:
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
70 mp_msg(MSGT_VO, MSGL_V, "vo: win32: killing screensaver\n");
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
71 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
72 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
73 break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
74 case WM_KEYDOWN:
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
75 switch (wParam) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
76 case VK_LEFT: mplayer_put_key(KEY_LEFT); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
77 case VK_UP: mplayer_put_key(KEY_UP); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
78 case VK_RIGHT: mplayer_put_key(KEY_RIGHT); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
79 case VK_DOWN: mplayer_put_key(KEY_DOWN); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
80 case VK_TAB: mplayer_put_key(KEY_TAB); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
81 case VK_CONTROL: mplayer_put_key(KEY_CTRL); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
82 case VK_DELETE: mplayer_put_key(KEY_DELETE); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
83 case VK_INSERT: mplayer_put_key(KEY_INSERT); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
84 case VK_HOME: mplayer_put_key(KEY_HOME); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
85 case VK_END: mplayer_put_key(KEY_END); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
86 case VK_PRIOR: mplayer_put_key(KEY_PAGE_UP); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
87 case VK_NEXT: mplayer_put_key(KEY_PAGE_DOWN); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
88 case VK_ESCAPE: mplayer_put_key(KEY_ESC); break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
89 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
90 break;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
91 case WM_CHAR:
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
92 mplayer_put_key(wParam);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
93 break;
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_LBUTTONDOWN:
12927
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
95 if (!vo_nomouse_input && (vo_fs || (wParam & MK_CONTROL))) {
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
96 mplayer_put_key(MOUSE_BTN0);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
97 break;
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
98 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
99 if (!vo_fs) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
100 ReleaseCapture();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
101 SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
102 return 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
103 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
104 break;
12927
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
105 case WM_MBUTTONDOWN:
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
106 if (!vo_nomouse_input)
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
107 mplayer_put_key(MOUSE_BTN1);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
108 break;
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
109 case WM_RBUTTONDOWN:
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
110 if (!vo_nomouse_input)
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
111 mplayer_put_key(MOUSE_BTN2);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
112 break;
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
113 case WM_MOUSEWHEEL:
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
114 if (!vo_nomouse_input) {
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
115 int x = GET_WHEEL_DELTA_WPARAM(wParam);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
116 if (x > 0)
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
117 mplayer_put_key(MOUSE_BTN3);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
118 else
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
119 mplayer_put_key(MOUSE_BTN4);
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
120 break;
ba7d39185cc1 support for passing mouse events on to MPlayer
reimar
parents: 12004
diff changeset
121 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
122 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
123
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
124 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
125 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
126
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
127 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
128 MSG msg;
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
129 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
130 while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
131 TranslateMessage(&msg);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
132 DispatchMessage(&msg);
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
17115
dbe315450a32 Fix message handling, process resize events
reimar
parents: 17006
diff changeset
135 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
136 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
137
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
138 static BOOL CALLBACK mon_enum(HMONITOR hmon, HDC hdc, LPRECT r, LPARAM p) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
139 // this defaults to the last screen if specified number does not exist
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
140 xinerama_x = r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
141 xinerama_y = r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
142 vo_screenwidth = r->right - r->left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
143 vo_screenheight = r->bottom - r->top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
144 if (mon_cnt == xinerama_screen)
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
145 return FALSE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
146 mon_cnt++;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
147 return TRUE;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
148 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
149
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
150 void update_xinerama_info(void) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
151 xinerama_x = xinerama_y = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
152 if (xinerama_screen < -1) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
153 int tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
154 xinerama_x = GetSystemMetrics(SM_XVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
155 xinerama_y = GetSystemMetrics(SM_YVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
156 tmp = GetSystemMetrics(SM_CXVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
157 if (tmp) vo_screenwidth = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
158 tmp = GetSystemMetrics(SM_CYVIRTUALSCREEN);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
159 if (tmp) vo_screenheight = tmp;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
160 } else if (xinerama_screen == -1 && myMonitorFromWindow && myGetMonitorInfo) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
161 MONITORINFO mi;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
162 HMONITOR m = myMonitorFromWindow(vo_window, MONITOR_DEFAULTTOPRIMARY);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
163 mi.cbSize = sizeof(mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
164 myGetMonitorInfo(m, &mi);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
165 xinerama_x = mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
166 xinerama_y = mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
167 vo_screenwidth = mi.rcMonitor.right - mi.rcMonitor.left;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
168 vo_screenheight = mi.rcMonitor.bottom - mi.rcMonitor.top;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
169 } else if (xinerama_screen > 0 && myEnumDisplayMonitors) {
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
170 mon_cnt = 0;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
171 myEnumDisplayMonitors(NULL, NULL, mon_enum, 0);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
172 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
173 aspect_save_screenres(vo_screenwidth, vo_screenheight);
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
174 }
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
175
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
176 static void updateScreenProperties() {
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
177 DEVMODE dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
178 dm.dmSize = sizeof dm;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
179 dm.dmDriverExtra = 0;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
180 dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
181 if (!EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &dm)) {
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
182 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to enumerate display settings!\n");
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
183 return;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
184 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
185
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
186 vo_screenwidth = dm.dmPelsWidth;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
187 vo_screenheight = dm.dmPelsHeight;
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
188 vo_depthonscreen = dm.dmBitsPerPel;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
189 update_xinerama_info();
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
190 }
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
191
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
192 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
193 DEVMODE dm;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
194 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
195 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
196
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
197 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
198 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
199 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
200 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
201
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
202 if (vo_vm) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
203 int bestMode = -1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
204 int bestScore = INT_MAX;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
205 int i;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
206 for (i = 0; EnumDisplaySettings(0, i, &dm); ++i) {
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
207 int score = (dm.dmPelsWidth - o_dwidth) * (dm.dmPelsHeight - 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
208 if (dm.dmBitsPerPel != vo_depthonscreen) continue;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
209 if (dm.dmPelsWidth < o_dwidth) continue;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
210 if (dm.dmPelsHeight < o_dheight) continue;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
211
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
212 if (score < bestScore) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
213 bestScore = score;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
214 bestMode = i;
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 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
217
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
218 if (bestMode != -1)
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
219 EnumDisplaySettings(0, bestMode, &dm);
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
220
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
221 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
222 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
223 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
224
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
225 static void resetMode(void) {
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
226 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
227 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
228 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
229
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
230 static int createRenderingContext(void) {
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
231 HWND layer = HWND_NOTOPMOST;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
232 PIXELFORMATDESCRIPTOR pfd;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
233 RECT r;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
234 int pf;
18948
c2aee29c80b6 Do not fiddle (too much) with external (WinID) windows
reimar
parents: 18927
diff changeset
235 if (WinID < 0) {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
236 int style = (vo_border && !vo_fs) ?
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
237 (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
238
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
239 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
240 if (vo_fs) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
241 changeMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
242 if (cursor) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
243 ShowCursor(0);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
244 cursor = 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
245 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
246 } else {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
247 resetMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
248 if (!cursor) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
249 ShowCursor(1);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
250 cursor = 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
251 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
252 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
253 updateScreenProperties();
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
254 ShowWindow(vo_window, SW_HIDE);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
255 SetWindowLong(vo_window, GWL_STYLE, style);
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
256 if (vo_fs) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
257 prev_width = vo_dwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
258 prev_height = vo_dheight;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
259 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
260 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
261 vo_dwidth = vo_screenwidth;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
262 vo_dheight = vo_screenheight;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
263 vo_dx = xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
264 vo_dy = xinerama_y;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
265 } else {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
266 vo_dwidth = prev_width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
267 vo_dheight = prev_height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
268 vo_dx = prev_x;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
269 vo_dy = prev_y;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
270 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
271 r.left = vo_dx;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
272 r.right = r.left + vo_dwidth;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
273 r.top = vo_dy;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
274 r.bottom = r.top + vo_dheight;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
275 AdjustWindowRect(&r, style, 0);
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
276 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
277 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
278
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
279 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
280 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
281 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
282 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
283 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
284 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
285 pfd.iLayerType = PFD_MAIN_PLANE;
16213
917079aa9fee Cleanup, move declarations to beginning of block.
reimar
parents: 16109
diff changeset
286 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
287 if (!pf) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
288 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n");
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
289 return 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
290 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
291
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
292 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
293
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
294 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
295
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
296 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
297 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
298
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
299 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
300 // store original size for videomode switching
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
301 o_dwidth = width;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
302 o_dheight = height;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
303
18987
1f08622dd297 Fix window size bug when starting with -fs and returning
reimar
parents: 18948
diff changeset
304 prev_width = vo_dwidth = width;
1f08622dd297 Fix window size bug when starting with -fs and returning
reimar
parents: 18948
diff changeset
305 prev_height = vo_dheight = height;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
306 prev_x = vo_dx;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
307 prev_y = vo_dy;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
308
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
309 vo_fs = flags & VOFLAG_FULLSCREEN;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
310 vo_vm = flags & VOFLAG_MODESWITCHING;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
311 return createRenderingContext();
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
312 }
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
313
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
314 int vo_init(void) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
315 HICON mplayerIcon = 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
316 char exedir[MAX_PATH];
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
317 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
318
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
319 if (vo_window)
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 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
323
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
324 if (GetModuleFileName(0, exedir, MAX_PATH))
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
325 mplayerIcon = ExtractIcon(hInstance, exedir, 0);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
326 if (!mplayerIcon)
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
327 mplayerIcon = LoadIcon(0, IDI_APPLICATION);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
328
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
329 {
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
330 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
331
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
332 if (!RegisterClassEx(&wcex)) {
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
333 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to register window class!\n");
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
334 return 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
335 }
16226
94bb243636e1 10l, initializers don't work without a declaration :-(
reimar
parents: 16213
diff changeset
336 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
337
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
338 if (WinID >= 0)
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
339 vo_window = WinID;
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
340 else {
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
341 vo_window = CreateWindowEx(0, classname, classname,
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
342 vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP,
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
343 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
344 if (!vo_window) {
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
345 mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to create window!\n");
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
346 return 0;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
347 }
16282
273d33249c25 -wid support for windows. Not well tested, might still behave a bit weird.
reimar
parents: 16226
diff changeset
348 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
349
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
350 vo_hdc = GetDC(vo_window);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
351
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
352 myMonitorFromWindow = NULL;
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
353 myGetMonitorInfo = NULL;
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
354 myEnumDisplayMonitors = NULL;
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
355 user32 = GetModuleHandle("user32.dll");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
356 if (user32) {
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
357 myMonitorFromWindow = GetProcAddress(user32, "MonitorFromWindow");
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
358 myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 18089
diff changeset
359 myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
18079
f57317460375 fixes and cleanup for windows fullscreen switching (restore old position,
reimar
parents: 17126
diff changeset
360 }
14747
d87cc822b343 Remove a lot of duplicate code
reimar
parents: 14142
diff changeset
361 updateScreenProperties();
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
362
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
363 return 1;
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
364 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
365
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
366 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
367 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
368
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
369 createRenderingContext();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
370 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
371
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
372 void vo_w32_border() {
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
373 vo_border = !vo_border;
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
374 createRenderingContext();
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
375 }
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16892
diff changeset
376
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
377 void vo_w32_ontop( void )
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
378 {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
379 vo_ontop = !vo_ontop;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
380 if (!vo_fs) {
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
381 HWND layer = HWND_NOTOPMOST;
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
382 if (vo_ontop) layer = HWND_TOPMOST;
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
383 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
384 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
385 }
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11479
diff changeset
386
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
387 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
388 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
389 resetMode();
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
390 ShowCursor(1);
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
diff changeset
391 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
392 if (WinID < 0)
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
393 DestroyWindow(vo_window);
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 13787
diff changeset
394 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
395 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
396 }