diff --git a/kstyle/CMakeLists.txt b/kstyle/CMakeLists.txt index 6b95c401..7e90a130 100644 --- a/kstyle/CMakeLists.txt +++ b/kstyle/CMakeLists.txt @@ -128,6 +128,7 @@ set(breeze_PART_SRCS animations/breezewidgetstateengine.cpp animations/breezewidgetstatedata.cpp debug/breezewidgetexplorer.cpp + breezeblurhelper.cpp breezeaddeventfilter.cpp breezeframeshadow.cpp breezehelper.cpp diff --git a/kstyle/breeze.kcfg b/kstyle/breeze.kcfg index bd2cc407..1a20350f 100644 --- a/kstyle/breeze.kcfg +++ b/kstyle/breeze.kcfg @@ -40,7 +40,7 @@ - + true @@ -97,7 +97,7 @@ true - + true @@ -185,6 +185,11 @@ false + + + 100 + + diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index 51092586..fbe020b1 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -30,6 +30,7 @@ #include "breezestyleconfigdata.h" #include "breezewidgetexplorer.h" #include "breezewindowmanager.h" +#include "breezeblurhelper.h" #include @@ -152,6 +153,7 @@ namespace Breeze , _helper( new Helper( "breeze" ) ) #else , _helper( new Helper( StyleConfigData::self()->sharedConfig() ) ) + , _blurHelper( new BlurHelper( this ) ) #endif , _shadowHelper( new ShadowHelper( this, *_helper ) ) @@ -317,6 +319,12 @@ namespace Breeze setTranslucentBackground( widget ); + #if !BREEZE_USE_KDE4 + if ( _helper->hasAlphaChannel( widget ) && StyleConfigData::menuOpacity() < 100 ) { + _blurHelper->registerWidget( widget->window() ); + } + #endif + #if QT_VERSION >= 0x050000 } else if( qobject_cast( widget ) ) { @@ -439,6 +447,10 @@ namespace Breeze _windowManager->unregisterWidget( widget ); _splitterFactory->unregisterWidget( widget ); + #if !BREEZE_USE_KDE4 + _blurHelper->unregisterWidget( widget ); + #endif + // remove event filter if( qobject_cast( widget ) || qobject_cast( widget ) || @@ -3609,7 +3621,6 @@ namespace Breeze //___________________________________________________________________________________ bool Style::drawPanelMenuPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const { - /* * do nothing if menu is embedded in another widget * this corresponds to having a transparent background @@ -3617,10 +3628,16 @@ namespace Breeze if( widget && !widget->isWindow() ) return true; const auto& palette( option->palette ); - const auto background( _helper->frameBackgroundColor( palette ) ); const auto outline( _helper->frameOutlineColor( palette ) ); - const bool hasAlpha( _helper->hasAlphaChannel( widget ) ); + auto background( _helper->frameBackgroundColor( palette ) ); + + #if !BREEZE_USE_KDE4 + if ( hasAlpha ) { + background.setAlphaF(StyleConfigData::menuOpacity() / 100.0); + } + #endif + _helper->renderMenuFrame( painter, option->rect, background, outline, hasAlpha ); return true; diff --git a/kstyle/breezestyle.h b/kstyle/breezestyle.h index 12548c92..c9ac1221 100644 --- a/kstyle/breezestyle.h +++ b/kstyle/breezestyle.h @@ -66,6 +66,7 @@ namespace Breeze class SplitterFactory; class WidgetExplorer; class WindowManager; + class BlurHelper; //* convenience typedef for base class #if BREEZE_USE_KDE4 @@ -497,6 +498,9 @@ namespace Breeze //* keyboard accelerators Mnemonics* _mnemonics = nullptr; + //* blur helper + BlurHelper* _blurHelper = nullptr; + //* window manager WindowManager* _windowManager = nullptr; diff --git a/kstyle/config/breezestyleconfig.cpp b/kstyle/config/breezestyleconfig.cpp index ee761ef6..6fb5302a 100644 --- a/kstyle/config/breezestyleconfig.cpp +++ b/kstyle/config/breezestyleconfig.cpp @@ -64,6 +64,7 @@ namespace Breeze connect( _scrollBarAddLineButtons, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); connect( _scrollBarSubLineButtons, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); connect( _windowDragMode, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); + connect( _menuOpacity, SIGNAL(valueChanged(int)), SLOT(updateChanged()) ); } @@ -84,7 +85,8 @@ namespace Breeze StyleConfigData::setScrollBarSubLineButtons( _scrollBarSubLineButtons->currentIndex() ); StyleConfigData::setAnimationsEnabled( _animationsEnabled->isChecked() ); StyleConfigData::setAnimationsDuration( _animationsDuration->value() ); - StyleConfigData::setWindowDragMode( _windowDragMode->currentIndex() ); + StyleConfigData::setWindowDragMode( _windowDragMode->currentIndex() ); + StyleConfigData::setMenuOpacity( _menuOpacity->value() ); #if BREEZE_USE_KDE4 StyleConfigData::self()->writeConfig(); @@ -147,6 +149,7 @@ namespace Breeze else if( _animationsEnabled->isChecked() != StyleConfigData::animationsEnabled() ) modified = true; else if( _animationsDuration->value() != StyleConfigData::animationsDuration() ) modified = true; else if( _windowDragMode->currentIndex() != StyleConfigData::windowDragMode() ) modified = true; + else if( _menuOpacity->value() != StyleConfigData::menuOpacity() ) modified = true; emit changed(modified); @@ -171,6 +174,7 @@ namespace Breeze _animationsEnabled->setChecked( StyleConfigData::animationsEnabled() ); _animationsDuration->setValue( StyleConfigData::animationsDuration() ); _windowDragMode->setCurrentIndex( StyleConfigData::windowDragMode() ); + _menuOpacity->setValue( StyleConfigData::menuOpacity() ); } diff --git a/kstyle/config/ui/breezestyleconfig.ui b/kstyle/config/ui/breezestyleconfig.ui index ee33a114..30fb9131 100644 --- a/kstyle/config/ui/breezestyleconfig.ui +++ b/kstyle/config/ui/breezestyleconfig.ui @@ -6,10 +6,16 @@ 0 0 - 522 - 257 + 562 + 264 + + + 0 + 0 + + 0 @@ -177,7 +183,7 @@ false - Anima&tions duration: + A&nimations duration: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -380,6 +386,140 @@ + + + Transparency + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Transparent + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Opaque + + + + + + + + + + + Menu: + + + + + + + 0 + + + 100 + + + 1 + + + 10 + + + 100 + + + Qt::Horizontal + + + false + + + false + + + QSlider::TicksBelow + + + 10 + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 542 + 20 + + + + + +