Commit 50c479da authored by Olivier Teulière's avatar Olivier Teulière

* skins2/win32/win32_window.cpp: Transparency works correctly (this is

   controlled by the 'alpha' and 'movealpha' attributes of the 'Theme'
   tag). Win32 only.
   Note: It is advised to use 255 for the alpha value, otherwise resizing
   will be slowed down a lot...
parent 14b80cc4
...@@ -51,7 +51,7 @@ class OSWindow: public SkinObject ...@@ -51,7 +51,7 @@ class OSWindow: public SkinObject
virtual void raise() const = 0; virtual void raise() const = 0;
/// Set the opacity of the window (0 = transparent, 255 = opaque) /// Set the opacity of the window (0 = transparent, 255 = opaque)
virtual void setOpacity( uint8_t value ) = 0; virtual void setOpacity( uint8_t value ) const = 0;
/// Toggle the window on top /// Toggle the window on top
virtual void toggleOnTop( bool onTop ) const = 0; virtual void toggleOnTop( bool onTop ) const = 0;
......
...@@ -31,15 +31,17 @@ ...@@ -31,15 +31,17 @@
/// Fading API /// Fading API
#define LWA_COLORKEY 0x00000001 #ifndef LWA_COLORKEY
#define LWA_ALPHA 0x00000002 # define LWA_COLORKEY 0x00000001
# define LWA_ALPHA 0x00000002
#endif
Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow, Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow,
HINSTANCE hInst, HWND hParentWindow, HINSTANCE hInst, HWND hParentWindow,
bool dragDrop, bool playOnDrop, bool dragDrop, bool playOnDrop,
Win32Window *pParentWindow ): Win32Window *pParentWindow ):
OSWindow( pIntf ), m_dragDrop( dragDrop ), m_mm( false ) OSWindow( pIntf ), m_dragDrop( dragDrop )
{ {
// Create the window // Create the window
if( pParentWindow ) if( pParentWindow )
...@@ -66,8 +68,8 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow, ...@@ -66,8 +68,8 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow,
// We do it this way otherwise CreateWindowEx will fail if WS_EX_LAYERED // We do it this way otherwise CreateWindowEx will fail if WS_EX_LAYERED
// is not supported // is not supported
// SetWindowLongPtr( m_hWnd, GWL_EXSTYLE, SetWindowLongPtr( m_hWnd, GWL_EXSTYLE,
// GetWindowLong( m_hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED ); GetWindowLong( m_hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED );
// Store a pointer to the GenericWindow in a map // Store a pointer to the GenericWindow in a map
Win32Factory *pFactory = (Win32Factory*)Win32Factory::instance( getIntf() ); Win32Factory *pFactory = (Win32Factory*)Win32Factory::instance( getIntf() );
...@@ -134,52 +136,37 @@ void Win32Window::raise() const ...@@ -134,52 +136,37 @@ void Win32Window::raise() const
} }
void Win32Window::setOpacity( uint8_t value ) void Win32Window::setOpacity( uint8_t value ) const
{ {
Win32Factory *pFactory = (Win32Factory*)Win32Factory::instance( getIntf() ); Win32Factory *pFactory = (Win32Factory*)Win32Factory::instance( getIntf() );
#if 0
if( value == 255 ) if( value == 255 )
{ {
// If the window is opaque, we remove the WS_EX_LAYERED attribute // If the window is opaque, we remove the WS_EX_LAYERED attribute
// which slows resizing for nothing // which slows resizing for nothing
if( m_mm ) SetWindowLongPtr( m_hWnd, GWL_EXSTYLE,
{ GetWindowLong( m_hWnd, GWL_EXSTYLE ) & !WS_EX_LAYERED );
SetWindowLongPtr( m_hWnd, GWL_EXSTYLE, SetWindowPos( m_hWnd, HWND_TOP, 0, 0, 0, 0,
GetWindowLong( m_hWnd, GWL_EXSTYLE ) & !WS_EX_LAYERED ); SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );
SetWindowPos( m_hWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );
m_mm = false;
}
// GenericWindow *pWin = pFactory->m_windowMap[m_hWnd];
// pWin->refresh( pWin->getLeft(), pWin->getTop(), pWin->getWidth(), pWin->getHeight() );
} }
else else
#endif
{ {
if( pFactory->SetLayeredWindowAttributes ) if( pFactory->SetLayeredWindowAttributes )
{ {
#if 0
// (Re)Add the WS_EX_LAYERED attribute. // (Re)Add the WS_EX_LAYERED attribute.
// Resizing will be very slow, now :) // Resizing will be very slow, now :)
if( !m_mm ) SetWindowLongPtr( m_hWnd, GWL_EXSTYLE,
{ GetWindowLong( m_hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED );
SetWindowLongPtr( m_hWnd, GWL_EXSTYLE, SetWindowPos( m_hWnd, HWND_TOP, 0, 0, 0, 0,
GetWindowLong( m_hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED ); SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );
SetWindowPos( m_hWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );
m_mm = true;
}
// GenericWindow *pWin = pFactory->m_windowMap[m_hWnd];
// pWin->refresh( pWin->getLeft(), pWin->getTop(), pWin->getWidth(), pWin->getHeight() );
#endif
// Change the opacity // Change the opacity
pFactory->SetLayeredWindowAttributes( pFactory->SetLayeredWindowAttributes(
m_hWnd, 0, value, LWA_ALPHA|LWA_COLORKEY ); m_hWnd, 0, value, LWA_ALPHA|LWA_COLORKEY );
} }
} }
// UpdateWindow( m_hWnd ); UpdateWindow( m_hWnd );
} }
......
...@@ -54,7 +54,7 @@ class Win32Window: public OSWindow ...@@ -54,7 +54,7 @@ class Win32Window: public OSWindow
virtual void raise() const; virtual void raise() const;
/// Set the opacity of the window (0 = transparent, 255 = opaque) /// Set the opacity of the window (0 = transparent, 255 = opaque)
virtual void setOpacity( uint8_t value ); virtual void setOpacity( uint8_t value ) const;
/// Toggle the window on top /// Toggle the window on top
virtual void toggleOnTop( bool onTop ) const; virtual void toggleOnTop( bool onTop ) const;
...@@ -69,7 +69,6 @@ class Win32Window: public OSWindow ...@@ -69,7 +69,6 @@ class Win32Window: public OSWindow
bool m_dragDrop; bool m_dragDrop;
/// Drop target /// Drop target
LPDROPTARGET m_pDropTarget; LPDROPTARGET m_pDropTarget;
bool m_mm;
}; };
......
...@@ -168,7 +168,7 @@ void X11Window::raise() const ...@@ -168,7 +168,7 @@ void X11Window::raise() const
} }
void X11Window::setOpacity( uint8_t value ) void X11Window::setOpacity( uint8_t value ) const
{ {
// Sorry, the opacity cannot be changed :) // Sorry, the opacity cannot be changed :)
} }
......
...@@ -57,7 +57,7 @@ class X11Window: public OSWindow ...@@ -57,7 +57,7 @@ class X11Window: public OSWindow
virtual void raise() const; virtual void raise() const;
/// Set the opacity of the window (0 = transparent, 255 = opaque) /// Set the opacity of the window (0 = transparent, 255 = opaque)
virtual void setOpacity( uint8_t value ); virtual void setOpacity( uint8_t value ) const;
/// Toggle the window on top /// Toggle the window on top
virtual void toggleOnTop( bool onTop ) const; virtual void toggleOnTop( bool onTop ) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment