vlc | branch: master | Erwan Tulou <[email protected]> | Mon Jun 4 17:28:42 2018 +0200| [5bf929ae00e1b01b0711573fddb0841ceef6a394] | committer: Erwan Tulou
skins2: cosmetics - move the vout_window_t management into each OS implementation (x11, win32 or os2) so that set up is done accordingly. - keep all window handles within each OS implementation. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5bf929ae00e1b01b0711573fddb0841ceef6a394 --- modules/gui/skins2/os2/os2_factory.cpp | 2 +- modules/gui/skins2/os2/os2_factory.hpp | 2 +- modules/gui/skins2/os2/os2_window.cpp | 9 ++++++--- modules/gui/skins2/os2/os2_window.hpp | 8 ++++++-- modules/gui/skins2/src/generic_window.cpp | 11 ++++++----- modules/gui/skins2/src/generic_window.hpp | 8 +++++--- modules/gui/skins2/src/os_factory.hpp | 2 +- modules/gui/skins2/src/os_window.hpp | 4 ++-- modules/gui/skins2/src/skin_common.hpp | 6 ------ modules/gui/skins2/src/skin_main.cpp | 17 ++++------------- modules/gui/skins2/src/vout_window.cpp | 7 +------ modules/gui/skins2/src/vout_window.hpp | 2 +- modules/gui/skins2/win32/win32_factory.cpp | 5 +++-- modules/gui/skins2/win32/win32_factory.hpp | 2 +- modules/gui/skins2/win32/win32_window.cpp | 8 +++++--- modules/gui/skins2/win32/win32_window.hpp | 12 ++++++++---- modules/gui/skins2/x11/x11_factory.cpp | 5 +++-- modules/gui/skins2/x11/x11_factory.hpp | 2 +- modules/gui/skins2/x11/x11_window.cpp | 10 ++++++---- modules/gui/skins2/x11/x11_window.hpp | 14 ++++++++------ 20 files changed, 69 insertions(+), 67 deletions(-) diff --git a/modules/gui/skins2/os2/os2_factory.cpp b/modules/gui/skins2/os2/os2_factory.cpp index bdd1fb515b..5d0e17101b 100644 --- a/modules/gui/skins2/os2/os2_factory.cpp +++ b/modules/gui/skins2/os2/os2_factory.cpp @@ -363,7 +363,7 @@ int OS2Factory::getScreenHeight() const } -void OS2Factory::getMonitorInfo( const GenericWindow &rWindow, +void OS2Factory::getMonitorInfo( OSWindow* pWindow, int* p_x, int* p_y, int* p_width, int* p_height ) const { diff --git a/modules/gui/skins2/os2/os2_factory.hpp b/modules/gui/skins2/os2/os2_factory.hpp index 531cf607b8..3f1923bca8 100644 --- a/modules/gui/skins2/os2/os2_factory.hpp +++ b/modules/gui/skins2/os2/os2_factory.hpp @@ -99,7 +99,7 @@ public: virtual int getScreenHeight() const; /// Get Monitor Information - virtual void getMonitorInfo( const GenericWindow &rWindow, + virtual void getMonitorInfo( OSWindow* pWindow, int* x, int* y, int* width, int* height ) const; virtual void getMonitorInfo( int numScreen, diff --git a/modules/gui/skins2/os2/os2_window.cpp b/modules/gui/skins2/os2/os2_window.cpp index 8bc44ef785..7fcfd2cb6b 100644 --- a/modules/gui/skins2/os2/os2_window.cpp +++ b/modules/gui/skins2/os2/os2_window.cpp @@ -83,7 +83,9 @@ OS2Window::OS2Window( intf_thread_t *pIntf, GenericWindow &rWindow, GenericWindow* pParent = (GenericWindow*)pVoutManager->getVoutMainWindow(); - m_hWnd_parent = (HWND)pParent->getOSHandle(); + OS2Window* pWin = (OS2Window*)pParent->getOSWindow(); + m_hWnd_parent = pWin->getHandle(); + // top-level window m_hWnd = WinCreateStdWindow( HWND_DESKTOP, @@ -152,9 +154,10 @@ OS2Window::~OS2Window() } -void OS2Window::reparent( void* OSHandle, int x, int y, int w, int h ) +void OS2Window::reparent( OSWindow* parent, int x, int y, int w, int h ) { - HWND hwndParent = ( HWND )OSHandle; + OS2Window *pParentWin = (OS2Window*)parent; + HWND hwndParent = pParentWin->getHandle(); // Reparent the window if( !WinSetParent( m_hWnd, hwndParent, TRUE ) ) diff --git a/modules/gui/skins2/os2/os2_window.hpp b/modules/gui/skins2/os2/os2_window.hpp index e0aed774d2..9c21243507 100644 --- a/modules/gui/skins2/os2/os2_window.hpp +++ b/modules/gui/skins2/os2/os2_window.hpp @@ -60,8 +60,12 @@ public: /// Getter for the window handle HWND getHandle() const { return m_hWndClient; } - /// Getter for the window handle - void* getOSHandle() const { return (void*) m_hWndClient; } + /// Set the window handler + void setOSHandle( vout_window_t *pWnd ) const { + pWnd->type = VOUT_WINDOW_TYPE_HWND; + pWnd->info.has_double_click = true; + pWnd->handle.hwnd = getHandle(); + } /// reparent the window void reparent( void* OSHandle, int x, int y, int w, int h ); diff --git a/modules/gui/skins2/src/generic_window.cpp b/modules/gui/skins2/src/generic_window.cpp index 49d9beef1f..55d1bdcc29 100644 --- a/modules/gui/skins2/src/generic_window.cpp +++ b/modules/gui/skins2/src/generic_window.cpp @@ -167,9 +167,10 @@ void GenericWindow::innerHide() } } -vlc_wnd_type GenericWindow::getOSHandle() const + +void GenericWindow::updateWindowConfiguration( vout_window_t * pWnd ) const { - return m_pOsWindow->getOSHandle(); + m_pOsWindow->setOSHandle( pWnd ); } @@ -181,8 +182,8 @@ void GenericWindow::setParent( GenericWindow* pParent, int x, int y, int w, int m_width = ( w > 0 ) ? w : m_width; m_height = ( h > 0 ) ? h : m_height; - vlc_wnd_type handle = pParent ? pParent->getOSHandle() : 0; - m_pOsWindow->reparent( handle, m_left, m_top, m_width, m_height ); + OSWindow *pParentOSWindow = pParent->m_pOsWindow; + m_pOsWindow->reparent( pParentOSWindow, m_left, m_top, m_width, m_height ); } @@ -204,5 +205,5 @@ void GenericWindow::invalidateRect( int left, int top, int width, int height ) void GenericWindow::getMonitorInfo( int* x, int* y, int* width, int* height ) const { OSFactory *pOsFactory = OSFactory::instance( getIntf() ); - pOsFactory->getMonitorInfo( *this, x, y, width, height ); + pOsFactory->getMonitorInfo( m_pOsWindow, x, y, width, height ); } diff --git a/modules/gui/skins2/src/generic_window.hpp b/modules/gui/skins2/src/generic_window.hpp index 86343e234e..5753b7162b 100644 --- a/modules/gui/skins2/src/generic_window.hpp +++ b/modules/gui/skins2/src/generic_window.hpp @@ -27,6 +27,7 @@ #include "skin_common.hpp" #include "../utils/var_bool.hpp" +#include "vlc_vout_window.h" class OSWindow; class EvtGeneric; @@ -111,8 +112,8 @@ public: /// Window type, mainly useful when overloaded (for VoutWindow) virtual std::string getType() const { return "Generic"; } - /// windows handle - vlc_wnd_type getOSHandle() const; + /// window handle + void updateWindowConfiguration( vout_window_t *pWnd ) const; /// window type WindowType_t getType() { return m_type; } @@ -121,10 +122,11 @@ public: void setParent( GenericWindow* pParent, int x = 0, int y = 0, int w = -1, int h = -1 ); -protected: /// Get the OS window OSWindow *getOSWindow() const { return m_pOsWindow; } +protected: + /// These methods do not need to be public since they are accessed /// only by the window manager or by inheritant classes. //@{ diff --git a/modules/gui/skins2/src/os_factory.hpp b/modules/gui/skins2/src/os_factory.hpp index 3aff7ba2c3..54eda30c9a 100644 --- a/modules/gui/skins2/src/os_factory.hpp +++ b/modules/gui/skins2/src/os_factory.hpp @@ -122,7 +122,7 @@ public: virtual int getScreenHeight() const = 0; /// Get Monitor Information for a given Window - virtual void getMonitorInfo( const GenericWindow &rWindow, + virtual void getMonitorInfo( OSWindow *pWindow, int* x, int* y, int* width, int* height ) const = 0; diff --git a/modules/gui/skins2/src/os_window.hpp b/modules/gui/skins2/src/os_window.hpp index ced1e3553e..e9f818f596 100644 --- a/modules/gui/skins2/src/os_window.hpp +++ b/modules/gui/skins2/src/os_window.hpp @@ -57,10 +57,10 @@ public: virtual void toggleOnTop( bool onTop ) const = 0; /// getter for handler - virtual vlc_wnd_type getOSHandle( ) const = 0; + virtual void setOSHandle( vout_window_t* pWnd ) const = 0; /// reparent the window - virtual void reparent( vlc_wnd_type OSHandle, + virtual void reparent( OSWindow *window, int x, int y, int w, int h ) = 0; /// updateWindow (tell the OS we need to update the window) diff --git a/modules/gui/skins2/src/skin_common.hpp b/modules/gui/skins2/src/skin_common.hpp index d748e51283..13ac5470fe 100644 --- a/modules/gui/skins2/src/skin_common.hpp +++ b/modules/gui/skins2/src/skin_common.hpp @@ -60,12 +60,6 @@ class ThemeRepository; #pragma warning ( disable:4786 ) #endif -#ifdef X11_SKINS -typedef uint32_t vlc_wnd_type; -#else -typedef void* vlc_wnd_type; -#endif - /// Wrapper around FromLocale, to avoid the need to call LocaleFree() static inline std::string sFromLocale( const std::string &rLocale ) { diff --git a/modules/gui/skins2/src/skin_main.cpp b/modules/gui/skins2/src/skin_main.cpp index 36f66e344d..bd07df36fe 100644 --- a/modules/gui/skins2/src/skin_main.cpp +++ b/modules/gui/skins2/src/skin_main.cpp @@ -375,27 +375,18 @@ static int WindowOpen( vout_window_t *pWnd, const vout_window_cfg_t *cfg ) pWnd->sys = sys; pWnd->sys->cfg = *cfg; pWnd->sys->pIntf = pIntf; -#ifdef X11_SKINS - pWnd->type = VOUT_WINDOW_TYPE_XID; -#else - pWnd->type = VOUT_WINDOW_TYPE_HWND; -#endif - pWnd->info.has_double_click = true; pWnd->control = WindowControl; + pWnd->type = VOUT_WINDOW_TYPE_DUMMY; + // force execution in the skins2 thread context CmdExecuteBlock* cmd = new CmdExecuteBlock( pIntf, VLC_OBJECT( pWnd ), WindowOpenLocal ); CmdExecuteBlock::executeWait( CmdGenericPtr( cmd ) ); -#ifdef X11_SKINS - pWnd->display.x11 = NULL; - - if( !pWnd->handle.xid ) -#else - if( !pWnd->handle.hwnd ) -#endif + if( pWnd->type == VOUT_WINDOW_TYPE_DUMMY ) { + msg_Dbg( pIntf, "Vout window creation failed" ); free( sys ); vlc_object_release( pIntf ); return VLC_EGENERIC; diff --git a/modules/gui/skins2/src/vout_window.cpp b/modules/gui/skins2/src/vout_window.cpp index 77d0822be0..e912ebb8dc 100644 --- a/modules/gui/skins2/src/vout_window.cpp +++ b/modules/gui/skins2/src/vout_window.cpp @@ -51,12 +51,7 @@ VoutWindow::VoutWindow( intf_thread_t *pIntf, vout_window_t* pWnd, { vlc_object_hold( m_pWnd ); -#ifdef X11_SKINS - m_pWnd->handle.xid = getOSHandle(); - m_pWnd->display.x11 = NULL; -#else - m_pWnd->handle.hwnd = getOSHandle(); -#endif + updateWindowConfiguration( m_pWnd ); m_pTimer = pOsFactory->createOSTimer( m_cmdHideMouse ); } diff --git a/modules/gui/skins2/src/vout_window.hpp b/modules/gui/skins2/src/vout_window.hpp index 804c50915d..8303180374 100644 --- a/modules/gui/skins2/src/vout_window.hpp +++ b/modules/gui/skins2/src/vout_window.hpp @@ -49,7 +49,7 @@ public: using GenericWindow::hide; using GenericWindow::move; using GenericWindow::resize; - using GenericWindow::getOSHandle; + using GenericWindow::updateWindowConfiguration; using GenericWindow::getMonitorInfo; //@} diff --git a/modules/gui/skins2/win32/win32_factory.cpp b/modules/gui/skins2/win32/win32_factory.cpp index 49885ab729..f5a657fc7f 100644 --- a/modules/gui/skins2/win32/win32_factory.cpp +++ b/modules/gui/skins2/win32/win32_factory.cpp @@ -384,11 +384,12 @@ int Win32Factory::getScreenHeight() const } -void Win32Factory::getMonitorInfo( const GenericWindow &rWindow, +void Win32Factory::getMonitorInfo( OSWindow *pWindow, int* p_x, int* p_y, int* p_width, int* p_height ) const { - HWND wnd = (HWND)rWindow.getOSHandle(); + Win32Window *pWin = (Win32Window*)pWindow; + HWND wnd = pWin->getHandle(); HMONITOR hmon = MonitorFromWindow( wnd, MONITOR_DEFAULTTONEAREST ); MONITORINFO mi; mi.cbSize = sizeof( MONITORINFO ); diff --git a/modules/gui/skins2/win32/win32_factory.hpp b/modules/gui/skins2/win32/win32_factory.hpp index c5bf1b08de..cd016ff6a4 100644 --- a/modules/gui/skins2/win32/win32_factory.hpp +++ b/modules/gui/skins2/win32/win32_factory.hpp @@ -102,7 +102,7 @@ public: virtual int getScreenHeight() const; /// Get Monitor Information - virtual void getMonitorInfo( const GenericWindow &rWindow, + virtual void getMonitorInfo( OSWindow *pWindow, int* x, int* y, int* width, int* height ) const; virtual void getMonitorInfo( int numScreen, diff --git a/modules/gui/skins2/win32/win32_window.cpp b/modules/gui/skins2/win32/win32_window.cpp index adb939d864..cc5e1022ed 100644 --- a/modules/gui/skins2/win32/win32_window.cpp +++ b/modules/gui/skins2/win32/win32_window.cpp @@ -84,7 +84,8 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow, GenericWindow* pParent = (GenericWindow*)pVoutManager->getVoutMainWindow(); - m_hWnd_parent = (HWND)pParent->getOSHandle(); + Win32Window *pWin = (Win32Window*)pParent->getOSWindow(); + m_hWnd_parent = pWin->getHandle(); // top-level window m_hWnd = CreateWindowEx( WS_EX_APPWINDOW, vlc_class, vlc_name, @@ -145,10 +146,11 @@ Win32Window::~Win32Window() } -void Win32Window::reparent( void* OSHandle, int x, int y, int w, int h ) +void Win32Window::reparent( OSWindow* parent, int x, int y, int w, int h ) { + Win32Window *pParentWin = (Win32Window*)parent; // Reparent the window - if( !SetParent( m_hWnd, (HWND)OSHandle ) ) + if( !SetParent( m_hWnd, pParentWin->getHandle() ) ) msg_Err( getIntf(), "SetParent failed (%lu)", GetLastError() ); MoveWindow( m_hWnd, x, y, w, h, TRUE ); } diff --git a/modules/gui/skins2/win32/win32_window.hpp b/modules/gui/skins2/win32/win32_window.hpp index 55de6043df..47462675b7 100644 --- a/modules/gui/skins2/win32/win32_window.hpp +++ b/modules/gui/skins2/win32/win32_window.hpp @@ -59,14 +59,18 @@ public: /// Toggle the window on top virtual void toggleOnTop( bool onTop ) const; - /// Getter for the window handle - HWND getHandle() const { return m_hWnd; } + /// Set the window handler + void setOSHandle( vout_window_t *pWnd ) const { + pWnd->type = VOUT_WINDOW_TYPE_HWND; + pWnd->info.has_double_click = true; + pWnd->handle.hwnd = m_hWnd; + } /// Getter for the window handle - void* getOSHandle() const { return (void*) m_hWnd; } + HWND getHandle() const { return m_hWnd; } /// reparent the window - void reparent( void* OSHandle, int x, int y, int w, int h ); + void reparent( OSWindow* parent, int x, int y, int w, int h ); /// invalidate a window surface bool invalidateRect( int x, int y, int w, int h ) const; diff --git a/modules/gui/skins2/x11/x11_factory.cpp b/modules/gui/skins2/x11/x11_factory.cpp index d658ac3b83..8857a72d7b 100644 --- a/modules/gui/skins2/x11/x11_factory.cpp +++ b/modules/gui/skins2/x11/x11_factory.cpp @@ -204,10 +204,11 @@ int X11Factory::getScreenHeight() const } -void X11Factory::getMonitorInfo( const GenericWindow &rWindow, +void X11Factory::getMonitorInfo( OSWindow *pWindow, int* p_x, int* p_y, int* p_width, int* p_height ) const { + X11Window *pWin = (X11Window*)pWindow; // initialize to default geometry *p_x = 0; *p_y = 0; @@ -217,7 +218,7 @@ void X11Factory::getMonitorInfo( const GenericWindow &rWindow, // Use Xinerama to determine the monitor where the video // mostly resides (biggest surface) Display *pDisplay = m_pDisplay->getDisplay(); - Window wnd = (Window)rWindow.getOSHandle(); + Window wnd = pWin->getDrawable(); Window root = DefaultRootWindow( pDisplay ); Window child_wnd; diff --git a/modules/gui/skins2/x11/x11_factory.hpp b/modules/gui/skins2/x11/x11_factory.hpp index c9094c8064..91c82777f2 100644 --- a/modules/gui/skins2/x11/x11_factory.hpp +++ b/modules/gui/skins2/x11/x11_factory.hpp @@ -129,7 +129,7 @@ public: virtual int getScreenHeight() const; /// Get Monitor Information - virtual void getMonitorInfo( const GenericWindow &rWindow, + virtual void getMonitorInfo( OSWindow *pWindow, int* x, int* y, int* width, int* height ) const; virtual void getMonitorInfo( int numScreen, diff --git a/modules/gui/skins2/x11/x11_window.cpp b/modules/gui/skins2/x11/x11_window.cpp index e469ed64cb..305f327e35 100644 --- a/modules/gui/skins2/x11/x11_window.cpp +++ b/modules/gui/skins2/x11/x11_window.cpp @@ -165,8 +165,9 @@ X11Window::X11Window( intf_thread_t *pIntf, GenericWindow &rWindow, { // Associate the fsc window to the fullscreen window VoutManager* pVoutManager = VoutManager::instance( getIntf() ); - GenericWindow* pWin = pVoutManager->getVoutMainWindow(); - Window wnd = (Window) pWin->getOSHandle(); + GenericWindow* pGenericWin = pVoutManager->getVoutMainWindow(); + X11Window *pWin = (X11Window*)pGenericWin->getOSWindow(); + Window wnd = pWin->getDrawable(); XSetTransientForHint( XDISPLAY, m_wnd, wnd ); } else @@ -242,11 +243,12 @@ X11Window::~X11Window() XSync( XDISPLAY, False ); } -void X11Window::reparent( uint32_t OSHandle, int x, int y, int w, int h ) +void X11Window::reparent( OSWindow *win, int x, int y, int w, int h ) { // Reparent the window + X11Window *parent = (X11Window*)win; Window new_parent = - OSHandle ? (Window) OSHandle : DefaultRootWindow( XDISPLAY ); + parent ? parent->m_wnd : DefaultRootWindow( XDISPLAY ); XReparentWindow( XDISPLAY, m_wnd, new_parent, x, y); if( w && h ) diff --git a/modules/gui/skins2/x11/x11_window.hpp b/modules/gui/skins2/x11/x11_window.hpp index c8ffa96e49..9ab9244125 100644 --- a/modules/gui/skins2/x11/x11_window.hpp +++ b/modules/gui/skins2/x11/x11_window.hpp @@ -67,14 +67,16 @@ public: /// Get the window ID Window getDrawable() const { return m_wnd; } - /// Getter for the handler - uint32_t getOSHandle() const { return m_wnd; } - - /// Getter for the handler - uint32_t getParentOSHandle() const { return m_wnd_parent; } + /// Set the window handler + void setOSHandle( vout_window_t *pWnd ) const { + pWnd->type = VOUT_WINDOW_TYPE_XID; + pWnd->info.has_double_click = true; + pWnd->handle.xid = m_wnd; + pWnd->display.x11 = NULL; + } /// reparent the window - void reparent( uint32_t OSHandle, int x, int y, int w, int h ); + void reparent( OSWindow *parent, int x, int y, int w, int h ); /// invalidate a window surface bool invalidateRect( int x, int y, int w, int h ) const; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
