/** * @brief Change to a different skin. * * @param name name of the skin to change to */ void uiChangeSkin(char *name) { int was_menu, was_playbar; was_menu = guiApp.menuIsPresent; was_playbar = guiApp.playbarIsPresent; mainVisible = False; if (skinRead(name) != 0) { if (skinRead(skinName) != 0) { gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_GUI_MSG_SkinCfgError, skinName); mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); } } /* reload main window (must be first!) */ uiMainDone(); uiMainInit(); wsWindowVisibility(&guiApp.mainWindow, wsShowWindow); mainVisible = True; /* adjust video window */ if (guiApp.video.Bitmap.Image) { wsImageResize(&guiApp.videoWindow, guiApp.video.Bitmap.Width, guiApp.video.Bitmap.Height); wsImageRender(&guiApp.videoWindow, guiApp.video.Bitmap.Image); } if (!guiInfo.Playing) { if (!guiApp.videoWindow.isFullScreen) { wsWindowResize(&guiApp.videoWindow, guiApp.video.width, guiApp.video.height); wsWindowMove(&guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y); } wsWindowRedraw(&guiApp.videoWindow); } /* reload playbar */ if (was_playbar) uiPlaybarDone(); uiPlaybarInit(); /* reload menu window */ if (was_menu) uiMenuDone(); uiMenuInit(); /* */ if (guiInfo.AudioPassthrough) btnSet(evSetVolume, btnDisabled); if (guiInfo.AudioChannels < 2 || guiInfo.AudioPassthrough) btnSet(evSetBalance, btnDisabled); btnSet(evFullScreen, guiApp.videoWindow.isFullScreen ? btnPressed : btnReleased); wsWindowLayer(wsDisplay, guiApp.mainWindow.WindowID, guiApp.videoWindow.isFullScreen); wsWindowLayer(wsDisplay, guiApp.menuWindow.WindowID, guiApp.videoWindow.isFullScreen); }
/** * @brief Initialize and start the GUI. */ void guiInit(void) { char **argvf; int ret; plItem *playlist; mp_msg(MSGT_GPLAYER, MSGL_V, "GUI init.\n"); /* check options */ if (!cdrom_device) cdrom_device = strdup(DEFAULT_CDROM_DEVICE); if (!dvd_device) dvd_device = strdup(DEFAULT_DVD_DEVICE); #ifdef CONFIG_DXR3 if (!gtkDXR3Device) gtkDXR3Device = strdup("/dev/em8300-0"); #endif if (stream_cache_size > 0) { gtkCacheOn = True; gtkCacheSize = stream_cache_size; } else if (stream_cache_size == 0) gtkCacheOn = False; if (autosync && (autosync != gtkAutoSync)) { gtkAutoSyncOn = True; gtkAutoSync = autosync; } gtkASS.enabled = ass_enabled; gtkASS.use_margins = ass_use_margins; gtkASS.top_margin = ass_top_margin; gtkASS.bottom_margin = ass_bottom_margin; argvf = get_vf("rotate"); guiInfo.Rotation = (argvf && argvf[1] ? atoi(argvf[1]) : -1); /* initialize graphical user interfaces */ wsInit(mDisplay); gtkInit(mDisplayName); /* load skin */ skinDirInHome = get_path("skins"); skinDirInData = MPLAYER_DATADIR "/skins"; mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #1: %s\n", skinDirInHome); mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #2: %s\n", skinDirInData); if (!skinName) skinName = strdup("default"); ret = skinRead(skinName); if (ret == -1 && strcmp(skinName, "default") != 0) { mp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_GUI_MSG_SkinCfgSelectedNotFound, skinName); skinName = strdup("default"); ret = skinRead(skinName); } switch (ret) { case -1: gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_GUI_MSG_SkinCfgNotFound, skinName); mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); case -2: gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_GUI_MSG_SkinCfgError, skinName); mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); } /* initialize windows */ if (gui_save_pos) { if (gui_main_pos_x != -3) guiApp.main.x = gui_main_pos_x; if (gui_main_pos_y != -3) guiApp.main.y = gui_main_pos_y; if (gui_video_pos_x != -3) guiApp.video.x = gui_video_pos_x; if (gui_video_pos_y != -3) guiApp.video.y = gui_video_pos_y; } if (WinID > 0) { guiApp.videoWindow.Parent = WinID; guiApp.video.x = 0; guiApp.video.y = 0; } if (guiWinID >= 0) guiApp.mainWindow.Parent = guiWinID; uiMainInit(); // main window must be first! uiVideoInit(); // video window must be second! uiPlaybarInit(); uiMenuInit(); WinID = (Window)guiApp.videoWindow.WindowID; btnValue(evSetVolume, &guiInfo.Volume); btnValue(evSetBalance, &guiInfo.Balance); btnValue(evSetMoviePosition, &guiInfo.Position); if (guiInfo.Position) uiEvent(evSetMoviePosition, guiInfo.Position); wsWindowVisibility(&guiApp.mainWindow, wsShowWindow); if (gtkShowVideoWindow) { wsWindowVisibility(&guiApp.videoWindow, wsShowWindow); guiInfo.VideoWindow = True; if (gtkLoadFullscreen) uiFullScreen(); } else wsWindowBackground(&guiApp.videoWindow, 0, 0, 0); if (gtkLoadFullscreen) btnSet(evFullScreen, btnPressed); guiInfo.Playing = GUI_STOP; playlist = listMgr(PLAYLIST_ITEM_GET_CURR, 0); if (playlist && !filename) { uiSetFile(playlist->path, playlist->name, STREAMTYPE_FILE); guiInfo.Tracks = (uintptr_t)listMgr(PLAYLIST_ITEM_GET_POS, 0); guiInfo.Track = 1; filename = NULL; // don't start playing } if (subdata) setdup(&guiInfo.SubtitleFilename, subdata->filename); orig_fontconfig = font_fontconfig; set_fontconfig(); guiInitialized = True; }
void guiInit(void) { int i; mp_msg(MSGT_GPLAYER, MSGL_V, "GUI init.\n"); #ifdef CONFIG_DXR3 if (!gtkDXR3Device) gtkDXR3Device = strdup("/dev/em8300-0"); #endif if (stream_cache_size > 0) { gtkCacheOn = 1; gtkCacheSize = stream_cache_size; } else if (stream_cache_size == 0) gtkCacheOn = 0; if (autosync && (autosync != gtkAutoSync)) { gtkAutoSyncOn = 1; gtkAutoSync = autosync; } #ifdef CONFIG_ASS gtkASS.enabled = ass_enabled; gtkASS.use_margins = ass_use_margins; gtkASS.top_margin = ass_top_margin; gtkASS.bottom_margin = ass_bottom_margin; #endif gtkInit(); // initialize X wsXInit(mDisplay); // load skin skinDirInHome = get_path("skins"); skinMPlayerDir = MPLAYER_DATADIR "/skins"; mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #1: %s\n", skinDirInHome); mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #2: %s\n", skinMPlayerDir); if (!skinName) skinName = strdup("default"); i = skinRead(skinName); if (i == -1 && strcmp(skinName, "default") != 0) { mp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_SKIN_SKINCFG_SelectedSkinNotFound, skinName); skinName = strdup("default"); i = skinRead(skinName); } switch (i) { case -1: gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_SKIN_SKINCFG_SkinNotFound, skinName); guiExit(EXIT_ERROR); case -2: gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_SKIN_SKINCFG_SkinCfgError, skinName); guiExit(EXIT_ERROR); } // initialize windows mainDrawBuffer = malloc(guiApp.main.Bitmap.ImageSize); if (!mainDrawBuffer) { gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_NEMDB); guiExit(EXIT_ERROR); } if (gui_save_pos) { if (gui_main_pos_x != -3) guiApp.main.x = gui_main_pos_x; if (gui_main_pos_y != -3) guiApp.main.y = gui_main_pos_y; if (gui_sub_pos_x != -3) guiApp.sub.x = gui_sub_pos_x; if (gui_sub_pos_y != -3) guiApp.sub.y = gui_sub_pos_y; } if (WinID > 0) { guiApp.subWindow.Parent = WinID; guiApp.sub.x = 0; guiApp.sub.y = 0; } if (guiWinID >= 0) guiApp.mainWindow.Parent = guiWinID; wsCreateWindow(&guiApp.subWindow, guiApp.sub.x, guiApp.sub.y, guiApp.sub.width, guiApp.sub.height, wsNoBorder, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, wsShowFrame | wsHideWindow, "MPlayer - Video"); wsDestroyImage(&guiApp.subWindow); wsCreateImage(&guiApp.subWindow, guiApp.sub.Bitmap.Width, guiApp.sub.Bitmap.Height); wsXDNDMakeAwareness(&guiApp.subWindow); uiMenuInit(); uiPlaybarInit(); // i=wsHideFrame|wsMaxSize|wsHideWindow; // if ( guiApp.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow; i = wsShowFrame | wsMaxSize | wsHideWindow; wsCreateWindow(&guiApp.mainWindow, guiApp.main.x, guiApp.main.y, guiApp.main.width, guiApp.main.height, wsNoBorder, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, i, "MPlayer"); wsSetShape(&guiApp.mainWindow, guiApp.main.Mask.Image); wsXDNDMakeAwareness(&guiApp.mainWindow); mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] screen depth: %d\n", wsDepthOnScreen); mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] mainWindow ID: 0x%x\n", (int)guiApp.mainWindow.WindowID); mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] subWindow ID: 0x%x\n", (int)guiApp.subWindow.WindowID); guiApp.mainWindow.ReDraw = (void *)uiMainDraw; guiApp.mainWindow.MouseHandler = uiMainMouseHandle; guiApp.mainWindow.KeyHandler = uiMainKeyHandle; guiApp.mainWindow.DandDHandler = uiDandDHandler; guiApp.subWindow.ReDraw = (void *)uiSubDraw; guiApp.subWindow.MouseHandler = uiSubMouseHandle; guiApp.subWindow.KeyHandler = uiMainKeyHandle; guiApp.subWindow.DandDHandler = uiDandDHandler; wsSetBackgroundRGB(&guiApp.subWindow, guiApp.sub.R, guiApp.sub.G, guiApp.sub.B); wsClearWindow(guiApp.subWindow); if (guiApp.sub.Bitmap.Image) wsConvert(&guiApp.subWindow, guiApp.sub.Bitmap.Image); btnModify(evSetVolume, guiInfo.Volume); btnModify(evSetBalance, guiInfo.Balance); btnModify(evSetMoviePosition, guiInfo.Position); wsSetIcon(wsDisplay, guiApp.mainWindow.WindowID, &guiIcon); wsSetIcon(wsDisplay, guiApp.subWindow.WindowID, &guiIcon); if (!guiApp.mainDecoration) wsWindowDecoration(&guiApp.mainWindow, 0); wsVisibleWindow(&guiApp.mainWindow, wsShowWindow); #if 0 wsVisibleWindow(&guiApp.subWindow, wsShowWindow); { XEvent xev; do XNextEvent(wsDisplay, &xev); while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); guiApp.subWindow.Mapped = wsMapped; } if (!fullscreen) fullscreen = gtkLoadFullscreen; if (fullscreen) { uiFullScreen(); btnModify(evFullScreen, btnPressed); } #else if (!fullscreen) fullscreen = gtkLoadFullscreen; if (gtkShowVideoWindow) { wsVisibleWindow(&guiApp.subWindow, wsShowWindow); { XEvent xev; do XNextEvent(wsDisplay, &xev); while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); guiApp.subWindow.Mapped = wsMapped; } if (fullscreen) { uiFullScreen(); btnModify(evFullScreen, btnPressed); } } else { if (fullscreen) { wsVisibleWindow(&guiApp.subWindow, wsShowWindow); { XEvent xev; do XNextEvent(wsDisplay, &xev); while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); guiApp.subWindow.Mapped = wsMapped; } guiInfo.Playing = GUI_PAUSE; // because of !gtkShowVideoWindow... uiFullScreen(); // ...guiInfo.Playing is required wsVisibleWindow(&guiApp.subWindow, wsHideWindow); btnModify(evFullScreen, btnPressed); } } #endif guiInfo.Playing = GUI_STOP; uiSubRender = 1; if (plCurrent && !filename) uiSetFileName(plCurrent->path, plCurrent->name, STREAMTYPE_FILE); if (subdata) guiSetFilename(guiInfo.Subtitlename, subdata->filename); guiLoadFont(); initialized = 1; }