[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:
parent
45dd342cc0
commit
ff4ac0d02e
@ -322,7 +322,7 @@ AppIconMenu.prototype = {
|
||||
this._arrow = new Shell.DrawingArea();
|
||||
this._arrow.connect('redraw', Lang.bind(this, function (area, 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,
|
||||
APPICON_MENU_BACKGROUND_COLOR);
|
||||
}));
|
||||
|
@ -147,17 +147,14 @@ shell_draw_clock (ClutterCairoTexture *texture,
|
||||
}
|
||||
|
||||
void
|
||||
shell_draw_box_pointer (ClutterCairoTexture *texture,
|
||||
ClutterGravity pointing_towards,
|
||||
ClutterColor *border_color,
|
||||
ClutterColor *background_color)
|
||||
shell_draw_box_pointer (ClutterCairoTexture *texture,
|
||||
ShellPointerDirection direction,
|
||||
ClutterColor *border_color,
|
||||
ClutterColor *background_color)
|
||||
{
|
||||
guint width, height;
|
||||
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_clear (texture);
|
||||
@ -167,17 +164,34 @@ shell_draw_box_pointer (ClutterCairoTexture *texture,
|
||||
|
||||
clutter_cairo_set_source_color (cr, border_color);
|
||||
|
||||
if (pointing_towards == CLUTTER_GRAVITY_WEST)
|
||||
{
|
||||
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 */
|
||||
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);
|
||||
|
@ -13,10 +13,17 @@ ClutterCairoTexture *shell_create_vertical_gradient (ClutterColor *top,
|
||||
ClutterCairoTexture *shell_create_horizontal_gradient (ClutterColor *left,
|
||||
ClutterColor *right);
|
||||
|
||||
void shell_draw_box_pointer (ClutterCairoTexture *texture,
|
||||
ClutterGravity pointing_towards,
|
||||
ClutterColor *border_color,
|
||||
ClutterColor *background_color);
|
||||
typedef enum {
|
||||
SHELL_POINTER_UP,
|
||||
SHELL_POINTER_DOWN,
|
||||
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,
|
||||
int hour,
|
||||
|
Loading…
Reference in New Issue
Block a user