int CommonInit(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; sys->hwnd = NULL; sys->hvideownd = NULL; sys->hparent = NULL; sys->hfswnd = NULL; sys->changes = 0; SetRectEmpty(&sys->rect_display); SetRectEmpty(&sys->rect_parent); sys->is_first_display = true; sys->is_on_top = false; var_Create(vd, "video-title", VLC_VAR_STRING | VLC_VAR_DOINHERIT); var_Create(vd, "video-deco", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); /* */ sys->event = EventThreadCreate(vd); if (!sys->event) return VLC_EGENERIC; event_cfg_t cfg; memset(&cfg, 0, sizeof(cfg)); #ifdef MODULE_NAME_IS_direct3d cfg.use_desktop = sys->use_desktop; #endif #ifdef MODULE_NAME_IS_directx cfg.use_overlay = sys->use_overlay; #endif cfg.win.type = VOUT_WINDOW_TYPE_HWND; cfg.win.x = var_InheritInteger(vd, "video-x"); cfg.win.y = var_InheritInteger(vd, "video-y"); cfg.win.width = vd->cfg->display.width; cfg.win.height = vd->cfg->display.height; event_hwnd_t hwnd; if (EventThreadStart(sys->event, &hwnd, &cfg)) return VLC_EGENERIC; sys->parent_window = hwnd.parent_window; sys->hparent = hwnd.hparent; sys->hwnd = hwnd.hwnd; sys->hvideownd = hwnd.hvideownd; sys->hfswnd = hwnd.hfswnd; if (vd->cfg->is_fullscreen) { if (CommonControlSetFullscreen(vd, true)) vout_display_SendEventFullscreen(vd, false); } /* Why not with glwin32 */ #if !defined(UNDER_CE) && !defined(MODULE_NAME_IS_glwin32) var_Create(vd, "disable-screensaver", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); DisableScreensaver (vd); #endif return VLC_SUCCESS; }
int CommonInit(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; sys->hwnd = NULL; sys->hvideownd = NULL; sys->hparent = NULL; sys->hfswnd = NULL; sys->changes = 0; sys->is_first_display = true; sys->is_on_top = false; #if !VLC_WINSTORE_APP SetRectEmpty(&sys->rect_display); SetRectEmpty(&sys->rect_parent); var_Create(vd, "video-deco", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); var_Create(vd, "disable-screensaver", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); /* */ sys->event = EventThreadCreate(vd); if (!sys->event) return VLC_EGENERIC; #endif event_cfg_t cfg; memset(&cfg, 0, sizeof(cfg)); #ifdef MODULE_NAME_IS_direct3d9 cfg.use_desktop = sys->use_desktop; #endif #ifdef MODULE_NAME_IS_directdraw cfg.use_overlay = sys->use_overlay; #endif cfg.x = var_InheritInteger(vd, "video-x"); cfg.y = var_InheritInteger(vd, "video-y"); cfg.width = vd->cfg->display.width; cfg.height = vd->cfg->display.height; #if !VLC_WINSTORE_APP event_hwnd_t hwnd; if (EventThreadStart(sys->event, &hwnd, &cfg)) return VLC_EGENERIC; sys->parent_window = hwnd.parent_window; sys->hparent = hwnd.hparent; sys->hwnd = hwnd.hwnd; sys->hvideownd = hwnd.hvideownd; sys->hfswnd = hwnd.hfswnd; if (vd->cfg->is_fullscreen) { if (CommonControlSetFullscreen(vd, true)) vout_display_SendEventFullscreen(vd, false); } DisableScreensaver (vd); #endif return VLC_SUCCESS; }
int CommonControl(vout_display_t *vd, int query, va_list args) { vout_display_sys_t *sys = vd->sys; switch (query) { case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE: /* const vout_display_cfg_t *p_cfg */ { /* Update dimensions */ const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *); RECT rect_window = { .top = 0, .left = 0, .right = cfg->display.width, .bottom = cfg->display.height, }; AdjustWindowRect(&rect_window, EventThreadGetWindowStyle(sys->event), 0); SetWindowPos(sys->hwnd, 0, 0, 0, rect_window.right - rect_window.left, rect_window.bottom - rect_window.top, SWP_NOMOVE); UpdateRects(vd, cfg, NULL, false); return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_ZOOM: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_SOURCE_ASPECT: /* const video_format_t *p_source */ case VOUT_DISPLAY_CHANGE_SOURCE_CROP: { /* const video_format_t *p_source */ const vout_display_cfg_t *cfg; if (query == VOUT_DISPLAY_CHANGE_SOURCE_CROP || query == VOUT_DISPLAY_CHANGE_SOURCE_ASPECT) { const video_format_t *source = va_arg(args, const video_format_t *); cfg = vd->cfg; UpdateRects(vd, cfg, source, true); } else { cfg = va_arg(args, const vout_display_cfg_t *); UpdateRects(vd, cfg, NULL, false); } return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_WINDOW_STATE: { /* unsigned state */ const unsigned state = va_arg(args, unsigned); const bool is_on_top = (state & VOUT_WINDOW_STATE_ABOVE) != 0; #ifdef MODULE_NAME_IS_direct3d9 if (sys->use_desktop && is_on_top) return VLC_EGENERIC; #endif HMENU hMenu = GetSystemMenu(sys->hwnd, FALSE); if (is_on_top && !(GetWindowLong(sys->hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)) { CheckMenuItem(hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_CHECKED); SetWindowPos(sys->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); } else if (!is_on_top && (GetWindowLong(sys->hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)) { CheckMenuItem(hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_UNCHECKED); SetWindowPos(sys->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); } sys->is_on_top = is_on_top; return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_FULLSCREEN: { bool fs = va_arg(args, int); if (CommonControlSetFullscreen(vd, fs)) return VLC_EGENERIC; UpdateRects(vd, NULL, NULL, false); return VLC_SUCCESS; } case VOUT_DISPLAY_HIDE_MOUSE: EventThreadMouseHide(sys->event); return VLC_SUCCESS; case VOUT_DISPLAY_RESET_PICTURES: vlc_assert_unreachable(); default: return VLC_EGENERIC; } }