2 * MPlayer GUI for Win32
3 * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de>
4 * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com>
5 * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
7 * This file is part of MPlayer.
9 * MPlayer is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * MPlayer is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "libvo/video_out.h"
31 #include "libao2/audio_out.h"
33 #include "gui/interface.h"
39 extern char *proc_priority
;
41 static void set_defaults(void);
43 static LRESULT CALLBACK
PrefsWndProc(HWND hwnd
, UINT iMsg
, WPARAM wParam
, LPARAM lParam
)
45 HWND btn
, label
, edit1
, edit2
, edit3
, updown1
, updown2
, track1
, track2
;
46 static HWND vo_driver
, ao_driver
, prio
;
48 char dvddevice
[MAX_PATH
];
49 char cdromdevice
[MAX_PATH
];
51 float x
= 10.0, y
= 100.0, stereopos
, delaypos
;
52 stereopos
= gtkAOExtraStereoMul
* x
;
53 delaypos
= audio_delay
* y
;
59 /* video and audio drivers */
60 label
= CreateWindow("static", "Video Driver:",
61 WS_CHILD
| WS_VISIBLE
,
63 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
65 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
67 label
= CreateWindow("static", "Audio Driver:",
68 WS_CHILD
| WS_VISIBLE
,
69 190, 13, 70, 15, hwnd
,
70 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
72 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
74 label
= CreateWindow("static", "Extra stereo coefficient:",
75 WS_CHILD
| WS_VISIBLE
,
76 10, 126, 115, 15, hwnd
,
77 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
79 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
81 label
= CreateWindow("static", "Audio delay:",
82 WS_CHILD
| WS_VISIBLE
,
83 36, 165, 115, 15, hwnd
,
84 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
86 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
88 label
= CreateWindow("static", "OSD level:",
89 WS_CHILD
| WS_VISIBLE
,
90 10, 264, 115, 15, hwnd
,
91 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
93 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
95 label
= CreateWindow("static", "DVD device:",
96 WS_CHILD
| WS_VISIBLE
,
97 80, 363, 115, 15, hwnd
,
98 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
100 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
102 label
= CreateWindow("static", "CD device:",
103 WS_CHILD
| WS_VISIBLE
,
104 202, 363, 115, 15, hwnd
,
105 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
107 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
109 label
= CreateWindow("static", "Priority:",
110 WS_CHILD
| WS_VISIBLE
,
111 217, 264, 115, 15, hwnd
,
112 NULL
, ((LPCREATESTRUCT
) lParam
) -> hInstance
,
114 SendMessage(label
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
116 vo_driver
= CreateWindow("combobox", NULL
,
117 CBS_DROPDOWNLIST
| CB_SHOWDROPDOWN
|
118 CBS_NOINTEGRALHEIGHT
| CBS_HASSTRINGS
|
119 WS_CHILD
| WS_VISIBLE
|
120 WS_VSCROLL
| WS_TABSTOP
,
121 80, 10, 100, 160, hwnd
,
122 (HMENU
) ID_VO_DRIVER
,
123 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
126 ao_driver
= CreateWindow("combobox", NULL
,
127 CBS_DROPDOWNLIST
| CB_SHOWDROPDOWN
|
128 CBS_NOINTEGRALHEIGHT
| CBS_HASSTRINGS
|
129 WS_CHILD
| WS_VISIBLE
|
130 WS_VSCROLL
| WS_TABSTOP
,
131 260, 10, 100, 160, hwnd
,
132 (HMENU
) ID_AO_DRIVER
,
133 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
136 prio
= CreateWindow("combobox", NULL
,
137 CBS_DROPDOWNLIST
| CB_SHOWDROPDOWN
|
138 CBS_NOINTEGRALHEIGHT
| CBS_HASSTRINGS
|
139 WS_CHILD
| WS_VISIBLE
|
140 WS_VSCROLL
| WS_TABSTOP
,
141 260, 260, 100, 160, hwnd
,
143 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
147 btn
= CreateWindow("button", "Enable double buffering",
148 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
150 hwnd
, (HMENU
) ID_DOUBLE
,
151 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
153 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
155 btn
= CreateWindow("button", "Enable direct rendering",
156 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
158 hwnd
, (HMENU
) ID_DIRECT
,
159 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
161 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
163 btn
= CreateWindow("button", "Enable framedropping",
164 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
166 hwnd
, (HMENU
) ID_FRAMEDROP
,
167 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
169 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
171 btn
= CreateWindow("button", "Normalize sound",
172 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
174 hwnd
, (HMENU
) ID_NORMALIZE
,
175 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
177 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
179 btn
= CreateWindow("button", "Enable software mixer",
180 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
182 hwnd
, (HMENU
) ID_SOFTMIX
,
183 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
185 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
187 btn
= CreateWindow("button", "Enable extra stereo",
188 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
190 hwnd
, (HMENU
) ID_EXTRASTEREO
,
191 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
193 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
195 btn
= CreateWindow("button", "Enable cache",
196 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
198 hwnd
, (HMENU
) ID_CACHE
,
199 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
201 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
203 btn
= CreateWindow("button", "Enable autosync",
204 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
205 192, 200, 100, 25, hwnd
,
207 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
209 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
211 btn
= CreateWindow("button", "Display videos in the sub window",
212 WS_CHILD
| WS_VISIBLE
| BS_AUTOCHECKBOX
,
214 hwnd
, (HMENU
) ID_SUBWINDOW
,
215 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
217 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
220 btn
= CreateWindow("button", "None",
221 WS_CHILD
| WS_VISIBLE
| BS_AUTORADIOBUTTON
,
222 95, 260, 100, 25, hwnd
,
224 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
226 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
228 btn
= CreateWindow("button", "Timer and indicators",
229 WS_CHILD
| WS_VISIBLE
| BS_AUTORADIOBUTTON
,
230 95, 280, 180, 25, hwnd
,
232 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
234 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
236 btn
= CreateWindow("button", "Progress bar only",
237 WS_CHILD
| WS_VISIBLE
| BS_AUTORADIOBUTTON
,
238 95, 300, 180, 25, hwnd
,
240 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
242 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
244 btn
= CreateWindow("button", "Timer, percentage, and total time",
245 WS_CHILD
| WS_VISIBLE
| BS_AUTORADIOBUTTON
,
246 95, 320, 180, 25, hwnd
,
248 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
250 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
252 btn
= CreateWindow("button", "Apply",
253 WS_CHILD
| WS_VISIBLE
| BS_PUSHBUTTON
,
254 199, 395, 80, 25, hwnd
,
256 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
258 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
260 btn
= CreateWindow("button", "Cancel",
261 WS_CHILD
| WS_VISIBLE
| BS_PUSHBUTTON
,
262 285, 395, 80, 25, hwnd
,
264 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
266 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
268 btn
= CreateWindow("button", "Defaults",
269 WS_CHILD
| WS_VISIBLE
| BS_PUSHBUTTON
,
270 4, 395, 80, 25, hwnd
,
272 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
274 SendMessage(btn
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
276 /* extra stereo coefficient trackbar */
277 track1
= CreateWindow(TRACKBAR_CLASS
, "Coefficient",
278 WS_CHILD
| WS_VISIBLE
| WS_TABSTOP
|
279 WS_DISABLED
| TBS_HORZ
|
280 TBS_BOTTOM
| TBS_NOTICKS
,
281 120, 120, 245, 35, hwnd
,
282 (HMENU
) ID_TRACKBAR1
,
283 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
285 SendDlgItemMessage(hwnd
, ID_TRACKBAR1
, TBM_SETRANGE
, 1, MAKELONG(-100, 100));
288 track2
= CreateWindow(TRACKBAR_CLASS
, "Audio delay",
289 WS_CHILD
| WS_VISIBLE
| WS_TABSTOP
|
290 WS_DISABLED
| TBS_HORZ
|
291 TBS_BOTTOM
| TBS_NOTICKS
,
292 120, 160, 245, 35, hwnd
,
293 (HMENU
) ID_TRACKBAR2
,
294 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
296 SendDlgItemMessage(hwnd
, ID_TRACKBAR2
, TBM_SETRANGE
, 1, MAKELONG(-1000, 1000));
299 edit1
= CreateWindowEx(WS_EX_CLIENTEDGE
, "edit", "cache",
300 WS_CHILD
| WS_VISIBLE
| WS_DISABLED
|
301 ES_LEFT
| ES_AUTOHSCROLL
,
302 105, 203, 40, 20, hwnd
,
304 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
306 SendMessage(edit1
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
308 updown1
= CreateUpDownControl(WS_CHILD
| WS_VISIBLE
|
309 WS_DISABLED
| UDS_SETBUDDYINT
|
310 UDS_ARROWKEYS
| UDS_NOTHOUSANDS
,
311 145, 203, 20, 20, hwnd
,
313 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
314 (HWND
)edit1
, 0, 0, 0);
315 SendDlgItemMessage(hwnd
, ID_UPDOWN1
, UDM_SETRANGE32
, (WPARAM
)0, (LPARAM
)65535);
318 edit2
= CreateWindowEx(WS_EX_CLIENTEDGE
, "edit", "autosync",
319 WS_CHILD
| WS_VISIBLE
| WS_DISABLED
|
320 ES_LEFT
| ES_AUTOHSCROLL
,
321 300, 203, 40, 20, hwnd
,
323 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
325 SendMessage(edit2
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
327 updown2
= CreateUpDownControl(WS_CHILD
| WS_VISIBLE
|
328 WS_DISABLED
| UDS_SETBUDDYINT
|
329 UDS_ARROWKEYS
| UDS_NOTHOUSANDS
,
330 340, 203, 20, 20, hwnd
,
332 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
333 (HWND
)edit2
, 0, 0, 0);
334 SendDlgItemMessage(hwnd
, ID_UPDOWN2
, UDM_SETRANGE32
, (WPARAM
)0, (LPARAM
)10000);
336 /* dvd and cd devices */
337 edit3
= CreateWindowEx(WS_EX_CLIENTEDGE
, "edit", NULL
,
338 WS_CHILD
| WS_VISIBLE
|
339 ES_LEFT
| ES_AUTOHSCROLL
,
340 145, 360, 20, 20, hwnd
,
341 (HMENU
) ID_DVDDEVICE
,
342 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
344 SendMessage(edit3
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
346 edit3
= CreateWindowEx(WS_EX_CLIENTEDGE
, "edit", NULL
,
347 WS_CHILD
| WS_VISIBLE
|
348 ES_LEFT
| ES_AUTOHSCROLL
,
349 260, 360, 20, 20, hwnd
,
351 ((LPCREATESTRUCT
) lParam
) -> hInstance
,
353 SendMessage(edit3
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
355 while(video_out_drivers
[i
])
357 const vo_info_t
*info
= video_out_drivers
[i
++]->info
;
358 if(!video_driver_list
) gaddlist(&video_driver_list
, (char *)info
->short_name
);
359 SendDlgItemMessage(hwnd
, ID_VO_DRIVER
, CB_ADDSTRING
, 0, (LPARAM
) info
->short_name
);
361 /* Special case for directx:noaccel */
362 SendDlgItemMessage(hwnd
, ID_VO_DRIVER
, CB_ADDSTRING
, 0, (LPARAM
) "directx:noaccel");
363 SendMessage(vo_driver
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
365 while(audio_out_drivers
[j
])
367 const ao_info_t
*info
= audio_out_drivers
[j
++]->info
;
368 if(!audio_driver_list
)
370 // FIXME: default priority (i.e. order in audio_out_drivers) should be fixed instead
371 // if win32 as default is really desirable
372 gaddlist(&audio_driver_list
, "win32"/*(char *)info->short_name*/);
374 SendDlgItemMessage(hwnd
, ID_AO_DRIVER
, CB_ADDSTRING
, 0, (LPARAM
) info
->short_name
);
376 SendMessage(ao_driver
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
378 /* priority list, i'm leaving out realtime for safety's sake */
379 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_INSERTSTRING
, 0, (LPARAM
) "low");
380 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_INSERTSTRING
, 0, (LPARAM
) "belownormal");
381 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_INSERTSTRING
, 0, (LPARAM
) "normal");
382 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_INSERTSTRING
, 0, (LPARAM
) "abovenormal");
383 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_INSERTSTRING
, 0, (LPARAM
) "high");
384 SendMessage(prio
, WM_SETFONT
, (WPARAM
) GetStockObject(DEFAULT_GUI_FONT
), 0);
386 /* set our preferences on what we already have */
387 if(video_driver_list
)
388 SendDlgItemMessage(hwnd
, ID_VO_DRIVER
, CB_SETCURSEL
,
389 (WPARAM
)SendMessage(vo_driver
, CB_FINDSTRING
, -1,
390 (LPARAM
)video_driver_list
[0]), 0);
392 if(audio_driver_list
)
393 SendDlgItemMessage(hwnd
, ID_AO_DRIVER
, CB_SETCURSEL
,
394 (WPARAM
)SendMessage(ao_driver
, CB_FINDSTRING
, -1,
395 (LPARAM
)audio_driver_list
[0]), 0);
397 if(vo_doublebuffering
)
398 SendDlgItemMessage(hwnd
, ID_DOUBLE
, BM_SETCHECK
, 1, 0);
399 if(vo_directrendering
)
400 SendDlgItemMessage(hwnd
, ID_DIRECT
, BM_SETCHECK
, 1, 0);
402 SendDlgItemMessage(hwnd
, ID_FRAMEDROP
, BM_SETCHECK
, 1, 0);
404 SendDlgItemMessage(hwnd
, ID_NORMALIZE
, BM_SETCHECK
, 1, 0);
406 SendDlgItemMessage(hwnd
, ID_SOFTMIX
, BM_SETCHECK
, 1, 0);
409 SendDlgItemMessage(hwnd
, ID_EXTRASTEREO
, BM_SETCHECK
, 1, 0);
410 if(!guiIntfStruct
.Playing
)
412 EnableWindow(track1
, 1);
413 EnableWindow(track2
, 1);
416 else gtkAOExtraStereoMul
= 1.0;
417 SendDlgItemMessage(hwnd
, ID_TRACKBAR1
, TBM_SETPOS
, 1, (LPARAM
)stereopos
);
420 SendDlgItemMessage(hwnd
, ID_TRACKBAR2
, TBM_SETPOS
, 1, (LPARAM
)delaypos
);
423 SendDlgItemMessage(hwnd
, ID_CACHE
, BM_SETCHECK
, 1, 0);
424 EnableWindow(edit1
, 1);
425 EnableWindow(updown1
, 1);
427 else gtkCacheSize
= 2048;
428 SendDlgItemMessage(hwnd
, ID_UPDOWN1
, UDM_SETPOS32
, 0, (LPARAM
)gtkCacheSize
);
431 SendDlgItemMessage(hwnd
, ID_AUTOSYNC
, BM_SETCHECK
, 1, 0);
432 EnableWindow(edit2
, 1);
433 EnableWindow(updown2
, 1);
435 else gtkAutoSync
= 0;
436 SendDlgItemMessage(hwnd
, ID_UPDOWN2
, UDM_SETPOS32
, 0, (LPARAM
)gtkAutoSync
);
439 SendDlgItemMessage(hwnd
, ID_SUBWINDOW
, BM_SETCHECK
, 1, 0);
442 SendDlgItemMessage(hwnd
, ID_NONE
, BM_SETCHECK
, 1, 0);
443 else if(osd_level
== 1)
444 SendDlgItemMessage(hwnd
, ID_OSD1
, BM_SETCHECK
, 1, 0);
445 else if(osd_level
== 2)
446 SendDlgItemMessage(hwnd
, ID_OSD2
, BM_SETCHECK
, 1, 0);
447 else if(osd_level
== 3)
448 SendDlgItemMessage(hwnd
, ID_OSD3
, BM_SETCHECK
, 1, 0);
451 SendDlgItemMessage(hwnd
, ID_DVDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)dvd_device
);
452 else SendDlgItemMessage(hwnd
, ID_DVDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)"D:");
455 SendDlgItemMessage(hwnd
, ID_CDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)cdrom_device
);
456 else SendDlgItemMessage(hwnd
, ID_CDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)"D:");
459 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_SETCURSEL
,
460 (WPARAM
)SendMessage(prio
, CB_FINDSTRING
, -1,
461 (LPARAM
)proc_priority
), 0);
463 else SendDlgItemMessage(hwnd
, ID_PRIO
, CB_SETCURSEL
, 2, 0);
468 case WM_CTLCOLOREDIT
:
470 case WM_CTLCOLORSTATIC
:
472 HDC hdc
= (HDC
)wParam
;
473 SetBkMode(hdc
, TRANSPARENT
);
474 return (INT_PTR
)SOLID_GREY
;
479 switch (LOWORD(wParam
))
483 if(SendDlgItemMessage(hwnd
, ID_EXTRASTEREO
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
485 EnableWindow(GetDlgItem(hwnd
, ID_TRACKBAR1
), 1);
486 EnableWindow(GetDlgItem(hwnd
, ID_TRACKBAR2
), 1);
488 EnableWindow(GetDlgItem(hwnd
, ID_TRACKBAR1
), 0);
489 EnableWindow(GetDlgItem(hwnd
, ID_TRACKBAR2
), 0);
490 SendDlgItemMessage(hwnd
, ID_TRACKBAR1
, TBM_SETPOS
, 1, (LPARAM
)10.0);
491 SendDlgItemMessage(hwnd
, ID_TRACKBAR2
, TBM_SETPOS
, 1, (LPARAM
)0);
497 if(SendDlgItemMessage(hwnd
, ID_CACHE
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
499 EnableWindow(GetDlgItem(hwnd
, ID_EDIT1
), 1);
500 EnableWindow(GetDlgItem(hwnd
, ID_UPDOWN1
), 1);
502 EnableWindow(GetDlgItem(hwnd
, ID_EDIT1
), 0);
503 EnableWindow(GetDlgItem(hwnd
, ID_UPDOWN1
), 0);
504 SendDlgItemMessage(hwnd
, ID_UPDOWN1
, UDM_SETPOS32
, 1, (LPARAM
)2048);
510 if(SendDlgItemMessage(hwnd
, ID_AUTOSYNC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
512 EnableWindow(GetDlgItem(hwnd
, ID_EDIT2
), 1);
513 EnableWindow(GetDlgItem(hwnd
, ID_UPDOWN2
), 1);
515 EnableWindow(GetDlgItem(hwnd
, ID_EDIT2
), 0);
516 EnableWindow(GetDlgItem(hwnd
, ID_UPDOWN2
), 0);
517 SendDlgItemMessage(hwnd
, ID_UPDOWN2
, UDM_SETPOS32
, 1, (LPARAM
)0);
524 SendDlgItemMessage(hwnd
, ID_VO_DRIVER
, CB_SETCURSEL
,
525 (WPARAM
)SendMessage(vo_driver
, CB_FINDSTRING
, -1, (LPARAM
)"directx"), 0);
527 SendDlgItemMessage(hwnd
, ID_AO_DRIVER
, CB_SETCURSEL
,
528 (WPARAM
)SendMessage(ao_driver
, CB_FINDSTRING
, -1, (LPARAM
)"dsound"), 0);
530 SendDlgItemMessage(hwnd
, ID_PRIO
, CB_SETCURSEL
,
531 (WPARAM
)SendMessage(prio
, CB_FINDSTRING
, -1, (LPARAM
)proc_priority
), 0);
533 SendDlgItemMessage(hwnd
, ID_TRACKBAR1
, TBM_SETPOS
, 1, (LPARAM
)10.0);
534 SendDlgItemMessage(hwnd
, ID_TRACKBAR2
, TBM_SETPOS
, 1, (LPARAM
)0.0);
535 SendDlgItemMessage(hwnd
, ID_UPDOWN1
, UDM_SETPOS32
, 0, (LPARAM
)gtkCacheSize
);
536 SendDlgItemMessage(hwnd
, ID_UPDOWN2
, UDM_SETPOS32
, 0, (LPARAM
)gtkAutoSync
);
537 SendDlgItemMessage(hwnd
, ID_DOUBLE
, BM_SETCHECK
, 0, 0);
538 SendDlgItemMessage(hwnd
, ID_DIRECT
, BM_SETCHECK
, 0, 0);
539 SendDlgItemMessage(hwnd
, ID_FRAMEDROP
, BM_SETCHECK
, 0, 0);
540 SendDlgItemMessage(hwnd
, ID_NORMALIZE
, BM_SETCHECK
, 0, 0);
541 SendDlgItemMessage(hwnd
, ID_SOFTMIX
, BM_SETCHECK
, 0, 0);
542 SendDlgItemMessage(hwnd
, ID_EXTRASTEREO
, BM_SETCHECK
, 0, 0);
543 SendDlgItemMessage(hwnd
, ID_CACHE
, BM_SETCHECK
, 0, 0);
544 SendDlgItemMessage(hwnd
, ID_AUTOSYNC
, BM_SETCHECK
, 0, 0);
545 SendDlgItemMessage(hwnd
, ID_SUBWINDOW
, BM_SETCHECK
, 1, 0);
546 SendDlgItemMessage(hwnd
, ID_NONE
, BM_SETCHECK
, 0, 0);
547 SendDlgItemMessage(hwnd
, ID_OSD1
, BM_SETCHECK
, 1, 0);
548 SendDlgItemMessage(hwnd
, ID_OSD2
, BM_SETCHECK
, 0, 0);
549 SendDlgItemMessage(hwnd
, ID_OSD3
, BM_SETCHECK
, 0, 0);
550 SendDlgItemMessage(hwnd
, ID_DVDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)"D:");
551 SendDlgItemMessage(hwnd
, ID_CDDEVICE
, WM_SETTEXT
, 0, (LPARAM
)"D:");
552 SendMessage(hwnd
, WM_COMMAND
, (WPARAM
)ID_APPLY
, 0);
561 if(guiIntfStruct
.Playing
) guiGetEvent(guiCEvent
, (void *)guiSetStop
);
563 /* Set the video driver */
564 gfree(video_driver_list
[0]);
565 strl
= SendMessage(vo_driver
, CB_GETCURSEL
, 0, 0);
566 video_driver_list
[0] = malloc(strl
);
567 SendMessage(vo_driver
, CB_GETLBTEXT
, (WPARAM
)strl
,
568 (LPARAM
)video_driver_list
[0]);
570 /* Set the audio driver */
571 gfree(audio_driver_list
[0]);
572 strl
= SendMessage(ao_driver
, CB_GETCURSEL
, 0, 0);
573 audio_driver_list
[0] = malloc(strl
);
574 SendMessage(ao_driver
, CB_GETLBTEXT
, (WPARAM
)strl
,
575 (LPARAM
)audio_driver_list
[0]);
577 /* Set the priority level */
578 SendMessage(prio
, CB_GETLBTEXT
, (WPARAM
)SendMessage(prio
, CB_GETCURSEL
, 0, 0), (LPARAM
)procprio
);
579 proc_priority
= strdup(procprio
);
581 /* double buffering */
582 if(SendDlgItemMessage(hwnd
, ID_DOUBLE
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
583 vo_doublebuffering
= 1;
584 else vo_doublebuffering
= 0;
586 /* direct rendering */
587 if(SendDlgItemMessage(hwnd
, ID_DIRECT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
588 vo_directrendering
= 1;
589 else vo_directrendering
= 0;
592 if(SendDlgItemMessage(hwnd
, ID_FRAMEDROP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
594 else frame_dropping
= 0;
597 if(SendDlgItemMessage(hwnd
, ID_NORMALIZE
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
602 if(SendDlgItemMessage(hwnd
, ID_SOFTMIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
607 if(SendDlgItemMessage(hwnd
, ID_EXTRASTEREO
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
608 gtkAOExtraStereo
= 1;
610 gtkAOExtraStereo
= 0;
611 gtkAOExtraStereoMul
= 10.0;
613 gtkAOExtraStereoMul
= SendDlgItemMessage(hwnd
, ID_TRACKBAR1
, TBM_GETPOS
, 0, 0) / 10.0;
616 audio_delay
= SendDlgItemMessage(hwnd
, ID_TRACKBAR2
, TBM_GETPOS
, 0, 0) / 100.0;
619 if(SendDlgItemMessage(hwnd
, ID_CACHE
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
622 gtkCacheSize
= SendDlgItemMessage(hwnd
, ID_UPDOWN1
, UDM_GETPOS32
, 0, 0);
625 if(SendDlgItemMessage(hwnd
, ID_AUTOSYNC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
627 else gtkAutoSyncOn
= 0;
628 gtkAutoSync
= SendDlgItemMessage(hwnd
, ID_UPDOWN2
, UDM_GETPOS32
, 0, 0);
631 if(SendDlgItemMessage(hwnd
, ID_SUBWINDOW
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
636 if(SendDlgItemMessage(hwnd
, ID_NONE
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
638 else if(SendDlgItemMessage(hwnd
, ID_OSD1
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
640 else if(SendDlgItemMessage(hwnd
, ID_OSD2
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
642 else if(SendDlgItemMessage(hwnd
, ID_OSD3
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
645 /* dvd and cd devices */
646 SendDlgItemMessage(hwnd
, ID_DVDDEVICE
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)dvddevice
);
647 dvd_device
= strdup(dvddevice
);
648 SendDlgItemMessage(hwnd
, ID_CDDEVICE
, WM_GETTEXT
, MAX_PATH
, (LPARAM
)cdromdevice
);
649 cdrom_device
= strdup(cdromdevice
);
651 MessageBox(hwnd
, "You must restart MPlayer for the changes to take effect.", "MPlayer - Info:", MB_OK
);
659 return DefWindowProc(hwnd
, iMsg
, wParam
, lParam
);
662 void display_prefswindow(gui_t
*gui
)
665 HINSTANCE hInstance
= GetModuleHandle(NULL
);
668 if(FindWindow(NULL
, "MPlayer - Preferences")) return;
669 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
670 wc
.lpfnWndProc
= PrefsWndProc
;
673 wc
.hInstance
= hInstance
;
674 wc
.hCursor
= LoadCursor(NULL
,IDC_ARROW
);
675 wc
.hIcon
= gui
->icon
;
676 wc
.hbrBackground
= SOLID_GREY
;
677 wc
.lpszClassName
= "MPlayer - Preferences";
678 wc
.lpszMenuName
= NULL
;
680 x
= (GetSystemMetrics(SM_CXSCREEN
) / 2) - (375 / 2);
681 y
= (GetSystemMetrics(SM_CYSCREEN
) / 2) - (452 / 2);
682 hWnd
= CreateWindow("MPlayer - Preferences",
683 "MPlayer - Preferences",
684 WS_POPUPWINDOW
| WS_CAPTION
,
693 SetWindowLongPtr(hWnd
, GWLP_USERDATA
, (DWORD
) gui
);
694 ShowWindow(hWnd
, SW_SHOW
);
698 static void set_defaults(void)
700 proc_priority
= "normal";
701 vo_doublebuffering
= 1;
702 vo_directrendering
= 0;
706 gtkAOExtraStereo
= 0;
707 gtkAOExtraStereoMul
= 1.0;