Move drawing functions from shell-global into new shell-drawing.c file
Just to avoid shell-global.c bloat.
This commit is contained in:
parent
0a1aac862f
commit
29ffa46d08
@ -497,11 +497,11 @@ WellDisplayItem.prototype = {
|
|||||||
if (this._windows.length > 0) {
|
if (this._windows.length > 0) {
|
||||||
let glow = new Shell.DrawingArea({});
|
let glow = new Shell.DrawingArea({});
|
||||||
glow.connect('redraw', Lang.bind(this, function (e, tex) {
|
glow.connect('redraw', Lang.bind(this, function (e, tex) {
|
||||||
Shell.Global.clutter_cairo_texture_draw_glow(tex,
|
Shell.draw_glow(tex,
|
||||||
GLOW_COLOR.red / 255,
|
GLOW_COLOR.red / 255,
|
||||||
GLOW_COLOR.green / 255,
|
GLOW_COLOR.green / 255,
|
||||||
GLOW_COLOR.blue / 255,
|
GLOW_COLOR.blue / 255,
|
||||||
GLOW_COLOR.alpha / 255);
|
GLOW_COLOR.alpha / 255);
|
||||||
}));
|
}));
|
||||||
this._name.connect('notify::allocation', Lang.bind(this, function (n, alloc) {
|
this._name.connect('notify::allocation', Lang.bind(this, function (n, alloc) {
|
||||||
let x = this._name.x;
|
let x = this._name.x;
|
||||||
|
@ -258,12 +258,12 @@ Dash.prototype = {
|
|||||||
|
|
||||||
dashPane.append(dashBackground, Big.BoxPackFlags.EXPAND);
|
dashPane.append(dashBackground, Big.BoxPackFlags.EXPAND);
|
||||||
|
|
||||||
let dashLeft = global.create_horizontal_gradient(DASH_LEFT_COLOR,
|
let dashLeft = Shell.create_horizontal_gradient(DASH_LEFT_COLOR,
|
||||||
DASH_MIDDLE_COLOR);
|
DASH_MIDDLE_COLOR);
|
||||||
let dashRight = global.create_horizontal_gradient(DASH_MIDDLE_COLOR,
|
let dashRight = Shell.create_horizontal_gradient(DASH_MIDDLE_COLOR,
|
||||||
DASH_RIGHT_COLOR);
|
DASH_RIGHT_COLOR);
|
||||||
let dashShadow = global.create_horizontal_gradient(SHADOW_COLOR,
|
let dashShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
|
||||||
TRANSPARENT_COLOR);
|
TRANSPARENT_COLOR);
|
||||||
dashShadow.set_width(SHADOW_WIDTH);
|
dashShadow.set_width(SHADOW_WIDTH);
|
||||||
|
|
||||||
dashBackground.append(dashLeft, Big.BoxPackFlags.EXPAND);
|
dashBackground.append(dashLeft, Big.BoxPackFlags.EXPAND);
|
||||||
@ -424,12 +424,12 @@ Dash.prototype = {
|
|||||||
border_color: DASH_BORDER_COLOR });
|
border_color: DASH_BORDER_COLOR });
|
||||||
this._resultsPane.add_actor(resultsBackground);
|
this._resultsPane.add_actor(resultsBackground);
|
||||||
|
|
||||||
let resultsLeft = global.create_horizontal_gradient(PANE_LEFT_COLOR,
|
let resultsLeft = Shell.create_horizontal_gradient(PANE_LEFT_COLOR,
|
||||||
PANE_MIDDLE_COLOR);
|
PANE_MIDDLE_COLOR);
|
||||||
let resultsRight = global.create_horizontal_gradient(PANE_MIDDLE_COLOR,
|
let resultsRight = Shell.create_horizontal_gradient(PANE_MIDDLE_COLOR,
|
||||||
PANE_RIGHT_COLOR);
|
PANE_RIGHT_COLOR);
|
||||||
let resultsShadow = global.create_horizontal_gradient(SHADOW_COLOR,
|
let resultsShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
|
||||||
TRANSPARENT_COLOR);
|
TRANSPARENT_COLOR);
|
||||||
resultsShadow.set_width(SHADOW_WIDTH);
|
resultsShadow.set_width(SHADOW_WIDTH);
|
||||||
|
|
||||||
resultsBackground.append(resultsLeft, Big.BoxPackFlags.EXPAND);
|
resultsBackground.append(resultsLeft, Big.BoxPackFlags.EXPAND);
|
||||||
@ -460,12 +460,12 @@ Dash.prototype = {
|
|||||||
|
|
||||||
this._detailsPane.append(detailsBackground, Big.BoxPackFlags.EXPAND);
|
this._detailsPane.append(detailsBackground, Big.BoxPackFlags.EXPAND);
|
||||||
|
|
||||||
let detailsLeft = global.create_horizontal_gradient(PANE_LEFT_COLOR,
|
let detailsLeft = Shell.create_horizontal_gradient(PANE_LEFT_COLOR,
|
||||||
PANE_MIDDLE_COLOR);
|
PANE_MIDDLE_COLOR);
|
||||||
let detailsRight = global.create_horizontal_gradient(PANE_MIDDLE_COLOR,
|
let detailsRight = Shell.create_horizontal_gradient(PANE_MIDDLE_COLOR,
|
||||||
PANE_RIGHT_COLOR);
|
PANE_RIGHT_COLOR);
|
||||||
let detailsShadow = global.create_horizontal_gradient(SHADOW_COLOR,
|
let detailsShadow = Shell.create_horizontal_gradient(SHADOW_COLOR,
|
||||||
TRANSPARENT_COLOR);
|
TRANSPARENT_COLOR);
|
||||||
detailsShadow.set_width(SHADOW_WIDTH);
|
detailsShadow.set_width(SHADOW_WIDTH);
|
||||||
|
|
||||||
detailsBackground.append(detailsLeft, Big.BoxPackFlags.EXPAND);
|
detailsBackground.append(detailsLeft, Big.BoxPackFlags.EXPAND);
|
||||||
|
@ -162,9 +162,9 @@ ClockWidget.prototype = {
|
|||||||
|
|
||||||
_updateCairo: function(time) {
|
_updateCairo: function(time) {
|
||||||
let global = Shell.Global.get();
|
let global = Shell.Global.get();
|
||||||
global.clutter_cairo_texture_draw_clock(this.collapsedActor,
|
Shell.draw_clock(this.collapsedActor,
|
||||||
time.getHours() % 12,
|
time.getHours() % 12,
|
||||||
time.getMinutes());
|
time.getMinutes());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-app-system.h \
|
shell-app-system.h \
|
||||||
shell-arrow.c \
|
shell-arrow.c \
|
||||||
shell-arrow.h \
|
shell-arrow.h \
|
||||||
|
shell-drawing.c \
|
||||||
|
shell-drawing.h \
|
||||||
shell-drawing-area.c \
|
shell-drawing-area.c \
|
||||||
shell-drawing-area.h \
|
shell-drawing-area.h \
|
||||||
shell-embedded-window.c \
|
shell-embedded-window.c \
|
||||||
|
180
src/shell-drawing.c
Normal file
180
src/shell-drawing.c
Normal file
@ -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);
|
||||||
|
}
|
28
src/shell-drawing.h
Normal file
28
src/shell-drawing.h
Normal file
@ -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__ */
|
@ -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_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
|
* Updates the global->root_pixmap actor with the root window's pixmap or fails
|
||||||
* with a warning.
|
* with a warning.
|
||||||
@ -1104,84 +1008,3 @@ shell_global_get_max_word_width (ShellGlobal *global, ClutterActor *ref, const c
|
|||||||
g_strfreev (components);
|
g_strfreev (components);
|
||||||
return (guint)max;
|
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);
|
|
||||||
}
|
|
||||||
|
@ -71,28 +71,12 @@ void shell_global_ungrab_keyboard (ShellGlobal *global);
|
|||||||
|
|
||||||
void shell_global_reexec_self (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);
|
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);
|
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);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_H__ */
|
#endif /* __SHELL_GLOBAL_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user