shell-drawing: remove shell_draw_box_pointer()

This was originally done in C because it used cairo, but that can be
done from JS now. Since it was only used by altTab.js, move it there.

https://bugzilla.gnome.org/show_bug.cgi?id=642059
This commit is contained in:
Dan Winship 2011-02-10 14:41:24 -05:00
parent f211681d6c
commit 0c0e2cc689
3 changed files with 48 additions and 80 deletions

View File

@ -527,16 +527,11 @@ SwitcherList.prototype = {
this._leftArrow = new St.DrawingArea({ style_class: 'switcher-arrow',
pseudo_class: 'highlighted' });
this._leftArrow.connect('repaint', Lang.bind(this,
function (area) {
Shell.draw_box_pointer(area, Shell.PointerDirection.LEFT);
}));
function() { _drawArrow(this._leftArrow, St.Side.LEFT); }));
this._rightArrow = new St.DrawingArea({ style_class: 'switcher-arrow',
pseudo_class: 'highlighted' });
this._rightArrow.connect('repaint', Lang.bind(this,
function (area) {
Shell.draw_box_pointer(area, Shell.PointerDirection.RIGHT);
}));
function() { _drawArrow(this._rightArrow, St.Side.RIGHT); }));
this.actor.add_actor(this._leftArrow);
this.actor.add_actor(this._rightArrow);
@ -992,10 +987,7 @@ AppSwitcher.prototype = {
let n = this._arrows.length;
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
arrow.connect('repaint', Lang.bind(this,
function (area) {
Shell.draw_box_pointer(area, Shell.PointerDirection.DOWN);
}));
arrow.connect('repaint', function() { _drawArrow(arrow, St.Side.BOTTOM); });
this._list.add_actor(arrow);
this._arrows.push(arrow);
@ -1101,3 +1093,48 @@ ThumbnailList.prototype = {
this._thumbnailBins = new Array();
}
};
function _drawArrow(area, side) {
let themeNode = area.get_theme_node();
let borderColor = new Clutter.Color();
themeNode.get_border_color(side, borderColor);
let bodyColor = new Clutter.Color();
themeNode.get_foreground_color(bodyColor);
let [width, height] = area.get_surface_size ();
let cr = area.get_context();
cr.setLineWidth(1.0);
Clutter.cairo_set_source_color(cr, borderColor);
switch (side) {
case St.Side.TOP:
cr.moveTo(0, height);
cr.lineTo(Math.floor(width * 0.5), 0);
cr.lineTo(width, height);
break;
case St.Side.BOTTOM:
cr.moveTo(width, 0);
cr.lineTo(Math.floor(width * 0.5), height);
cr.lineTo(0, 0);
break;
case St.Side.LEFT:
cr.moveTo(width, height);
cr.lineTo(0, Math.floor(height * 0.5));
cr.lineTo(width, 0);
break;
case St.Side.RIGHT:
cr.moveTo(0, 0);
cr.lineTo(width, Math.floor(height * 0.5));
cr.lineTo(0, height);
break;
}
cr.strokePreserve();
Clutter.cairo_set_source_color(cr, bodyColor);
cr.fill();
}

View File

@ -48,61 +48,3 @@ shell_draw_clock (StDrawingArea *area,
yc + minute_radius * sin (angle));
cairo_stroke (cr);
}
void
shell_draw_box_pointer (StDrawingArea *area,
ShellPointerDirection direction)
{
StThemeNode *theme_node;
ClutterColor border_color, body_color;
guint width, height;
cairo_t *cr;
theme_node = st_widget_get_theme_node (ST_WIDGET (area));
st_theme_node_get_border_color (theme_node, (StSide)direction, &border_color);
st_theme_node_get_foreground_color (theme_node, &body_color);
st_drawing_area_get_surface_size (area, &width, &height);
cr = st_drawing_area_get_context (area);
cairo_set_line_width (cr, 1.0);
clutter_cairo_set_source_color (cr, &border_color);
switch (direction)
{
case SHELL_POINTER_UP:
cairo_move_to (cr, 0, height);
cairo_line_to (cr, floor (width * 0.5), 0);
cairo_line_to (cr, width, height);
break;
case SHELL_POINTER_DOWN:
cairo_move_to (cr, width, 0);
cairo_line_to (cr, floor (width * 0.5), height);
cairo_line_to (cr, 0, 0);
break;
case SHELL_POINTER_LEFT:
cairo_move_to (cr, width, height);
cairo_line_to (cr, 0, floor (height * 0.5));
cairo_line_to (cr, width, 0);
break;
case SHELL_POINTER_RIGHT:
cairo_move_to (cr, 0, 0);
cairo_line_to (cr, width, floor (height * 0.5));
cairo_line_to (cr, 0, height);
break;
default:
g_assert_not_reached();
}
cairo_stroke_preserve (cr);
clutter_cairo_set_source_color (cr, &body_color);
cairo_fill (cr);
}

View File

@ -8,17 +8,6 @@
G_BEGIN_DECLS
/* Note that these correspond to StSide */
typedef enum {
SHELL_POINTER_UP,
SHELL_POINTER_RIGHT,
SHELL_POINTER_DOWN,
SHELL_POINTER_LEFT
} ShellPointerDirection;
void shell_draw_box_pointer (StDrawingArea *area,
ShellPointerDirection direction);
void shell_draw_clock (StDrawingArea *area,
int hour,
int minute);