use gaussian for shadow profile

wilder-pre-rebase
Hugo Pereira Da Costa 11 years ago
parent c09aa719da
commit 419badba7d
  1. 20
      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);

Loading…
Cancel
Save