[AppIcon] Improve shell_draw_box_pointer()

Add a new enum type for the pointer direction, rather than abusing
ClutterGravity, and implement the missing directions.

https://bugzilla.gnome.org/show_bug.cgi?id=597498
This commit is contained in:
Dan Winship 2009-10-04 11:37:11 -04:00
parent 45dd342cc0
commit ff4ac0d02e
3 changed files with 40 additions and 19 deletions

View File

@ -322,7 +322,7 @@ AppIconMenu.prototype = {
this._arrow = new Shell.DrawingArea(); this._arrow = new Shell.DrawingArea();
this._arrow.connect('redraw', Lang.bind(this, function (area, texture) { this._arrow.connect('redraw', Lang.bind(this, function (area, texture) {
Shell.draw_box_pointer(texture, Shell.draw_box_pointer(texture,
this._type == MenuType.ON_RIGHT ? Clutter.Gravity.WEST : Clutter.Gravity.NORTH, this._type == MenuType.ON_RIGHT ? Shell.PointerDirection.LEFT : Shell.PointerDirection.UP,
source.highlight_border_color, source.highlight_border_color,
APPICON_MENU_BACKGROUND_COLOR); APPICON_MENU_BACKGROUND_COLOR);
})); }));

View File

@ -147,17 +147,14 @@ shell_draw_clock (ClutterCairoTexture *texture,
} }
void void
shell_draw_box_pointer (ClutterCairoTexture *texture, shell_draw_box_pointer (ClutterCairoTexture *texture,
ClutterGravity pointing_towards, ShellPointerDirection direction,
ClutterColor *border_color, ClutterColor *border_color,
ClutterColor *background_color) ClutterColor *background_color)
{ {
guint width, height; guint width, height;
cairo_t *cr; cairo_t *cr;
g_return_if_fail (pointing_towards == CLUTTER_GRAVITY_NORTH ||
pointing_towards == CLUTTER_GRAVITY_WEST);
clutter_cairo_texture_get_surface_size (texture, &width, &height); clutter_cairo_texture_get_surface_size (texture, &width, &height);
clutter_cairo_texture_clear (texture); clutter_cairo_texture_clear (texture);
@ -167,17 +164,34 @@ shell_draw_box_pointer (ClutterCairoTexture *texture,
clutter_cairo_set_source_color (cr, border_color); clutter_cairo_set_source_color (cr, border_color);
if (pointing_towards == CLUTTER_GRAVITY_WEST) switch (direction)
{
cairo_move_to (cr, width, 0);
cairo_line_to (cr, 0, floor (height * 0.5));
cairo_line_to (cr, width, height);
}
else /* CLUTTER_GRAVITY_NORTH */
{ {
case SHELL_POINTER_UP:
cairo_move_to (cr, 0, height); cairo_move_to (cr, 0, height);
cairo_line_to (cr, floor (width * 0.5), 0); cairo_line_to (cr, floor (width * 0.5), 0);
cairo_line_to (cr, width, height); 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); cairo_stroke_preserve (cr);

View File

@ -13,10 +13,17 @@ ClutterCairoTexture *shell_create_vertical_gradient (ClutterColor *top,
ClutterCairoTexture *shell_create_horizontal_gradient (ClutterColor *left, ClutterCairoTexture *shell_create_horizontal_gradient (ClutterColor *left,
ClutterColor *right); ClutterColor *right);
void shell_draw_box_pointer (ClutterCairoTexture *texture, typedef enum {
ClutterGravity pointing_towards, SHELL_POINTER_UP,
ClutterColor *border_color, SHELL_POINTER_DOWN,
ClutterColor *background_color); SHELL_POINTER_LEFT,
SHELL_POINTER_RIGHT
} ShellPointerDirection;
void shell_draw_box_pointer (ClutterCairoTexture *texture,
ShellPointerDirection direction,
ClutterColor *border_color,
ClutterColor *background_color);
void shell_draw_clock (ClutterCairoTexture *texture, void shell_draw_clock (ClutterCairoTexture *texture,
int hour, int hour,