[gnome-shell] windowManager: Incorporate invisible borders into window dimming effect
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] windowManager: Incorporate invisible borders into window dimming effect
- Date: Mon, 19 Sep 2011 16:40:24 +0000 (UTC)
commit 127ef8383b22c7ee96e510fbbdaa2d3ab8fb313c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sat Sep 17 15:56:59 2011 -0400
windowManager: Incorporate invisible borders into window dimming effect
Without this, the dim "fade" will start at the top of the untrimmed actor. With
a large enough draggable_border_width setting, this will show no fade at all.
https://bugzilla.gnome.org/show_bug.cgi?id=659302
data/shaders/dim-window.glsl | 8 +++++---
js/ui/windowManager.js | 26 +++++++++++++++++---------
2 files changed, 22 insertions(+), 12 deletions(-)
---
diff --git a/data/shaders/dim-window.glsl b/data/shaders/dim-window.glsl
index 2c95022..5f9ad9c 100644
--- a/data/shaders/dim-window.glsl
+++ b/data/shaders/dim-window.glsl
@@ -1,5 +1,6 @@
#version 110
uniform sampler2D tex;
+uniform float startY;
uniform float fraction;
uniform float height;
const float c = -0.2;
@@ -18,10 +19,11 @@ void main()
// To reduce contrast, blend with a mid gray
cogl_color_out = color * contrast - off * c;
- // We only fully dim at a distance of BORDER_MAX_HEIGHT from the edge and
+ // We only fully dim at a distance of BORDER_MAX_HEIGHT from startY and
// when the fraction is 1.0. For other locations and fractions we linearly
- // interpolate back to the original undimmed color.
- cogl_color_out = color + (cogl_color_out - color) * min(y / border_max_height, 1.0);
+ // interpolate back to the original undimmed color, so the top of the window
+ // is at full color.
+ cogl_color_out = color + (cogl_color_out - color) * max(min((y - startY) / border_max_height, 1.0), 0.0);
cogl_color_out = color + (cogl_color_out - color) * fraction;
cogl_color_out *= color.a;
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 48276fe..2ca6deb 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -25,15 +25,22 @@ function getDimShaderSource() {
return dimShader;
}
-function WindowDimmer(actor) {
- this._init(actor);
+function getTopInvisibleBorder(metaWindow) {
+ let outerRect = metaWindow.get_outer_rect();
+ let inputRect = metaWindow.get_input_rect();
+ return outerRect.y - inputRect.y;
+}
+
+function WindowDimmer(actor, window) {
+ this._init(actor, window);
}
WindowDimmer.prototype = {
- _init: function(actor) {
+ _init: function(actor, window) {
this.effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
this.effect.set_shader_source(getDimShaderSource());
+ this.window = window;
this.actor = actor;
},
@@ -45,6 +52,7 @@ WindowDimmer.prototype = {
}
if (fraction > 0.01) {
+ Shell.shader_effect_set_double_uniform(this.effect, 'startY', getTopInvisibleBorder(this.window));
Shell.shader_effect_set_double_uniform(this.effect, 'height', this.actor.get_height());
Shell.shader_effect_set_double_uniform(this.effect, 'fraction', fraction);
@@ -63,9 +71,9 @@ WindowDimmer.prototype = {
_dimFraction: 0.0
};
-function getWindowDimmer(texture) {
+function getWindowDimmer(texture, window) {
if (!texture._windowDimmer)
- texture._windowDimmer = new WindowDimmer(texture);
+ texture._windowDimmer = new WindowDimmer(texture, window);
return texture._windowDimmer;
}
@@ -264,13 +272,13 @@ WindowManager.prototype = {
return;
let texture = actor.get_texture();
if (animate)
- Tweener.addTween(getWindowDimmer(texture),
+ Tweener.addTween(getWindowDimmer(texture, window),
{ dimFraction: 1.0,
time: DIM_TIME,
transition: 'linear'
});
else
- getWindowDimmer(texture).dimFraction = 1.0;
+ getWindowDimmer(texture, window).dimFraction = 1.0;
},
_undimWindow: function(window, animate) {
@@ -279,13 +287,13 @@ WindowManager.prototype = {
return;
let texture = actor.get_texture();
if (animate)
- Tweener.addTween(getWindowDimmer(texture),
+ Tweener.addTween(getWindowDimmer(texture, window),
{ dimFraction: 0.0,
time: UNDIM_TIME,
transition: 'linear'
});
else
- getWindowDimmer(texture).dimFraction = 0.0;
+ getWindowDimmer(texture, window).dimFraction = 0.0;
},
_mapWindow : function(shellwm, actor) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]