From d147daa23d0205c2e3ea283f738453d1e0a4f97c Mon Sep 17 00:00:00 2001 From: Erwan Tulou <erwan10@videolan.org> Date: Sun, 20 Dec 2009 10:00:35 +0100 Subject: [PATCH] skins2(Windows): add a black windows for fullscreen and manage z-order --- modules/gui/skins2/win32/win32_factory.cpp | 30 +++++++++++++++++++++- modules/gui/skins2/win32/win32_factory.hpp | 1 + modules/gui/skins2/win32/win32_window.cpp | 24 ++++++++++++++--- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/modules/gui/skins2/win32/win32_factory.cpp b/modules/gui/skins2/win32/win32_factory.cpp index 0a1cba57c250..3618886dea05 100644 --- a/modules/gui/skins2/win32/win32_factory.cpp +++ b/modules/gui/skins2/win32/win32_factory.cpp @@ -129,7 +129,7 @@ bool Win32Factory::init() skinWindowClass.cbClsExtra = 0; skinWindowClass.cbWndExtra = 0; skinWindowClass.hbrBackground = NULL; - skinWindowClass.hCursor = LoadCursor( NULL , IDC_ARROW ); + skinWindowClass.hCursor = LoadCursor( NULL, IDC_ARROW ); skinWindowClass.hIcon = LoadIcon( m_hInst, _T("VLC_ICON") ); skinWindowClass.hInstance = m_hInst; @@ -147,6 +147,34 @@ bool Win32Factory::init() } } + + // Create window class for window of VoutWindow type + WNDCLASS voutWindowClass; + voutWindowClass.style = CS_OWNDC|CS_DBLCLKS; + voutWindowClass.lpfnWndProc = (WNDPROC) Win32Proc; + voutWindowClass.lpszClassName = _T("VoutWindowClass"); + voutWindowClass.lpszMenuName = NULL; + voutWindowClass.cbClsExtra = 0; + voutWindowClass.cbWndExtra = 0; + voutWindowClass.hbrBackground = (HBRUSH__*) GetStockObject( BLACK_BRUSH); + voutWindowClass.hCursor = LoadCursor( NULL , IDC_ARROW ); + voutWindowClass.hIcon = LoadIcon( m_hInst, _T("VLC_ICON") ); + voutWindowClass.hInstance = m_hInst; + + // Register class and check it + if( !RegisterClass( &voutWindowClass ) ) + { + WNDCLASS wndclass; + + // Check why it failed. If it's because the class already exists + // then fine, otherwise return with an error. + if( !GetClassInfo( m_hInst, _T("VoutWindowClass"), &wndclass ) ) + { + msg_Err( getIntf(), "cannot register voutWindow window class" ); + return false; + } + } + // Create Window m_hParentWindow = CreateWindowEx( WS_EX_TOOLWINDOW, _T("SkinWindowClass"), _T("VLC media player"), WS_SYSMENU|WS_POPUP, diff --git a/modules/gui/skins2/win32/win32_factory.hpp b/modules/gui/skins2/win32/win32_factory.hpp index 9e4db905128c..93c688a22aa9 100644 --- a/modules/gui/skins2/win32/win32_factory.hpp +++ b/modules/gui/skins2/win32/win32_factory.hpp @@ -31,6 +31,7 @@ #include <windows.h> #include <shellapi.h> +// #include <wingdi.h> #include "../src/os_factory.hpp" #include "../src/generic_window.hpp" diff --git a/modules/gui/skins2/win32/win32_window.cpp b/modules/gui/skins2/win32/win32_window.cpp index 413168dc6767..b94ad9f2862f 100644 --- a/modules/gui/skins2/win32/win32_window.cpp +++ b/modules/gui/skins2/win32/win32_window.cpp @@ -52,19 +52,30 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow, m_pParent( pParentWindow ), m_type ( type ) { // Create the window - if( pParentWindow ) + if( type == GenericWindow::VoutWindow ) { // Child window (for vout) m_hWnd_parent = pParentWindow->getHandle(); m_hWnd = CreateWindowEx( WS_EX_TOOLWINDOW | WS_EX_NOPARENTNOTIFY, - "SkinWindowClass", "default name", WS_CHILD, + "VoutWindowClass", "default name", + WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, m_hWnd_parent, 0, hInst, NULL ); } + else if( type == GenericWindow::FullscreenWindow ) + { + // Normal window + m_hWnd_parent = NULL; + m_hWnd = CreateWindowEx( WS_EX_APPWINDOW, "SkinWindowClass", + "default name", WS_POPUP | WS_CLIPCHILDREN, + CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, m_hWnd_parent, 0, hInst, NULL ); + } + else { // Normal window - m_hWnd_parent = hParentWindow; + m_hWnd_parent = NULL; m_hWnd = CreateWindowEx( WS_EX_TOOLWINDOW, "SkinWindowClass", "default name", WS_POPUP | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, @@ -121,7 +132,12 @@ void Win32Window::reparent( void* OSHandle, int x, int y, int w, int h ) void Win32Window::show() const { - ShowWindow( m_hWnd, SW_SHOW ); + + if( m_type == GenericWindow::VoutWindow ) + SetWindowPos( m_hWnd, HWND_BOTTOM, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE ); + + ShowWindow( m_hWnd, SW_SHOW ); } -- GitLab