[gnome-shell] Implement the multi-window highlight on WellDisplayItem
- From: Dan Winship <danw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] Implement the multi-window highlight on WellDisplayItem
- Date: Wed, 12 Aug 2009 21:08:49 +0000 (UTC)
commit 4b47803162f4a692c6904a911200f224431d843d
Author: Dan Winship <danw gnome org>
Date: Wed Aug 12 15:53:42 2009 -0400
Implement the multi-window highlight on WellDisplayItem
js/ui/appDisplay.js | 15 ++++++-----
src/shell-drawing.c | 64 +++++++++++++++++++++++++++++++++++++++------------
src/shell-drawing.h | 11 ++++----
3 files changed, 63 insertions(+), 27 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 57d3608..cbc873d 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -487,11 +487,12 @@ WellDisplayItem.prototype = {
if (this._windows.length > 0) {
let glow = new Shell.DrawingArea({});
glow.connect('redraw', Lang.bind(this, function (e, tex) {
- Shell.draw_glow(tex,
- GLOW_COLOR.red / 255,
- GLOW_COLOR.green / 255,
- GLOW_COLOR.blue / 255,
- GLOW_COLOR.alpha / 255);
+ Shell.draw_app_highlight(tex,
+ this._windows.length > 1,
+ GLOW_COLOR.red / 255,
+ GLOW_COLOR.green / 255,
+ GLOW_COLOR.blue / 255,
+ GLOW_COLOR.alpha / 255);
}));
this._name.connect('notify::allocation', Lang.bind(this, function () {
let x = this._name.x;
@@ -764,10 +765,10 @@ AppWell.prototype = {
this._appSystem.connect('favorites-changed', Lang.bind(this, function(appSys) {
this._redisplay();
}));
- this._appMonitor.connect('app-added', Lang.bind(this, function(monitor) {
+ this._appMonitor.connect('window-added', Lang.bind(this, function(monitor) {
this._redisplay();
}));
- this._appMonitor.connect('app-removed', Lang.bind(this, function(monitor) {
+ this._appMonitor.connect('window-removed', Lang.bind(this, function(monitor) {
this._redisplay();
}));
diff --git a/src/shell-drawing.c b/src/shell-drawing.c
index daac1ee..9271790 100644
--- a/src/shell-drawing.c
+++ b/src/shell-drawing.c
@@ -146,25 +146,12 @@ shell_draw_clock (ClutterCairoTexture *texture,
cairo_destroy (cr);
}
-void
-shell_draw_glow (ClutterCairoTexture *texture,
- double red,
- double green,
- double blue,
- double alpha)
+static void
+draw_glow (cairo_t *cr, double red, double green, double blue, double alpha)
{
- cairo_t *cr;
- guint width, height;
cairo_pattern_t *gradient;
- clutter_cairo_texture_get_surface_size (texture, &width, &height);
-
- clutter_cairo_texture_clear (texture);
- cr = clutter_cairo_texture_create (texture);
-
cairo_save (cr);
- cairo_translate (cr, width / 2.0, height / 2.0);
- cairo_scale (cr, width / 2.0, height / 2.0);
gradient = cairo_pattern_create_radial (0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
cairo_pattern_add_color_stop_rgba (gradient, 0.0, red, green, blue, alpha);
@@ -174,8 +161,55 @@ shell_draw_glow (ClutterCairoTexture *texture,
cairo_arc (cr, 0.0, 0.0, 1.0, 0.0, 2.0 * M_PI);
cairo_fill (cr);
+
cairo_restore (cr);
cairo_pattern_destroy (gradient);
+}
+
+void
+shell_draw_app_highlight (ClutterCairoTexture *texture,
+ gboolean multi,
+ double red,
+ double green,
+ double blue,
+ double alpha)
+{
+ cairo_t *cr;
+ guint width, height;
+
+ clutter_cairo_texture_get_surface_size (texture, &width, &height);
+
+ clutter_cairo_texture_clear (texture);
+ cr = clutter_cairo_texture_create (texture);
+
+ cairo_save (cr);
+ cairo_translate (cr, width / 2.0, height / 2.0);
+
+ if (multi)
+ {
+ double scale;
+
+ /* We draw three circles of radius 1, at 0.0, -1.8, and +1.8.
+ * Total width is therefore 1 + 1.8 + 1.8 + 1 = 5.6.
+ */
+ scale = MIN (height / 2.0, width / 5.6);
+ cairo_scale (cr, scale, scale);
+
+ draw_glow (cr, red, green, blue, alpha);
+
+ cairo_translate (cr, -1.8, 0.0);
+ draw_glow (cr, red, green, blue, alpha);
+
+ cairo_translate (cr, 3.6, 0.0);
+ draw_glow (cr, red, green, blue, alpha);
+ }
+ else
+ {
+ cairo_scale (cr, width / 2.0, height / 2.0);
+ draw_glow (cr, red, green, blue, alpha);
+ }
+
+ cairo_restore (cr);
cairo_destroy (cr);
}
diff --git a/src/shell-drawing.h b/src/shell-drawing.h
index 04aa58a..0d73786 100644
--- a/src/shell-drawing.h
+++ b/src/shell-drawing.h
@@ -17,11 +17,12 @@ void shell_draw_clock (ClutterCairoTexture *texture,
int hour,
int minute);
-void shell_draw_glow (ClutterCairoTexture *texture,
- double red,
- double blue,
- double green,
- double alpha);
+void shell_draw_app_highlight (ClutterCairoTexture *texture,
+ gboolean multi,
+ double red,
+ double blue,
+ double green,
+ double alpha);
guint shell_add_hook_paint_red_border (ClutterActor *actor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]