[gnome-shell] Move drawing functions from shell-global into new shell-drawing.c file
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] Move drawing functions from shell-global into new shell-drawing.c file
- Date: Fri, 31 Jul 2009 21:27:11 +0000 (UTC)
commit 29ffa46d08c868c2d8cf76e6a69cd65faa666570
Author: Colin Walters <walters verbum org>
Date: Fri Jul 31 16:32:24 2009 -0400
Move drawing functions from shell-global into new shell-drawing.c file
Just to avoid shell-global.c bloat.
js/ui/appDisplay.js | 10 ++--
js/ui/overlay.js | 36 +++++-----
js/ui/widget.js | 6 +-
src/Makefile.am | 2 +
src/shell-drawing.c | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++
src/shell-drawing.h | 28 ++++++++
src/shell-global.c | 177 --------------------------------------------------
src/shell-global.h | 16 -----
8 files changed, 236 insertions(+), 219 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index a790e3f..9ecfc11 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -497,11 +497,11 @@ WellDisplayItem.prototype = {
if (this._windows.length > 0) {
let glow = new Shell.DrawingArea({});
glow.connect('redraw', Lang.bind(this, function (e, tex) {
- Shell.Global.clutter_cairo_texture_draw_glow(tex,
- GLOW_COLOR.red / 255,
- GLOW_COLOR.green / 255,
- GLOW_COLOR.blue / 255,
- GLOW_COLOR.alpha / 255);
+ Shell.draw_glow(tex,
+ 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 (n, alloc) {
let x = this._name.x;
diff --git a/js/ui/overlay.js b/js/ui/overlay.js
index b2156af..f0ea2e7 100644
--- a/js/ui/overlay.js
+++ b/js/ui/overlay.js
@@ -258,12 +258,12 @@ Dash.prototype = {
dashPane.append(dashBackground, Big.BoxPackFlags.EXPAND);
- let dashLeft = global.create_horizontal_gradient(DASH_LEFT_COLOR,
- DASH_MIDDLE_COLOR);
- let dashRight = global.create_horizontal_gradient(DASH_MIDDLE_COLOR,
- DASH_RIGHT_COLOR);
- let dashShadow = global.create_horizontal_gradient(SHADOW_COLOR,
- TRANSPARENT_COLOR);
+ let dashLeft = Shell.create_horizontal_gradient(DASH_LEFT_COLOR,
+ DASH_MIDDLE_COLOR);
+ let dashRight = Shell.create_horizontal_gradient(DASH_MIDDLE_COLOR,
+ DASH_RIGHT_COLOR);
+ let dashShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
+ TRANSPARENT_COLOR);
dashShadow.set_width(SHADOW_WIDTH);
dashBackground.append(dashLeft, Big.BoxPackFlags.EXPAND);
@@ -424,12 +424,12 @@ Dash.prototype = {
border_color: DASH_BORDER_COLOR });
this._resultsPane.add_actor(resultsBackground);
- let resultsLeft = global.create_horizontal_gradient(PANE_LEFT_COLOR,
- PANE_MIDDLE_COLOR);
- let resultsRight = global.create_horizontal_gradient(PANE_MIDDLE_COLOR,
- PANE_RIGHT_COLOR);
- let resultsShadow = global.create_horizontal_gradient(SHADOW_COLOR,
- TRANSPARENT_COLOR);
+ let resultsLeft = Shell.create_horizontal_gradient(PANE_LEFT_COLOR,
+ PANE_MIDDLE_COLOR);
+ let resultsRight = Shell.create_horizontal_gradient(PANE_MIDDLE_COLOR,
+ PANE_RIGHT_COLOR);
+ let resultsShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
+ TRANSPARENT_COLOR);
resultsShadow.set_width(SHADOW_WIDTH);
resultsBackground.append(resultsLeft, Big.BoxPackFlags.EXPAND);
@@ -460,12 +460,12 @@ Dash.prototype = {
this._detailsPane.append(detailsBackground, Big.BoxPackFlags.EXPAND);
- let detailsLeft = global.create_horizontal_gradient(PANE_LEFT_COLOR,
- PANE_MIDDLE_COLOR);
- let detailsRight = global.create_horizontal_gradient(PANE_MIDDLE_COLOR,
- PANE_RIGHT_COLOR);
- let detailsShadow = global.create_horizontal_gradient(SHADOW_COLOR,
- TRANSPARENT_COLOR);
+ let detailsLeft = Shell.create_horizontal_gradient(PANE_LEFT_COLOR,
+ PANE_MIDDLE_COLOR);
+ let detailsRight = Shell.create_horizontal_gradient(PANE_MIDDLE_COLOR,
+ PANE_RIGHT_COLOR);
+ let detailsShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
+ TRANSPARENT_COLOR);
detailsShadow.set_width(SHADOW_WIDTH);
detailsBackground.append(detailsLeft, Big.BoxPackFlags.EXPAND);
diff --git a/js/ui/widget.js b/js/ui/widget.js
index 4445aba..e5006d1 100644
--- a/js/ui/widget.js
+++ b/js/ui/widget.js
@@ -162,9 +162,9 @@ ClockWidget.prototype = {
_updateCairo: function(time) {
let global = Shell.Global.get();
- global.clutter_cairo_texture_draw_clock(this.collapsedActor,
- time.getHours() % 12,
- time.getMinutes());
+ Shell.draw_clock(this.collapsedActor,
+ time.getHours() % 12,
+ time.getMinutes());
}
};
diff --git a/src/Makefile.am b/src/Makefile.am
index 8a7eae6..8bc6bd3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -58,6 +58,8 @@ libgnome_shell_la_SOURCES = \
shell-app-system.h \
shell-arrow.c \
shell-arrow.h \
+ shell-drawing.c \
+ shell-drawing.h \
shell-drawing-area.c \
shell-drawing-area.h \
shell-embedded-window.c \
diff --git a/src/shell-drawing.c b/src/shell-drawing.c
new file mode 100644
index 0000000..58617bd
--- /dev/null
+++ b/src/shell-drawing.c
@@ -0,0 +1,180 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+#include "shell-drawing.h"
+#include <math.h>
+
+/**
+ * shell_create_vertical_gradient:
+ * @top: the color at the top
+ * @bottom: the color at the bottom
+ *
+ * Creates a vertical gradient actor.
+ *
+ * Return value: (transfer none): a #ClutterCairoTexture actor with the
+ * gradient. The texture actor is floating, hence (transfer none).
+ */
+ClutterCairoTexture *
+shell_create_vertical_gradient (ClutterColor *top,
+ ClutterColor *bottom)
+{
+ ClutterCairoTexture *texture;
+ cairo_t *cr;
+ cairo_pattern_t *pattern;
+
+ /* Draw the gradient on an 8x8 pixel texture. Because the gradient is drawn
+ * from the uppermost to the lowermost row, after stretching 1/16 of the
+ * texture height has the top color and 1/16 has the bottom color. The 8
+ * pixel width is chosen for reasons related to graphics hardware internals.
+ */
+ texture = CLUTTER_CAIRO_TEXTURE (clutter_cairo_texture_new (8, 8));
+ cr = clutter_cairo_texture_create (texture);
+
+ pattern = cairo_pattern_create_linear (0, 0, 0, 8);
+ cairo_pattern_add_color_stop_rgba (pattern, 0,
+ top->red / 255.,
+ top->green / 255.,
+ top->blue / 255.,
+ top->alpha / 255.);
+ cairo_pattern_add_color_stop_rgba (pattern, 1,
+ bottom->red / 255.,
+ bottom->green / 255.,
+ bottom->blue / 255.,
+ bottom->alpha / 255.);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+
+ cairo_pattern_destroy (pattern);
+ cairo_destroy (cr);
+
+ return texture;
+}
+
+/**
+ * shell_create_horizontal_gradient:
+ * @left: the color on the left
+ * @right: the color on the right
+ *
+ * Creates a horizontal gradient actor.
+ *
+ * Return value: (transfer none): a #ClutterCairoTexture actor with the
+ * gradient. The texture actor is floating, hence (transfer none).
+ */
+ClutterCairoTexture *
+shell_create_horizontal_gradient (ClutterColor *left,
+ ClutterColor *right)
+{
+ ClutterCairoTexture *texture;
+ cairo_t *cr;
+ cairo_pattern_t *pattern;
+
+ /* Draw the gradient on an 8x1 pixel texture. Because the gradient is drawn
+ * from the left to the right column, after stretching 1/16 of the
+ * texture width has the left side color and 1/16 has the right side color.
+ * There is no reason to use the 8 pixel height that would be similar to the
+ * reason we are using the 8 pixel width for the vertical gradient, so we
+ * are just using the 1 pixel height instead.
+ */
+ texture = CLUTTER_CAIRO_TEXTURE (clutter_cairo_texture_new (8, 1));
+ cr = clutter_cairo_texture_create (texture);
+
+ pattern = cairo_pattern_create_linear (0, 0, 8, 0);
+ cairo_pattern_add_color_stop_rgba (pattern, 0,
+ left->red / 255.,
+ left->green / 255.,
+ left->blue / 255.,
+ left->alpha / 255.);
+ cairo_pattern_add_color_stop_rgba (pattern, 1,
+ right->red / 255.,
+ right->green / 255.,
+ right->blue / 255.,
+ right->alpha / 255.);
+
+ cairo_set_source (cr, pattern);
+ cairo_paint (cr);
+
+ cairo_pattern_destroy (pattern);
+ cairo_destroy (cr);
+
+ return texture;
+}
+
+void
+shell_draw_clock (ClutterCairoTexture *texture,
+ int hour,
+ int minute)
+{
+ cairo_t *cr;
+ guint width, height;
+ double xc, yc, radius, hour_radius, minute_radius;
+ double angle;
+
+ clutter_cairo_texture_get_surface_size (texture, &width, &height);
+ xc = (double)width / 2;
+ yc = (double)height / 2;
+ radius = (double)(MIN(width, height)) / 2 - 2;
+ minute_radius = radius - 3;
+ hour_radius = radius / 2;
+
+ clutter_cairo_texture_clear (texture);
+ cr = clutter_cairo_texture_create (texture);
+ cairo_set_line_width (cr, 1.0);
+
+ /* Outline */
+ cairo_arc (cr, xc, yc, radius, 0.0, 2.0 * M_PI);
+ cairo_stroke (cr);
+
+ /* Hour hand. (We add a fraction to @hour for the minutes, then
+ * convert to radians, and then subtract pi/2 because cairo's origin
+ * is at 3:00, not 12:00.)
+ */
+ angle = ((hour + minute / 60.0) / 12.0) * 2.0 * M_PI - M_PI / 2.0;
+ cairo_move_to (cr, xc, yc);
+ cairo_line_to (cr,
+ xc + hour_radius * cos (angle),
+ yc + hour_radius * sin (angle));
+ cairo_stroke (cr);
+
+ /* Minute hand */
+ angle = (minute / 60.0) * 2.0 * M_PI - M_PI / 2.0;
+ cairo_move_to (cr, xc, yc);
+ cairo_line_to (cr,
+ xc + minute_radius * cos (angle),
+ yc + minute_radius * sin (angle));
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+}
+
+void
+shell_draw_glow (ClutterCairoTexture *texture,
+ 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);
+ cairo_pattern_add_color_stop_rgba (gradient, 0.7, red, green, blue, alpha * 0.7);
+ cairo_pattern_add_color_stop_rgba (gradient, 1.0, red, green, blue, alpha * 0.3);
+ cairo_set_source (cr, gradient);
+
+ 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);
+ cairo_destroy (cr);
+}
diff --git a/src/shell-drawing.h b/src/shell-drawing.h
new file mode 100644
index 0000000..78c4fcf
--- /dev/null
+++ b/src/shell-drawing.h
@@ -0,0 +1,28 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+#ifndef __SHELL_DRAWING_H__
+#define __SHELL_DRAWING_H__
+
+#include <clutter/clutter.h>
+
+G_BEGIN_DECLS
+
+ClutterCairoTexture *shell_create_vertical_gradient (ClutterColor *top,
+ ClutterColor *bottom);
+
+ClutterCairoTexture *shell_create_horizontal_gradient (ClutterColor *left,
+ ClutterColor *right);
+
+void shell_draw_clock (ClutterCairoTexture *texture,
+ int hour,
+ int minute);
+
+void shell_draw_glow (ClutterCairoTexture *texture,
+ double red,
+ double blue,
+ double green,
+ double alpha);
+
+G_END_DECLS
+
+#endif /* __SHELL_GLOBAL_H__ */
diff --git a/src/shell-global.c b/src/shell-global.c
index 575956c..03ac1e9 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -785,102 +785,6 @@ grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
shell_global_set_stage_input_mode (global, global->input_mode);
}
-/**
- * shell_global_create_vertical_gradient:
- * @top: the color at the top
- * @bottom: the color at the bottom
- *
- * Creates a vertical gradient actor.
- *
- * Return value: (transfer none): a #ClutterCairoTexture actor with the
- * gradient. The texture actor is floating, hence (transfer none).
- */
-ClutterCairoTexture *
-shell_global_create_vertical_gradient (ClutterColor *top,
- ClutterColor *bottom)
-{
- ClutterCairoTexture *texture;
- cairo_t *cr;
- cairo_pattern_t *pattern;
-
- /* Draw the gradient on an 8x8 pixel texture. Because the gradient is drawn
- * from the uppermost to the lowermost row, after stretching 1/16 of the
- * texture height has the top color and 1/16 has the bottom color. The 8
- * pixel width is chosen for reasons related to graphics hardware internals.
- */
- texture = CLUTTER_CAIRO_TEXTURE (clutter_cairo_texture_new (8, 8));
- cr = clutter_cairo_texture_create (texture);
-
- pattern = cairo_pattern_create_linear (0, 0, 0, 8);
- cairo_pattern_add_color_stop_rgba (pattern, 0,
- top->red / 255.,
- top->green / 255.,
- top->blue / 255.,
- top->alpha / 255.);
- cairo_pattern_add_color_stop_rgba (pattern, 1,
- bottom->red / 255.,
- bottom->green / 255.,
- bottom->blue / 255.,
- bottom->alpha / 255.);
-
- cairo_set_source (cr, pattern);
- cairo_paint (cr);
-
- cairo_pattern_destroy (pattern);
- cairo_destroy (cr);
-
- return texture;
-}
-
-/**
- * shell_global_create_horizontal_gradient:
- * @left: the color on the left
- * @right: the color on the right
- *
- * Creates a horizontal gradient actor.
- *
- * Return value: (transfer none): a #ClutterCairoTexture actor with the
- * gradient. The texture actor is floating, hence (transfer none).
- */
-ClutterCairoTexture *
-shell_global_create_horizontal_gradient (ClutterColor *left,
- ClutterColor *right)
-{
- ClutterCairoTexture *texture;
- cairo_t *cr;
- cairo_pattern_t *pattern;
-
- /* Draw the gradient on an 8x1 pixel texture. Because the gradient is drawn
- * from the left to the right column, after stretching 1/16 of the
- * texture width has the left side color and 1/16 has the right side color.
- * There is no reason to use the 8 pixel height that would be similar to the
- * reason we are using the 8 pixel width for the vertical gradient, so we
- * are just using the 1 pixel height instead.
- */
- texture = CLUTTER_CAIRO_TEXTURE (clutter_cairo_texture_new (8, 1));
- cr = clutter_cairo_texture_create (texture);
-
- pattern = cairo_pattern_create_linear (0, 0, 8, 0);
- cairo_pattern_add_color_stop_rgba (pattern, 0,
- left->red / 255.,
- left->green / 255.,
- left->blue / 255.,
- left->alpha / 255.);
- cairo_pattern_add_color_stop_rgba (pattern, 1,
- right->red / 255.,
- right->green / 255.,
- right->blue / 255.,
- right->alpha / 255.);
-
- cairo_set_source (cr, pattern);
- cairo_paint (cr);
-
- cairo_pattern_destroy (pattern);
- cairo_destroy (cr);
-
- return texture;
-}
-
/*
* Updates the global->root_pixmap actor with the root window's pixmap or fails
* with a warning.
@@ -1104,84 +1008,3 @@ shell_global_get_max_word_width (ShellGlobal *global, ClutterActor *ref, const c
g_strfreev (components);
return (guint)max;
}
-
-void
-shell_global_clutter_cairo_texture_draw_clock (ClutterCairoTexture *texture,
- int hour,
- int minute)
-{
- cairo_t *cr;
- guint width, height;
- double xc, yc, radius, hour_radius, minute_radius;
- double angle;
-
- clutter_cairo_texture_get_surface_size (texture, &width, &height);
- xc = (double)width / 2;
- yc = (double)height / 2;
- radius = (double)(MIN(width, height)) / 2 - 2;
- minute_radius = radius - 3;
- hour_radius = radius / 2;
-
- clutter_cairo_texture_clear (texture);
- cr = clutter_cairo_texture_create (texture);
- cairo_set_line_width (cr, 1.0);
-
- /* Outline */
- cairo_arc (cr, xc, yc, radius, 0.0, 2.0 * M_PI);
- cairo_stroke (cr);
-
- /* Hour hand. (We add a fraction to @hour for the minutes, then
- * convert to radians, and then subtract pi/2 because cairo's origin
- * is at 3:00, not 12:00.)
- */
- angle = ((hour + minute / 60.0) / 12.0) * 2.0 * M_PI - M_PI / 2.0;
- cairo_move_to (cr, xc, yc);
- cairo_line_to (cr,
- xc + hour_radius * cos (angle),
- yc + hour_radius * sin (angle));
- cairo_stroke (cr);
-
- /* Minute hand */
- angle = (minute / 60.0) * 2.0 * M_PI - M_PI / 2.0;
- cairo_move_to (cr, xc, yc);
- cairo_line_to (cr,
- xc + minute_radius * cos (angle),
- yc + minute_radius * sin (angle));
- cairo_stroke (cr);
-
- cairo_destroy (cr);
-}
-
-
-void
-shell_global_clutter_cairo_texture_draw_glow (ClutterCairoTexture *texture,
- 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);
- cairo_pattern_add_color_stop_rgba (gradient, 0.7, red, green, blue, alpha * 0.7);
- cairo_pattern_add_color_stop_rgba (gradient, 1.0, red, green, blue, alpha * 0.3);
- cairo_set_source (cr, gradient);
-
- 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);
- cairo_destroy (cr);
-}
diff --git a/src/shell-global.h b/src/shell-global.h
index 52cd9ef..5d2c28d 100644
--- a/src/shell-global.h
+++ b/src/shell-global.h
@@ -71,28 +71,12 @@ void shell_global_ungrab_keyboard (ShellGlobal *global);
void shell_global_reexec_self (ShellGlobal *global);
-ClutterCairoTexture *shell_global_create_vertical_gradient (ClutterColor *top,
- ClutterColor *bottom);
-
-ClutterCairoTexture *shell_global_create_horizontal_gradient (ClutterColor *left,
- ClutterColor *right);
-
void shell_global_format_time_relative_pretty (ShellGlobal *global, guint delta, char **text, guint *update_time);
ClutterActor *shell_global_create_root_pixmap_actor (ShellGlobal *global);
guint shell_global_get_max_word_width (ShellGlobal *global, ClutterActor *ref, const char *text, const char *font);
-void shell_global_clutter_cairo_texture_draw_clock (ClutterCairoTexture *texture,
- int hour,
- int minute);
-
-void shell_global_clutter_cairo_texture_draw_glow (ClutterCairoTexture *texture,
- double red,
- double blue,
- double green,
- double alpha);
-
G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]