aboutsummaryrefslogtreecommitdiffhomepage
path: root/Gui/win32
diff options
context:
space:
mode:
Diffstat (limited to 'Gui/win32')
-rw-r--r--Gui/win32/Changelog317
-rw-r--r--Gui/win32/README20
-rw-r--r--Gui/win32/dialogs.c1133
-rw-r--r--Gui/win32/dialogs.h132
-rw-r--r--Gui/win32/gui.c1551
-rw-r--r--Gui/win32/gui.h116
-rw-r--r--Gui/win32/interface.c952
-rw-r--r--Gui/win32/playlist.c154
-rw-r--r--Gui/win32/playlist.h57
-rw-r--r--Gui/win32/preferences.c722
-rw-r--r--Gui/win32/skinload.c809
-rw-r--r--Gui/win32/skinload.h213
-rw-r--r--Gui/win32/widgetrender.c351
-rw-r--r--Gui/win32/wincfg.c143
-rw-r--r--Gui/win32/wincfg.h38
15 files changed, 0 insertions, 6708 deletions
diff --git a/Gui/win32/Changelog b/Gui/win32/Changelog
deleted file mode 100644
index 1e831ee65a..0000000000
--- a/Gui/win32/Changelog
+++ /dev/null
@@ -1,317 +0,0 @@
-HISTORY
-2006/06/30 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed display of wrong aspect ratios.
-
-2006/06/13 - Erik Augustson <erik_27can@yahoo.com>
-- Minor bugfixes.
-- Updated to current SVN
-
-2006/04/14 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a crash bug.
-- Fixed a major fullscreen bug (WinID wasn't getting
- reset when FS switching).
-
-2006/04/13 - Erik Augustson <erik_27can@yahoo.com>
-- More minor fixups
-
-2006/04/07 - Erik Augustson <erik_27can@yahoo.com>
-- Minor fixups to openurl and openfile from dialogs.c
-
-2006/04/06 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed IPC and drag&drop appending files to the
- playlist instead of opening them right away.
-- Updated dvdnav patch.
-
-2006/04/03 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a long pathnames issue with WM_COPYDATA.
-- Fixed a minor crash happening when rendering the
- codec name.
-- Some code cleanup.
-
-2006/04/01 - Erik Augustson <erik_27can@yahoo.com>
-- Added ability to enable/disable videos displaying
- in the sub window in preferences.
-- Small fix in update_subwindow() for coming out
- of fullscreen when the sub window was minimized.
-
-2006/03/27 - Erik Augustson <erik_27can@yahoo.com>
-- Updated to current CVS.
-- Debug console now shows the extensions mplayer
- was compiled with.
-
-2006/03/23 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed using -playlist and -shuffle.
-
-2006/03/22 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a small bug with input events for dialogs.
-
-2006/03/16 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed left button mouse event in dvdnav patch.
-- More aspect fixes.
-- Fixed double-click in the playlist.
-- Fixed some drag&drop functionality.
-
-2006/03/14 - Erik Augustson <erik_27can@yahoo.com>
-- Simplified title/chapter selection dialog.
-- Code cleanup.
-
-2006/03/14 - Erik Augustson <erik_27can@yahoo.com>
-
-- Fixed resetting aspect on file ending in mplEnd()
-
-2006/03/13 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed double click events, forgot to add CS_DBLCLKS
- to sub window's window style.
-- Fixed window focusing with drag&drop files.
-- Re-arranged some menu items, and added support for
- runtime aspect switching. This adds 3 lines to
- mplayer.c but is well worth it IMO.
-
-2006/03/12 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed window positioning for both windows.
-- Added more mouse button events.
-
-2006/03/10 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed mouse and sub window vanishing after coming
- out of fullscreen by end of file.
-- Fixed sub window popping up when switching to
- fullscreen and *not* using directx.
-- Added codec name to widgets to properly render
- in some skins.
-- Middle and scroll wheel mouse event should work
- now on the sub window.
-- #ifdef'd USE_DVDREAD to allow for compilation
- when disabling mpdvdkit.
-- Updated license information.
-
-2006/03/08 - Erik Augustson <erik_27can@yahoo.com>
-- Removed unnecessary playerinfo struct
-- Fixed movies playing at wrong aspects
-- Minor bugfixes all around
-
-2006/03/07 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed some skin labels not displaying properly
-
-2006/03/06 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Temporaly fix crash if no vo_driver is specified
- (interface.c:877)
-
-2006/02/28 - Erik Augustson <erik_27can@yahoo.com>
-- Added sub window. The sub window is the WinID
- (-wid) when using the directx vo. The sub window
- hides when the file is audio only, and as well
- when the vo is not directx, and automatically
- adjusts and maintains video aspect ratios
-- Minor fixups
-- TODO: Get WinID working when using gl2, and add
- fix for both windows if going out of bounds on
- right and bottom of screen.
-
-2006/01/30 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed playing movies from network drives.
-
-2006/01/27 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a small annoyance when playing a network file
- with file associations when mplayer wasn't running,
- using GetLongPathNameA()
-
-2006/01/15 - Erik Augustson <erik_27can@yahoo.com>
-- Added some CD functionality if using libcdio.
-
-2005/12/02 - Erik Augustson <erik_27can@yahoo.com>
-- Fix to disable gui if running in slave mode.
-
-2005/11/14 - Erik Augustson <erik_27can@yahoo.com>
-- Implemented IPC with WM_COPYDATA to open new
- files/playlists in the current running mplayer,
- rather than having a new mplayer process spawn.
-
-2005/11/12 - Erik Augustson <erik_27can@yahoo.com>
-- Modified evMute to mute/unmute
-- Mute button should show as pressed when muted
-- Added evDecVolume and evIncVolume
-
-2005/11/09 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed screensaver issues
-
-2005/11/06 - Erik Augustson <erik_27can@yahoo.com>
-- Display fixes
-
-2005/09/18 - Erik Augustson <erik_27can@yahoo.com>
-- Playlist additions
-- Minor playlist bugfixes
-
-2005/09/16 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Code cleanup
-
-2005/09/05 - Erik Augustson <erik_27can@yahoo.com>
-- Updated to apply to current CVS
-
-2005/07/27 - Erik Augustson <erik_27can@yahoo.com>
-- Added initial evEqualizer for brightness, contrast,
- hue and saturation of videos.
-
-2005/07/26 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed double click on playlist
-- Added support for screenshot video filter, vf_screenshot patch
- is also needed
-
-2005/06/19 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Removed -console switch, moved console stuff out of mplayer main,
- console option is handled in wincfg, it's switchable at runtime
- from the gui and the state is saved
-
-2005/06/15 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed bugs with DVD chapter skipping
-- Title/chapter switching dialog works again :)
-- Fixed a bug with url's not working after playing a DVD
-- Removed fullscreen handling from mplayer.c. It's now
- handled in interface.c
-- Disabled loading/saving playlists, and adding files/urls
- while playing a DVD
-
-2005/06/12 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Added -console cmd line option to bring up a dos console
- that displays mplayer messages
-
-2005/06/10 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a bug with the audio filters not loading
-- Fixed bugs with the audio delay and stereo sliders
-- Added a few safety checks
-
-2005/06/08 - Erik Augustson <erik_27can@yahoo.com>
-- Added initial evPreferences
-- Fixed a bug with the load subtitle dialog
-- Some code cleanup and minor fixes here and there
-
-2005/06/02 - Erik Augustson <erik_27can@yahoo.com>
-- Fixed a bug with pathnames in the open url dialog
-
-2005/05/26 - Erik Augustson <erik_27can@yahoo.com>
-- Added "Add file" and "Add url" menu to the playlist
-- Fixed file skipping when double-clicking playlist entries
-
-2005/05/19 - Erik Augustson <erik_27can@yahoo.com>
-- added simple url history
-
-2005/05/12 - Erik Augustson <erik_27can@yahoo.com>
-- added load and save playlists options
-- fixed opening remote m3u and pls files in open url
-- no problems so far with evprev and evnext :)
-
-2005/05/10 - Erik Augustson <erik_27can@yahoo.com>
-- more evNext and evPrev fixes
-
-2005/05/06 - Erik Augustson <erik_27can@yahoo.com>
-- implemented mplEnd() for proper looping fix
-- fixed bugs in evNext and evPrev
-- re-organized the menus
-
-2005/03/02 - Gianluigi Tiesi <sherpya@netfarm.it>
-- adapted subtitle patch from Raul <zomps@mail.astar.ee>
-- readapted endless loop fix to not touch mp_msg.c
-Erik Augustson <erik_27can@yahoo.com>
-- small fixes, orginal endless loop fix
-
-2005/02/25 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Fixed exit stuff (I hope ;P)
-- Fixes to Erik's title/chapter selector
-Erik Augustson <erik_27can@yahoo.com>
-- Added additional gui events
-- Added evPrev and evNext dvd chapter switching
-
-2005/02/23 - Erik Augustson <erik_27can@yahoo.com>
-- added dvd title/chapter switching
-
-2005/02/20 - Gianluigi Tiesi <sherpya@netfarm.it>
-- fixed dvd stop and play
-Erik Augustson <erik_27can@yahoo.com>
-- imported some stuff from unix gui
-- fixed file play after dvd
-
-2005/02/18 - Erik Augustson <erik_27can@yahoo.com>
-- addons for dvd playing
-
-2005/02/16 - Gianluigi Tiesi <sherpya@netfarm.it>
-- renamed README to README.txt
-- retain window position even when switching the skin
-- converted all opendir calls to native win32 calls
-- adding filename as title without directory for all calls
-- more cleanups in skinloader/unloader
-- removed a lot of warnings
-- removed unused includes
-Erik Augustson <erik_27can@yahoo.com>
-- added online help menu
-
-2005/02/15 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Disabled access to gui when gui->mainwindow doesn't match hwnd passed to windproc
-- Fixed save position for main window gui
-- Cleanups in skinloader/unloader
-Erik Augustson erik_27can@yahoo.com
-- Added saving main window position to gui config
-- Fixes on playlist for vcd
-
-2005/02/13 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Fixed multithreaded (I hope ;P)
-- Skinbrowser window is closed when a skin is changed, this prevents crashes if multiple clicks
-- Playlist window is updated if files are added while playlist is visible
-- Removed patch on mplayer.rc, take icon using the included routine
-- SkinBrowser and Playlist dialogs can be opened/closed by clicking multiple times gui buttons
-- Added support for DVD, stop dvd + play is broken ;(
-- ifdef-ed a lot of debug stuff
-- Fixed systray icon removing
-- Added Erik and me to about dialog ;)
-Erik Augustson <erik_27can@yahoo.com>
-- Added key handling for the gui window
-- Small fixes on tray icon stuff
-
-2005/02/11 - Gianluigi Tiesi <sherpya@netfarm.it>
-- fixed sliders, balance is not 100% working, anyway dsound output driver doesn't support balanced audio
-- remade threaded
-- removed demuxer/avi patches, really needed ??
-- added a fake vo_init if opengl is not enabled
-Erik Augustson <erik_27can@yahoo.com>
-- fixes on traymenu play
-- added a base configuration reader/writer - only support for skin selection for now
-
-2005/02/10 - Gianluigi Tiesi <sherpya@netfarm.it>
-- fixed (workarounded) the NULL filename bug
-- moved add directory directly into gui.c
-- it starts to be usable :)
-Erik Augustson <erik_27can@yahoo.com>
-- Added systray support
-- Added skin browser option to menu (some skins don't show a skin browser button)
-
-2005/02/09 - Gianluigi Tiesi <sherpya@netfarm.it>
-- Fixed window disappearing bug
-- Made a patch compatible with current tree
-- Fixed icons in minor dialogs
-- Major cleanup and code reorganization
-
-2005/02/08 - Erik Augustson <erik_27can@yahoo.com>
-- Removed multi-threading, mplayer now runs in a single thread
-- Play directory now works as intended
-- Added a Skin browser, double-click skin names to switch skins
-- Still more things todo
-
-pre4
-- URL open
-- use windows native menus
-- Gui runs in a separate thread now because some controls interrupt playback :(
-
-pre 3
-- some of the previous features broken again
-- full font loading/display support
-- better integration into mplayer
-- seek bar, balance, volume control work
-
-pre 2
-- playlist
-- Drag 'N Drop support
-- fixed segfault when no skinfile found
-
-pre 1
-- initial revision
-- play/pause works
-- loads "blue" skin
-- still lot of things todo
diff --git a/Gui/win32/README b/Gui/win32/README
deleted file mode 100644
index 7463258d2f..0000000000
--- a/Gui/win32/README
+++ /dev/null
@@ -1,20 +0,0 @@
-MPlayer Windows GUI (c)
-2003 Sascha Sommer - <saschasommer@freenet.de>
-2006 Erik Augustson - <erik_27can@yahoo.com>
-2006 Gianluigi Tiesi - <sherpya@netfarm.it>
-
-This beta gui for win32 was originally written by Sascha Sommer and
-has since been heavily modified by myself (Erik Augustson) and Gianluigi
-Tiesi. It follows the same concept for the linux gui, and should be
-able to load all(most) of the current skins available for the linux gui.
-
-To compile, quite simply pass --enable-gui to configure, and it is highly
-recommended to also pass --enable-static="-mwindows" to link mplayer as
-a windows binary. NOTE: this will also link mencoder with -mwindows
-and thus link mencoder as a windows binary as well.
-
-To enable use of the gui, mplayer.exe must be renamed to/copied as
-gmplayer.exe.
-
-Please send all bug reports/comments/requests/gripes to:
-<erik_27can@yahoo.com>
diff --git a/Gui/win32/dialogs.c b/Gui/win32/dialogs.c
deleted file mode 100644
index 6b38f8635f..0000000000
--- a/Gui/win32/dialogs.c
+++ /dev/null
@@ -1,1133 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <windows.h>
-#include <commctrl.h>
-#include <interface.h>
-#include <mp_msg.h>
-#include <help_mp.h>
-#include <stream/stream.h>
-#include <libmpdemux/demuxer.h>
-#include <libmpdemux/stheader.h>
-#include "gui.h"
-#include "wincfg.h"
-#include "dialogs.h"
-#include "libvo/sub.h"
-
-WNDPROC OldUrlWndProc;
-LRESULT CALLBACK SubUrlWndProc(HWND, UINT, WPARAM, LPARAM);
-extern int vo_gamma_brightness;
-extern int vo_gamma_saturation;
-extern int vo_gamma_contrast;
-extern int vo_gamma_hue;
-extern int set_video_colors(sh_video_t *sh_video, char *item, int value);
-extern int get_video_colors(sh_video_t *sh_video, char *item, int *value);
-
-guiInterface_t guiIntfStruct;
-int addurl = 0;
-
-extern mp_osd_obj_t* vo_osd_list;
-extern char **sub_name;
-
-void guiLoadSubtitle(char *name)
-{
- if (!guiIntfStruct.Playing)
- {
- guiIntfStruct.SubtitleChanged = 1;
- return;
- }
- if (subdata)
- {
- mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_DeletingSubtitles);
- sub_free(subdata);
- subdata = NULL;
- vo_sub = NULL;
- if (vo_osd_list)
- {
- int len;
- mp_osd_obj_t *osd = vo_osd_list;
- while (osd)
- {
- if (osd->type == OSDTYPE_SUBTITLE) break;
- osd = osd->next;
- }
- if (osd && osd->flags & OSDFLAG_VISIBLE)
- {
- len = osd->stride * (osd->bbox.y2 - osd->bbox.y1);
- memset(osd->bitmap_buffer, 0, len);
- memset(osd->alpha_buffer, 0, len);
- }
- }
- }
-
- if (name)
- {
- mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_LoadingSubtitles, name);
- subdata = sub_read_file(strdup(name), guiIntfStruct.FPS);
- if (!subdata) mp_msg(MSGT_GPLAYER, MSGL_ERR, MSGTR_CantLoadSub,name);
- sub_name = (malloc(2 * sizeof(char*))); /* when mplayer will be restarted */
- sub_name[0] = strdup(name); /* sub_name[0] will be read */
- sub_name[1] = NULL;
- }
- update_set_of_subtitles();
-}
-
-int display_openfilewindow(gui_t *gui, int add)
-{
- OPENFILENAME fileopen;
- int result = 0;
- char filelist[MAXFILE];
- char filename[MAX_PATH];
- char directory[MAX_PATH];
- char *filespec = NULL;
- char *filepart = NULL;
-
- memset(&fileopen, 0, sizeof(OPENFILENAME));
- memset(filelist, 0, sizeof(filelist));
-
- fileopen.lStructSize = sizeof(OPENFILENAME);
- fileopen.hwndOwner = gui->mainwindow;
- fileopen.hInstance = GetModuleHandle(NULL);
- fileopen.lpstrFilter = "All Files (*.*)\0*.*\0"
- "Media Files (*.avi;*.asf;*.wmv;*.mpg;*.mpeg;*.m2v;*.mov;\
- *.rmvb;*.rm;*.ogm;*.mp3;*.wav;*.wma;*.ra;*.ogg)\0\
- *.avi;*.asf;*.wmv;*.mpg;*.mpeg;*.m2v;*.mov;\
- *.rmvb;*.rm;*.ogm;*.mp3;*.wav;*.wma;*.ra;*.ogg\0"
- "Video Files (*.avi;*.mpg;*.mpeg;*.mov)\0*.avi;*.mpg;*.mpeg;*.mov\0"
- "Avisynth Scripts (*.avs)\0*.avs\0"
- "Audio Files (*.mp3;*.wav;*.ra)\0*.mp3;*.wav;*.ra\000";
- fileopen.nFilterIndex = 0;
- fileopen.lpstrTitle = "Add file(s)...";
- fileopen.Flags = OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST| OFN_LONGNAMES | OFN_EXPLORER| OFN_READONLY | OFN_HIDEREADONLY;
- fileopen.lpstrFile = filelist;
- fileopen.lpstrCustomFilter = NULL;
- fileopen.nMaxFile = MAXFILE;
-
- if(GetOpenFileName(&fileopen))
- {
- /* clear playlist */
- if(!add) gui->playlist->clear_playlist(gui->playlist);
-
- memcpy(directory, fileopen.lpstrFile, fileopen.nFileOffset - 1);
- directory[fileopen.nFileOffset - 1] = 0;
-
- do
- {
- filespec = &fileopen.lpstrFile[fileopen.nFileOffset];
- filename[0] = 0;
- strcat(filename, directory);
- strcat(filename, "\\");
- strcat(filename, filespec);
-
- if (GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY)
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] %s is a directory, skipping...\n", filename);
- else
- {
- if (GetFullPathName(filename, MAX_PATH, filename, &filepart))
- {
- mplSetFileName(NULL, filename, STREAMTYPE_FILE);
- if(!parse_filename(filename, playtree, mconfig, 0))
- gui->playlist->add_track(gui->playlist, filename, NULL, filepart, 0);
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding file: %s - path %s\n", filespec, filename);
- result++;
- }
- }
- fileopen.nFileOffset += strlen(filespec) + 1;
- } while (*filespec);
- }
- return result;
-}
-
-void display_opensubtitlewindow(gui_t *gui)
-{
- OPENFILENAME subtitleopen;
- char subtitlefile[MAX_PATH];
-
- /* Safety check */
- if (guiIntfStruct.Playing == 0 || !guiIntfStruct.sh_video) return;
-
- memset(&subtitleopen, 0, sizeof(OPENFILENAME));
- memset(subtitlefile, 0, sizeof(subtitlefile));
-
- subtitleopen.lStructSize = sizeof(OPENFILENAME);
- subtitleopen.hwndOwner = gui->mainwindow;
- subtitleopen.hInstance = GetModuleHandle(NULL);
- subtitleopen.lpstrFilter = "All Files (*.*)\0*.*\0"
- "Subtitle Files (*.srt;*.txt;*.vob)\0*.srt;*.txt;*.vob\0";
- subtitleopen.nFilterIndex = 0;
- subtitleopen.lpstrTitle = "Add Subtitle...";
- subtitleopen.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER | OFN_READONLY | OFN_HIDEREADONLY;
- subtitleopen.lpstrFile = subtitlefile;
- subtitleopen.lpstrCustomFilter = NULL;
- subtitleopen.nMaxFile = MAXFILE;
-
- if(GetOpenFileName(&subtitleopen))
- guiLoadSubtitle(subtitlefile);
-}
-
-void display_loadplaylistwindow(gui_t *gui)
-{
- OPENFILENAME playlistopen;
- char playlistfile[MAX_PATH];
-
- memset(&playlistopen, 0, sizeof(OPENFILENAME));
- memset(playlistfile, 0, sizeof(playlistfile));
-
- playlistopen.lStructSize = sizeof(OPENFILENAME);
- playlistopen.hwndOwner = gui->mainwindow;
- playlistopen.hInstance = GetModuleHandle(NULL);
- playlistopen.lpstrFilter = "All Files (*.*)\0*.*\0"
- "Playlist Files (*.m3u;*.pls;*.txt)\0*.m3u;*.pls;*.txt\0";
- playlistopen.nFilterIndex = 0;
- playlistopen.lpstrTitle = "Load Playlist...";
- playlistopen.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER | OFN_READONLY | OFN_HIDEREADONLY;
- playlistopen.lpstrFile = playlistfile;
- playlistopen.lpstrCustomFilter = NULL;
- playlistopen.nMaxFile = MAXFILE;
-
- if(GetOpenFileName(&playlistopen))
- {
- if(parse_filename(playlistfile, playtree, mconfig, 1))
- gui->startplay(gui);
- }
-}
-
-void display_saveplaylistwindow(gui_t* gui)
-{
- OPENFILENAME playlistsave;
- static FILE *playlist_file = NULL;
- char playlistname[MAX_PATH];
-
- memset(&playlistsave, 0, sizeof(OPENFILENAME));
- memset(playlistname, 0, sizeof(playlistname));
-
- playlistsave.lStructSize = sizeof(OPENFILENAME);
- playlistsave.hwndOwner = gui->mainwindow;
- playlistsave.hInstance = GetModuleHandle(NULL);
- playlistsave.lpstrFilter = "Playlist Files (*.pls)\0*.pls\0";
- playlistsave.nFilterIndex = 0;
- playlistsave.lpstrTitle = "Save Playlist...";
- playlistsave.Flags = OFN_LONGNAMES | OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
- playlistsave.lpstrFile = playlistname;
- playlistsave.lpstrCustomFilter = NULL;
- playlistsave.nMaxFile = MAXFILE;
-
- if(GetSaveFileName(&playlistsave))
- {
- int i=0;
- HANDLE my_playlist;
-
- if(!strstr(playlistname, ".pls")) strcat(playlistname, ".pls");
-
- my_playlist = CreateFile(playlistname,
- GENERIC_WRITE,
- 0,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
- NULL);
-
- if(my_playlist != INVALID_HANDLE_VALUE)
- {
- CloseHandle(my_playlist); /* close the file first so we can write to it */
- playlist_file = fopen(playlistsave.lpstrFile, "w");
- fprintf(playlist_file, "[playlist]\n");
- fprintf(playlist_file, "numberofentries=%d\n", gui->playlist->trackcount);
-
- for(i=0; i<(gui->playlist->trackcount); i++)
- {
- fprintf(playlist_file, "File%i=%s\n", i + 1, gui->playlist->tracks[i]->filename);
- fprintf(playlist_file, "Length%i=-1\n", i + 1);
- }
- fclose(playlist_file);
- }
- }
-}
-
-static LRESULT CALLBACK OpenUrlWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- static HWND url;
- HWND wdg;
- FILE *f;
- char *history = get_path("gui.url");
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- switch (iMsg)
- {
- case WM_CREATE:
- wdg = CreateWindow("button", "Ok",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 43, 80, 25, hwnd,
- (HMENU) ID_OK,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- wdg = CreateWindow("button", "Cancel",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 90, 43, 80, 25, hwnd,
- (HMENU) ID_CANCEL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- url = wdg = CreateWindowEx(WS_EX_CLIENTEDGE,
- "edit", NULL,
- WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL,
- 4, 10, 300, 25, hwnd,
- (HMENU) ID_URL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
- SendMessage(wdg, EM_SETLIMITTEXT, MAX_PATH, 0);
-
- /*subclass the edit box to capture the VK_RETURN key*/
- OldUrlWndProc = (WNDPROC)SetWindowLongPtr(url, GWLP_WNDPROC, (LONG_PTR)SubUrlWndProc);
-
- if((f = fopen(history, "r")))
- {
- char lasturl[MAX_PATH];
- fgets(lasturl, MAX_PATH, f);
- SendMessage(url, WM_SETTEXT, 0, (LPARAM) lasturl);
- SendMessage(url, EM_SETSEL, 0, -1);
- fclose(f);
- }
- break;
- case WM_KEYDOWN:
- switch (LOWORD(wParam))
- {
- case VK_RETURN:
- SendMessage(hwnd, WM_COMMAND, (WPARAM) ID_OK, 0);
- break;
- }
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case ID_CANCEL:
- DestroyWindow(hwnd);
- return 0;
- case ID_OK:
- {
- char file[MAX_PATH];
- SendMessage(url, WM_GETTEXT, MAX_PATH, (LPARAM) file);
- mplSetFileName(NULL, file, STREAMTYPE_STREAM);
- if((f = fopen(history, "wt+")))
- {
- fprintf(f, file);
- fclose(f);
- }
- if(!parse_filename(file, playtree, mconfig, addurl? 0 : 1))
- gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0);
- if(!addurl)
- gui->startplay(gui);
- else update_playlistwindow();
- DestroyWindow(hwnd);
- }
- break;
- }
- }
- return 0;
- case WM_DESTROY:
- {
- PostQuitMessage (0);
- addurl = 0;
- return 0;
- }
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-LRESULT CALLBACK SubUrlWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- switch(iMsg)
- {
- case WM_KEYDOWN:
- switch (LOWORD(wParam))
- {
- case VK_RETURN:
- SendMessage(FindWindow(NULL, "MPlayer - Open URL..."), WM_COMMAND, (WPARAM) ID_OK, 0);
- break;
- }
- }
- return CallWindowProc(OldUrlWndProc, hwnd, iMsg, wParam, lParam);
-}
-
-void display_openurlwindow(gui_t *gui, int add)
-{
- HWND hWnd;
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
-
- if(add) addurl = 1;
- if(FindWindow(NULL, "MPlayer - Open URL...")) return;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = OpenUrlWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY2;
- wc.lpszClassName = "MPlayer - URL";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (320 / 2);
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (100 / 2);
- hWnd = CreateWindow("MPlayer - URL",
- "MPlayer - Open URL...",
- WS_POPUPWINDOW | WS_CAPTION,
- x,
- y,
- 320,
- 100,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
-
-static void create_playlistmenu(gui_t *gui)
-{
- gui->playlistmenu = CreatePopupMenu();
- AppendMenu(gui->playlistmenu, MF_STRING, ID_ADDFILE, "Add File...");
- AppendMenu(gui->playlistmenu, MF_STRING, ID_ADDURL, "Add Url...");
- AppendMenu(gui->playlistmenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->playlistmenu, MF_STRING, ID_REMOVE, "Remove Selected");
- AppendMenu(gui->playlistmenu, MF_STRING, ID_CLEAR, "Clear Playlist");
- AppendMenu(gui->playlistmenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->playlistmenu, MF_STRING, ID_CLOSE, "Close");
-}
-
-static void updatetracklist(HWND hwnd)
-{
- int i=0;
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- /* clear listbox */
- SendDlgItemMessage(hwnd, ID_TRACKLIST, LB_RESETCONTENT, 0, 0);
- for (i=0; i < gui->playlist->trackcount; i++)
- if (gui->playlist->tracks[i]->title)
- SendDlgItemMessage(hwnd, ID_TRACKLIST, LB_ADDSTRING, 0, (LPARAM)gui->playlist->tracks[i]->title);
- else
- SendDlgItemMessage(hwnd, ID_TRACKLIST, LB_ADDSTRING, 0, (LPARAM)gui->playlist->tracks[i]->filename);
-}
-
-static LRESULT CALLBACK PlayListWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- HWND wdg;
- POINT cursor;
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- playlist_t *pl = gui ? gui->playlist : NULL;
- switch (iMsg)
- {
- case WM_CREATE:
- {
- wdg = CreateWindow("button", "Play",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 10, 80, 25, hwnd,
- (HMENU) ID_PLAY,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- wdg = CreateWindow ("button", "Up",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 37, 80, 25, hwnd,
- (HMENU) ID_UP,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT,(WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- wdg = CreateWindow ("button", "Down",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 64, 80, 25, hwnd,
- (HMENU) ID_DOWN,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),0);
-
- wdg = CreateWindow ("button", "Remove",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 91, 80, 25, hwnd,
- (HMENU) ID_REMOVE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),0);
-
- wdg = CreateWindow ("button", "Load",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 118, 80, 25, hwnd,
- (HMENU) ID_PLAYLISTLOAD,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),0);
-
- wdg = CreateWindow ("button", "Save",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 145, 80, 25, hwnd,
- (HMENU) ID_PLAYLISTSAVE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),0);
-
- wdg = CreateWindow ("button", "Close",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 193, 80, 25, hwnd,
- (HMENU) ID_CLOSE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),0);
-
- wdg = CreateWindow ("listbox", "tracklist", WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL |
- WS_HSCROLL | LBS_DISABLENOSCROLL, 92, 10, 300, 208, hwnd, (HMENU) ID_TRACKLIST,
- ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
- SendMessage(wdg, LB_SETHORIZONTALEXTENT, MAX_PATH*4, 0);
- break;
- }
- case WM_CONTEXTMENU:
- {
- GetCursorPos(&cursor);
- SetForegroundWindow(hwnd);
- TrackPopupMenu(gui->playlistmenu, 0, cursor.x, cursor.y, 0, hwnd, NULL);
- break;
- }
- case WM_COMMAND:
- {
- int selected = 0;
- int i;
- for (i=0; i<pl->trackcount; i++)
- if(0 < SendDlgItemMessage(hwnd, ID_TRACKLIST, LB_GETSEL, i, 0)) selected = i + 1;
- switch (LOWORD(wParam))
- {
- case ID_CLOSE:
- DestroyWindow(hwnd);
- return 0;
- case ID_TRACKLIST:
- if(HIWORD(wParam) == LBN_DBLCLK)
- {
- case ID_PLAY:
- if(selected) pl->current = selected - 1;
- mplSetFileName(NULL, pl->tracks[pl->current]->filename, STREAMTYPE_STREAM);
- gui->startplay(gui);
- }
- return 0;
- case ID_UP:
- {
- if(selected) pl->moveup_track(pl, selected);
- selected--;
- break;
- }
- case ID_DOWN:
- {
- if(selected) pl->movedown_track(pl, selected);
- selected++;
- break;
- }
- case ID_REMOVE:
- if(selected) pl->remove_track(pl, selected);
- break;
- case ID_ADDFILE:
- {
- if(guiIntfStruct.StreamType == STREAMTYPE_DVD ||
- guiIntfStruct.StreamType == STREAMTYPE_DVDNAV) return 0;
- display_openfilewindow(gui, 1);
- break;
- }
- case ID_ADDURL:
- {
- if(guiIntfStruct.StreamType == STREAMTYPE_DVD ||
- guiIntfStruct.StreamType == STREAMTYPE_DVDNAV) return 0;
- display_openurlwindow(gui, 1);
- break;
- }
- case ID_CLEAR:
- {
- if(!gui->playlist->trackcount) return 0;
- gui->playlist->clear_playlist(gui->playlist);
- break;
- }
- case ID_PLAYLISTLOAD:
- {
- if(guiIntfStruct.StreamType == STREAMTYPE_DVD ||
- guiIntfStruct.StreamType == STREAMTYPE_DVDNAV) return 0;
- display_loadplaylistwindow(gui);
- break;
- }
- case ID_PLAYLISTSAVE:
- {
- /* no point saving an empty playlist */
- if(!gui->playlist->trackcount ||
- guiIntfStruct.StreamType == STREAMTYPE_DVD ||
- guiIntfStruct.StreamType == STREAMTYPE_DVDNAV)
- return 0;
- display_saveplaylistwindow(gui);
- break;
- }
- }
- updatetracklist(hwnd);
- if(selected < 1) selected = 1;
- else if(selected>pl->trackcount) selected = pl->trackcount;
- SendDlgItemMessage(hwnd, ID_TRACKLIST, LB_SETCURSEL, selected - 1, 0);
- return 0;
- }
- case WM_DROPFILES:
- {
- char file[MAX_PATH];
- int filecount = DragQueryFile((HDROP) wParam, -1, file, MAX_PATH);
- int i;
- for (i=0; i<filecount; i++)
- {
- DragQueryFile((HDROP) wParam, i, file, MAX_PATH);
- if(!parse_filename(file, playtree, mconfig, 0))
- pl->add_track(pl, file, NULL, NULL, 0);
- }
- DragFinish((HDROP) wParam);
- updatetracklist(hwnd);
- }
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-void update_playlistwindow(void)
-{
- HWND hWnd = FindWindow(NULL, "MPlayer Playlist");
- if (hWnd) updatetracklist(hWnd);
-}
-
-void display_playlistwindow(gui_t *gui)
-{
- HWND hWnd = FindWindow(NULL, "MPlayer Playlist");
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
-
- if (hWnd)
- {
- SendMessage(hWnd, WM_CLOSE, 0, 0);
- return;
- }
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = PlayListWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY2;
- wc.lpszClassName = "MPlayer - Playlist";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- create_playlistmenu(gui);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (400 / 2); /* Erik: center popup window on screen */
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (254 / 2);
- hWnd = CreateWindow("MPlayer - Playlist",
- "MPlayer Playlist",
- WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,
- x,
- y,
- 400,
- 254,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD)gui);
- updatetracklist(hWnd);
- DragAcceptFiles(hWnd,TRUE);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
-
-static LRESULT CALLBACK SkinBrowserWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- static HWND listbox;
- static char skinspath[MAX_PATH];
- gui_t* gui = (gui_t*) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- switch (iMsg)
- {
- case WM_CREATE:
- {
- HANDLE skinHandle = INVALID_HANDLE_VALUE;
- WIN32_FIND_DATA finddata;
-
- listbox = CreateWindow("listbox", NULL,
- WS_CHILD | WS_VISIBLE | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT |
- LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP,
- 4, 5, 166, 60, hwnd,
- (HMENU) ID_DIR,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(listbox, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- /* This opens the skins directory, lists the directory names, and adds them to the listbox */
- sprintf(skinspath, "%s/*.", get_path("skins"));
-
- skinHandle = FindFirstFile(skinspath, &finddata);
- if (skinHandle != INVALID_HANDLE_VALUE)
- {
- do
- {
- if (finddata.cFileName[0] == '.') continue;
- /* populate the listbox */
- capitalize(finddata.cFileName);
- SendDlgItemMessage(hwnd, ID_DIR, LB_ADDSTRING, 0, (LPARAM) finddata.cFileName);
- } while (FindNextFile(skinHandle, &finddata));
- FindClose(skinHandle);
- }
- else
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "Error opening %s\n", get_path("skins"));
- break;
- }
- case WM_COMMAND:
- {
- if ((HWND) lParam == listbox)
- {
- if(HIWORD(wParam) == LBN_DBLCLK)
- {
- int index = SendMessage(listbox, LB_GETCURSEL, 0, 0);
- int len = SendMessage(listbox, LB_GETTEXTLEN, index, 0);
- if (len)
- {
- if (guiIntfStruct.Playing) guiGetEvent(guiCEvent, (void *) guiSetStop);
- if (skinName) free(skinName);
- skinName = (char *) malloc(len+1);
- SendMessage(listbox, LB_GETTEXT, (WPARAM) index, (LPARAM) skinName);
- /* fill out the full pathname to the skin */
- strcpy(skinspath, get_path("skins"));
- strcat(skinspath, "\\");
- strcat(skinspath, skinName);
- ShowWindow(hwnd, SW_HIDE);
- Shell_NotifyIcon(NIM_DELETE, &nid);
- destroy_window(gui);
- create_window(gui, skinspath);
- create_subwindow(gui, skinspath);
- SendMessage(hwnd, WM_CLOSE, 0, 0); /* Avoid crashing when switching skin */
- }
- }
- }
- }
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-void display_skinbrowser(gui_t* gui)
-{
- HWND hWnd = FindWindow(NULL, "Skin Browser");
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
-
- if (hWnd)
- {
- SendMessage(hWnd, WM_CLOSE, 0, 0);
- return;
- }
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = SkinBrowserWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY2;
- wc.lpszClassName = "Skin Browser";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (180 / 2);
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (102 / 2);
- hWnd = CreateWindow("Skin Browser",
- "Skin Browser",
- WS_POPUPWINDOW |WS_CAPTION,
- x,
- y,
- 180,
- 102,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
-
-#ifdef USE_DVDREAD
-static LRESULT CALLBACK TitleChapterWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- static HWND title;
- static HWND chapter;
- HWND wdg;
- int i=0, j=0;
- char titles[MAX_PATH] = "";
- char chapters[MAX_PATH] = "";
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- switch (iMsg)
- {
- case WM_CREATE:
- wdg = CreateWindow("button", "Ok",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 43, 80, 25, hwnd,
- (HMENU) ID_OK,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- wdg = CreateWindow("button", "Cancel",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 90, 43, 80, 25, hwnd,
- (HMENU) ID_CANCEL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- title = CreateWindow("combobox", NULL,
- CBS_DROPDOWNLIST | CB_SHOWDROPDOWN | CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
- WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP,
- 4, 10, 80, 160, hwnd,
- (HMENU) ID_TITLESEL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
-
- SendMessage(title, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- chapter = CreateWindow("combobox", NULL,
- CBS_DROPDOWNLIST | CB_SHOWDROPDOWN | CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
- WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP,
- 90, 10, 80, 160, hwnd,
- (HMENU) ID_CHAPTERSEL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(chapter, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- for (i=0; i<guiIntfStruct.DVD.titles; i++)
- {
- /* we have to reverse the order here because of the way CB_INSERTSTRING adds items */
- sprintf(&titles[i], "%d", guiIntfStruct.DVD.titles - i);
- SendDlgItemMessage(hwnd, ID_TITLESEL, CB_INSERTSTRING, 0, (LPARAM) &titles[i]);
- }
- SendDlgItemMessage(hwnd, ID_TITLESEL, CB_SETCURSEL, dvd_title, 0);
-
- for (j=0; j<guiIntfStruct.DVD.chapters; j++)
- {
- sprintf(&chapters[j], "%d", guiIntfStruct.DVD.chapters - j);
- SendDlgItemMessage(hwnd, ID_CHAPTERSEL, CB_INSERTSTRING, 0, (LPARAM) &chapters[j]);
- }
- SendDlgItemMessage(hwnd, ID_CHAPTERSEL, CB_SETCURSEL, dvd_chapter, 0);
-
- break;
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case ID_CANCEL:
- DestroyWindow(hwnd);
- return 0;
- case ID_OK:
- {
- guiIntfStruct.DVD.current_title = SendMessage(title, CB_GETCURSEL, 0, 0) + 1;
- guiIntfStruct.DVD.current_chapter = SendMessage(chapter, CB_GETCURSEL, 0, 0) + 1;
-
- if((guiIntfStruct.DVD.current_title != 0 || guiIntfStruct.DVD.current_chapter != 0))
- {
- gui->startplay(gui);
- DestroyWindow(hwnd);
- }
- }
- break;
- }
- }
- return 0;
- case WM_DESTROY:
- PostQuitMessage (0);
- return 0;
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-void display_chapterselwindow(gui_t *gui)
-{
- HWND hWnd;
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
-
- if (guiIntfStruct.StreamType != STREAMTYPE_DVD) return;
- if (FindWindow(NULL, "Select Title/Chapter...")) return;
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = TitleChapterWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY2;
- wc.lpszClassName = "Select Title/Chapter...";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (180 / 2);
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (100 / 2);
- hWnd = CreateWindow("Select Title/Chapter...",
- "Select Title/Chapter...",
- WS_POPUPWINDOW | WS_CAPTION,
- x,
- y,
- 180,
- 100,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
-#endif
-
-static LRESULT CALLBACK EqWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- HWND btn, label, eq0, eq1, eq2, eq3;
-
- switch (iMsg)
- {
- case WM_CREATE:
- {
- btn = CreateWindow("button", "Reset",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 157, 143, 80, 25, hwnd,
- (HMENU) ID_DEFAULTS,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Close",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 243, 143, 80, 25, hwnd,
- (HMENU) ID_CLOSE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Brightness",
- WS_CHILD | WS_VISIBLE,
- 12, 122, 70, 15, hwnd,
- NULL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Contrast",
- WS_CHILD | WS_VISIBLE,
- 99, 122, 70, 15, hwnd,
- NULL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Hue",
- WS_CHILD | WS_VISIBLE,
- 191, 122, 70, 15, hwnd,
- NULL,
- ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Saturation",
- WS_CHILD | WS_VISIBLE,
- 260, 122, 70, 15, hwnd,
- NULL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- eq0 = CreateWindow(TRACKBAR_CLASS, "brightness",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED |
- TBS_VERT | TBS_NOTICKS,
- 30, 0, 20, 120, hwnd,
- (HMENU) ID_EQ0,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendDlgItemMessage(hwnd, ID_EQ0, TBM_SETRANGE, 1, MAKELONG(0, 200));
-
- eq1 = CreateWindow(TRACKBAR_CLASS, "contrast",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED |
- TBS_VERT | TBS_NOTICKS,
- 112, 0, 20, 120, hwnd,
- (HMENU) ID_EQ1,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendDlgItemMessage(hwnd, ID_EQ1, TBM_SETRANGE, 1, MAKELONG(0, 200));
-
- eq2 = CreateWindow(TRACKBAR_CLASS, "hue",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED |
- TBS_VERT | TBS_NOTICKS,
- 194, 0, 20, 120, hwnd,
- (HMENU) ID_EQ2,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendDlgItemMessage(hwnd, ID_EQ2, TBM_SETRANGE, 1, MAKELONG(0, 200));
-
- eq3 = CreateWindow(TRACKBAR_CLASS, "saturation",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED |
- TBS_VERT | TBS_NOTICKS,
- 276, 0, 20, 120, hwnd,
- (HMENU) ID_EQ3,
- ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
- SendDlgItemMessage(hwnd, ID_EQ3, TBM_SETRANGE, 1, MAKELONG(0, 200));
-
- if(guiIntfStruct.sh_video && guiIntfStruct.Playing)
- {
- EnableWindow(eq0, 1); EnableWindow(eq1, 1); EnableWindow(eq2, 1); EnableWindow(eq3, 1);
- get_video_colors(guiIntfStruct.sh_video, "brightness", &vo_gamma_brightness);
- get_video_colors(guiIntfStruct.sh_video, "contrast", &vo_gamma_contrast);
- get_video_colors(guiIntfStruct.sh_video, "hue", &vo_gamma_hue);
- get_video_colors(guiIntfStruct.sh_video, "saturation", &vo_gamma_saturation);
- }
- SendDlgItemMessage(hwnd, ID_EQ0, TBM_SETPOS, 1, (LPARAM)100 - vo_gamma_brightness);
- SendDlgItemMessage(hwnd, ID_EQ1, TBM_SETPOS, 1, (LPARAM)100 - vo_gamma_contrast);
- SendDlgItemMessage(hwnd, ID_EQ2, TBM_SETPOS, 1, (LPARAM)100 - vo_gamma_hue);
- SendDlgItemMessage(hwnd, ID_EQ3, TBM_SETPOS, 1, (LPARAM)100 - vo_gamma_saturation);
- break;
- }
- case WM_VSCROLL:
- {
- switch (LOWORD(wParam))
- {
- case TB_THUMBTRACK:
- if(guiIntfStruct.sh_video && guiIntfStruct.Playing)
- {
- vo_gamma_brightness = 100 - SendDlgItemMessage(hwnd, ID_EQ0, TBM_GETPOS, 0, 0);
- set_video_colors(guiIntfStruct.sh_video, "brightness", vo_gamma_brightness);
-
- vo_gamma_contrast = 100 - SendDlgItemMessage(hwnd, ID_EQ1, TBM_GETPOS, 0, 0);
- set_video_colors(guiIntfStruct.sh_video, "contrast", vo_gamma_contrast);
-
- vo_gamma_hue = 100 - SendDlgItemMessage(hwnd, ID_EQ2, TBM_GETPOS, 0, 0);
- set_video_colors(guiIntfStruct.sh_video, "hue", vo_gamma_hue);
-
- vo_gamma_saturation = 100 - SendDlgItemMessage(hwnd, ID_EQ3, TBM_GETPOS, 0, 0);
- set_video_colors(guiIntfStruct.sh_video, "saturation", vo_gamma_saturation);
- }
- else
- {
- EnableWindow(GetDlgItem(hwnd, ID_EQ0), 0);
- EnableWindow(GetDlgItem(hwnd, ID_EQ1), 0);
- EnableWindow(GetDlgItem(hwnd, ID_EQ2), 0);
- EnableWindow(GetDlgItem(hwnd, ID_EQ3), 0);
- }
- break;
- }
- }
- case WM_CTLCOLORDLG:
- case WM_CTLCOLORSTATIC:
- {
- HDC hdc = (HDC)wParam;
- SetBkMode(hdc, TRANSPARENT);
- return (INT_PTR)SOLID_GREY2;
- }
- break;
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case ID_CLOSE:
- DestroyWindow(hwnd);
- return 0;
- case ID_DEFAULTS:
- if(guiIntfStruct.sh_video && guiIntfStruct.Playing)
- {
- vo_gamma_brightness=0;
- SendDlgItemMessage(hwnd, ID_EQ0, TBM_SETPOS, 1, (LPARAM)100);
- set_video_colors(guiIntfStruct.sh_video, "brightness", vo_gamma_brightness);
-
- vo_gamma_contrast=0;
- SendDlgItemMessage(hwnd, ID_EQ1, TBM_SETPOS, 1, (LPARAM)100);
- set_video_colors(guiIntfStruct.sh_video, "contrast", vo_gamma_contrast);
-
- vo_gamma_hue=0;
- SendDlgItemMessage(hwnd, ID_EQ2, TBM_SETPOS, 1, (LPARAM)100);
- set_video_colors(guiIntfStruct.sh_video, "hue", vo_gamma_hue);
-
- vo_gamma_saturation=0;
- SendDlgItemMessage(hwnd, ID_EQ3, TBM_SETPOS, 1, (LPARAM)100);
- set_video_colors(guiIntfStruct.sh_video, "saturation", vo_gamma_saturation);
- }
- break;
- }
- }
- return 0;
- case WM_DESTROY:
- PostQuitMessage (0);
- return 0;
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-void display_eqwindow(gui_t *gui)
-{
- HWND hWnd;
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
-
- if(!guiIntfStruct.sh_video) return;
- if(FindWindow(NULL, "MPlayer - Equalizer")) return;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = EqWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY2;
- wc.lpszClassName = "MPlayer - Equalizer";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (332 / 2);
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (200 / 2);
- hWnd = CreateWindow("MPlayer - Equalizer",
- "MPlayer - Equalizer",
- WS_POPUPWINDOW | WS_CAPTION,
- x,
- y,
- 332,
- 200,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
diff --git a/Gui/win32/dialogs.h b/Gui/win32/dialogs.h
deleted file mode 100644
index b7b47ae7a6..0000000000
--- a/Gui/win32/dialogs.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _DIALOGS_H
-#define _DIALOGS_H
-
-#define TBS_TOOLTIPS 0x0100
-#define WM_SYSTRAY (WM_USER+1)
-#define UDM_SETRANGE32 (WM_USER+111)
-#define UDM_GETRANGE32 (WM_USER+112)
-#define UDM_SETPOS32 (WM_USER+113)
-#define UDM_GETPOS32 (WM_USER+114)
-
-#define SOLID_GREY (HBRUSH) CreateSolidBrush(RGB(232, 232, 232))
-#define SOLID_GREY2 (HBRUSH) CreateSolidBrush(RGB(175, 175, 175))
-
-#define gfree free
-
-#define MAXFILE 1024
-
-#define COPYRIGHT " MPlayer GUI for Windows\n\n" \
- " Copyright (c) 2003 Sascha Sommer\n" \
- " Copyright (c) 2006 Erik Augustson\n" \
- " Copyright (c) 2006 Gianluigi Tiesi"
-
-#define ONLINE_HELP_URL "http://www.mplayerhq.hu/DOCS/HTML/en/index.html"
-
-#define ID_OK 12
-#define ID_APPLY 13
-#define ID_CANCEL 14
-#define ID_CLOSE 15
-#define ID_DEFAULTS 16
-#define ID_VO_DRIVER 17
-#define ID_AO_DRIVER 18
-#define ID_DOUBLE 19
-#define ID_DIRECT 20
-#define ID_FRAMEDROP 21
-#define ID_NORMALIZE 22
-#define ID_SOFTMIX 23
-#define ID_EXTRASTEREO 24
-#define ID_TRACKBAR1 25
-#define ID_TRACKBAR2 26
-#define ID_UPDOWN1 27
-#define ID_UPDOWN2 28
-#define ID_EDIT1 29
-#define ID_EDIT2 30
-#define ID_CACHE 31
-#define ID_AUTOSYNC 32
-#define ID_NONE 33
-#define ID_OSD1 34
-#define ID_OSD2 35
-#define ID_OSD3 36
-#define ID_DVDDEVICE 37
-#define ID_CDDEVICE 38
-#define ID_PRIO 39
-#define ID_URL 40
-#define ID_TITLESEL 41
-#define ID_UP 42
-#define ID_DOWN 43
-#define ID_REMOVE 44
-#define ID_ADDFILE 45
-#define ID_TRACKLIST 46
-#define ID_SUBTITLE 47
-#define ID_PLAYLISTLOAD 48
-#define ID_PLAYLISTSAVE 49
-#define ID_ADDURL 50
-#define ID_DIR 51
-#define ID_PLAY 52
-#define ID_STOP 53
-#define ID_SEEKF 54
-#define ID_SEEKB 55
-#define ID_NTRACK 56
-#define ID_PTRACK 57
-#define ID_PLAYLIST 58
-#define ID_CLEAR 59
-#define ID_SHOWHIDE 60
-#define ID_SKINBROWSER 61
-#define ID_KEYHELP 62
-#define ID_ONLINEHELP 63
-#define ID_CHAPTERSEL 64
-#define ID_PREFS 65
-#define TRAYMENU 66
-#define IDFILE_OPEN 67
-#define IDEXIT 68
-#define IDURL_OPEN 69
-#define IDDIR_OPEN 70
-#define IDFILE_NEW 71
-#define IDFILE_SAVE 72
-#define IDHELP_ABOUT 73
-#define IDSUBTITLE_OPEN 74
-#define IDPLAYDISK 75
-#define ID_CONSOLE 76
-#define ID_EQ0 77
-#define ID_EQ1 78
-#define ID_EQ2 79
-#define ID_EQ3 80
-#define IDSUB_TOGGLE 81
-#define IDSUB_CYCLE 82
-#define ID_ASPECT1 83
-#define ID_ASPECT2 84
-#define ID_ASPECT3 85
-#define ID_ASPECT4 86
-#define ID_SUBWINDOW 87
-#define ID_TIMER 88
-#define ID_MUTE 89
-#define ID_FULLSCREEN 90
-
-/* gtk emulation */
-#define GTK_MB_FATAL 0x1
-#define GTK_MB_ERROR 0x2
-#define GTK_MB_WARNING 0x4
-#define GTK_MB_SIMPLE 0x8
-
-#endif
diff --git a/Gui/win32/gui.c b/Gui/win32/gui.c
deleted file mode 100644
index d079c82c5e..0000000000
--- a/Gui/win32/gui.c
+++ /dev/null
@@ -1,1551 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <windows.h>
-#include <windowsx.h>
-#include <shlobj.h>
-#include <version.h>
-#include <mplayer.h>
-#include <mp_fifo.h>
-#include <mp_msg.h>
-#include <help_mp.h>
-#include <input/input.h>
-#include <input/mouse.h>
-#include <osdep/keycodes.h>
-#include <stream/stream.h>
-#include <libvo/video_out.h>
-#include <interface.h>
-#include "gui.h"
-#include "wincfg.h"
-#include "dialogs.h"
-
-// HACK around bug in old mingw
-#undef INVALID_FILE_ATTRIBUTES
-#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
-
-#ifndef WM_XBUTTONDOWN
-# define WM_XBUTTONDOWN 0x020B
-# define WM_XBUTTONUP 0x020C
-# define WM_XBUTTONDBLCLK 0x020D
-#endif
-
-/* Globals / Externs */
-extern void renderinfobox(skin_t *skin, window_priv_t *priv);
-extern void renderwidget(skin_t *skin, image *dest, widget *item, int state);
-extern void mplayer_put_key(int code);
-extern void print_version(void);
-extern int WinID;
-float sub_aspect;
-
-DWORD oldtime;
-NOTIFYICONDATA nid;
-int console_state = 0;
-play_tree_t *playtree = NULL;
-
-static HBRUSH colorbrush = NULL; //Handle to colorkey brush
-static COLORREF windowcolor = RGB(255,0,255); //Windowcolor == colorkey
-
-void console_toggle(void)
-{
- if (console_state)
- {
- FreeConsole();
- console = 0;
- console_state = 0;
- }
- else
- {
- /* This code comes from: http://dslweb.nwnexus.com/~ast/dload/guicon.htm */
- CONSOLE_SCREEN_BUFFER_INFO coninfo;
- FILE *fp;
- HWND hwnd = NULL;
- console = 1;
- AllocConsole();
- SetConsoleTitle(MP_TITLE);
-
- /* disable the close button for now */
- while (!hwnd)
- {
- hwnd = FindWindow(NULL, MP_TITLE);
- Sleep(100);
- }
- DeleteMenu(GetSystemMenu(hwnd, 0), SC_CLOSE, MF_BYCOMMAND);
-
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
- coninfo.dwSize.Y = 1000;
- SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
- fp = freopen("con", "w", stdout);
- *stdout = *fp;
- setvbuf(stdout, NULL, _IONBF, 0);
- fp = freopen("con", "r", stdin);
- *stdin = *fp;
- setvbuf(stdin, NULL, _IONBF, 0);
- fp = freopen("con", "w", stdout);
- *stderr = *fp;
- setvbuf(stderr, NULL, _IONBF, 0);
- print_version();
- console_state = 1;
- }
-}
-
-void capitalize(char *filename)
-{
- unsigned int i;
- BOOL cap = TRUE;
- for (i=0; i < strlen(filename); i++)
- {
- if (cap)
- {
- cap = FALSE;
- filename[i] = toupper(filename[i]);
- }
- else if (filename[i] == ' ')
- cap = TRUE;
- else
- filename[i] = tolower(filename[i]);
- }
-}
-
-static image *get_drawground(HWND hwnd)
-{
- gui_t * gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return NULL;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd==hwnd)
- return &gui->window_priv[i]->img;
- return NULL;
-}
-
-static HBITMAP get_bitmap(HWND hwnd)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return NULL;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd == hwnd)
- return gui->window_priv[i]->bitmap;
- return NULL;
-}
-
-static int get_windowtype(HWND hwnd)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
- unsigned int i;
- if(!gui) return -1;
- for(i=0; i<gui->window_priv_count; i++)
- if(gui->window_priv[i]->hwnd == hwnd)
- return gui->window_priv[i]->type;
- return -1;
-}
-
-static void uninit(gui_t *gui)
-{
- if(gui->skin) destroy_window(gui);
- if(gui->playlist) gui->playlist->free_playlist(gui->playlist);
- gui->playlist = NULL;
-}
-
-/*
- the gui message handler
- tries to handle the incoming messages
- and passes them to the player's message handler if it can't handle them
-*/
-static void handlemsg(HWND hWnd, int msg)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
- if(msg == evNone) return;
-
- switch(msg)
- {
- case evLoadPlay:
- case evLoad:
- if(display_openfilewindow(gui, 0) && (msg == evLoadPlay))
- handlemsg(hWnd, evDropFile);
- return;
- case evLoadSubtitle:
- display_opensubtitlewindow(gui);
- break;
- case evPreferences:
- display_prefswindow(gui);
- return;
- case evPlayList:
- display_playlistwindow(gui);
- return;
- case evSkinBrowser:
- display_skinbrowser(gui);
- break;
- case evEqualizer:
- display_eqwindow(gui);
- break;
- case evAbout:
- MessageBox(hWnd, COPYRIGHT, "About", MB_OK);
- break;
- case evIconify:
- ShowWindow(hWnd, SW_MINIMIZE);
- break;
- case evIncVolume:
- mplayer_put_key(KEY_VOLUME_UP);
- break;
- case evDecVolume:
- mplayer_put_key(KEY_VOLUME_DOWN);
- break;
- default:
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] received msg %s (%i)\n", gui->skin->geteventname(msg), msg);
- break;
- }
- gui->playercontrol(msg);
-}
-
-static widget *clickedinsidewidget(gui_t *gui, int window, int x, int y)
-{
- unsigned int i;
- widget *item;
- for(i=0; i<gui->skin->widgetcount; i++)
- {
- item = gui->skin->widgets[i];
- if((item->window == window) && (item->x <= x) && (item->x + item->width >= x) &&
- (item->y <= y) && (item->y + item->height >= y))
- return item;
- }
- return NULL;
-}
-
-/* updates sliders and the display */
-static void updatedisplay(gui_t *gui, HWND hwnd)
-{
- unsigned int i;
- window_priv_t *priv = NULL;
- DWORD time = timeGetTime();
-
- if(!hwnd) return;
-
- /* load all potmeters hpotmeters */
- for(i=0; i<gui->skin->widgetcount; i++)
- {
- if(gui->skin->widgets[i]->type == tyHpotmeter || gui->skin->widgets[i]->type == tyPotmeter)
- {
- if(gui->skin->widgets[i]->msg == evSetVolume)
- gui->skin->widgets[i]->value = guiIntfStruct.Volume;
- else if(gui->skin->widgets[i]->msg == evSetMoviePosition)
- gui->skin->widgets[i]->value = guiIntfStruct.Position;
- else if(gui->skin->widgets[i]->msg == evSetBalance)
- gui->skin->widgets[i]->value = guiIntfStruct.Balance;
- if(gui->skin->widgets[i]->window == get_windowtype(hwnd))
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- gui->skin->widgets[i]->pressed ? 0 : 1);
- }
- /* update some buttons */
- if(gui->skin->widgets[i]->type == tyButton && gui->skin->widgets[i]->window == get_windowtype(hwnd))
- {
- if(gui->skin->widgets[i]->msg == evPlaySwitchToPause)
- {
- gui->skin->widgets[i]->value = guiIntfStruct.Playing;
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- guiIntfStruct.Playing == 1 ? 0 : 1);
- }
- if(gui->skin->widgets[i]->msg == evMute)
- {
- gui->skin->widgets[i]->value = guiIntfStruct.Volume;
- renderwidget(gui->skin, get_drawground(hwnd), gui->skin->widgets[i],
- guiIntfStruct.Volume == 0.0f ? 0 : 1);
- }
- }
- }
-
- /* updating the display once a 100.second is enough imo */
- if((time - oldtime) < 100) return;
- oldtime=time;
-
- /* suppress directx's fullscreen window when using the sub window */
- if(sub_window && &video_driver_list[0] && strstr("directx", video_driver_list[0]))
- {
- HWND hWndFS = NULL; //handle to directx's fullscreen window
- if(hWndFS == NULL)
- {
- hWndFS = FindWindow(NULL, "MPlayer Fullscreen");
- if(hWndFS != NULL) DestroyWindow(hWndFS); //sub window handles fullscreen
- }
- }
-
- for (i=0; i<gui->window_priv_count; i++)
- {
- if(gui->window_priv[i]->hwnd == hwnd)
- priv=gui->window_priv[i];
- }// Sherpya
- /* display the status msgs */
- renderinfobox(gui->skin, priv);
- RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
-}
-
-static LRESULT CALLBACK SubProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
- if (gui && (gui->subwindow != hWnd)) return FALSE;
-
- switch (message)
- {
- case WM_CLOSE:
- handlemsg(hWnd, evExit);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_KEYDOWN:
- {
- switch(wParam)
- {
- case VK_LEFT:
- mplayer_put_key(KEY_LEFT);
- break;
- case VK_UP:
- mplayer_put_key(KEY_UP);
- break;
- case VK_RIGHT:
- mplayer_put_key(KEY_RIGHT);
- break;
- case VK_DOWN:
- mplayer_put_key(KEY_DOWN);
- break;
- case VK_TAB:
- mplayer_put_key(KEY_TAB);
- break;
- case VK_BACK:
- mplayer_put_key(KEY_BS);
- break;
- case VK_DELETE:
- mplayer_put_key(KEY_DELETE);
- break;
- case VK_INSERT:
- mplayer_put_key(KEY_INSERT);
- break;
- case VK_HOME:
- mplayer_put_key(KEY_HOME);
- break;
- case VK_END:
- mplayer_put_key(KEY_END);
- break;
- case VK_PRIOR:
- mplayer_put_key(KEY_PAGE_UP);
- break;
- case VK_NEXT:
- mplayer_put_key(KEY_PAGE_DOWN);
- break;
- case VK_ESCAPE:
- mplayer_put_key(KEY_ESC);
- break;
- }
- break;
- }
- case WM_COMMAND:
- {
- switch(LOWORD(wParam))
- {
- case IDEXIT:
- PostQuitMessage(0);
- handlemsg(hWnd, evExit);
- break;
- case IDFILE_OPEN:
- handlemsg(hWnd, evLoadPlay);
- break;
- case IDURL_OPEN:
- display_openurlwindow(gui, 0);
- break;
- case IDDIR_OPEN:
- {
- static char path[MAX_PATH];
- BROWSEINFO bi;
- LPITEMIDLIST pidl;
- memset(&bi, 0, sizeof(BROWSEINFO));
- bi.lpszTitle = "Choose a Directory...";
- pidl = SHBrowseForFolder(&bi);
- if (SHGetPathFromIDList(pidl, path))
- {
- gui->playlist->clear_playlist(gui->playlist);
- adddirtoplaylist(gui->playlist, path, TRUE);
- gui->startplay(gui);
- }
- break;
- }
- case ID_PTRACK:
- handlemsg(hWnd, evPrev);
- break;
- case ID_SEEKB:
- handlemsg(hWnd, evBackward10sec);
- break;
- case ID_PLAY:
- handlemsg(hWnd, evPlaySwitchToPause);
- break;
- case ID_STOP:
- handlemsg(hWnd, evStop);
- break;
- case ID_SEEKF:
- handlemsg(hWnd, evForward10sec);
- break;
- case ID_NTRACK:
- handlemsg(hWnd, evNext);
- break;
-#ifdef USE_DVDREAD
- case ID_CHAPTERSEL:
- display_chapterselwindow(gui);
- break;
-#endif
- case ID_FULLSCREEN:
- mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen"));
- break;
- case ID_MUTE:
- mp_input_queue_cmd(mp_input_parse_cmd("mute"));
- break;
- case ID_ASPECT1:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 1.777777"));
- break;
- case ID_ASPECT2:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 1.333333"));
- break;
- case ID_ASPECT3:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 2.35"));
- break;
- case ID_ASPECT4:
- mp_input_queue_cmd(mp_input_parse_cmd("switch_ratio 0"));
- break;
- case IDSUB_TOGGLE:
- mp_input_queue_cmd(mp_input_parse_cmd("sub_visibility"));
- break;
- case IDSUB_CYCLE:
- mp_input_queue_cmd(mp_input_parse_cmd("sub_select"));
- break;
- }
- return 0;
- }
- case WM_CHAR:
- mplayer_put_key(wParam);
- break;
- case WM_DROPFILES:
- {
- if(!lParam)
- {
- char file[MAX_PATH];
- int filecount = DragQueryFile((HDROP) wParam, -1, file, MAX_PATH);
- int i;
- for(i=0; i<filecount; i++)
- {
- DragQueryFile((HDROP) wParam, i, file, MAX_PATH);
- mplSetFileName(NULL, file, STREAMTYPE_FILE);
- if(!parse_filename(file, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0);
- }
- DragFinish((HDROP) wParam);
- handlemsg(hWnd, evDropFile);
- }
- else
- {
- gui->playlist->clear_playlist(gui->playlist);
- gui->playlist->add_track(gui->playlist, (const char *) wParam, NULL, NULL, 0);
- handlemsg(hWnd, evDropFile);
- }
- SetForegroundWindow(gui->subwindow);
- return 0;
- }
- case WM_LBUTTONDOWN:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN0);
- break;
- }
- case WM_MBUTTONDOWN:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN1);
- break;
- }
- case WM_RBUTTONDOWN:
- {
- POINT point;
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- if(guiIntfStruct.StreamType == STREAMTYPE_DVD)
- EnableMenuItem(gui->dvdmenu, ID_CHAPTERSEL, MF_BYCOMMAND | MF_ENABLED);
- TrackPopupMenu(gui->submenu, 0, point.x, point.y, 0, hWnd, NULL);
- return 0;
- }
- case WM_LBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN0_DBL);
- break;
- }
- case WM_MBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN1_DBL);
- break;
- }
- case WM_RBUTTONDBLCLK:
- {
- if(!vo_nomouse_input)
- mplayer_put_key(MOUSE_BTN2_DBL);
- break;
- }
- case WM_MOUSEWHEEL:
- {
- int x = GET_WHEEL_DELTA_WPARAM(wParam);
- if(vo_nomouse_input)
- break;
- if (x > 0)
- mplayer_put_key(MOUSE_BTN3);
- else
- mplayer_put_key(MOUSE_BTN4);
- break;
- }
- case WM_XBUTTONDOWN:
- {
- if(vo_nomouse_input)
- break;
- if(HIWORD(wParam) == 1)
- mplayer_put_key(MOUSE_BTN5);
- else
- mplayer_put_key(MOUSE_BTN6);
- break;
- }
- case WM_XBUTTONDBLCLK:
- {
- if(vo_nomouse_input)
- break;
- if(HIWORD(wParam) == 1)
- mplayer_put_key(MOUSE_BTN5_DBL);
- else
- mplayer_put_key(MOUSE_BTN6_DBL);
- break;
- }
- case WM_TIMER:
- {
- if(fullscreen) while(ShowCursor(FALSE) >= 0){}
- KillTimer(hWnd, ID_TIMER);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- ShowCursor(TRUE);
- SetTimer(hWnd, ID_TIMER, 3000, (TIMERPROC) NULL);
- break;
- }
- case WM_WINDOWPOSCHANGED:
- {
- int tmpheight=0;
- static uint32_t rect_width;
- static uint32_t rect_height;
- RECT rd;
- POINT pt;
- pt.x = 0;
- pt.y = 0;
- GetClientRect(hWnd, &rd);
- ClientToScreen(hWnd, &pt);
-
- rect_width = rd.right - rd.left;
- rect_height = rd.bottom - rd.top;
-
- /* maintain our aspect ratio */
- tmpheight = ((float)rect_width/sub_aspect);
- tmpheight += tmpheight % 2;
- if(tmpheight > rect_height)
- {
- rect_width = ((float)rect_height*sub_aspect);
- rect_width += rect_width % 2;
- }
- else rect_height = tmpheight;
-
- rd.right = rd.left + rect_width;
- rd.bottom = rd.top + rect_height;
-
- AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0);
- SetWindowPos(hWnd, 0, fullscreen?0:pt.x+rd.left, fullscreen?0:pt.y+rd.top,
- fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, SWP_NOOWNERZORDER);
- SetForegroundWindow(hWnd);
- return 0;
- }
- case WM_SYSCOMMAND:
- {
- switch(wParam)
- {
- case SC_SCREENSAVE:
- case SC_MONITORPOWER:
- mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
- return 0;
- }
- break;
- }
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- RECT rect;
- HDC hdc = BeginPaint(hWnd, &ps);
- HDC hMemDC = CreateCompatibleDC(hdc);
- HBRUSH blackbrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
- int width, height;
- GetClientRect(hWnd, &rect);
- width = rect.right - rect.left;
- height = rect.bottom - rect.top;
- if(guiIntfStruct.Playing == 0)
- {
- int i;
- window *desc = NULL;
-
- for (i=0; i<gui->skin->windowcount; i++)
- if(gui->skin->windows[i]->type == wiSub)
- desc = gui->skin->windows[i];
-
- SelectObject(hMemDC, get_bitmap(hWnd));
- StretchBlt(hdc, 0, 0, width, height, hMemDC, 0, 0, desc->base->bitmap[0]->width,
- desc->base->bitmap[0]->height, SRCCOPY);
- } else {
- FillRect(GetDC(hWnd), &rect, fullscreen?blackbrush:colorbrush);
- }
- DeleteDC(hMemDC);
- EndPaint(hWnd, &ps);
- return 0;
- }
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
-}
-
-/* Window Proc for the gui Window */
-static LRESULT CALLBACK EventProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- gui_t *gui = (gui_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
-
- /* Avoid processing when then window doesn't match gui mainwindow */
- if (gui && (gui->mainwindow != hWnd)) return FALSE;
-
- switch (message)
- {
- case WM_CLOSE:
- handlemsg(hWnd, evExit);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_SYSTRAY:
- {
- switch(lParam)
- {
- POINT cursor;
- case WM_RBUTTONDOWN:
- {
- GetCursorPos(&cursor);
- SetForegroundWindow(hWnd);
- TrackPopupMenu(gui->traymenu, 0, cursor.x, cursor.y, 0, hWnd, NULL);
- break;
- }
- case WM_MBUTTONDBLCLK:
- case WM_LBUTTONDBLCLK:
- {
- if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
- else { ShowWindow(hWnd, SW_SHOW); SetForegroundWindow(hWnd); }
- break;
- }
- }
- break;
- }
- case WM_KEYDOWN:
- {
- switch(wParam)
- {
- case VK_LEFT:
- mplayer_put_key(KEY_LEFT);
- break;
- case VK_UP:
- mplayer_put_key(KEY_UP);
- break;
- case VK_RIGHT:
- mplayer_put_key(KEY_RIGHT);
- break;
- case VK_DOWN:
- mplayer_put_key(KEY_DOWN);
- break;
- case VK_TAB:
- mplayer_put_key(KEY_TAB);
- break;
- case VK_BACK:
- mplayer_put_key(KEY_BS);
- break;
- case VK_DELETE:
- mplayer_put_key(KEY_DELETE);
- break;
- case VK_INSERT:
- mplayer_put_key(KEY_INSERT);
- break;
- case VK_HOME:
- mplayer_put_key(KEY_HOME);
- break;
- case VK_END:
- mplayer_put_key(KEY_END);
- break;
- case VK_PRIOR:
- mplayer_put_key(KEY_PAGE_UP);
- break;
- case VK_NEXT:
- mplayer_put_key(KEY_PAGE_DOWN);
- break;
- case VK_ESCAPE:
- mplayer_put_key(KEY_ESC);
- break;
- }
- break;
- }
- case WM_CHAR:
- mplayer_put_key(wParam);
- break;
- case WM_COPYDATA:
- {
- if(lParam)
- {
- PCOPYDATASTRUCT cdData;
- cdData = (PCOPYDATASTRUCT) lParam;
- mplSetFileName(NULL, cdData->lpData, STREAMTYPE_FILE);
- if(!parse_filename(cdData->lpData, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, cdData->lpData, NULL, NULL, 0);
- gui->startplay(gui);
- }
- break;
- }
- case WM_DROPFILES:
- {
- if(!lParam)
- {
- char file[MAX_PATH];
- int filecount = DragQueryFile((HDROP) wParam, -1, file, MAX_PATH);
- int i;
- for(i=0; i<filecount; i++)
- {
- DragQueryFile((HDROP) wParam, i, file, MAX_PATH);
- mplSetFileName(NULL, file, STREAMTYPE_FILE);
- if(!parse_filename(file, playtree, mconfig, 1))
- gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0);
- }
- DragFinish((HDROP) wParam);
- handlemsg(hWnd, evDropFile);
- }
- else
- {
- gui->playlist->clear_playlist(gui->playlist);
- gui->playlist->add_track(gui->playlist, (const char *) wParam, NULL, NULL, 0);
- handlemsg(hWnd, evDropFile);
- }
- SetForegroundWindow(gui->mainwindow);
- return 0;
- }
- case WM_LBUTTONDOWN:
- {
- SetCapture(hWnd);
- gui->mousex = GET_X_LPARAM(lParam);
- gui->mousey = GET_Y_LPARAM(lParam);
- /* inside a widget */
- gui->activewidget = clickedinsidewidget(gui, get_windowtype(hWnd), gui->mousex, gui->mousey);
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 1;
- gui->mousewx = gui->mousex - gui->activewidget->x;
- gui->mousewy = gui->mousey - gui->activewidget->y;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 0);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- handlemsg(hWnd, gui->activewidget->msg);
- }
- break;
- }
- case WM_CAPTURECHANGED:
- {
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 0;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 1);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- gui->activewidget = NULL;
- }
- break;
- }
- case WM_LBUTTONUP:
- {
- ReleaseCapture();
- if(gui->activewidget)
- {
- gui->activewidget->pressed = 0;
- renderwidget(gui->skin, get_drawground(hWnd), gui->activewidget, 1);
- RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
- gui->activewidget = NULL;
- }
- break;
- }
- case WM_RBUTTONDOWN:
- {
- POINT point;
- char device[MAX_PATH];
- char searchpath[MAX_PATH];
- char searchpath2[MAX_PATH];
-#ifdef HAVE_LIBCDIO
- char searchpath3[MAX_PATH];
-#endif
- int len, pos = 0, cdromdrive = 0;
- UINT errmode;
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- errmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
- while (GetMenuItemCount(gui->diskmenu) > 0)
- DeleteMenu(gui->diskmenu, 0, MF_BYPOSITION);
- len = GetLogicalDriveStrings(MAX_PATH, device);
- while(pos < len)
- {
- if(GetDriveType(device + pos) == DRIVE_CDROM)
- {
- char volname[MAX_PATH];
- char menuitem[MAX_PATH];
- int flags = MF_STRING;
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] checking %s for CD/VCD/SVCD/DVDs\n", device + pos);
- sprintf(searchpath, "%sVIDEO_TS", device + pos);
- sprintf(searchpath2, "%sMpegav", device + pos);
-#ifdef HAVE_LIBCDIO
- sprintf(searchpath3, "%sTrack01.cda", device + pos);
-#endif
- if(GetFileAttributes(searchpath) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
- else if(GetFileAttributes(searchpath2) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
-#ifdef HAVE_LIBCDIO
- else if(GetFileAttributes(searchpath3) != INVALID_FILE_ATTRIBUTES)
- flags |= MF_ENABLED;
-#endif
- else
- flags |= MF_GRAYED;
- volname[0] = 0;
- strcpy(menuitem, device + pos);
- menuitem[strlen(menuitem) - 1]=0;
- GetVolumeInformation(device + pos, volname, MAX_PATH, NULL, NULL, NULL, NULL, 0);
- if (strlen(volname))
- {
- capitalize(volname);
- strcat(menuitem, " - ");
- strcat(menuitem, volname);
- }
- AppendMenu(gui->diskmenu, flags, IDPLAYDISK + cdromdrive, menuitem);
- cdromdrive++;
- }
- pos += strlen(device + pos) + 1;
- }
- SetErrorMode(errmode);
- TrackPopupMenu(gui->menu, 0, point.x, point.y, 0, hWnd, NULL);
- return 0;
- }
- case WM_MOUSEMOVE:
- {
- if(wParam & MK_LBUTTON)
- {
- POINT point;
- RECT rect;
- if(gui->activewidget)
- {
- widget *item = gui->activewidget;
-
- if(item->type == tyHpotmeter)
- {
- item->x = GET_X_LPARAM(lParam) - gui->mousewx;
- item->value = (float)((float)((item->x - item->wx) * 100.0f) / (float)(item->wwidth - item->width));
- }
- if(item->type == tyPotmeter)
- {
- gui->mousewx = GET_X_LPARAM(lParam) - gui->activewidget->x;
- item->value = (float) (gui->mousewx * 100.0f) / (float) item->wwidth;
- }
-
- if((item->type == tyPotmeter) || (item->type == tyHpotmeter) || (item->type == tyVpotmeter))
- {
- /* Bound checks */
- if(item->value > 100.0f)
- item->value = 100.0f;
- else if(item->value < 0.0f)
- item->value = 0.0f;
-
- if(item->msg == evSetVolume)
- guiIntfStruct.Volume = (float) item->value;
- else if(item->msg == evSetMoviePosition)
- guiIntfStruct.Position = (float) item->value;
- else if(item->msg == evSetBalance)
- {
- /* make the range for 50% a bit bigger, because the sliders for balance usually suck */
- if((item->value - 50.0f < 1.5f) && (item->value - 50.0f > -1.5f))
- item->value = 50.0f;
- guiIntfStruct.Balance = (float) item->value;
- }
- updatedisplay(gui, hWnd);
- handlemsg(hWnd, item->msg);
- }
- break;
- }
- point.x = GET_X_LPARAM(lParam);
- point.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hWnd, &point);
- GetWindowRect(hWnd, &rect);
- MoveWindow(hWnd, point.x - gui->mousex, point.y - gui->mousey,
- rect.right-rect.left,rect.bottom-rect.top,TRUE);
- break;
- }
- break;
- }
- case WM_COMMAND:
- {
- switch(LOWORD(wParam))
- {
- case IDEXIT:
- PostQuitMessage(0);
- handlemsg(hWnd, evExit);
- break;
- case IDFILE_OPEN:
- handlemsg(hWnd, evLoadPlay);
- break;
- case IDDIR_OPEN:
- {
- static char path[MAX_PATH];
- BROWSEINFO bi;
- LPITEMIDLIST pidl;
- memset(&bi, 0, sizeof(BROWSEINFO));
- bi.lpszTitle = "Choose a Directory...";
- pidl = SHBrowseForFolder(&bi);
- if (SHGetPathFromIDList(pidl, path))
- {
- gui->playlist->clear_playlist(gui->playlist);
- adddirtoplaylist(gui->playlist, path, TRUE);
- gui->startplay(gui);
- }
- break;
- }
- case ID_SKINBROWSER:
- handlemsg(hWnd, evSkinBrowser);
- break;
- case IDURL_OPEN:
- display_openurlwindow(gui, 0);
- break;
- case ID_MUTE:
- mp_input_queue_cmd(mp_input_parse_cmd("mute"));
- break;
- case IDSUBTITLE_OPEN:
- display_opensubtitlewindow(gui);
- break;
- case ID_PTRACK:
- handlemsg(hWnd, evPrev);
- break;
- case ID_SEEKB:
- handlemsg(hWnd, evBackward10sec);
- break;
- case ID_PLAY:
- handlemsg(hWnd, evPlaySwitchToPause);
- break;
- case ID_STOP:
- handlemsg(hWnd, evStop);
- break;
- case ID_SEEKF:
- handlemsg(hWnd, evForward10sec);
- break;
- case ID_NTRACK:
- handlemsg(hWnd, evNext);
- break;
- case ID_SHOWHIDE:
- {
- if(IsWindowVisible(hWnd)) ShowWindow(hWnd, SW_HIDE);
- else ShowWindow(hWnd, SW_SHOW);
- break;
- }
- case ID_PLAYLIST:
- handlemsg(hWnd, evPlayList);
- break;
- case ID_PREFS:
- handlemsg(hWnd, evPreferences);
- break;
- case ID_CONSOLE:
- console_toggle();
- break;
- case ID_ONLINEHELP:
- ShellExecute(NULL, "open", ONLINE_HELP_URL, NULL, NULL, SW_SHOWNORMAL);
- break;
- }
- if((IDPLAYDISK <= LOWORD(wParam)) && (LOWORD(wParam) < (IDPLAYDISK + 100)))
- {
- char device[MAX_PATH];
- char searchpath[MAX_PATH];
- char filename[MAX_PATH];
- int len, pos = 0, cdromdrive = 0;
- len = GetLogicalDriveStrings(MAX_PATH, device);
- while(pos < len)
- {
- if(GetDriveType(device + pos)==DRIVE_CDROM)
- {
- if(LOWORD(wParam) - IDPLAYDISK == cdromdrive)
- {
-#ifdef USE_DVDREAD
- sprintf(searchpath, "%sVIDEO_TS", device + pos);
- if(GetFileAttributes(searchpath) != INVALID_FILE_ATTRIBUTES)
- {
- if (dvd_device) free(dvd_device);
- dvd_device = strdup(device + pos);
- dvd_title = dvd_chapter = dvd_angle = 1;
- handlemsg(hWnd, evPlayDVD);
- }
-#endif
-#ifdef HAVE_LIBCDIO
- sprintf(searchpath, "%sTrack01.cda", device + pos);
- if(GetFileAttributes(searchpath) != INVALID_FILE_ATTRIBUTES)
- {
- if (cdrom_device) free(cdrom_device);
- cdrom_device = strdup(device + pos);
- /* mplayer doesn't seem to like the trailing \ after the device name */
- cdrom_device[2]=0;
- handlemsg(hWnd, evPlayCD);
- }
-#endif
- else
- {
- HANDLE searchhndl;
- WIN32_FIND_DATA finddata;
- sprintf(searchpath, "%smpegav\\*.dat", device + pos);
- if((searchhndl=FindFirstFile(searchpath, &finddata)) != INVALID_HANDLE_VALUE)
- {
- mp_msg(MSGT_GPLAYER,MSGL_V, "Opening VCD/SVCD\n");
- gui->playlist->clear_playlist(gui->playlist);
- do
- {
- sprintf(filename, "%smpegav\\%s", device + pos, finddata.cFileName);
- gui->playlist->add_track(gui->playlist, filename, NULL, NULL, 0);
- }
- while(FindNextFile(searchhndl, &finddata));
- FindClose(searchhndl);
- }
- gui->startplay(gui);
- }
- }
- cdromdrive++;
- }
- pos += strlen(device + pos) + 1;
- }
- }
- break;
- }
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- RECT rd;
- HDC hdc = BeginPaint(hWnd, &ps);
- HDC hMemDC = CreateCompatibleDC(hdc);
- int width, height;
- GetClientRect(hWnd, &rd);
- width = rd.right - rd.left;
- height = rd.bottom - rd.top;
- SelectObject(hMemDC, get_bitmap(hWnd));
- BitBlt(hdc, 0, 0, width, height, hMemDC, 0, 0, SRCCOPY);
- DeleteDC(hMemDC);
- EndPaint(hWnd, &ps);
- return 0;
- }
- return 0;
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
-}
-
-inline void startplay(gui_t *gui)
-{
- handlemsg(gui->mainwindow, evDropFile);
-}
-
-/* returns the bits per pixel of the desktop */
-/* the format is always in BGR byte order */
-static int GetDesktopBitsPerPixel(void)
-{
- HWND desktop=GetDesktopWindow();
- HDC dc=GetDC(desktop);
- int bpp=GetDeviceCaps(dc, BITSPIXEL);
- ReleaseDC(desktop, dc);
- return bpp;
-}
-
-/* unloads a skin and destroys its windows */
-extern int destroy_window(gui_t *gui)
-{
- RECT rd;
- unsigned int i;
-
- /* Save position: MSDN says don't pass workspace coordinates
- * to CreateWindow() or SetWindowPos(), as both of which expect
- * screen coordinates; resulting in the window appearing in the
- * wrong location.
- * -Erik
- */
-
- /* main window position */
- if(IsIconic(gui->mainwindow))
- ShowWindow(gui->mainwindow, SW_SHOWNORMAL);
- GetWindowRect(gui->mainwindow, &rd);
- gui_main_pos_x = rd.left;
- gui_main_pos_y = rd.top;
-
- /* sub window position */
- if(IsIconic(gui->subwindow))
- ShowWindow(gui->subwindow, SW_SHOWNORMAL);
- GetWindowRect(gui->subwindow, &rd);
- gui_sub_pos_x = rd.left;
- gui_sub_pos_y = rd.top;
-
- for(i=0; i<gui->window_priv_count; i++)
- {
- if(gui->window_priv[i]->bitmap)
- DeleteObject(gui->window_priv[i]->bitmap);
- free(gui->window_priv[i]);
- }
- free(gui->window_priv);
- gui->window_priv = NULL;
- gui->window_priv_count = 0;
-
- /* destroy the main window */
- if(gui->mainwindow)
- DestroyWindow(gui->mainwindow);
- gui->mainwindow = NULL;
-
- /* destroy the sub window */
- if(gui->subwindow)
- DestroyWindow(gui->subwindow);
- gui->subwindow = NULL;
-
- UnregisterClass(gui->classname, 0);
- DestroyIcon(gui->icon);
-
- gui->skin->freeskin(gui->skin);
- gui->skin = NULL;
- return 0;
-}
-
-static void create_menu(gui_t *gui)
-{
- gui->diskmenu = CreatePopupMenu();
- gui->menu=CreatePopupMenu();
- gui->trayplaymenu = CreatePopupMenu();
- AppendMenu(gui->menu, MF_STRING | MF_POPUP, (UINT) gui->trayplaymenu, "Open...");
- AppendMenu(gui->trayplaymenu, MF_STRING, IDFILE_OPEN, "File...");
- AppendMenu(gui->trayplaymenu, MF_STRING, IDURL_OPEN, "Url...");
- AppendMenu(gui->trayplaymenu, MF_STRING, IDDIR_OPEN, "Directory...");
- AppendMenu(gui->menu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->menu, MF_STRING | MF_POPUP, (UINT) gui->diskmenu, "Play &CD/DVD/VCD/SVCD");
- AppendMenu(gui->menu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->menu, MF_STRING, IDSUBTITLE_OPEN, "Open Subtitle");
- AppendMenu(gui->menu, MF_STRING, ID_SKINBROWSER, "Skin Browser");
- AppendMenu(gui->menu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->menu, MF_STRING, ID_PREFS, "Preferences");
- AppendMenu(gui->menu, MF_STRING, ID_CONSOLE, "Debug Console");
- AppendMenu(gui->menu, MF_STRING, ID_ONLINEHELP, "Online Help");
- AppendMenu(gui->menu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->menu, MF_STRING, IDEXIT, "&Exit");
-}
-
-static void create_traymenu(gui_t *gui)
-{
- gui->traymenu = CreatePopupMenu();
- gui->trayplaybackmenu = CreatePopupMenu();
- AppendMenu(gui->traymenu, MF_STRING | MF_POPUP, (UINT) gui->trayplaymenu, "Open...");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING | MF_POPUP, (UINT) gui->trayplaybackmenu, "Playback");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_SEEKB, "Seek Backwards");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_PTRACK, "Previous Track");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_PLAY, "Play/Pause");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_STOP, "Stop");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_NTRACK, "Next Track");
- AppendMenu(gui->trayplaybackmenu, MF_STRING, ID_SEEKF, "Seek Forwards");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING, ID_MUTE, "Toggle Mute");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING, IDSUBTITLE_OPEN, "Open Subtitle");
- AppendMenu(gui->traymenu, MF_STRING, ID_PLAYLIST, "Playlist");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING, ID_SHOWHIDE, "Show/Hide");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING, ID_PREFS, "Preferences");
- AppendMenu(gui->traymenu, MF_STRING, ID_CONSOLE, "Debug Console");
- AppendMenu(gui->traymenu, MF_STRING, ID_ONLINEHELP, "Online Help");
- AppendMenu(gui->traymenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->traymenu, MF_STRING, IDEXIT, "&Exit");
-}
-
-static void create_submenu(gui_t *gui)
-{
- gui->submenu = CreatePopupMenu();
- gui->dvdmenu = CreatePopupMenu();
- gui->aspectmenu = CreatePopupMenu();
- gui->subtitlemenu = CreatePopupMenu();
- AppendMenu(gui->submenu, MF_STRING | MF_POPUP, (UINT) gui->trayplaymenu, "Open...");
- AppendMenu(gui->submenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->submenu, MF_STRING, ID_SEEKB, "Seek Backwards");
- AppendMenu(gui->submenu, MF_STRING, ID_PTRACK, "Previous Track");
- AppendMenu(gui->submenu, MF_STRING, ID_PLAY, "Play/Pause");
- AppendMenu(gui->submenu, MF_STRING, ID_STOP, "Stop");
- AppendMenu(gui->submenu, MF_STRING, ID_NTRACK, "Next Track");
- AppendMenu(gui->submenu, MF_STRING, ID_SEEKF, "Seek Forwards");
- AppendMenu(gui->submenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->submenu, MF_STRING, ID_FULLSCREEN, "Toggle Fullscreen");
- AppendMenu(gui->submenu, MF_STRING, ID_MUTE, "Toggle Mute");
- AppendMenu(gui->submenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->submenu, MF_STRING | MF_POPUP, (UINT) gui->aspectmenu, "Aspect Ratio");
- AppendMenu(gui->submenu, MF_STRING | MF_POPUP, (UINT) gui->subtitlemenu, "Subtitle Options");
- AppendMenu(gui->submenu, MF_STRING | MF_POPUP, (UINT) gui->dvdmenu, "DVD Options");
-#ifdef USE_DVDREAD
- AppendMenu(gui->dvdmenu, MF_STRING | MF_GRAYED, ID_CHAPTERSEL, "Select Title/Chapter...");
-#endif
- AppendMenu(gui->subtitlemenu, MF_STRING, IDSUB_TOGGLE, "Subtitle Visibility On/Off");
- AppendMenu(gui->subtitlemenu, MF_STRING, IDSUB_CYCLE, "Cycle Subtitle Languages");
- AppendMenu(gui->aspectmenu, MF_STRING, ID_ASPECT1, "Set 16:9");
- AppendMenu(gui->aspectmenu, MF_STRING, ID_ASPECT2, "Set 4:3");
- AppendMenu(gui->aspectmenu, MF_STRING, ID_ASPECT3, "Set 2.35");
- AppendMenu(gui->aspectmenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->aspectmenu, MF_STRING, ID_ASPECT4, "Original Aspect");
- AppendMenu(gui->submenu, MF_SEPARATOR, 0, 0);
- AppendMenu(gui->submenu, MF_STRING, IDEXIT, "&Exit");
-}
-
-static void maketransparent(HWND hwnd, COLORREF crTransparent)
-{
- HDC mdc = GetDC(hwnd);
- RECT rd;
- HRGN crRgnres, crRgn, crRgnTmp;
- int iX = 0, iY = 0, iLeftX = 0;
- int width, height;
- GetWindowRect(hwnd, &rd);
- width = rd.right - rd.left;
- height = rd.bottom - rd.top;
-
- /* create an empty region */
- crRgn = CreateRectRgn(0, 0, 0, 0);
-
- /* Create a region from a bitmap with transparency colour of Purple */
- for (iY = -1; iY < height; iY++)
- {
- do
- {
- /* skip over transparent pixels at start of lines */
- while (iX <= width && GetPixel(mdc,iX, iY) == crTransparent) iX++;
-
- /* remember this pixel */
- iLeftX = iX;
-
- /* now find first non transparent pixel */
- while (iX <= width && GetPixel(mdc,iX, iY) != crTransparent) ++iX;
-
- /* create a temp region on this info */
- crRgnTmp = CreateRectRgn(iLeftX, iY, iX, iY+1);
-
- /* combine into main region */
- crRgnres = crRgn;
- CombineRgn(crRgnres, crRgn, crRgnTmp, RGN_OR);
- crRgn = crRgnres;
-
- /* delete the temp region for next pass (otherwise you'll get an ASSERT) */
- DeleteObject(crRgnTmp);
- } while (iX < width);
- iX = 0;
- }
- SetWindowRgn(hwnd, crRgn, TRUE);
- DeleteObject(crRgn);
- ReleaseDC(hwnd,mdc);
-}
-
-static int window_render(gui_t *gui, HWND hWnd, HDC hdc, window_priv_t *priv, window *desc, BITMAPINFO binfo)
-{
- int i;
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- (gui->window_priv_count)++;
- gui->window_priv = realloc(gui->window_priv, sizeof(window_priv_t *) * gui->window_priv_count);
- priv = gui->window_priv[gui->window_priv_count - 1] = calloc(1, sizeof(window_priv_t));
- priv->hwnd = hWnd;
- priv->type = desc->type;
- priv->background = desc->base->bitmap[0];
- memcpy(&priv->img, desc->base->bitmap[0], sizeof(image));
- hdc = GetDC(hWnd);
- binfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- binfo.bmiHeader.biWidth = priv->img.width;
- binfo.bmiHeader.biHeight = -priv->img.height;
- binfo.bmiHeader.biPlanes = 1;
- binfo.bmiHeader.biSizeImage = priv->img.width * priv->img.height * (gui->screenbpp / 8);
- binfo.bmiHeader.biXPelsPerMeter = 0;
- binfo.bmiHeader.biYPelsPerMeter = 0;
- binfo.bmiHeader.biClrUsed = 0;
- binfo.bmiHeader.biClrImportant = 0;
- binfo.bmiHeader.biBitCount = gui->screenbpp;
- binfo.bmiHeader.biCompression = BI_RGB;
- priv->bitmap = CreateDIBSection(hdc, &binfo, DIB_RGB_COLORS, (void **) &priv->img.data, NULL, 0);
- if(!priv->bitmap)
- {
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[GUI] unable to create bitmap for skinned window\n");
- return 0;
- }
- memcpy(priv->img.data, desc->base->bitmap[0]->data, binfo.bmiHeader.biSizeImage);
- ReleaseDC(hWnd,hdc);
-
- for (i=0; i<gui->skin->widgetcount; i++)
- if(gui->skin->widgets[i]->window == desc->type)
- renderwidget(gui->skin, &priv->img, gui->skin->widgets[i], 1);
-
- return 0;
-}
-
-/* creates the sub (AKA video) window,*/
-extern int create_subwindow(gui_t *gui, char *skindir)
-{
- HINSTANCE instance = GetModuleHandle(NULL);
- WNDCLASS wc;
- RECT rect;
- HWND hWnd;
- DWORD style = 0;
- HDC hdc = NULL;
- BITMAPINFO binfo;
- window_priv_t *priv = NULL;
- window *desc = NULL;
- int i, x = -1, y = -1;
- vo_colorkey = 0xff00ff;
-
- for (i=0; i<gui->skin->windowcount; i++)
- if(gui->skin->windows[i]->type == wiSub)
- desc = gui->skin->windows[i];
-
- if(!desc)
- {
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[GUI] Invalid skin description\n");
- return 1;
- }
-
- windowcolor = vo_colorkey;
- colorbrush = CreateSolidBrush(windowcolor);
- wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
- wc.lpfnWndProc = SubProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = instance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = NULL; //WM_PAINT will handle background color switching;
- wc.lpszClassName = "MPlayer Sub for Windows";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
-
- /* create the sub window menu */
- create_submenu(gui);
-
- rect.top = rect.left = 100;
- rect.bottom = rect.top+desc->base->bitmap[0]->height;
- rect.right = rect.left+desc->base->bitmap[0]->width;
-
- /* our window aspect */
- sub_aspect = (float)(rect.right-rect.left)/(rect.bottom-rect.top);
-
- style = fullscreen?WS_VISIBLE | WS_POPUP:WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_MINIMIZEBOX;
- AdjustWindowRect(&rect, style, 0);
-
- if (gui_sub_pos_x >= 0)
- x = gui_sub_pos_x;
- if (gui_sub_pos_y >= 0)
- y = gui_sub_pos_y;
-
- /* out of bounds check */
- if (x <= -1 || (x+(rect.right-rect.left) > GetSystemMetrics(SM_CXSCREEN)))
- x = CW_USEDEFAULT;
- if (y <= -1 || (y+(rect.bottom-rect.top) > GetSystemMetrics(SM_CYSCREEN)))
- y = x;
-
- hWnd = CreateWindowEx(0, "MPlayer Sub for Windows", "MPlayer for Windows", style,
- x, y, rect.right-rect.left, rect.bottom-rect.top,
- gui->subwindow, NULL, instance, NULL);
-
- /* load all the window images */
- window_render(gui, hWnd, hdc, priv, desc, binfo);
-
- /* enable drag and drop support */
- DragAcceptFiles(hWnd, TRUE);
-
- gui->subwindow = hWnd;
- if(sub_window)
- WinID = gui->subwindow;
- ShowWindow(gui->subwindow, SW_SHOW);
- UpdateWindow(gui->subwindow);
- return 0;
-}
-
-/* loads/updates a skin and creates windows for it */
-extern int create_window(gui_t *gui, char *skindir)
-{
- HINSTANCE instance = GetModuleHandle(NULL);
- WNDCLASS wc;
- RECT rect;
- DWORD style = 0;
- HWND hwnd;
- HDC hdc = NULL;
- BITMAPINFO binfo;
- window_priv_t *priv = NULL;
- window *desc = NULL;
- char dir[MAX_PATH];
- unsigned int i;
- int x = -1, y = -1;
-
- /* destroy the current main window */
- if(gui->skin) destroy_window(gui);
-
- /* get screenproperties */
- gui->screenbpp = GetDesktopBitsPerPixel();
- gui->screenw = GetSystemMetrics(SM_CXSCREEN);
- gui->screenh = GetSystemMetrics(SM_CYSCREEN);
-
- /* load the new skin */
- gui->skin = loadskin(skindir, gui->screenbpp);
- if(!gui->skin)
- {
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[GUI] fatal error during skinload\n");
- /* Set default Skin */
- if (skinName) free(skinName);
- skinName = strdup("Blue");
- /* then force write conf */
- cfg_write();
- return 1;
- }
-
- /* find the description of the mainwindow */
- for (i=0; i<gui->skin->windowcount; i++)
- if(gui->skin->windows[i]->type == wiMain)
- desc = gui->skin->windows[i];
-
- if(!desc)
- {
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[GUI] Invalid skin description\n");
- return 1;
- }
-
- /* load the icon from the executable */
- GetModuleFileName(NULL, dir, MAX_PATH);
- gui->icon = ExtractIcon(instance, dir, 0);
-
- /* create the window class */
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = EventProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = instance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
- wc.lpszClassName = gui->classname = "MPlayer GUI for Windows";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
-
- /* create a context menu */
- create_menu(gui);
- /* create the systray menu */
- create_traymenu(gui);
-
- /* create the mainwindow */
- /* TODO implement aligning as described in skin.html */
- rect.top = rect.left = 100;
- rect.bottom = rect.top+desc->base->bitmap[0]->height;
- rect.right = rect.left+desc->base->bitmap[0]->width;
- if(desc->decoration) style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
- else style = WS_POPUP | WS_SYSMENU;
-
- AdjustWindowRect(&rect, style, 0);
-
- /* Check if out of screen */
- if (gui_main_pos_x >= 0)
- x = gui_main_pos_x;
- if (gui_main_pos_y >= 0)
- y = gui_main_pos_y;
-
- if (x <= -1 || (x+(rect.right-rect.left) > GetSystemMetrics(SM_CXFULLSCREEN)))
- {
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - ((rect.right-rect.left) / 2);
- gui_main_pos_x = x;
- }
- if (y <= -1 || (y+(rect.bottom-rect.top) > GetSystemMetrics(SM_CYFULLSCREEN)))
- {
- y = ((GetSystemMetrics(SM_CYSCREEN)-40) - (rect.bottom-rect.top));
- gui_main_pos_y = y;
- }
-
- hwnd = CreateWindowEx(0, gui->classname, "MPlayer for Windows", style,
- x, y, rect.right-rect.left, rect.bottom-rect.top,
- gui->mainwindow, NULL, instance, NULL);
-
- /* set the systray icon properties */
- nid.cbSize = sizeof(NOTIFYICONDATA);
- nid.hWnd = hwnd;
- nid.uID = 1;
- nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
- nid.uCallbackMessage = WM_SYSTRAY;
- nid.hIcon = gui->icon;
- strcpy(nid.szTip, "MPlayer for Windows");
-
- /* register the systray icon */
- Shell_NotifyIcon(NIM_ADD, &nid);
-
- /* load all the window images */
- window_render(gui, hwnd, hdc, priv, desc, binfo);
-
- /* enable drag and drop support */
- DragAcceptFiles(hwnd, TRUE);
-
- updatedisplay(gui, hwnd);
- gui->mainwindow = hwnd;
-
- /* display */
- ShowWindow(gui->mainwindow, SW_SHOW);
- UpdateWindow(gui->mainwindow);
- maketransparent(gui->mainwindow, RGB(255, 0, 255));
- return 0;
-}
-
-gui_t *create_gui(char *skindir, char *skinName, void (*playercontrol)(int event))
-{
- gui_t *gui = calloc(1, sizeof(gui_t));
- char temp[MAX_PATH];
- HWND runningmplayer = FindWindow("MPlayer GUI for Windows", "MPlayer for Windows");
-
- if(runningmplayer)
- {
- free(gui);
- return NULL;
- }
-
- gui->startplay = startplay;
- gui->playercontrol = playercontrol;
- gui->uninit = uninit;
- gui->updatedisplay = updatedisplay;
-
- /* create playlist */
- gui->playlist = create_playlist();
-
- if(!skinName) skinName = strdup("Blue");
- sprintf(temp, "%s\\%s", skindir, skinName);
- if(create_window(gui, temp)) return NULL;
- if(create_subwindow(gui, temp)) return NULL;
- if(console) console_toggle();
- return gui;
-}
diff --git a/Gui/win32/gui.h b/Gui/win32/gui.h
deleted file mode 100644
index 2594d4ae01..0000000000
--- a/Gui/win32/gui.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _GUI_H
-#define _GUI_H
-#include <config.h>
-#include <playtree.h>
-#include <m_config.h>
-#include "skinload.h"
-#include "playlist.h"
-
-extern char *skinName;
-extern float sub_aspect;
-extern play_tree_t* playtree;
-extern m_config_t* mconfig;
-
-extern NOTIFYICONDATA nid;
-
-typedef struct window_priv_t window_priv_t;
-struct window_priv_t
-{
- HWND hwnd;
- image img;
- image *background;
- HBITMAP bitmap;
- int type;
-};
-
-typedef struct gui_t gui_t;
-struct gui_t
-{
- /* screenproperties */
- int screenw, screenh, screenbpp;
- /* window related stuff */
- char *classname;
- HICON icon;
- unsigned int window_priv_count;
- window_priv_t **window_priv;
-
- HWND mainwindow;
- HWND subwindow;
-
- /* for event handling */
- widget *activewidget;
-
- int mousewx, mousewy; /* mousepos inside widget */
- int mousex, mousey;
-
- HMENU menu;
- HMENU diskmenu;
- HMENU traymenu;
- HMENU trayplaymenu;
- HMENU trayplaybackmenu;
- HMENU submenu;
- HMENU subtitlemenu;
- HMENU aspectmenu;
- HMENU dvdmenu;
- HMENU playlistmenu;
-
- int skinbrowserwindow;
- int playlistwindow;
- int aboutwindow;
-
- skin_t *skin;
- playlist_t *playlist;
-
- void (*startplay)(gui_t *gui);
- void (*updatedisplay)(gui_t *gui, HWND hwnd);
- void (*playercontrol)(int event); /* userdefine call back function */
- void (*uninit)(gui_t *gui);
-};
-
-#define wsShowWindow 8
-#define wsHideWindow 16
-#define wsShowFrame 1
-#define wsMovable 2
-#define wsSizeable 4
-
-extern gui_t *create_gui(char *skindir, char *skinName, void (*playercontrol)(int event));
-extern int destroy_window(gui_t *gui);
-extern int create_window(gui_t *gui, char *skindir);
-extern int create_subwindow(gui_t *gui, char *skindir);
-extern int parse_filename(char *file, play_tree_t *playtree, m_config_t *mconfig, int clear);
-extern void capitalize(char *filename);
-extern int import_playtree_playlist_into_gui(play_tree_t *my_playtree, m_config_t *config);
-
-/* Dialogs */
-extern void display_playlistwindow(gui_t *gui);
-extern void update_playlistwindow(void);
-extern int display_openfilewindow(gui_t *gui, int add);
-extern void display_openurlwindow(gui_t *gui, int add);
-extern void display_skinbrowser(gui_t *gui);
-extern void display_chapterselwindow(gui_t *gui);
-extern void display_eqwindow(gui_t *gui);
-extern void display_prefswindow(gui_t *gui);
-extern void display_opensubtitlewindow(gui_t *gui);
-
-#endif
diff --git a/Gui/win32/interface.c b/Gui/win32/interface.c
deleted file mode 100644
index 4c165f037e..0000000000
--- a/Gui/win32/interface.c
+++ /dev/null
@@ -1,952 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <windows.h>
-#include <interface.h>
-#include <m_option.h>
-#include <mixer.h>
-#include <mp_msg.h>
-#include <help_mp.h>
-#include <codec-cfg.h>
-#include <stream/stream.h>
-#include <libmpdemux/demuxer.h>
-#include <libmpdemux/stheader.h>
-#ifdef USE_DVDREAD
-#include <stream/stream_dvd.h>
-#endif
-#include <input/input.h>
-#include <libvo/video_out.h>
-#include <libao2/audio_out.h>
-#include <access_mpcontext.h>
-#include "gui.h"
-#include "dialogs.h"
-#include "wincfg.h"
-#ifdef HAVE_LIBCDIO
-#include <cdio/cdio.h>
-#endif
-
-extern m_obj_settings_t *vf_settings;
-extern void exit_player(const char *how);
-extern char *filename;
-extern int abs_seek_pos;
-extern float rel_seek_secs;
-extern int audio_id;
-extern int video_id;
-extern int dvdsub_id;
-extern int vobsub_id;
-extern int stream_cache_size;
-extern int autosync;
-extern int vcd_track;
-extern int dvd_title;
-extern float force_fps;
-extern af_cfg_t af_cfg;
-int guiWinID = 0;
-
-char *skinName = NULL;
-char *codecname = NULL;
-int mplGotoTheNext = 1;
-static gui_t *mygui = NULL;
-static int update_subwindow(void);
-static RECT old_rect;
-static DWORD style;
-ao_functions_t *audio_out = NULL;
-vo_functions_t *video_out = NULL;
-mixer_t *mixer = NULL;
-
-/* test for playlist files, no need to specify -playlist on the commandline.
- * add any conceivable playlist extensions here.
- * - Erik
- */
-int parse_filename(char *file, play_tree_t *playtree, m_config_t *mconfig, int clear)
-{
- if(clear)
- mygui->playlist->clear_playlist(mygui->playlist);
-
- if(strstr(file, ".m3u") || strstr(file, ".pls"))
- {
- playtree = parse_playlist_file(file);
- import_playtree_playlist_into_gui(playtree, mconfig);
- return 1;
- }
- return 0;
-}
-
-/**
- * \brief this actually creates a new list containing only one element...
- */
-void gaddlist( char ***list, const char *entry)
-{
- int i;
-
- if (*list)
- {
- for (i=0; (*list)[i]; i++) free((*list)[i]);
- free(*list);
- }
-
- *list = malloc(2 * sizeof(char **));
- (*list)[0] = gstrdup(entry);
- (*list)[1] = NULL;
-}
-
-char *gstrdup(const char *str)
-{
- if (!str) return NULL;
- return strdup(str);
-}
-
-/**
- * \brief this replaces a string starting with search by replace.
- * If not found, replace is appended.
- */
-void greplace(char ***list, char *search, char *replace)
-{
- int i = 0;
- int len = (search) ? strlen(search) : 0;
-
- if (*list)
- {
- for (i = 0; (*list)[i]; i++)
- {
- if (search && (!strncmp((*list)[i], search, len)))
- {
- free((*list)[i]);
- (*list)[i] = gstrdup(replace);
- return;
- }
- }
- *list = realloc(*list, (i + 2) * sizeof(char *));
- }
- else
- *list = malloc(2 * sizeof(char *));
-
- (*list)[i] = gstrdup(replace);
- (*list)[i + 1] = NULL;
-}
-
-/* this function gets called by the gui to update mplayer */
-static void guiSetEvent(int event)
-{
- if(guiIntfStruct.mpcontext)
- mixer = mpctx_get_mixer(guiIntfStruct.mpcontext);
-
- switch(event)
- {
- case evPlay:
- case evPlaySwitchToPause:
- mplPlay();
- break;
- case evPause:
- mplPause();
- break;
-#ifdef USE_DVDREAD
- case evPlayDVD:
- {
- static char dvdname[MAX_PATH];
- guiIntfStruct.DVD.current_title = dvd_title;
- guiIntfStruct.DVD.current_chapter = dvd_chapter;
- guiIntfStruct.DVD.current_angle = dvd_angle;
- guiIntfStruct.DiskChanged = 1;
-
- mplSetFileName(NULL, dvd_device, STREAMTYPE_DVD);
- dvdname[0] = 0;
- strcat(dvdname, "DVD Movie");
- GetVolumeInformation(dvd_device, dvdname, MAX_PATH, NULL, NULL, NULL, NULL, 0);
- capitalize(dvdname);
- mp_msg(MSGT_GPLAYER, MSGL_V, "Opening DVD %s -> %s\n", dvd_device, dvdname);
- guiGetEvent(guiSetParameters, (char *) STREAMTYPE_DVD);
- mygui->playlist->clear_playlist(mygui->playlist);
- mygui->playlist->add_track(mygui->playlist, filename, NULL, dvdname, 0);
- mygui->startplay(mygui);
- break;
- }
-#endif
-#ifdef HAVE_LIBCDIO
- case evPlayCD:
- {
- int i;
- char track[10];
- char trackname[10];
- CdIo_t *p_cdio = cdio_open(NULL, DRIVER_UNKNOWN);
- track_t i_tracks;
-
- if(p_cdio == NULL) printf("Couldn't find a driver.\n");
- i_tracks = cdio_get_num_tracks(p_cdio);
-
- mygui->playlist->clear_playlist(mygui->playlist);
- for(i=0;i<i_tracks;i++)
- {
- sprintf(track, "cdda://%d", i+1);
- sprintf(trackname, "Track %d", i+1);
- mygui->playlist->add_track(mygui->playlist, track, NULL, trackname, 0);
- }
- cdio_destroy(p_cdio);
- mygui->startplay(mygui);
- break;
- }
-#endif
- case evFullScreen:
- mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen"));
- break;
- case evExit:
- {
- /* We are asking mplayer to exit, later it will ask us after uninit is made
- this should be the only safe way to quit */
- mygui->activewidget = NULL;
- mp_input_queue_cmd(mp_input_parse_cmd("quit"));
- break;
- }
- case evStop:
- if(guiIntfStruct.Playing)
- guiGetEvent(guiCEvent, (void *) guiSetStop);
- break;
- case evSetMoviePosition:
- {
- rel_seek_secs = guiIntfStruct.Position / 100.0f;
- abs_seek_pos = 3;
- break;
- }
- case evForward10sec:
- {
- rel_seek_secs = 10.0f;
- abs_seek_pos = 0;
- break;
- }
- case evBackward10sec:
- {
- rel_seek_secs = -10.0f;
- abs_seek_pos = 0;
- break;
- }
- case evSetBalance:
- case evSetVolume:
- {
- float l,r;
-
- if (guiIntfStruct.Playing == 0)
- break;
-
- if (guiIntfStruct.Balance == 50.0f)
- mixer_setvolume(mixer, guiIntfStruct.Volume, guiIntfStruct.Volume);
-
- l = guiIntfStruct.Volume * ((100.0f - guiIntfStruct.Balance) / 50.0f);
- r = guiIntfStruct.Volume * ((guiIntfStruct.Balance) / 50.0f);
-
- if (l > guiIntfStruct.Volume) l=guiIntfStruct.Volume;
- if (r > guiIntfStruct.Volume) r=guiIntfStruct.Volume;
- mixer_setvolume(mixer, l, r);
- /* Check for balance support on mixer - there is a better way ?? */
- if (r != l)
- {
- mixer_getvolume(mixer, &l, &r);
- if (r == l)
- {
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Mixer doesn't support balanced audio\n");
- mixer_setvolume(mixer, guiIntfStruct.Volume, guiIntfStruct.Volume);
- guiIntfStruct.Balance = 50.0f;
- }
- }
- break;
- }
- case evMute:
- {
- mp_cmd_t * cmd = calloc(1, sizeof(*cmd));
- cmd->id=MP_CMD_MUTE;
- cmd->name=strdup("mute");
- mp_input_queue_cmd(cmd);
- break;
- }
- case evDropFile:
- case evLoadPlay:
- {
- switch(guiIntfStruct.StreamType)
- {
- case STREAMTYPE_DVD:
- {
- guiIntfStruct.Title = guiIntfStruct.DVD.current_title;
- guiIntfStruct.Chapter = guiIntfStruct.DVD.current_chapter;
- guiIntfStruct.Angle = guiIntfStruct.DVD.current_angle;
- guiIntfStruct.DiskChanged = 1;
- guiGetEvent(guiCEvent, (void *) guiSetPlay);
- break;
- }
- default:
- {
- guiIntfStruct.FilenameChanged = guiIntfStruct.NewPlay = 1;
- update_playlistwindow();
- mplGotoTheNext = guiIntfStruct.Playing? 0 : 1;
- guiGetEvent(guiCEvent, (void *) guiSetStop);
- guiGetEvent(guiCEvent, (void *) guiSetPlay);
- break;
- }
- }
- break;
- }
- case evNext:
- mplNext();
- break;
- case evPrev:
- mplPrev();
- break;
- }
-}
-
-void mplPlay( void )
-{
- if((!guiIntfStruct.Filename ) || (guiIntfStruct.Filename[0] == 0))
- return;
-
- if(guiIntfStruct.Playing > 0)
- {
- mplPause();
- return;
- }
- guiIntfStruct.NewPlay = 1;
- guiGetEvent(guiCEvent, (void *) guiSetPlay);
-}
-
-void mplPause( void )
-{
- if(!guiIntfStruct.Playing) return;
-
- if(guiIntfStruct.Playing == 1)
- {
- mp_cmd_t * cmd = calloc(1, sizeof(*cmd));
- cmd->id=MP_CMD_PAUSE;
- cmd->name=strdup("pause");
- mp_input_queue_cmd(cmd);
- } else guiIntfStruct.Playing = 1;
-}
-
-void mplNext(void)
-{
- if(guiIntfStruct.Playing == 2) return;
- switch(guiIntfStruct.StreamType)
- {
-#ifdef USE_DVDREAD
- case STREAMTYPE_DVD:
- if(guiIntfStruct.DVD.current_chapter == (guiIntfStruct.DVD.chapters - 1))
- return;
- guiIntfStruct.DVD.current_chapter++;
- break;
-#endif
- default:
- if(mygui->playlist->current == (mygui->playlist->trackcount - 1))
- return;
- mplSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename,
- STREAMTYPE_STREAM);
- break;
- }
- mygui->startplay(mygui);
-}
-
-void mplPrev(void)
-{
- if(guiIntfStruct.Playing == 2) return;
- switch(guiIntfStruct.StreamType)
- {
-#ifdef USE_DVDREAD
- case STREAMTYPE_DVD:
- if(guiIntfStruct.DVD.current_chapter == 1)
- return;
- guiIntfStruct.DVD.current_chapter--;
- break;
-#endif
- default:
- if(mygui->playlist->current == 0)
- return;
- mplSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)--]->filename,
- STREAMTYPE_STREAM);
- break;
- }
- mygui->startplay(mygui);
-}
-
-void mplEnd( void )
-{
- if(!mplGotoTheNext && guiIntfStruct.Playing)
- {
- mplGotoTheNext = 1;
- return;
- }
-
- if(mplGotoTheNext && guiIntfStruct.Playing &&
- (mygui->playlist->current < (mygui->playlist->trackcount - 1)) &&
- guiIntfStruct.StreamType != STREAMTYPE_DVD &&
- guiIntfStruct.StreamType != STREAMTYPE_DVDNAV)
- {
- /* we've finished this file, reset the aspect */
- if(movie_aspect >= 0)
- movie_aspect = -1;
-
- mplGotoTheNext = guiIntfStruct.FilenameChanged = guiIntfStruct.NewPlay = 1;
- mplSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, STREAMTYPE_STREAM);
- //sprintf(guiIntfStruct.Filename, mygui->playlist->tracks[(mygui->playlist->current)++]->filename);
- }
-
- if(guiIntfStruct.FilenameChanged && guiIntfStruct.NewPlay)
- return;
-
- guiIntfStruct.TimeSec = 0;
- guiIntfStruct.Position = 0;
- guiIntfStruct.AudioType = 0;
-
-#ifdef USE_DVDREAD
- guiIntfStruct.DVD.current_title = 1;
- guiIntfStruct.DVD.current_chapter = 1;
- guiIntfStruct.DVD.current_angle = 1;
-#endif
-
- if (mygui->playlist->current == (mygui->playlist->trackcount - 1))
- mygui->playlist->current = 0;
-
- fullscreen = 0;
- if(style == WS_VISIBLE | WS_POPUP)
- {
- style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX;
- SetWindowLong(mygui->subwindow, GWL_STYLE, style);
- }
- guiGetEvent(guiCEvent, (void *) guiSetStop);
-}
-
-void mplSetFileName(char *dir, char *name, int type)
-{
- if(!name) return;
- if(!dir)
- guiSetFilename(guiIntfStruct.Filename, name)
- else
- guiSetDF(guiIntfStruct.Filename, dir, name);
-
- guiIntfStruct.StreamType = type;
- free((void **) &guiIntfStruct.AudioFile);
- free((void **) &guiIntfStruct.Subtitlename);
-}
-
-void mplFullScreen( void )
-{
- if(!guiIntfStruct.sh_video) return;
-
- if(sub_window)
- {
- if(!fullscreen && IsWindowVisible(mygui->subwindow) && !IsIconic(mygui->subwindow))
- GetWindowRect(mygui->subwindow, &old_rect);
-
- if(fullscreen)
- {
- fullscreen = 0;
- style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX;
- } else {
- fullscreen = 1;
- style = WS_VISIBLE | WS_POPUP;
- }
- SetWindowLong(mygui->subwindow, GWL_STYLE, style);
- update_subwindow();
- }
- video_out->control(VOCTRL_FULLSCREEN, 0);
- if(sub_window) ShowWindow(mygui->subwindow, SW_SHOW);
-}
-
-static DWORD WINAPI GuiThread(void)
-{
- MSG msg;
-
- if(!skinName) skinName = strdup("Blue");
- if(!mygui) mygui = create_gui(get_path("skins"), skinName, guiSetEvent);
- if(!mygui) exit_player("Unable to load gui");
-
- if(autosync && autosync != gtkAutoSync)
- {
- gtkAutoSyncOn = 1;
- gtkAutoSync = autosync;
- }
-
- while(mygui)
- {
- GetMessage(&msg, NULL, 0, 0);
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- fprintf(stderr, "[GUI] Gui Thread Terminated\n");
- fflush(stderr);
- return 0;
-}
-
-void guiInit(void)
-{
- DWORD threadId;
- memset(&guiIntfStruct, 0, sizeof(guiIntfStruct));
- /* Create The gui thread */
- if (!mygui)
- {
- CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) GuiThread, NULL, 0, &threadId);
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Creating GUI Thread 0x%04x\n", threadId);
- }
-
- /* Wait until the gui is created */
- while(!mygui) Sleep(100);
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Gui Thread started\n");
-}
-
-void guiDone(void)
-{
- if(mygui)
- {
- fprintf(stderr, "[GUI] Closed by main mplayer window\n");
- fflush(stderr);
- mygui->uninit(mygui);
- free(mygui);
- TerminateThread(GuiThread, 0);
- mygui = NULL;
- }
- /* Remove tray icon */
- Shell_NotifyIcon(NIM_DELETE, &nid);
- cfg_write();
-}
-
-/* this function gets called by mplayer to update the gui */
-int guiGetEvent(int type, char *arg)
-{
- stream_t *stream = (stream_t *) arg;
-#ifdef USE_DVDREAD
- dvd_priv_t *dvdp = (dvd_priv_t *) arg;
-#endif
- if(!mygui || !mygui->skin) return 0;
-
- if(guiIntfStruct.mpcontext)
- {
- audio_out = mpctx_get_audio_out(guiIntfStruct.mpcontext);
- video_out = mpctx_get_video_out(guiIntfStruct.mpcontext);
- mixer = mpctx_get_mixer(guiIntfStruct.mpcontext);
- playtree = mpctx_get_playtree_iter(guiIntfStruct.mpcontext);
- }
-
- switch (type)
- {
- case guiSetFileFormat:
- guiIntfStruct.FileFormat = (int) arg;
- break;
- case guiSetParameters:
- {
- guiGetEvent(guiSetDefaults, NULL);
- guiIntfStruct.DiskChanged = 0;
- guiIntfStruct.FilenameChanged = 0;
- guiIntfStruct.NewPlay = 0;
- switch(guiIntfStruct.StreamType)
- {
- case STREAMTYPE_PLAYLIST:
- break;
-#ifdef USE_DVDREAD
- case STREAMTYPE_DVD:
- {
- char tmp[512];
- dvd_title = guiIntfStruct.DVD.current_title;
- dvd_chapter = guiIntfStruct.DVD.current_chapter;
- dvd_angle = guiIntfStruct.DVD.current_angle;
- sprintf(tmp,"dvd://%d", guiIntfStruct.Title);
- guiSetFilename(guiIntfStruct.Filename, tmp);
- break;
- }
-#endif
- }
- if(guiIntfStruct.Filename)
- filename = strdup(guiIntfStruct.Filename);
- else if(filename)
- strcpy(guiIntfStruct.Filename, filename);
- break;
- }
- case guiSetAudioOnly:
- {
- guiIntfStruct.AudioOnly = (int) arg;
- if(IsWindowVisible(mygui->subwindow))
- ShowWindow(mygui->subwindow, SW_HIDE);
- break;
- }
- case guiSetContext:
- guiIntfStruct.mpcontext = (void *) arg;
- break;
- case guiSetDemuxer:
- guiIntfStruct.demuxer = (void *) arg;
- break;
- case guiSetValues:
- {
- guiIntfStruct.sh_video = arg;
- if (arg)
- {
- sh_video_t *sh = (sh_video_t *)arg;
- codecname = sh->codec->name;
- guiIntfStruct.FPS = sh->fps;
-
- /* we have video, show the subwindow */
- if(!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow))
- ShowWindow(mygui->subwindow, SW_SHOWNORMAL);
- if(WinID == -1)
- update_subwindow();
-
- }
- break;
- }
- case guiSetShVideo:
- {
- guiIntfStruct.MovieWidth = vo_dwidth;
- guiIntfStruct.MovieHeight = vo_dheight;
-
- sub_aspect = (float)guiIntfStruct.MovieWidth/guiIntfStruct.MovieHeight;
- if(WinID != -1)
- update_subwindow();
- break;
- }
- case guiSetStream:
- {
- guiIntfStruct.StreamType = stream->type;
- switch(stream->type)
- {
-#ifdef USE_DVDREAD
- case STREAMTYPE_DVD:
- guiGetEvent(guiSetDVD, (char *) stream->priv);
- break;
-#endif
- }
- break;
- }
-#ifdef USE_DVDREAD
- case guiSetDVD:
- {
- guiIntfStruct.DVD.titles = dvdp->vmg_file->tt_srpt->nr_of_srpts;
- guiIntfStruct.DVD.chapters = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts;
- guiIntfStruct.DVD.angles = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles;
- guiIntfStruct.DVD.nr_of_audio_channels = dvdp->nr_of_channels;
- memcpy(guiIntfStruct.DVD.audio_streams, dvdp->audio_streams, sizeof(dvdp->audio_streams));
- guiIntfStruct.DVD.nr_of_subtitles = dvdp->nr_of_subtitles;
- memcpy(guiIntfStruct.DVD.subtitles, dvdp->subtitles, sizeof(dvdp->subtitles));
- guiIntfStruct.DVD.current_title = dvd_title + 1;
- guiIntfStruct.DVD.current_chapter = dvd_chapter + 1;
- guiIntfStruct.DVD.current_angle = dvd_angle + 1;
- guiIntfStruct.Track = dvd_title + 1;
- break;
- }
-#endif
- case guiReDraw:
- mygui->updatedisplay(mygui, mygui->mainwindow);
- break;
- case guiSetAfilter:
- guiIntfStruct.afilter = (void *) arg;
- break;
- case guiCEvent:
- {
- guiIntfStruct.Playing = (int) arg;
- switch (guiIntfStruct.Playing)
- {
- case guiSetPlay:
- {
- guiIntfStruct.Playing = 1;
- break;
- }
- case guiSetStop:
- {
- guiIntfStruct.Playing = 0;
- if(movie_aspect >= 0)
- movie_aspect = -1;
- update_subwindow();
- break;
- }
- case guiSetPause:
- guiIntfStruct.Playing = 2;
- break;
- }
- break;
- }
- case guiIEvent:
- {
- mp_msg(MSGT_GPLAYER,MSGL_V, "cmd: %d\n", (int) arg);
- /* MPlayer asks us to quit */
- switch((int) arg)
- {
- case MP_CMD_GUI_FULLSCREEN:
- mplFullScreen();
- break;
- case MP_CMD_QUIT:
- {
- mygui->uninit(mygui);
- free(mygui);
- mygui = NULL;
- exit_player("Done");
- return 0;
- }
- case MP_CMD_GUI_STOP:
- guiGetEvent(guiCEvent, (void *) guiSetStop);
- break;
- case MP_CMD_GUI_PLAY:
- guiGetEvent(guiCEvent, (void *) guiSetPlay);
- break;
- case MP_CMD_GUI_SKINBROWSER:
- if(fullscreen) guiSetEvent(evFullScreen);
- PostMessage(mygui->mainwindow, WM_COMMAND, (WPARAM) ID_SKINBROWSER, 0);
- break;
- case MP_CMD_GUI_PLAYLIST:
- if(fullscreen) guiSetEvent(evFullScreen);
- PostMessage(mygui->mainwindow, WM_COMMAND, (WPARAM) ID_PLAYLIST, 0);
- break;
- case MP_CMD_GUI_PREFERENCES:
- if(fullscreen) guiSetEvent(evFullScreen);
- PostMessage(mygui->mainwindow, WM_COMMAND, (WPARAM) ID_PREFS, 0);
- break;
- case MP_CMD_GUI_LOADFILE:
- if(fullscreen) guiSetEvent(evFullScreen);
- PostMessage(mygui->mainwindow, WM_COMMAND, (WPARAM) IDFILE_OPEN, 0);
- break;
- case MP_CMD_GUI_LOADSUBTITLE:
- if(fullscreen) guiSetEvent(evFullScreen);
- PostMessage(mygui->mainwindow, WM_COMMAND, (WPARAM) IDSUBTITLE_OPEN, 0);
- break;
- default:
- break;
- }
- break;
- }
- case guiSetFileName:
- if (arg) guiIntfStruct.Filename = (char *) arg;
- break;
- case guiSetDefaults:
- {
- audio_id = -1;
- video_id = -1;
- dvdsub_id = -1;
- vobsub_id = -1;
- stream_cache_size = -1;
- autosync = 0;
- vcd_track = 0;
- dvd_title = 0;
- force_fps = 0;
- if(!mygui->playlist->tracks) return 0;
- filename = guiIntfStruct.Filename = mygui->playlist->tracks[mygui->playlist->current]->filename;
- guiIntfStruct.Track = mygui->playlist->current + 1;
- if(gtkAONorm) greplace(&af_cfg.list, "volnorm", "volnorm");
- if(gtkAOExtraStereo)
- {
- char *name = malloc(12 + 20 + 1);
- snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul);
- name[12 + 20] = 0;
- greplace(&af_cfg.list, "extrastereo", name);
- free(name);
- }
- if(gtkCacheOn) stream_cache_size = gtkCacheSize;
- if(gtkAutoSyncOn) autosync = gtkAutoSync;
- break;
- }
- case guiSetVolume:
- {
- if(audio_out)
- {
- /* Some audio_out drivers do not support balance e.g. dsound */
- /* FIXME this algo is not correct */
- float l, r;
- mixer_getvolume(mixer, &l, &r);
- guiIntfStruct.Volume = (r > l ? r : l); /* max(r,l) */
- if (r != l)
- guiIntfStruct.Balance = ((r-l) + 100.0f) * 0.5f;
- else
- guiIntfStruct.Balance = 50.0f;
- }
- break;
- }
- default:
- mp_msg(MSGT_GPLAYER, MSGL_ERR, "[GUI] GOT UNHANDLED EVENT %i\n", type);
- }
- return 0;
-}
-
-/* This function adds/inserts one file into the gui playlist */
-int import_file_into_gui(char *pathname, int insert)
-{
- char filename[MAX_PATH];
- char *filepart = filename;
-
- if (strstr(pathname, "://"))
- {
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding special %s\n", pathname);
- mygui->playlist->add_track(mygui->playlist, pathname, NULL, NULL, 0);
- return 1;
- }
- if (GetFullPathName(pathname, MAX_PATH, filename, &filepart))
- {
- if (!(GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY))
- {
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding filename: %s - fullpath: %s\n", filepart, filename);
- mygui->playlist->add_track(mygui->playlist, filename, NULL, filepart, 0);
- return 1;
- }
- else
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Cannot add %s\n", filename);
- }
-
- return 0;
-}
-
-/* This function imports the initial playtree (based on cmd-line files) into the gui playlist
- by either:
- - overwriting gui pl (enqueue=0) */
-
-int import_initial_playtree_into_gui(play_tree_t *my_playtree, m_config_t *config, int enqueue)
-{
- play_tree_iter_t *my_pt_iter = NULL;
- int result = 0;
-
- if(!mygui) guiInit();
-
- if((my_pt_iter = pt_iter_create(&my_playtree, config)))
- {
- while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL)
- {
- if (parse_filename(filename, my_playtree, config, 0))
- result = 1;
- else if (import_file_into_gui(filename, 0)) /* Add it to end of list */
- result = 1;
- }
- }
- mplGotoTheNext = 1;
-
- if (result)
- {
- mygui->playlist->current = 0;
- filename = mygui->playlist->tracks[0]->filename;
- }
- return result;
-}
-
-/* This function imports and inserts an playtree, that is created "on the fly", for example by
- parsing some MOV-Reference-File; or by loading an playlist with "File Open"
- The file which contained the playlist is thereby replaced with it's contents. */
-
-int import_playtree_playlist_into_gui(play_tree_t *my_playtree, m_config_t *config)
-{
- play_tree_iter_t *my_pt_iter = NULL;
- int result = 0;
-
- if((my_pt_iter = pt_iter_create(&my_playtree, config)))
- {
- while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL)
- if (import_file_into_gui(filename, 1)) /* insert it into the list and set plCurrent = new item */
- result = 1;
- pt_iter_destroy(&my_pt_iter);
- }
- filename = NULL;
- return result;
-}
-
-inline void gtkMessageBox(int type, const char *str)
-{
- if (type & GTK_MB_FATAL)
- MessageBox(NULL, str, "MPlayer GUI for Windows Error", MB_OK | MB_ICONERROR);
-
- fprintf(stderr, "[GUI] MessageBox: %s\n", str);
- fflush(stderr);
-}
-
-void guiMessageBox(int level, char *str)
-{
- switch(level)
- {
- case MSGL_FATAL:
- gtkMessageBox(GTK_MB_FATAL | GTK_MB_SIMPLE, str);
- break;
- case MSGL_ERR:
- gtkMessageBox(GTK_MB_ERROR | GTK_MB_SIMPLE, str);
- break;
- }
-}
-
-static int update_subwindow(void)
-{
- int x,y;
- RECT rd;
- WINDOWPOS wp;
-
- if(!sub_window)
- {
- WinID = -1; // so far only directx supports WinID in windows
-
- if(IsWindowVisible(mygui->subwindow) && guiIntfStruct.sh_video && guiIntfStruct.Playing)
- {
- ShowWindow(mygui->subwindow, SW_HIDE);
- return 0;
- }
- else if(guiIntfStruct.AudioOnly)
- return 0;
- else ShowWindow(mygui->subwindow, SW_SHOW);
- }
-
- /* we've come out of fullscreen at the end of file */
- if((!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow)) && !guiIntfStruct.AudioOnly)
- ShowWindow(mygui->subwindow, SW_SHOWNORMAL);
-
- /* get our current window coordinates */
- GetWindowRect(mygui->subwindow, &rd);
-
- x = rd.left;
- y = rd.top;
-
- /* restore sub window position when coming out of fullscreen */
- if(x <= 0) x = old_rect.left;
- if(y <= 0) y = old_rect.top;
-
- if(!guiIntfStruct.Playing)
- {
- window *desc = NULL;
- int i;
-
- for (i=0; i<mygui->skin->windowcount; i++)
- if(mygui->skin->windows[i]->type == wiSub)
- desc = mygui->skin->windows[i];
-
- rd.right = rd.left+desc->base->bitmap[0]->width;
- rd.bottom = rd.top+desc->base->bitmap[0]->height;
- sub_aspect = (float)(rd.right-rd.left)/(rd.bottom-rd.top);
- }
- else
- {
- rd.right = rd.left+guiIntfStruct.MovieWidth;
- rd.bottom = rd.top+guiIntfStruct.MovieHeight;
-
- if (movie_aspect > 0.0) // forced aspect from the cmdline
- sub_aspect = movie_aspect;
- }
-
-
- AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0);
- SetWindowPos(mygui->subwindow, 0, x, y, rd.right-rd.left, rd.bottom-rd.top, SWP_NOOWNERZORDER);
-
- wp.hwnd = mygui->subwindow;
- wp.x = rd.left;
- wp.y = rd.top;
- wp.cx = rd.right-rd.left;
- wp.cy = rd.bottom-rd.top;
- wp.flags = SWP_NOOWNERZORDER | SWP_SHOWWINDOW;
-
- /* erase the bitmap image if there's video */
- if(guiIntfStruct.Playing != 0 && guiIntfStruct.sh_video)
- SendMessage(mygui->subwindow, WM_ERASEBKGND, (WPARAM)GetDC(mygui->subwindow), 0);
-
- /* reset the window aspect */
- SendMessage(mygui->subwindow, WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);
- return 0;
-}
-
-void guiEventHandling(void) {}
diff --git a/Gui/win32/playlist.c b/Gui/win32/playlist.c
deleted file mode 100644
index 65556e9dee..0000000000
--- a/Gui/win32/playlist.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <windows.h>
-#include <mp_msg.h>
-#include "playlist.h"
-
-/* TODO: implement sort_playlist */
-
-BOOL adddirtoplaylist(playlist_t *playlist, const char *path, BOOL recursive)
-{
- HANDLE findHandle = INVALID_HANDLE_VALUE;
- WIN32_FIND_DATA finddata;
- char findpath[MAX_PATH], filename[MAX_PATH];
- char *filepart;
-
- sprintf(findpath, "%s\\*.*", path);
-
- findHandle = FindFirstFile(findpath, &finddata);
-
- if (findHandle == INVALID_HANDLE_VALUE) return FALSE;
- do
- {
- if (finddata.cFileName[0] == '.' || strstr(finddata.cFileName, "Thumbs.db")) continue;
- sprintf(findpath, "%s\\%s", path, finddata.cFileName);
-
- if (GetFileAttributes(findpath) & FILE_ATTRIBUTE_DIRECTORY)
- {
- if(recursive)
- adddirtoplaylist(playlist, findpath, recursive);
- }
- else
- {
- if (GetFullPathName(findpath, MAX_PATH, filename, &filepart))
- playlist->add_track(playlist, filename, NULL, filepart, 0);
- }
- } while (FindNextFile(findHandle, &finddata));
- FindClose(findHandle);
- return TRUE;
-}
-
-static void add_track(playlist_t *playlist, const char *filename, const char *artist, const char *title, int duration)
-{
- (playlist->trackcount)++;
- playlist->tracks = realloc(playlist->tracks, playlist->trackcount * sizeof(pl_track_t *));
- playlist->tracks[playlist->trackcount - 1] = calloc(1, sizeof(pl_track_t));
- if(filename) playlist->tracks[playlist->trackcount - 1]->filename = strdup(filename);
- if(artist) playlist->tracks[playlist->trackcount - 1]->artist = strdup(artist);
- if(title) playlist->tracks[playlist->trackcount - 1]->title = strdup(title);
- if(duration) playlist->tracks[playlist->trackcount - 1]->duration = duration;
-}
-
-static void remove_track(playlist_t *playlist, int number)
-{
- pl_track_t **tmp = calloc(1, playlist->trackcount * sizeof(pl_track_t *));
- int i, p = 0;
- memcpy(tmp, playlist->tracks, playlist->trackcount * sizeof(pl_track_t *));
- (playlist->trackcount)--;
- playlist->tracks = realloc(playlist->tracks, playlist->trackcount * sizeof(pl_track_t *));
- for(i=0; i<playlist->trackcount + 1; i++)
- {
- if(i != (number - 1))
- {
- playlist->tracks[p] = tmp[i];
- p++;
- }
- else
- {
- if(tmp[i]->filename) free(tmp[i]->filename);
- if(tmp[i]->artist) free(tmp[i]->artist);
- if(tmp[i]->title) free(tmp[i]->title);
- free(tmp[i]);
- }
- }
- free(tmp);
-}
-
-static void moveup_track(playlist_t *playlist, int number)
-{
- pl_track_t *tmp;
- if(number == 1) return; /* already first */
- tmp = playlist->tracks[number - 2];
- playlist->tracks[number - 2] = playlist->tracks[number - 1];
- playlist->tracks[number - 1] = tmp;
-}
-
-static void movedown_track(playlist_t *playlist, int number)
-{
- pl_track_t *tmp;
- if(number == playlist->trackcount) return; /* already latest */
- tmp = playlist->tracks[number];
- playlist->tracks[number] = playlist->tracks[number - 1];
- playlist->tracks[number - 1] = tmp;
-}
-
-static void sort_playlist(playlist_t *playlist, int opt) {}
-
-static void clear_playlist(playlist_t *playlist)
-{
- while(playlist->trackcount) playlist->remove_track(playlist, 1);
- playlist->tracks = NULL;
- playlist->current = 0;
-}
-
-static void free_playlist(playlist_t *playlist)
-{
- if(playlist->tracks) playlist->clear_playlist(playlist);
- free(playlist);
-}
-
-static void dump_playlist(playlist_t *playlist)
-{
- int i;
- for (i=0; i<playlist->trackcount; i++)
- {
- mp_msg(MSGT_GPLAYER, MSGL_V, "track %i %s ", i + 1, playlist->tracks[i]->filename);
- if(playlist->tracks[i]->artist) mp_msg(MSGT_GPLAYER, MSGL_V, "%s ", playlist->tracks[i]->artist);
- if(playlist->tracks[i]->title) mp_msg(MSGT_GPLAYER, MSGL_V, "- %s ", playlist->tracks[i]->title);
- if(playlist->tracks[i]->duration) mp_msg(MSGT_GPLAYER, MSGL_V, "%i ", playlist->tracks[i]->duration);
- mp_msg(MSGT_GPLAYER, MSGL_V, "\n");
- }
-}
-
-playlist_t *create_playlist(void)
-{
- playlist_t *playlist = calloc(1, sizeof(playlist_t));
- playlist->add_track = add_track;
- playlist->remove_track = remove_track;
- playlist->moveup_track = moveup_track;
- playlist->movedown_track = movedown_track;
- playlist->dump_playlist = dump_playlist;
- playlist->sort_playlist = sort_playlist;
- playlist->clear_playlist = clear_playlist;
- playlist->free_playlist = free_playlist;
- return playlist;
-}
diff --git a/Gui/win32/playlist.h b/Gui/win32/playlist.h
deleted file mode 100644
index 41766d169d..0000000000
--- a/Gui/win32/playlist.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _PLAYLIST_H
-#define _PLAYLIST_H
-
-typedef struct
-{
- char *filename;
- char *artist;
- char *title;
- int duration;
-} pl_track_t;
-
-typedef struct playlist_t playlist_t;
-struct playlist_t
-{
- int current; /* currently used track */
- int trackcount; /* number of tracknumber */
- pl_track_t **tracks; /* tracklist */
- void (*add_track)(playlist_t* playlist, const char *filename, const char *artist, const char *title, int duration);
- void (*remove_track)(playlist_t* playlist, int number);
- void (*moveup_track)(playlist_t* playlist, int number);
- void (*movedown_track)(playlist_t* playlist, int number);
- void (*dump_playlist)(playlist_t* playlist);
- void (*sort_playlist)(playlist_t* playlist, int opt);
- void (*clear_playlist)(playlist_t* playlist);
- void (*free_playlist)(playlist_t* playlist);
-};
-
-#define SORT_BYFILENAME 1
-#define SORT_BYARTIST 2
-#define SORT_BYTITLE 3
-#define SORT_BYDURATION 4
-
-extern playlist_t *create_playlist(void);
-extern BOOL adddirtoplaylist(playlist_t *playlist, const char* path, BOOL recursive);
-
-#endif
diff --git a/Gui/win32/preferences.c b/Gui/win32/preferences.c
deleted file mode 100644
index 0063a6ac13..0000000000
--- a/Gui/win32/preferences.c
+++ /dev/null
@@ -1,722 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <windows.h>
-#include <commctrl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libvo/video_out.h>
-#include <libao2/audio_out.h>
-#include <mixer.h>
-#include "interface.h"
-#include "gui.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-#include "dialogs.h"
-#include "wincfg.h"
-
-extern int vo_doublebuffering;
-extern int vo_directrendering;
-extern int frame_dropping;
-extern int soft_vol;
-extern float audio_delay;
-extern int osd_level;
-extern char *dvd_device, *cdrom_device;
-extern char *proc_priority;
-
-static void set_defaults(void);
-
-static LRESULT CALLBACK PrefsWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- HWND btn, label, edit1, edit2, edit3, updown1, updown2, track1, track2;
- static HWND vo_driver, ao_driver, prio;
- int i = 0, j = 0;
- char dvddevice[MAX_PATH];
- char cdromdevice[MAX_PATH];
- char procprio[11];
- float x = 10.0, y = 100.0, stereopos, delaypos;
- stereopos = gtkAOExtraStereoMul * x;
- delaypos = audio_delay * y;
-
- switch (iMsg)
- {
- case WM_CREATE:
- {
- /* video and audio drivers */
- label = CreateWindow("static", "Video Driver:",
- WS_CHILD | WS_VISIBLE,
- 10, 13, 70, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Audio Driver:",
- WS_CHILD | WS_VISIBLE,
- 190, 13, 70, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Extra stereo coefficient:",
- WS_CHILD | WS_VISIBLE,
- 10, 126, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Audio delay:",
- WS_CHILD | WS_VISIBLE,
- 36, 165, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "OSD level:",
- WS_CHILD | WS_VISIBLE,
- 10, 264, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "DVD device:",
- WS_CHILD | WS_VISIBLE,
- 80, 363, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "CD device:",
- WS_CHILD | WS_VISIBLE,
- 202, 363, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- label = CreateWindow("static", "Priority:",
- WS_CHILD | WS_VISIBLE,
- 217, 264, 115, 15, hwnd,
- NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- vo_driver = CreateWindow("combobox", NULL,
- CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
- CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
- WS_CHILD | WS_VISIBLE |
- WS_VSCROLL | WS_TABSTOP,
- 80, 10, 100, 160, hwnd,
- (HMENU) ID_VO_DRIVER,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
-
- ao_driver = CreateWindow("combobox", NULL,
- CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
- CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
- WS_CHILD | WS_VISIBLE |
- WS_VSCROLL | WS_TABSTOP,
- 260, 10, 100, 160, hwnd,
- (HMENU) ID_AO_DRIVER,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
-
- prio = CreateWindow("combobox", NULL,
- CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
- CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
- WS_CHILD | WS_VISIBLE |
- WS_VSCROLL | WS_TABSTOP,
- 260, 260, 100, 160, hwnd,
- (HMENU) ID_PRIO,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
-
- /* checkboxes */
- btn = CreateWindow("button", "Enable double buffering",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 25, 35, 150, 25,
- hwnd, (HMENU) ID_DOUBLE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable direct rendering",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 25, 57, 150, 25,
- hwnd, (HMENU) ID_DIRECT,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable framedropping",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 25, 79, 150, 25,
- hwnd, (HMENU) ID_FRAMEDROP,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Normalize sound",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 205, 35, 150, 25,
- hwnd, (HMENU) ID_NORMALIZE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable software mixer",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 205, 57, 150, 25,
- hwnd, (HMENU) ID_SOFTMIX,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable extra stereo",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 205, 79, 150, 25,
- hwnd, (HMENU) ID_EXTRASTEREO,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable cache",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 10, 200, 90, 25,
- hwnd, (HMENU) ID_CACHE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Enable autosync",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 192, 200, 100, 25, hwnd,
- (HMENU) ID_AUTOSYNC,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Display videos in the sub window",
- WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
- 85, 227, 250, 25,
- hwnd, (HMENU) ID_SUBWINDOW,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- /* osd level */
- btn = CreateWindow("button", "None",
- WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
- 95, 260, 100, 25, hwnd,
- (HMENU) ID_NONE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Timer and indicators",
- WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
- 95, 280, 180, 25, hwnd,
- (HMENU) ID_OSD1,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Progress bar only",
- WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
- 95, 300, 180, 25, hwnd,
- (HMENU) ID_OSD2,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Timer, percentage, and total time",
- WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
- 95, 320, 180, 25, hwnd,
- (HMENU) ID_OSD3,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Apply",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 199, 395, 80, 25, hwnd,
- (HMENU) ID_APPLY,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Cancel",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 285, 395, 80, 25, hwnd,
- (HMENU) ID_CANCEL,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- btn = CreateWindow("button", "Defaults",
- WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
- 4, 395, 80, 25, hwnd,
- (HMENU) ID_DEFAULTS,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- /* extra stereo coefficient trackbar */
- track1 = CreateWindow(TRACKBAR_CLASS, "Coefficient",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP |
- WS_DISABLED | TBS_HORZ |
- TBS_BOTTOM | TBS_NOTICKS,
- 120, 120, 245, 35, hwnd,
- (HMENU) ID_TRACKBAR1,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETRANGE, 1, MAKELONG(-100, 100));
-
- /* audio delay */
- track2 = CreateWindow(TRACKBAR_CLASS, "Audio delay",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP |
- WS_DISABLED | TBS_HORZ |
- TBS_BOTTOM | TBS_NOTICKS,
- 120, 160, 245, 35, hwnd,
- (HMENU) ID_TRACKBAR2,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETRANGE, 1, MAKELONG(-1000, 1000));
-
- /* cache */
- edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "cache",
- WS_CHILD | WS_VISIBLE | WS_DISABLED |
- ES_LEFT | ES_AUTOHSCROLL,
- 105, 203, 40, 20, hwnd,
- (HMENU) ID_EDIT1,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(edit1, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- updown1 = CreateUpDownControl(WS_CHILD | WS_VISIBLE |
- WS_DISABLED | UDS_SETBUDDYINT |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,
- 145, 203, 20, 20, hwnd,
- ID_UPDOWN1,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- (HWND)edit1, 0, 0, 0);
- SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETRANGE32, (WPARAM)0, (LPARAM)65535);
-
- /* autosync */
- edit2 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "autosync",
- WS_CHILD | WS_VISIBLE | WS_DISABLED |
- ES_LEFT | ES_AUTOHSCROLL,
- 300, 203, 40, 20, hwnd,
- (HMENU) ID_EDIT2,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(edit2, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- updown2 = CreateUpDownControl(WS_CHILD | WS_VISIBLE |
- WS_DISABLED | UDS_SETBUDDYINT |
- UDS_ARROWKEYS | UDS_NOTHOUSANDS,
- 340, 203, 20, 20, hwnd,
- ID_UPDOWN2,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- (HWND)edit2, 0, 0, 0);
- SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETRANGE32, (WPARAM)0, (LPARAM)10000);
-
- /* dvd and cd devices */
- edit3 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL,
- WS_CHILD | WS_VISIBLE |
- ES_LEFT | ES_AUTOHSCROLL,
- 145, 360, 20, 20, hwnd,
- (HMENU) ID_DVDDEVICE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(edit3, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- edit3 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL,
- WS_CHILD | WS_VISIBLE |
- ES_LEFT| ES_AUTOHSCROLL,
- 260, 360, 20, 20, hwnd,
- (HMENU) ID_CDDEVICE,
- ((LPCREATESTRUCT) lParam) -> hInstance,
- NULL);
- SendMessage(edit3, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- while(video_out_drivers[i])
- {
- const vo_info_t *info = video_out_drivers[i++]->info;
- if(!video_driver_list) gaddlist(&video_driver_list, (char *)info->short_name);
- SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_ADDSTRING, 0, (LPARAM) info->short_name);
- }
- /* Special case for directx:noaccel */
- SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_ADDSTRING, 0, (LPARAM) "directx:noaccel");
- SendMessage(vo_driver, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- while(audio_out_drivers[j])
- {
- const ao_info_t *info = audio_out_drivers[j++]->info;
- if(!audio_driver_list)
- {
- // FIXME: default priority (i.e. order in audio_out_drivers) should be fixed instead
- // if win32 as default is really desirable
- gaddlist(&audio_driver_list, "win32"/*(char *)info->short_name*/);
- }
- SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_ADDSTRING, 0, (LPARAM) info->short_name);
- }
- SendMessage(ao_driver, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- /* priority list, i'm leaving out realtime for safety's sake */
- SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "low");
- SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "belownormal");
- SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "normal");
- SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "abovenormal");
- SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "high");
- SendMessage(prio, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- /* set our preferences on what we already have */
- if(video_driver_list)
- SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_SETCURSEL,
- (WPARAM)SendMessage(vo_driver, CB_FINDSTRING, -1,
- (LPARAM)video_driver_list[0]), 0);
-
- if(audio_driver_list)
- SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_SETCURSEL,
- (WPARAM)SendMessage(ao_driver, CB_FINDSTRING, -1,
- (LPARAM)audio_driver_list[0]), 0);
-
- if(vo_doublebuffering)
- SendDlgItemMessage(hwnd, ID_DOUBLE, BM_SETCHECK, 1, 0);
- if(vo_directrendering)
- SendDlgItemMessage(hwnd, ID_DIRECT, BM_SETCHECK, 1, 0);
- if(frame_dropping)
- SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_SETCHECK, 1, 0);
- if(gtkAONorm)
- SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_SETCHECK, 1, 0);
- if(soft_vol)
- SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_SETCHECK, 1, 0);
- if(gtkAOExtraStereo)
- {
- SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_SETCHECK, 1, 0);
- if(!guiIntfStruct.Playing)
- {
- EnableWindow(track1, 1);
- EnableWindow(track2, 1);
- }
- }
- else gtkAOExtraStereoMul = 1.0;
- SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)stereopos);
-
- if(audio_delay)
- SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)delaypos);
-
- if(gtkCacheOn) {
- SendDlgItemMessage(hwnd, ID_CACHE, BM_SETCHECK, 1, 0);
- EnableWindow(edit1, 1);
- EnableWindow(updown1, 1);
- }
- else gtkCacheSize = 2048;
- SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 0, (LPARAM)gtkCacheSize);
-
- if(gtkAutoSyncOn) {
- SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_SETCHECK, 1, 0);
- EnableWindow(edit2, 1);
- EnableWindow(updown2, 1);
- }
- else gtkAutoSync = 0;
- SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 0, (LPARAM)gtkAutoSync);
-
- if(sub_window)
- SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_SETCHECK, 1, 0);
-
- if(!osd_level)
- SendDlgItemMessage(hwnd, ID_NONE, BM_SETCHECK, 1, 0);
- else if(osd_level == 1)
- SendDlgItemMessage(hwnd, ID_OSD1, BM_SETCHECK, 1, 0);
- else if(osd_level == 2)
- SendDlgItemMessage(hwnd, ID_OSD2, BM_SETCHECK, 1, 0);
- else if(osd_level == 3)
- SendDlgItemMessage(hwnd, ID_OSD3, BM_SETCHECK, 1, 0);
-
- if(dvd_device)
- SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)dvd_device);
- else SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
-
- if(cdrom_device)
- SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)cdrom_device);
- else SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
-
- if(proc_priority)
- SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL,
- (WPARAM)SendMessage(prio, CB_FINDSTRING, -1,
- (LPARAM)proc_priority), 0);
-
- else SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL, 2, 0);
-
- break;
- }
- case WM_CTLCOLORDLG:
- case WM_CTLCOLOREDIT:
- case WM_CTLCOLORBTN:
- case WM_CTLCOLORSTATIC:
- {
- HDC hdc = (HDC)wParam;
- SetBkMode(hdc, TRANSPARENT);
- return (INT_PTR)SOLID_GREY;
- }
- break;
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
- case ID_EXTRASTEREO:
- {
- if(SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_GETCHECK, 0, 0) == BST_CHECKED)
- {
- EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR1), 1);
- EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR2), 1);
- } else {
- EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR1), 0);
- EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR2), 0);
- SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)10.0);
- SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)0);
- }
- break;
- }
- case ID_CACHE:
- {
- if(SendDlgItemMessage(hwnd, ID_CACHE, BM_GETCHECK, 0, 0) == BST_CHECKED)
- {
- EnableWindow(GetDlgItem(hwnd, ID_EDIT1), 1);
- EnableWindow(GetDlgItem(hwnd, ID_UPDOWN1), 1);
- } else {
- EnableWindow(GetDlgItem(hwnd, ID_EDIT1), 0);
- EnableWindow(GetDlgItem(hwnd, ID_UPDOWN1), 0);
- SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 1, (LPARAM)2048);
- }
- break;
- }
- case ID_AUTOSYNC:
- {
- if(SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_GETCHECK, 0, 0) == BST_CHECKED)
- {
- EnableWindow(GetDlgItem(hwnd, ID_EDIT2), 1);
- EnableWindow(GetDlgItem(hwnd, ID_UPDOWN2), 1);
- } else {
- EnableWindow(GetDlgItem(hwnd, ID_EDIT2), 0);
- EnableWindow(GetDlgItem(hwnd, ID_UPDOWN2), 0);
- SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 1, (LPARAM)0);
- }
- break;
- }
- case ID_DEFAULTS:
- {
- set_defaults();
- SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_SETCURSEL,
- (WPARAM)SendMessage(vo_driver, CB_FINDSTRING, -1, (LPARAM)"directx"), 0);
-
- SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_SETCURSEL,
- (WPARAM)SendMessage(ao_driver, CB_FINDSTRING, -1, (LPARAM)"dsound"), 0);
-
- SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL,
- (WPARAM)SendMessage(prio, CB_FINDSTRING, -1, (LPARAM)proc_priority), 0);
-
- SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)10.0);
- SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)0.0);
- SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 0, (LPARAM)gtkCacheSize);
- SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 0, (LPARAM)gtkAutoSync);
- SendDlgItemMessage(hwnd, ID_DOUBLE, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_DIRECT, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_CACHE, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_SETCHECK, 1, 0);
- SendDlgItemMessage(hwnd, ID_NONE, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_OSD1, BM_SETCHECK, 1, 0);
- SendDlgItemMessage(hwnd, ID_OSD2, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_OSD3, BM_SETCHECK, 0, 0);
- SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
- SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
- SendMessage(hwnd, WM_COMMAND, (WPARAM)ID_APPLY, 0);
- break;
- }
- case ID_CANCEL:
- DestroyWindow(hwnd);
- return 0;
- case ID_APPLY:
- {
- int strl;
- if(guiIntfStruct.Playing) guiGetEvent(guiCEvent, (void *)guiSetStop);
-
- /* Set the video driver */
- gfree(video_driver_list[0]);
- strl = SendMessage(vo_driver, CB_GETCURSEL, 0, 0);
- video_driver_list[0] = malloc(strl);
- SendMessage(vo_driver, CB_GETLBTEXT, (WPARAM)strl,
- (LPARAM)video_driver_list[0]);
-
- /* Set the audio driver */
- gfree(audio_driver_list[0]);
- strl = SendMessage(ao_driver, CB_GETCURSEL, 0, 0);
- audio_driver_list[0] = malloc(strl);
- SendMessage(ao_driver, CB_GETLBTEXT, (WPARAM)strl,
- (LPARAM)audio_driver_list[0]);
-
- /* Set the priority level */
- SendMessage(prio, CB_GETLBTEXT, (WPARAM)SendMessage(prio, CB_GETCURSEL, 0, 0), (LPARAM)procprio);
- proc_priority = strdup(procprio);
-
- /* double buffering */
- if(SendDlgItemMessage(hwnd, ID_DOUBLE, BM_GETCHECK, 0, 0) == BST_CHECKED)
- vo_doublebuffering = 1;
- else vo_doublebuffering = 0;
-
- /* direct rendering */
- if(SendDlgItemMessage(hwnd, ID_DIRECT, BM_GETCHECK, 0, 0) == BST_CHECKED)
- vo_directrendering = 1;
- else vo_directrendering = 0;
-
- /* frame dropping */
- if(SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_GETCHECK, 0, 0) == BST_CHECKED)
- frame_dropping = 1;
- else frame_dropping = 0;
-
- /* normalize */
- if(SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gtkAONorm = 1;
- else gtkAONorm = 0;
-
- /* software mixer */
- if(SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_GETCHECK, 0, 0) == BST_CHECKED)
- soft_vol = 1;
- else soft_vol = 0;
-
- /* extra stereo */
- if(SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gtkAOExtraStereo = 1;
- else {
- gtkAOExtraStereo = 0;
- gtkAOExtraStereoMul = 10.0;
- }
- gtkAOExtraStereoMul = SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_GETPOS, 0, 0) / 10.0;
-
- /* audio delay */
- audio_delay = SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_GETPOS, 0, 0) / 100.0;
-
- /* cache */
- if(SendDlgItemMessage(hwnd, ID_CACHE, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gtkCacheOn = 1;
- else gtkCacheOn = 0;
- gtkCacheSize = SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_GETPOS32, 0, 0);
-
- /* autosync */
- if(SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_GETCHECK, 0, 0) == BST_CHECKED)
- gtkAutoSyncOn = 1;
- else gtkAutoSyncOn = 0;
- gtkAutoSync = SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_GETPOS32, 0, 0);
-
- /* sub window */
- if(SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_GETCHECK, 0, 0) == BST_CHECKED)
- sub_window = 1;
- else sub_window = 0;
-
- /* osd level */
- if(SendDlgItemMessage(hwnd, ID_NONE, BM_GETCHECK, 0, 0) == BST_CHECKED)
- osd_level = 0;
- else if(SendDlgItemMessage(hwnd, ID_OSD1, BM_GETCHECK, 0, 0) == BST_CHECKED)
- osd_level = 1;
- else if(SendDlgItemMessage(hwnd, ID_OSD2, BM_GETCHECK, 0, 0) == BST_CHECKED)
- osd_level = 2;
- else if(SendDlgItemMessage(hwnd, ID_OSD3, BM_GETCHECK, 0, 0) == BST_CHECKED)
- osd_level = 3;
-
- /* dvd and cd devices */
- SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_GETTEXT, MAX_PATH, (LPARAM)dvddevice);
- dvd_device = strdup(dvddevice);
- SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_GETTEXT, MAX_PATH, (LPARAM)cdromdevice);
- cdrom_device = strdup(cdromdevice);
-
- MessageBox(hwnd, "You must restart MPlayer for the changes to take effect.", "MPlayer - Info:", MB_OK);
- DestroyWindow(hwnd);
- break;
- }
- }
- return 0;
- }
- case WM_DESTROY:
- PostQuitMessage (0);
- return 0;
- }
- return DefWindowProc(hwnd, iMsg, wParam, lParam);
-}
-
-void display_prefswindow(gui_t *gui)
-{
- HWND hWnd;
- HINSTANCE hInstance = GetModuleHandle(NULL);
- WNDCLASS wc;
- int x, y;
- if(FindWindow(NULL, "MPlayer - Preferences")) return;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = PrefsWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL,IDC_ARROW);
- wc.hIcon = gui->icon;
- wc.hbrBackground = SOLID_GREY;
- wc.lpszClassName = "MPlayer - Preferences";
- wc.lpszMenuName = NULL;
- RegisterClass(&wc);
- x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (375 / 2);
- y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (452 / 2);
- hWnd = CreateWindow("MPlayer - Preferences",
- "MPlayer - Preferences",
- WS_POPUPWINDOW | WS_CAPTION,
- x,
- y,
- 375,
- 452,
- NULL,
- NULL,
- hInstance,
- NULL);
- SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
-}
-
-static void set_defaults(void)
-{
- proc_priority = "normal";
- vo_doublebuffering = 1;
- vo_directrendering = 0;
- frame_dropping = 0;
- soft_vol = 0;
- gtkAONorm = 0;
- gtkAOExtraStereo = 0;
- gtkAOExtraStereoMul = 1.0;
- audio_delay = 0.0;
- sub_window = 1;
- gtkCacheOn = 0;
- gtkCacheSize = 2048;
- gtkAutoSyncOn = 0;
- gtkAutoSync = 0;
-}
diff --git a/Gui/win32/skinload.c b/Gui/win32/skinload.c
deleted file mode 100644
index 9c56e93348..0000000000
--- a/Gui/win32/skinload.c
+++ /dev/null
@@ -1,809 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <stdlib.h>
-#include <inttypes.h>
-#include <windows.h>
-#include <png.h>
-
-#include <mp_msg.h>
-#include <cpudetect.h>
-#include <libswscale/rgb2rgb.h>
-#include <libswscale/swscale.h>
-
-#include "gui.h"
-
-#define MAX_LINESIZE 256
-
-typedef struct
-{
- int msg;
- char *name;
-} evName;
-
-static const evName evNames[] =
-{
- { evNone, "evNone" },
- { evPlay, "evPlay" },
- { evDropFile, "evDropFile" },
- { evStop, "evStop" },
- { evPause, "evPause" },
- { evPrev, "evPrev" },
- { evNext, "evNext" },
- { evLoad, "evLoad" },
- { evEqualizer, "evEqualizer" },
- { evEqualizer, "evEqualeaser" },
- { evPlayList, "evPlaylist" },
- { evExit, "evExit" },
- { evIconify, "evIconify" },
- { evIncBalance, "evIncBalance" },
- { evDecBalance, "evDecBalance" },
- { evFullScreen, "evFullScreen" },
- { evFName, "evFName" },
- { evMovieTime, "evMovieTime" },
- { evAbout, "evAbout" },
- { evLoadPlay, "evLoadPlay" },
- { evPreferences, "evPreferences" },
- { evSkinBrowser, "evSkinBrowser" },
- { evBackward10sec, "evBackward10sec" },
- { evForward10sec, "evForward10sec" },
- { evBackward1min, "evBackward1min" },
- { evForward1min, "evForward1min" },
- { evBackward10min, "evBackward10min" },
- { evForward10min, "evForward10min" },
- { evIncVolume, "evIncVolume" },
- { evDecVolume, "evDecVolume" },
- { evMute, "evMute" },
- { evIncAudioBufDelay, "evIncAudioBufDelay" },
- { evDecAudioBufDelay, "evDecAudioBufDelay" },
- { evPlaySwitchToPause, "evPlaySwitchToPause" },
- { evPauseSwitchToPlay, "evPauseSwitchToPlay" },
- { evNormalSize, "evNormalSize" },
- { evDoubleSize, "evDoubleSize" },
- { evSetMoviePosition, "evSetMoviePosition" },
- { evSetVolume, "evSetVolume" },
- { evSetBalance, "evSetBalance" },
- { evHelp, "evHelp" },
- { evLoadSubtitle, "evLoadSubtitle" },
- { evPlayDVD, "evPlayDVD" },
- { evPlayVCD, "evPlayVCD" },
- { evSetURL, "evSetURL" },
- { evLoadAudioFile, "evLoadAudioFile" },
- { evDropSubtitle, "evDropSubtitle" },
- { evSetAspect, "evSetAspect" }
-};
-
-static const int evBoxs = sizeof(evNames) / sizeof(evName);
-
-static char *geteventname(int event)
-{
- int i;
- for(i=0; i<evBoxs; i++)
- if(evNames[i].msg == event)
- return evNames[i].name;
- return NULL;
-}
-
-static inline int get_sws_cpuflags(void)
-{
- return (gCpuCaps.hasMMX ? SWS_CPU_CAPS_MMX : 0) |
- (gCpuCaps.hasMMX2 ? SWS_CPU_CAPS_MMX2 : 0) |
- (gCpuCaps.has3DNow ? SWS_CPU_CAPS_3DNOW : 0);
-}
-
-/* reads a complete image as is into image buffer */
-static image *pngRead(skin_t *skin, unsigned char *fname)
-{
- unsigned char header[8];
- png_structp png;
- png_infop info;
- png_infop endinfo;
- png_bytep *row_p;
- int color, h;
- png_uint_32 i;
- int BPP;
- char *img;
- unsigned int imgsize;
- image *bf;
- char *filename;
- FILE *fp;
-
- if(!stricmp(fname, "NULL")) return 0;
-
- /* find filename in order file file.png */
- if(!(fp = fopen(fname, "rb")))
- {
- filename = calloc(1, strlen(skin->skindir) + strlen(fname) + 6);
- sprintf(filename, "%s\\%s.png", skin->skindir, fname);
- if(!(fp = fopen(filename, "rb")))
- {
- mp_msg(MSGT_GPLAYER, MSGL_ERR, "[png] cannot find image %s\n", filename);
- free(filename);
- return 0;
- }
- free(filename);
- }
-
- for (i=0; i < skin->imagecount; i++)
- if(!strcmp(fname, skin->images[i]->name))
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] skinfile %s already exists\n", fname);
-#endif
- return skin->images[i];
- }
- (skin->imagecount)++;
- skin->images = realloc(skin->images, sizeof(image *) * skin->imagecount);
- bf = skin->images[(skin->imagecount) - 1] = calloc(1, sizeof(image));
- bf->name = strdup(fname);
- fread(header,1,8,fp);
- if (!png_check_sig(header, 8)) return 0;
- png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- info = png_create_info_struct(png);
- endinfo = png_create_info_struct(png);
-
- png_init_io(png, fp);
- png_set_sig_bytes(png, 8);
- png_read_info(png, info);
- png_get_IHDR(png, info, (png_uint_32*) &bf->width, (png_uint_32*) &bf->height, &BPP, &color, NULL, NULL, NULL);
-
- if(color & PNG_COLOR_MASK_ALPHA)
- {
- if(color & PNG_COLOR_MASK_PALETTE || color == PNG_COLOR_TYPE_GRAY_ALPHA ) BPP *= 2;
- else BPP *= 4;
- }
- else
- {
- if(color & PNG_COLOR_MASK_PALETTE || color == PNG_COLOR_TYPE_GRAY ) BPP *= 1;
- else BPP *= 3;
- }
- row_p = (png_bytep *) malloc (sizeof(png_bytep) * bf->height);
- img = (png_bytep) calloc(png_get_rowbytes(png, info), bf->height);
- for (h=0; h < bf->height; h++)
- row_p[h] = &img[png_get_rowbytes(png, info) * h];
- png_read_image(png, row_p);
- free(row_p);
-
- png_read_end(png, endinfo);
- png_destroy_read_struct(&png, &info, &endinfo);
- fclose(fp);
- imgsize=bf->width * bf->height * (BPP / 8);
-
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] loaded image %s\n", fname);
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] size: %dx%d bits: %d\n", bf->width, bf->height, BPP);
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] imagesize: %u\n", imgsize);
-#endif
-
- bf->size = bf->width * bf->height * skin->desktopbpp / 8;
- bf->data = malloc(bf->size);
- if(skin->desktopbpp == 16 && BPP == 24) rgb24tobgr15(img, bf->data, imgsize);
- else if(skin->desktopbpp == 16 && BPP == 32) rgb32tobgr15(img, bf->data, imgsize);
- else if(skin->desktopbpp == 24 && BPP == 24) rgb24tobgr24(img, bf->data, imgsize);
- else if(skin->desktopbpp == 24 && BPP == 32) rgb32tobgr24(img, bf->data, imgsize);
- else if(skin->desktopbpp == 32 && BPP == 24) rgb24tobgr32(img, bf->data, imgsize);
- else if(skin->desktopbpp == 32 && BPP == 32) rgb32tobgr32(img, bf->data, imgsize);
- free(img);
- return bf;
-}
-
-/* frees all skin images */
-static void freeimages(skin_t *skin)
-{
- unsigned int i;
- for (i=0; i<skin->imagecount; i++)
- {
- if(skin->images && skin->images[i])
- {
- if(skin->images[i]->data) free(skin->images[i]->data);
- if(skin->images[i]->name) free(skin->images[i]->name);
- free(skin->images[i]);
- }
- }
- free(skin->images);
-}
-
-#ifdef DEBUG
-void dumpwidgets(skin_t *skin)
-{
- unsigned int i;
- for (i=0; i<skin->widgetcount; i++)
- mp_msg(MSGT_GPLAYER, MSGL_V, "widget %p id %i\n", skin->widgets[i], skin->widgets[i]->id);
-}
-#endif
-
-static int counttonextchar(const char *s1, char c)
-{
- unsigned int i;
- for (i=0; i<strlen(s1); i++)
- if(s1[i] == c) return i;
- return 0;
-}
-
-static char *findnextstring(char *temp, const char *desc, int *base)
-{
- int len = counttonextchar(*base + desc, ',');
- memset(temp, 0, strlen(desc) + 1);
- if(!len) len = strlen(desc);
- memcpy(temp, *base + desc, len);
- *base += (len+1);
- return temp;
-}
-
-static void freeskin(skin_t *skin)
-{
- unsigned int i;
- if(skin->skindir)
- {
- free(skin->skindir);
- skin->skindir = NULL;
- }
-
- for (i=1; i<=skin->lastusedid; i++)
- skin->removewidget(skin, i);
-
- if(skin->widgets)
- {
- free(skin->widgets);
- skin->widgets = NULL;
- }
-
- freeimages(skin);
- for(i=0; i<skin->windowcount; i++)
- {
- if(skin->windows[i]->name)
- {
- free(skin->windows[i]->name);
- skin->windows[i]->name = NULL;
- }
- free(skin->windows[i]);
- }
-
- free(skin->windows);
- skin->windows = NULL;
-
- for (i=0; i<skin->fontcount; i++)
- {
- unsigned int x;
- if(skin->fonts[i]->name)
- {
- free(skin->fonts[i]->name);
- skin->fonts[i]->name = NULL;
- }
-
- if(skin->fonts[i]->id)
- {
- free(skin->fonts[i]->id);
- skin->fonts[i]->id = NULL;
- }
-
- for (x=0; x<skin->fonts[i]->charcount; x++)
- {
- free(skin->fonts[i]->chars[x]);
- skin->fonts[i]->chars[x] = NULL;
- }
-
- if(skin->fonts[i]->chars)
- {
- free(skin->fonts[i]->chars);
- skin->fonts[i]->chars = NULL;
- }
-
- free(skin->fonts[i]);
- skin->fonts[i] = NULL;
- }
- free(skin->fonts);
- skin->fonts = NULL;
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN FREE] skin freed\n");
-#endif
- free(skin);
- skin = NULL;
-}
-
-static void removewidget(skin_t *skin, int id)
-{
- unsigned int i;
- unsigned int pos=0;
- widget **temp = calloc(skin->widgetcount - 1, sizeof(widget *));
-
- for (i=0; i<skin->widgetcount; i++)
- {
- if(skin->widgets[i]->id == id)
- {
- if(skin->widgets[i]->label)
- free(skin->widgets[i]->label);
- free(skin->widgets[i]);
- skin->widgets[i] = NULL;
- }
- else
- {
- temp[pos] = skin->widgets[i];
- pos++;
- }
- }
- if (pos != i)
- {
- (skin->widgetcount)--;
- free(skin->widgets);
- skin->widgets = temp;
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "removed widget %i\n", id);
-#endif
- return;
- }
- free(temp);
- mp_msg(MSGT_GPLAYER, MSGL_ERR, "widget %i not found\n", id);
-}
-
-static void addwidget(skin_t *skin, window *win, const char *desc)
-{
- widget *mywidget;
- char *temp = calloc(1, strlen(desc) + 1);
- (skin->widgetcount)++;
- (skin->lastusedid)++;
- skin->widgets = realloc(skin->widgets, sizeof(widget *) * skin->widgetcount);
- mywidget = skin->widgets[(skin->widgetcount) - 1] = calloc(1, sizeof(widget));
- mywidget->id = skin->lastusedid;
- mywidget->window = win->type;
- /* parse and fill widget specific info */
- if(!strncmp(desc, "base", 4))
- {
- int base = counttonextchar(desc, '=') + 1;
- mywidget->type = tyBase;
- mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
- mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
- mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
- mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
- mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
- win->base = mywidget;
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BASE] %s %i %i %i %i\n",
- (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
- mywidget->x, mywidget->y, mywidget->width, mywidget->height);
-#endif
- }
- else if(!strncmp(desc, "button", 6))
- {
- int base = counttonextchar(desc, '=') + 1;
- int i;
- mywidget->type = tyButton;
- mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
- mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
- mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
- mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
- mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
-
- /* Assign corresponding event to the widget */
- mywidget->msg = evNone;
- for (i=0; i<evBoxs; i++)
- {
- if(!strcmp(temp, evNames[i].name))
- {
- mywidget->msg = evNames[i].msg;
- break;
- }
- }
-
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BUTTON] %s %i %i %i %i msg %i\n",
- (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
- mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg);
-#endif
- }
- else if(!strncmp(desc, "hpotmeter", 9) || !strncmp(desc, "vpotmeter", 9))
- {
- int base = counttonextchar(desc, '=') + 1;
- int i;
- /* hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message */
- if(!strncmp(desc, "hpotmeter", 9)) mywidget->type = tyHpotmeter;
- else mywidget->type = tyVpotmeter;
- mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
- mywidget->width = atoi(findnextstring(temp, desc, &base));
- mywidget->height = atoi(findnextstring(temp, desc, &base));
- mywidget->bitmap[1] = pngRead(skin, findnextstring(temp, desc, &base));
- mywidget->phases = atoi(findnextstring(temp, desc, &base));
- mywidget->value = atof(findnextstring(temp, desc, &base));
- mywidget->x = mywidget->wx = atoi(findnextstring(temp, desc, &base));
- mywidget->y = mywidget->wy = atoi(findnextstring(temp, desc, &base));
- mywidget->wwidth = atoi(findnextstring(temp, desc, &base));
- mywidget->wheight = atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
- mywidget->msg = evNone;
- for (i=0; i<evBoxs; i++)
- {
- if(!strcmp(temp, evNames[i].name))
- {
- mywidget->msg = evNames[i].msg;
- break;
- }
- }
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] %s %s %i %i %s %i %f %i %i %i %i msg %i\n",
- (mywidget->type == tyHpotmeter) ? "[HPOTMETER]" : "[VPOTMETER]",
- (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
- mywidget->width, mywidget->height,
- (mywidget->bitmap[1]) ? mywidget->bitmap[1]->name : NULL,
- mywidget->phases, mywidget->value,
- mywidget->wx, mywidget->wy, mywidget->wwidth, mywidget->wwidth,
- mywidget->msg);
-#endif
- }
- else if(!strncmp(desc, "potmeter", 8))
- {
- int base = counttonextchar(desc, '=') + 1;
- int i;
- /* potmeter = phases, numphases, default, X, Y, width, height, message */
- mywidget->type = tyPotmeter;
- mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
- mywidget->phases = atoi(findnextstring(temp, desc, &base));
- mywidget->value = atof(findnextstring(temp, desc, &base));
- mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
- mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
- mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
- mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
- mywidget->msg = evNone;
- for (i=0; i<evBoxs; i++)
- {
- if(!strcmp(temp, evNames[i].name))
- {
- mywidget->msg=evNames[i].msg;
- break;
- }
- }
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [POTMETER] %s %i %i %i %f %i %i msg %i\n",
- (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
- mywidget->width, mywidget->height,
- mywidget->phases, mywidget->value,
- mywidget->x, mywidget->y,
- mywidget->msg);
-#endif
- }
- else if(!strncmp(desc, "menu", 4))
- {
- int base = counttonextchar(desc, '=') + 1;
- int i;
- mywidget->type = tyMenu;
- mywidget->wx=atoi(findnextstring(temp, desc, &base));
- mywidget->x=0;
- mywidget->wy=mywidget->y=atoi(findnextstring(temp, desc, &base));
- mywidget->wwidth=mywidget->width=atoi(findnextstring(temp, desc, &base));
- mywidget->wheight=mywidget->height=atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
- mywidget->msg = evNone;
- for (i=0; i<evBoxs; i++)
- {
- if(!strcmp(temp, evNames[i].name))
- {
- mywidget->msg = evNames[i].msg;
- break;
- }
- }
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [MENU] %i %i %i %i msg %i\n",
- mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg);
-#endif
- }
- else if(!strncmp(desc, "selected", 8))
- {
- win->base->bitmap[1] = pngRead(skin, (char *) desc + 9);
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BASE] added image %s\n", win->base->bitmap[1]->name);
-#endif
- }
- else if(!strncmp(desc, "slabel",6))
- {
- int base = counttonextchar(desc, '=') + 1;
- unsigned int i;
- mywidget->type = tySlabel;
- mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
- mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
- mywidget->font = NULL;
- for (i=0; i<skin->fontcount; i++)
- {
- if(!strcmp(temp, skin->fonts[i]->name))
- {
- mywidget->font = skin->fonts[i];
- break;
- }
- }
- mywidget->label = strdup(findnextstring(temp, desc, &base));
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [SLABEL] %i %i %s %s\n",
- mywidget->x, mywidget->y, mywidget->font->name, mywidget->label);
-#endif
- }
- else if(!strncmp(desc, "dlabel", 6))
- {
- int base = counttonextchar(desc, '=') + 1;
- unsigned int i;
- mywidget->type = tyDlabel;
- mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
- mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
- mywidget->length = atoi(findnextstring(temp, desc, &base));
- mywidget->align = atoi(findnextstring(temp, desc, &base));
- findnextstring(temp, desc, &base);
- mywidget->font = NULL;
- for (i=0; i<skin->fontcount; i++)
- {
- if(!strcmp(temp, skin->fonts[i]->name))
- {
- mywidget->font=skin->fonts[i];
- break;
- }
- }
- mywidget->label=strdup(findnextstring(temp, desc, &base));
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [DLABEL] %i %i %i %i %s \"%s\"\n",
- mywidget->x, mywidget->y, mywidget->length, mywidget->align, mywidget->font->name, mywidget->label);
-#endif
- }
- free(temp);
-}
-
-static void loadfonts(skin_t* skin)
-{
- unsigned int x;
- for (x=0; x<skin->fontcount; x++)
- {
- FILE *fp;
- int linenumber=0;
- char *filename;
- char *tmp = calloc(1, MAX_LINESIZE);
- char *desc = calloc(1, MAX_LINESIZE);
- filename = calloc(1, strlen(skin->skindir) + strlen(skin->fonts[x]->name) + 6);
- sprintf(filename, "%s\\%s.fnt", skin->skindir, skin->fonts[x]->name);
- if(!(fp = fopen(filename,"rb")))
- {
- mp_msg(MSGT_GPLAYER, MSGL_ERR, "[FONT LOAD] Font not found \"%s\"\n", skin->fonts[x]->name);
- return;
- }
- while(!feof(fp))
- {
- int pos = 0;
- unsigned int i;
- fgets(tmp, MAX_LINESIZE, fp);
- linenumber++;
- memset(desc, 0, MAX_LINESIZE);
- for (i=0; i<strlen(tmp); i++)
- {
- /* remove spaces and linebreaks */
- if((tmp[i] == ' ') || (tmp[i] == '\n') || (tmp[i] == '\r')) continue;
- /* remove comments */
- if((tmp[i] == ';') && ((i < 1) || (tmp[i-1] != '\"')))
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT LOAD] Comment: %s", tmp + i + 1);
-#endif
- break;
- }
- desc[pos] = tmp[i];
- pos++;
- }
- if(!strlen(desc)) continue;
- /* now we have "readable" output -> parse it */
- if(!strncmp(desc, "image", 5))
- {
- skin->fonts[x]->image = pngRead(skin, desc + 6);
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT] [IMAGE] \"%s\"\n", desc + 6);
-#endif
- }
- else
- {
- int base = 4;
- if(*desc != '"') break;
- if(*(desc + 1) == 0) break;
- (skin->fonts[x]->charcount)++;
- skin->fonts[x]->chars = realloc(skin->fonts[x]->chars, sizeof(char_t *) *skin->fonts[x]->charcount);
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]=calloc(1, sizeof(char_t));
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c = ((*(desc + 1) == '"') && (*(desc + 2) != '"')) ? ' ': *(desc + 1);
- if((*(desc + 1) == '"') && (*(desc + 2) != '"')) base = 3;
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x = atoi(findnextstring(tmp, desc, &base));
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y = atoi(findnextstring(tmp, desc, &base));
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width = atoi(findnextstring(tmp, desc, &base));
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height = atoi(findnextstring(tmp, desc, &base));
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT] [CHAR] %c %i %i %i %i\n",
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c,
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x,
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y,
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width,
- skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height);
-#endif
- }
- }
- free(desc);
- free(filename);
- free(tmp);
- fclose(fp);
- }
-}
-
-skin_t* loadskin(char* skindir, int desktopbpp)
-{
- FILE *fp;
- int reachedendofwindow = 0;
- int linenumber = 0;
- skin_t *skin = calloc(1, sizeof(skin_t));
- char *filename;
- char *tmp = calloc(1, MAX_LINESIZE);
- char *desc = calloc(1, MAX_LINESIZE);
- window* mywindow = NULL;
-
- /* init swscaler */
- sws_rgb2rgb_init(get_sws_cpuflags());
- /* setup funcs */
- skin->freeskin = freeskin;
- skin->pngRead = pngRead;
- skin->addwidget = addwidget;
- skin->removewidget = removewidget;
- skin->geteventname = geteventname;
- skin->desktopbpp = desktopbpp;
- skin->skindir = strdup(skindir);
-
- filename = calloc(1, strlen(skin->skindir) + strlen("skin") + 2);
- sprintf(filename, "%s\\skin", skin->skindir);
- if(!(fp = fopen(filename, "rb")))
- {
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[SKIN LOAD] Skin \"%s\" not found\n", skindir);
- skin->freeskin(skin);
- return NULL;
- }
-
- while(!feof(fp))
- {
- int pos = 0;
- unsigned int i;
- int insidequote = 0;
- fgets(tmp, MAX_LINESIZE, fp);
- linenumber++;
- memset(desc, 0, MAX_LINESIZE);
- for (i=0; i<strlen(tmp); i++)
- {
- if((tmp[i] == '"') && !insidequote) { insidequote=1; continue; }
- else if((tmp[i] == '"') && insidequote) { insidequote=0 ; continue; }
- /* remove spaces and linebreaks */
- if((!insidequote && (tmp[i] == ' ')) || (tmp[i] == '\n') || (tmp[i] == '\r')) continue;
- /* remove comments */
- else if(tmp[i] == ';')
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN LOAD] Comment: %s", tmp + i + 1);
-#endif
- break;
- }
- desc[pos] = tmp[i];
- pos++;
- }
-
- if(!strlen(desc)) continue;
- /* now we have "readable" output -> parse it */
- /* parse window specific info */
- if(!strncmp(desc, "section", 7))
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [SECTION] \"%s\"\n", desc + 8);
-#endif
- }
- else if(!strncmp(desc, "window", 6))
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [WINDOW] \"%s\"\n", desc + 7);
-#endif
- reachedendofwindow = 0;
- (skin->windowcount)++;
- skin->windows = realloc(skin->windows, sizeof(window *) * skin->windowcount);
- mywindow = skin->windows[(skin->windowcount) - 1] = calloc(1, sizeof(window));
- mywindow->name = strdup(desc + 7);
- if(!strncmp(desc + 7, "main", 4)) mywindow->type = wiMain;
- else if(!strncmp(desc+7, "sub", 3))
- {
- mywindow->type = wiSub;
- mywindow->decoration = 1;
- }
- else if(!strncmp(desc + 7, "menu", 4)) mywindow->type = wiMenu;
- else if(!strncmp(desc + 7, "playbar", 7)) mywindow->type = wiPlaybar;
- else mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN] warning found unknown windowtype");
- }
- else if(!strncmp(desc, "decoration", 10) && !strncmp(desc + 11, "enable", 6))
- {
- mywindow->decoration = 1;
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [DECORATION] enabled decoration for window \"%s\"\n", mywindow->name);
-#endif
- }
- else if(!strncmp(desc, "background", 10))
- {
- int base = counttonextchar(desc, '=') + 1;
- char temp[MAX_LINESIZE];
- mywindow->backgroundcolor[0] = atoi(findnextstring(temp, desc, &base));
- mywindow->backgroundcolor[1] = atoi(findnextstring(temp, desc, &base));
- mywindow->backgroundcolor[2] = atoi(findnextstring(temp, desc, &base));
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [BACKGROUND] window \"%s\" has backgroundcolor (%i,%i,%i)\n", mywindow->name,
- mywindow->backgroundcolor[0],
- mywindow->backgroundcolor[1],
- mywindow->backgroundcolor[2]);
-#endif
- }
- else if(!strncmp(desc, "end", 3))
- {
- if(reachedendofwindow)
- {
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [END] of section\n");
-#endif
- }
- else
- {
- reachedendofwindow = 1;
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [END] of window \"%s\"\n", mywindow->name);
-#endif
- }
- }
- else if(!strncmp(desc, "font", 4))
- {
- unsigned int i;
- int id = 0;
- char temp[MAX_LINESIZE];
- int base = counttonextchar(desc, '=')+1;
- findnextstring(temp, desc, &base);
- findnextstring(temp, desc, &base);
- for (i=0; i<skin->fontcount; i++)
- if(!strcmp(skin->fonts[i]->id, temp))
- {
- id = i;
- break;
- }
- if(!id)
- {
- int base = counttonextchar(desc, '=') + 1;
- findnextstring(temp, desc, &base);
- id = skin->fontcount;
- (skin->fontcount)++;
- skin->fonts = realloc(skin->fonts, sizeof(font_t *) * skin->fontcount);
- skin->fonts[id]=calloc(1, sizeof(font_t));
- skin->fonts[id]->name = strdup(temp);
- skin->fonts[id]->id = strdup(findnextstring(temp, desc, &base));
- }
-#ifdef DEBUG
- mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [FONT] id \"%s\" name \"%s\"\n", skin->fonts[id]->name, skin->fonts[id]->id);
-#endif
- }
- else
- skin->addwidget(skin, mywindow, desc);
- }
-
- free(desc);
- free(filename);
- free(tmp);
- fclose(fp);
- loadfonts(skin);
- mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN LOAD] loaded skin \"%s\"\n", skin->skindir);
- /* dumpwidgets(skin); */
- return skin;
-}
diff --git a/Gui/win32/skinload.h b/Gui/win32/skinload.h
deleted file mode 100644
index 3103539dc3..0000000000
--- a/Gui/win32/skinload.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _SKINLOAD_H
-#define _SKINLOAD_H
-
-typedef struct
-{
- char *name; /* image name */
- int size; /* image data size in bytes */
- int width; /* image width */
- int height; /* image height */
- char *data; /* pointer to image data */
-} image;
-
-typedef struct
-{
- char c;
- int x;
- int y;
- int width;
- int height;
-} char_t;
-
-typedef struct
-{
- char *name;
- char *id;
- image *image;
- unsigned int charcount;
- char_t **chars;
-} font_t;
-
-typedef struct
-{
- int id; /* widget id */
- int type; /* widget type */
- int window; /* the window it belongs to */
- // ---
- int x, y; /* x and y position the button */
- int wx, wy; /* x and y postion of the widget */
- int width, height; /* width and height of the button */
- int wwidth, wheight; /* width and height of the widget */
- // ---
- // ---
- int msg, msg2;
- int pressed, tmp;
- int key, key2;
- int phases;
- float value;
- image *bitmap[2]; /* Associated image(s) in imagepool */
- // ---
- font_t *font;
- int length;
- int align;
- char *label;
- // ---
- int event;
-} widget;
-
-typedef struct
-{
- char *name;
- int decoration;
- int type;
- widget *base;
- int backgroundcolor[3];
- void *priv;
-} window;
-
-typedef struct skin_t skin_t;
-struct skin_t
-{
- char *skindir;
- unsigned int widgetcount; /* number of widgets */
- unsigned int lastusedid; /* which widget id was used last */
- widget **widgets; /* widget handle */
- unsigned int imagecount; /* number of images */
- image **images; /* image handle */
- int desktopbpp; /* image format of those images */
- unsigned int fontcount;
- font_t **fonts;
-
- unsigned int windowcount; /* number of windows */
- window **windows;
- void (*freeskin)(skin_t* skin);
- void (*addwidget)(skin_t *skin, window *win, const char *desc);
- void (*removewidget)(skin_t *skin, int id);
- char *(*geteventname)(int event);
- image *(*pngRead)(skin_t *skin, unsigned char *fname);
-};
-
-extern skin_t *loadskin(char *skindir, int desktopbpp);
-
-// --- Widget types ---
-
-#define tyBase 1
-#define tyButton 2
-#define tyHpotmeter 3
-#define tyVpotmeter 4
-#define tyPotmeter 5
-#define tyMenu 6
-#define tySlabel 7
-#define tyDlabel 8
-
-// --- Window types ---
-
-#define wiMain 1
-#define wiSub 2
-#define wiMenu 3
-#define wiPlaybar 4
-
-// --- User events ------
-
-#define evNone 0
-#define evPlay 1
-#define evStop 2
-#define evPause 3
-#define evPrev 6
-#define evNext 7
-#define evLoad 8
-#define evEqualizer 9
-#define evPlayList 10
-#define evIconify 11
-#define evAbout 12
-#define evLoadPlay 13
-#define evPreferences 14
-#define evSkinBrowser 15
-#define evPlaySwitchToPause 16
-#define evPauseSwitchToPlay 17
-
-#define evBackward10sec 18
-#define evForward10sec 19
-#define evBackward1min 20
-#define evForward1min 21
-#define evBackward10min 22
-#define evForward10min 23
-
-#define evNormalSize 24
-#define evDoubleSize 25
-#define evFullScreen 26
-
-#define evSetMoviePosition 27
-#define evSetVolume 28
-#define evSetBalance 29
-#define evMute 30
-
-#define evIncVolume 31
-#define evDecVolume 32
-#define evIncAudioBufDelay 33
-#define evDecAudioBufDelay 34
-#define evIncBalance 35
-#define evDecBalance 36
-
-#define evHelp 37
-
-#define evLoadSubtitle 38
-#define evDropSubtitle 43
-#define evPlayDVD 39
-#define evPlayVCD 40
-#define evPlayNetwork 41
-#define evLoadAudioFile 42
-#define evSetAspect 44
-#define evSetAudio 45
-#define evSetVideo 46
-#define evDropFile 47
-#define evPlayCD 48
-
-#define evExit 1000
-
-// --- General events ---
-
-#define evFileLoaded 5000
-#define evHideMouseCursor 5001
-#define evMessageBox 5002
-#define evGeneralTimer 5003
-#define evGtkIsOk 5004
-#define evShowPopUpMenu 5005
-#define evHidePopUpMenu 5006
-#define evSetDVDAudio 5007
-#define evSetDVDSubtitle 5008
-#define evSetDVDTitle 5009
-#define evSetDVDChapter 5010
-#define evSubtitleLoaded 5011
-#define evSetVCDTrack 5012
-#define evSetURL 5013
-
-#define evFName 7000
-#define evMovieTime 7001
-#define evRedraw 7002
-#define evHideWindow 7003
-#define evShowWindow 7004
-#define evFirstLoad 7005
-
-#endif
diff --git a/Gui/win32/widgetrender.c b/Gui/win32/widgetrender.c
deleted file mode 100644
index ae4f69b54e..0000000000
--- a/Gui/win32/widgetrender.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <stdio.h>
-#include <ctype.h>
-#include <windows.h>
-#include <interface.h>
-#include "gui.h"
-
-extern char *codecname;
-#define MAX_LABELSIZE 250
-
-static void render(int bitsperpixel, image *dst, image *src, int x, int y, int sx, int sy, int sw, int sh, int transparent)
-{
- int i;
- int bpp = bitsperpixel / 8;
- int offset = (dst->width * bpp * y) + (x * bpp);
- int soffset = (src->width * bpp * sy) + (sx * bpp);
-
- for(i=0; i<sh; i++)
- {
- int c;
- for(c=0; c < (sw * bpp); c += bpp)
- {
- if(bpp == 2)
- {
- if(!transparent || (((src->data + soffset + (i * src->width * bpp) + c)[0] != 0x1f)
- && ((src->data + soffset + (i * src->width * bpp) + c)[1] != 0x7c)))
- memcpy(dst->data + offset + c, src->data + soffset + (i * src->width * bpp) + c, bpp);
- }
- else if(bpp > 2)
- {
- if(!transparent || *((unsigned int *) (src->data + soffset + (i * src->width * bpp) + c)) != 0x00ff00ff)
- memcpy(dst->data + offset + c, src->data + soffset + (i * src->width * bpp) + c, bpp);
- }
- }
- offset += (dst->width * bpp);
- }
-}
-
-static image *find_background(skin_t *skin, widget *item)
-{
- unsigned int i;
- for (i=0; i < skin->windowcount; i++)
- if(skin->windows[i]->type == item->window)
- return skin->windows[i]->base->bitmap[0];
- return NULL;
-}
-
-/******************************************************************/
-/* FONT related functions */
-/******************************************************************/
-
-/* returns the pos of s2 inside s1 or -1 if s1 doesn't contain s2 */
-static int strpos(char *s1, const char* s2)
-{
- unsigned int i, x;
- for (i=0; i < strlen(s1); i++)
- {
- if(s1[i] == s2[0])
- {
- if(strlen(s1 + i) >= strlen(s2))
- {
- for (x=0; x <strlen(s2); x++)
- if(s1[i + x] != s2[x]) break;
- if(x == strlen(s2)) return i;
- }
- }
- }
- return -1;
-}
-
-/* replaces all occurences of what in dest with format */
-static void stringreplace(char *dest, const char *what, const char *format, ... )
-{
- char tmp[MAX_LABELSIZE];
- int offset=0;
- va_list va;
- va_start(va, format);
- vsnprintf(tmp, MAX_LABELSIZE, format, va);
- va_end(va);
- /* no search string == replace the entire string */
- if(!what)
- {
- memcpy(dest, tmp, strlen(tmp));
- dest[strlen(tmp)] = 0;
- return;
- }
- while((offset = strpos(dest, what)) != -1)
- {
- memmove(dest + offset + strlen(tmp), dest + offset + strlen(what), strlen(dest + offset + strlen(what)) + 1);
- memcpy(dest + offset, tmp, strlen(tmp));
- }
-}
-
-/* replaces the chars with special meaning with the associated data from the player info struct */
-static char *generatetextfromlabel(widget *item)
-{
- char *text = malloc(MAX_LABELSIZE);
- char tmp[MAX_LABELSIZE];
- unsigned int i;
- if(!item)
- {
- free(text);
- return NULL;
- }
- strcpy(text, item->label);
- if(item->type == tySlabel) return text;
- stringreplace(text, "$1", "%.2i:%.2i:%.2i", guiIntfStruct.TimeSec / 3600,
- (guiIntfStruct.TimeSec / 60) % 60, guiIntfStruct.TimeSec % 60);
- stringreplace(text, "$2", "%.4i:%.2i", guiIntfStruct.TimeSec / 60, guiIntfStruct.TimeSec % 60);
- stringreplace(text, "$3", "%.2i", guiIntfStruct.TimeSec / 3600);
- stringreplace(text, "$4", "%.2i", (guiIntfStruct.TimeSec / 60) % 60);
- stringreplace(text, "$5", "%.2i", guiIntfStruct.TimeSec % 60);
- stringreplace(text, "$6", "%.2i:%.2i:%.2i", guiIntfStruct.LengthInSec / 3600,
- (guiIntfStruct.LengthInSec / 60) % 60, guiIntfStruct.LengthInSec % 60);
- stringreplace(text, "$7", "%.4i:%.2i", guiIntfStruct.LengthInSec / 60, guiIntfStruct.LengthInSec % 60);
- stringreplace(text, "$8", "%i:%.2i:%.2i", guiIntfStruct.TimeSec / 3600,
- (guiIntfStruct.TimeSec / 60) % 60, guiIntfStruct.TimeSec % 60);
- stringreplace(text, "$v", "%3.2f", guiIntfStruct.Volume);
- stringreplace(text, "$V", "%3.1f", guiIntfStruct.Volume);
- stringreplace(text, "$b", "%3.2f", guiIntfStruct.Balance);
- stringreplace(text, "$B", "%3.1f", guiIntfStruct.Balance);
- stringreplace(text, "$t", "%.2i", guiIntfStruct.Track);
- stringreplace(text, "$o", "%s", guiIntfStruct.Filename);
- stringreplace(text, "$x", "%i", guiIntfStruct.MovieWidth);
- stringreplace(text, "$y", "%i", guiIntfStruct.MovieHeight);
- stringreplace(text, "$C", "%s", guiIntfStruct.sh_video ? codecname : "");
- stringreplace(text, "$$", "$");
-
- if(!strcmp(text, "$p") || !strcmp(text, "$s") || !strcmp(text, "$e"))
- {
- if(guiIntfStruct.Playing == 0) stringreplace(text, NULL, "s");
- else if(guiIntfStruct.Playing == 1) stringreplace(text, NULL, "p");
- else if(guiIntfStruct.Playing == 2) stringreplace(text, NULL, "e");
- }
-
- if(guiIntfStruct.AudioType == 0) stringreplace(text, "$a", "n");
- else if(guiIntfStruct.AudioType == 1) stringreplace(text, "$a", "m");
- else stringreplace(text, "$a", "t");
-
- if(guiIntfStruct.StreamType == 0)
- stringreplace(text, "$T", "f");
-#ifdef USE_DVDREAD
- else if(guiIntfStruct.StreamType == STREAMTYPE_DVD || guiIntfStruct.StreamType == STREAMTYPE_DVDNAV)
- stringreplace(text, "$T", "d");
-#endif
- else stringreplace(text, "$T", "u");
-
- if(guiIntfStruct.Filename)
- {
- for (i=0; i<strlen(guiIntfStruct.Filename); i++)
- tmp[i] = tolower(guiIntfStruct.Filename[i]);
- stringreplace(text, "$f", tmp);
-
- for (i=0; i<strlen(guiIntfStruct.Filename); i++)
- tmp[i] = toupper(guiIntfStruct.Filename[i]);
- stringreplace(text, "$F", tmp);
- }
-
- return text;
-}
-
-/* cuts text to buflen scrolling from right to left */
-static void scrolltext(char *text, unsigned int buflen, float *value)
-{
- char *buffer = (char *) malloc(buflen + 1);
- unsigned int x,i;
- if(*value < buflen) x = 0;
- else x = *value - buflen;
- memset(buffer, ' ', buflen);
- for (i = (*value>=buflen) ? 0 : buflen - *value; i<buflen; i++)
- {
- if(x < strlen(text))
- buffer[i] = text[x];
- x++;
- }
- buffer[buflen] = 0;
- *value += 1.0f;
- if(*value >= strlen(text) + buflen) *value = 0.0f;
- strcpy(text, buffer);
- free(buffer);
-}
-
-/* updates all dlabels and slabels */
-void renderinfobox(skin_t *skin, window_priv_t *priv)
-{
- unsigned int i;
- if (!priv) return;
-
- /* repaint the area behind the text*/
- /* we have to do this for all labels here, because they may overlap in buggy skins ;( */
-
- for (i=0; i<skin->widgetcount; i++)
- if((skin->widgets[i]->type == tyDlabel) || (skin->widgets[i]->type == tySlabel))
- {
- if(skin->widgets[i]->window == priv->type)
- render(skin->desktopbpp,
- &priv->img,
- find_background(skin, skin->widgets[i]),
- skin->widgets[i]->x,
- skin->widgets[i]->y,
- skin->widgets[i]->x,
- skin->widgets[i]->y,
- skin->widgets[i]->length,
- skin->widgets[i]->font->chars[0]->height,
- 1);
- }
-
- /* load all slabels and dlabels */
- for (i=0; i<skin->widgetcount; i++)
- {
- widget *item = skin->widgets[i];
- if(item->window != priv->type) continue;
- if((i == skin->widgetcount) || (item->type == tyDlabel) || (item->type == tySlabel))
- {
- char *text = generatetextfromlabel(item);
- unsigned int current, c;
- int offset = 0;
- unsigned int textlen;
- if(!text) continue;
- textlen = strlen(text);
-
- /* render(win, win->background, gui->skin->widgets[i]->x, gui->skin->widgets[i]->y,
- gui->skin->widgets[i]->x, gui->skin->widgets[i]->y,
- gui->skin->widgets[i]->length, gui->skin->widgets[i]->font->chars[0]->height,1); */
-
- /* calculate text size */
- for (current=0; current<textlen; current++)
- {
- for (c=0; c<item->font->charcount; c++)
- if(item->font->chars[c]->c == text[current])
- {
- offset += item->font->chars[c]->width;
- break;
- }
- }
-
- /* labels can be scrolled if they are to big */
- if((item->type == tyDlabel) && (item->length < offset))
- {
- int tomuch = (offset - item->length) / (offset /textlen);
- scrolltext(text, textlen - tomuch - 1, &skin->widgets[i]->value);
- textlen = strlen(text);
- }
-
- /* align the text */
- if(item->align == 1)
- offset = (item->length-offset) / 2;
- else if(item->align == 2)
- offset = item->length-offset;
- else
- offset = 0;
-
- if(offset < 0) offset = 0;
-
- /* render the text */
- for (current=0; current<textlen; current++)
- {
- for (c=0; c<item->font->charcount; c++)
- {
- char_t *cchar = item->font->chars[c];
- if(cchar->c == *(text + current))
- {
- render(skin->desktopbpp,
- &priv->img,
- item->font->image,
- item->x + offset,
- item->y,
- cchar->x,
- cchar->y,
- (cchar->width + offset > item->length) ? item->length - offset : cchar->width,
- cchar->height,
- 1);
- offset += cchar->width;
- break;
- }
- }
- }
- free(text);
- }
- }
-}
-
-/******************************************************************/
-/* WIDGET related functions */
-/******************************************************************/
-
-void renderwidget(skin_t *skin, image *dest, widget *item, int state)
-{
- image *img = NULL;
- int height;
- int y;
-
- if(!dest) return;
- if((item->type == tyButton) || (item->type == tyHpotmeter) || (item->type == tyPotmeter))
- img = item->bitmap[0];
-
- if(!img) return;
-
- y = item->y;
- if(item->type == tyPotmeter)
- {
- height = img->height / item->phases;
- y = height * (int)(item->value * item->phases / 100);
- if(y > img->height-height)
- y = img->height - height;
- }
- else
- {
- height = img->height / 3;
- y = state * height;
- }
-
- /* redraw background */
- if(item->type == tyButton)
- render(skin->desktopbpp, dest, find_background(skin,item), item->x, item->y, item->x, item->y, img->width, height, 1);
-
- if((item->type == tyHpotmeter) || (item->type == tyPotmeter))
- {
- /* repaint the area behind the slider */
- render(skin->desktopbpp, dest, find_background(skin, item), item->wx, item->wy, item->wx, item->wy, item->wwidth, item->height, 1);
- item->x = item->value * (item->wwidth-item->width) / 100 + item->wx;
- if((item->x + item->width) > (item->wx + item->wwidth))
- item->x = item->wx + item->wwidth - item->width;
- if(item->x < item->wx)
- item->x = item->wx;
- /* workaround for blue */
- if(item->type == tyHpotmeter)
- height = (item->height < img->height / 3) ? item->height : img->height / 3;
- }
- render(skin->desktopbpp, dest, img, item->x, item->y, 0, y, img->width, height, 1);
-}
diff --git a/Gui/win32/wincfg.c b/Gui/win32/wincfg.c
deleted file mode 100644
index 605867900c..0000000000
--- a/Gui/win32/wincfg.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <mp_msg.h>
-#include <help_mp.h>
-
-#include <m_config.h>
-#include <m_option.h>
-#include <libvo/video_out.h>
-#include <mixer.h>
-#include "wincfg.h"
-#include "interface.h"
-
-/* params */
-int gtkAONorm = 0;
-int gtkAOExtraStereo = 0;
-float gtkAOExtraStereoMul = 1.0;
-int gtkCacheOn = 0;
-int gtkCacheSize = 2048;
-int gtkAutoSyncOn = 0;
-int gtkAutoSync = 0;
-
-int sub_window = 0;
-int console = 0;
-
-int gui_save_pos = 1;
-int gui_main_pos_x = -2;
-int gui_main_pos_y = -2;
-int gui_sub_pos_x = -1;
-int gui_sub_pos_y = -1;
-
-/* External functions */
-extern int frame_dropping;
-extern char *proc_priority;
-extern int m_config_parse_config_file(m_config_t *config, char *conffile);
-
-static m_config_t *gui_conf;
-static m_option_t gui_opts[] =
-{
- { "priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
- { "vo_driver", &video_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL },
- { "v_framedrop", &frame_dropping, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL },
- { "vo_doublebuffering", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "vo_direct_render", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "ao_driver", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL },
- { "ao_volnorm", &gtkAONorm, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "ao_extra_stereo", &gtkAOExtraStereo, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "ao_extra_stereo_coefficient", &gtkAOExtraStereoMul, CONF_TYPE_FLOAT, CONF_RANGE, -10, 10, NULL },
- { "delay", &audio_delay, CONF_TYPE_FLOAT, CONF_RANGE, -100.0, 100.0, NULL},
- { "dvd_device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL },
- { "cdrom_device", &cdrom_device, CONF_TYPE_STRING, 0, 0, 0, NULL },
- { "osd_level", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL },
- { "cache", &gtkCacheOn, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "cache_size", &gtkCacheSize, CONF_TYPE_INT, CONF_RANGE, -1, 65535, NULL },
- { "autosync", &gtkAutoSyncOn, CONF_TYPE_FLAG, 0, 0, 1, NULL },
- { "autosync_size", &gtkAutoSync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL },
- { "gui_skin", &skinName, CONF_TYPE_STRING, 0, 0, 0, NULL },
- { "gui_main_pos_x", &gui_main_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL },
- { "gui_main_pos_y", &gui_main_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL },
- { "gui_sub_pos_x", &gui_sub_pos_x, CONF_TYPE_INT, 0, 0, 0, NULL },
- { "gui_sub_pos_y", &gui_sub_pos_y, CONF_TYPE_INT, 0, 0, 0, NULL },
- { "sub_window", &sub_window, CONF_TYPE_FLAG, 0, 0, 1, NULL},
- { "console", &console, CONF_TYPE_FLAG, 0, 0, 1, NULL},
- { NULL, NULL, 0, 0, 0, 0, NULL }
-};
-
-char *gfgets(char *str, int size, FILE *f)
-{
- char *s = fgets(str, size, f);
- char c;
- if(s)
- {
- c = s[strlen(s) - 1];
- if ((c == '\n') || (c == '\r'))
- s[strlen(s) - 1]=0;
- c = s[strlen(s) - 1];
- if ((c == '\n') || (c == '\r'))
- s[strlen(s) - 1]=0;
- }
- return s;
-}
-
-int cfg_read(void)
-{
- char *cfg = get_path("gui.conf");
-
- /* read configuration */
- mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] [cfg] reading config file: %s\n", cfg);
- gui_conf = m_config_new();
- m_config_register_options(gui_conf, gui_opts);
- if (m_config_parse_config_file(gui_conf, cfg) < 0)
- mp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_ConfigFileError);
- free(cfg);
- return 0;
-}
-
-int cfg_write(void)
-{
- char *cfg = get_path("gui.conf");
- FILE *f;
- int i;
-
- /* save configuration */
- if ((f = fopen(cfg, "wt+")))
- {
- for (i=0; gui_opts[i].name; i++)
- {
- char *v = m_option_print(&gui_opts[i], gui_opts[i].p);
- if(v)
- {
- fprintf(f, "%s = \"%s\"\n", gui_opts[i].name, v);
- free(v);
- }
- else if((int) v == -1)
- mp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_UnableToSaveOption, gui_opts[i].name);
- }
- fclose(f);
- }
- free(cfg);
- return 0;
-}
diff --git a/Gui/win32/wincfg.h b/Gui/win32/wincfg.h
deleted file mode 100644
index 9a5543c3a9..0000000000
--- a/Gui/win32/wincfg.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- MPlayer Gui for win32
- Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
- Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
- Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _WINCFG_H
-#define _WINCFG_H
-
-extern char *skinName;
-extern int sub_window;
-extern int console;
-
-extern int gui_save_pos;
-extern int gui_main_pos_x;
-extern int gui_main_pos_y;
-extern int gui_sub_pos_x;
-extern int gui_sub_pos_y;
-
-extern int cfg_read(void);
-extern int cfg_write(void);
-
-#endif