blur transparent 24bit windows
also stretch blur opacity a bit (ie. slightly transparent windows get more blur compared to their opacity) REVIEW: 124148
This commit is contained in:
parent
9139cca72c
commit
0c71d514ce
1 changed files with 9 additions and 2 deletions
|
@ -385,7 +385,7 @@ bool BlurEffect::shouldBlur(const EffectWindow *w, int mask, const WindowPaintDa
|
||||||
bool blurBehindDecos = effects->decorationsHaveAlpha() &&
|
bool blurBehindDecos = effects->decorationsHaveAlpha() &&
|
||||||
effects->decorationSupportsBlurBehind();
|
effects->decorationSupportsBlurBehind();
|
||||||
|
|
||||||
if (!w->hasAlpha() && !(blurBehindDecos && w->hasDecoration()))
|
if (!w->hasAlpha() && w->opacity() >= 1.0 && !(blurBehindDecos && w->hasDecoration()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -479,7 +479,14 @@ void BlurEffect::doBlur(const QRegion& shape, const QRect& screen, const float o
|
||||||
// Modulate the blurred texture with the window opacity if the window isn't opaque
|
// Modulate the blurred texture with the window opacity if the window isn't opaque
|
||||||
if (opacity < 1.0) {
|
if (opacity < 1.0) {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendColor(0, 0, 0, opacity);
|
#if 1 // bow shape, always above y = x
|
||||||
|
float o = 1.0f-opacity;
|
||||||
|
o = 1.0f - o*o;
|
||||||
|
#else // sigmoid shape, above y = x for x > 0.5, below y = x for x < 0.5
|
||||||
|
float o = 2.0f*opacity - 1.0f;
|
||||||
|
o = 0.5f + o / (1.0f + qAbs(o));
|
||||||
|
#endif
|
||||||
|
glBlendColor(0, 0, 0, o);
|
||||||
glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);
|
glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue