diff --git a/kdecoration/breezedecoration.cpp b/kdecoration/breezedecoration.cpp index 5842b0bd..7af1abec 100644 --- a/kdecoration/breezedecoration.cpp +++ b/kdecoration/breezedecoration.cpp @@ -568,7 +568,13 @@ namespace Breeze p.setCompositionMode(QPainter::CompositionMode_Source); // create gradient - auto gradientStopColor = [](QColor color, int alpha) { + + // gaussian delta function + auto alpha = [](qreal x) { return std::exp( -x*x/0.15 ); }; + + // color calculation delta function + auto gradientStopColor = [](QColor color, int alpha) + { color.setAlpha(alpha); return color; }; @@ -576,11 +582,13 @@ namespace Breeze const QColor shadowColor( m_colorSettings.palette().color( QPalette::Shadow ) ); QRadialGradient radialGradient( g_shadowSize, g_shadowSize, g_shadowSize); - radialGradient.setColorAt(0.0, gradientStopColor(shadowColor, g_shadowStrength)); - radialGradient.setColorAt(0.25, gradientStopColor(shadowColor, g_shadowStrength*0.25/0.35)); - radialGradient.setColorAt(0.5, gradientStopColor(shadowColor, g_shadowStrength*0.13/0.35)); - radialGradient.setColorAt(0.75, gradientStopColor(shadowColor, g_shadowStrength*0.04/0.35)); - radialGradient.setColorAt(1.0, gradientStopColor(shadowColor, g_shadowStrength*0.0/0.35)); + for( int i = 0; i < 10; ++i ) + { + const qreal x( qreal( i )/9 ); + radialGradient.setColorAt(x, gradientStopColor(shadowColor, alpha(x)*g_shadowStrength)); + } + + radialGradient.setColorAt(1, gradientStopColor( shadowColor, 0 ) ); // fill p.fillRect( image.rect(), radialGradient);