menu: port arrow rendering to use a GtkBuiltinIcon

At the same time, remove one spurious background/frame rendering, and
simplify the code a great deal.
This commit is contained in:
Cosimo Cecchi 2015-12-20 17:30:52 -08:00
parent 729801c2a1
commit 485c28d300
5 changed files with 131 additions and 181 deletions

View File

@ -109,6 +109,7 @@
#include "gtkaccelmap.h" #include "gtkaccelmap.h"
#include "gtkadjustment.h" #include "gtkadjustment.h"
#include "gtkbindings.h" #include "gtkbindings.h"
#include "gtkbuiltiniconprivate.h"
#include "gtkcheckmenuitem.h" #include "gtkcheckmenuitem.h"
#include "gtkcheckmenuitemprivate.h" #include "gtkcheckmenuitemprivate.h"
#include "gtkmain.h" #include "gtkmain.h"
@ -815,13 +816,16 @@ gtk_menu_class_init (GtkMenuClass *class)
* Arbitrary constant to scale down the size of the scroll arrow. * Arbitrary constant to scale down the size of the scroll arrow.
* *
* Since: 2.16 * Since: 2.16
*
* Deprecated: 3.20: use the standard min-width/min-height CSS properties on
* the arrow node; the value of this style property is ignored.
*/ */
gtk_widget_class_install_style_property (widget_class, gtk_widget_class_install_style_property (widget_class,
g_param_spec_float ("arrow-scaling", g_param_spec_float ("arrow-scaling",
P_("Arrow Scaling"), P_("Arrow Scaling"),
P_("Arbitrary constant to scale down the size of the scroll arrow"), P_("Arbitrary constant to scale down the size of the scroll arrow"),
0.0, 1.0, 0.7, 0.0, 1.0, 0.7,
GTK_PARAM_READABLE)); GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
binding_set = gtk_binding_set_by_class (class); binding_set = gtk_binding_set_by_class (class);
gtk_binding_entry_add_signal (binding_set, gtk_binding_entry_add_signal (binding_set,
@ -1106,22 +1110,11 @@ gtk_menu_window_event (GtkWidget *window,
return handled; return handled;
} }
static void
node_style_changed_cb (GtkCssNode *node,
GtkCssStyleChange *change,
GtkWidget *widget)
{
if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_CLIP))
gtk_widget_queue_resize (widget);
else
gtk_widget_queue_draw (widget);
}
static void static void
gtk_menu_init (GtkMenu *menu) gtk_menu_init (GtkMenu *menu)
{ {
GtkMenuPrivate *priv; GtkMenuPrivate *priv;
GtkCssNode *widget_node; GtkCssNode *top_arrow_node, *bottom_arrow_node, *widget_node;
priv = gtk_menu_get_instance_private (menu); priv = gtk_menu_get_instance_private (menu);
@ -1153,23 +1146,23 @@ gtk_menu_init (GtkMenu *menu)
_gtk_widget_set_captured_event_handler (GTK_WIDGET (menu), gtk_menu_captured_event); _gtk_widget_set_captured_event_handler (GTK_WIDGET (menu), gtk_menu_captured_event);
widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu)); widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu));
priv->top_arrow = gtk_css_node_new (); priv->top_arrow_gadget = gtk_builtin_icon_new ("arrow",
gtk_css_node_set_name (priv->top_arrow, I_("arrow")); GTK_WIDGET (menu),
gtk_css_node_add_class (priv->top_arrow, g_quark_from_static_string (GTK_STYLE_CLASS_TOP)); NULL, NULL);
gtk_css_node_set_parent (priv->top_arrow, widget_node); gtk_css_gadget_add_class (priv->top_arrow_gadget, GTK_STYLE_CLASS_TOP);
gtk_css_node_set_visible (priv->top_arrow, FALSE); top_arrow_node = gtk_css_gadget_get_node (priv->top_arrow_gadget);
gtk_css_node_set_state (priv->top_arrow, gtk_css_node_get_state (widget_node)); gtk_css_node_set_parent (top_arrow_node, widget_node);
g_signal_connect_object (priv->top_arrow, "style-changed", G_CALLBACK (node_style_changed_cb), menu, 0); gtk_css_node_set_visible (top_arrow_node, FALSE);
g_object_unref (priv->top_arrow); gtk_css_node_set_state (top_arrow_node, gtk_css_node_get_state (widget_node));
priv->bottom_arrow = gtk_css_node_new (); priv->bottom_arrow_gadget = gtk_builtin_icon_new ("arrow",
gtk_css_node_set_name (priv->bottom_arrow, I_("arrow")); GTK_WIDGET (menu),
gtk_css_node_add_class (priv->bottom_arrow, g_quark_from_static_string (GTK_STYLE_CLASS_BOTTOM)); NULL, NULL);
gtk_css_node_set_parent (priv->bottom_arrow, widget_node); gtk_css_gadget_add_class (priv->bottom_arrow_gadget, GTK_STYLE_CLASS_BOTTOM);
gtk_css_node_set_visible (priv->bottom_arrow, FALSE); bottom_arrow_node = gtk_css_gadget_get_node (priv->bottom_arrow_gadget);
gtk_css_node_set_state (priv->bottom_arrow, gtk_css_node_get_state (widget_node)); gtk_css_node_set_parent (bottom_arrow_node, widget_node);
g_signal_connect_object (priv->bottom_arrow, "style-changed", G_CALLBACK (node_style_changed_cb), menu, 0); gtk_css_node_set_visible (bottom_arrow_node, FALSE);
g_object_unref (priv->bottom_arrow); gtk_css_node_set_state (bottom_arrow_node, gtk_css_node_get_state (widget_node));
} }
static void static void
@ -1215,6 +1208,9 @@ gtk_menu_destroy (GtkWidget *widget)
priv->position_func_data_destroy = NULL; priv->position_func_data_destroy = NULL;
} }
g_clear_object (&priv->top_arrow_gadget);
g_clear_object (&priv->bottom_arrow_gadget);
GTK_WIDGET_CLASS (gtk_menu_parent_class)->destroy (widget); GTK_WIDGET_CLASS (gtk_menu_parent_class)->destroy (widget);
} }
@ -1463,7 +1459,8 @@ gtk_menu_real_insert (GtkMenuShell *menu_shell,
widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu)); widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu));
child_node = gtk_widget_get_css_node (child); child_node = gtk_widget_get_css_node (child);
gtk_css_node_insert_before (widget_node, child_node, priv->bottom_arrow); gtk_css_node_insert_before (widget_node, child_node,
gtk_css_gadget_get_node (priv->bottom_arrow_gadget));
GTK_MENU_SHELL_CLASS (gtk_menu_parent_class)->insert (menu_shell, child, position); GTK_MENU_SHELL_CLASS (gtk_menu_parent_class)->insert (menu_shell, child, position);
@ -2514,14 +2511,21 @@ get_arrows_border (GtkMenu *menu,
GtkBorder *border) GtkBorder *border)
{ {
GtkMenuPrivate *priv = menu->priv; GtkMenuPrivate *priv = menu->priv;
guint scroll_arrow_height; gint top_arrow_height, bottom_arrow_height;
gtk_widget_style_get (GTK_WIDGET (menu), gtk_css_gadget_get_preferred_size (priv->top_arrow_gadget,
"scroll-arrow-vlength", &scroll_arrow_height, GTK_ORIENTATION_VERTICAL,
NULL); -1,
&top_arrow_height, NULL,
NULL, NULL);
gtk_css_gadget_get_preferred_size (priv->bottom_arrow_gadget,
GTK_ORIENTATION_VERTICAL,
-1,
&bottom_arrow_height, NULL,
NULL, NULL);
border->top = priv->upper_arrow_visible ? scroll_arrow_height : 0; border->top = priv->upper_arrow_visible ? top_arrow_height : 0;
border->bottom = priv->lower_arrow_visible ? scroll_arrow_height : 0; border->bottom = priv->lower_arrow_visible ? bottom_arrow_height : 0;
border->left = border->right = 0; border->left = border->right = 0;
} }
@ -2809,12 +2813,13 @@ gtk_menu_size_allocate (GtkWidget *widget,
GtkMenuPrivate *priv; GtkMenuPrivate *priv;
GtkMenuShell *menu_shell; GtkMenuShell *menu_shell;
GtkWidget *child; GtkWidget *child;
GtkAllocation child_allocation; GtkAllocation arrow_allocation, child_allocation;
GtkAllocation clip;
GList *children; GList *children;
gint x, y, i; gint x, y, i;
gint width, height; gint width, height;
guint border_width; guint border_width;
GtkBorder padding; GtkBorder arrow_border, padding;
g_return_if_fail (GTK_IS_MENU (widget)); g_return_if_fail (GTK_IS_MENU (widget));
g_return_if_fail (allocation != NULL); g_return_if_fail (allocation != NULL);
@ -2847,11 +2852,28 @@ gtk_menu_size_allocate (GtkWidget *widget,
if (menu_shell->priv->active) if (menu_shell->priv->active)
gtk_menu_scroll_to (menu, priv->scroll_offset); gtk_menu_scroll_to (menu, priv->scroll_offset);
get_arrows_border (menu, &arrow_border);
arrow_allocation.x = x;
arrow_allocation.y = y;
arrow_allocation.width = width;
arrow_allocation.height = arrow_border.top;
if (priv->upper_arrow_visible)
gtk_css_gadget_allocate (priv->top_arrow_gadget,
&arrow_allocation, -1,
&clip);
arrow_allocation.y = height - y - arrow_border.bottom;
arrow_allocation.height = arrow_border.bottom;
if (priv->lower_arrow_visible)
gtk_css_gadget_allocate (priv->bottom_arrow_gadget,
&arrow_allocation, -1,
&clip);
if (!priv->tearoff_active) if (!priv->tearoff_active)
{ {
GtkBorder arrow_border;
get_arrows_border (menu, &arrow_border);
y += arrow_border.top; y += arrow_border.top;
height -= arrow_border.top; height -= arrow_border.top;
height -= arrow_border.bottom; height -= arrow_border.bottom;
@ -2959,44 +2981,6 @@ gtk_menu_size_allocate (GtkWidget *widget,
} }
} }
static void
get_arrows_visible_area (GtkMenu *menu,
GdkRectangle *border,
GdkRectangle *upper,
GdkRectangle *lower,
gint *arrow_space)
{
GtkWidget *widget = GTK_WIDGET (menu);
guint border_width;
gint scroll_arrow_height;
GtkBorder menu_padding;
gtk_widget_style_get (widget,
"scroll-arrow-vlength", &scroll_arrow_height,
NULL);
get_menu_padding (widget, &menu_padding);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
border->x = border_width + menu_padding.left;
border->y = border_width + menu_padding.top;
border->width = gdk_window_get_width (gtk_widget_get_window (widget))
- 2 * border_width - menu_padding.left - menu_padding.right;
border->height = gdk_window_get_height (gtk_widget_get_window (widget))
- 2 * border_width - menu_padding.top - menu_padding.bottom;
upper->x = border->x;
upper->y = border->y;
upper->width = border->width;
upper->height = scroll_arrow_height;
lower->x = border->x;
lower->y = border->height - border->y - scroll_arrow_height;
lower->width = border->width;
lower->height = scroll_arrow_height;
*arrow_space = scroll_arrow_height;
}
static gboolean static gboolean
gtk_menu_draw (GtkWidget *widget, gtk_menu_draw (GtkWidget *widget,
cairo_t *cr) cairo_t *cr)
@ -3004,96 +2988,27 @@ gtk_menu_draw (GtkWidget *widget,
GtkMenu *menu; GtkMenu *menu;
GtkMenuPrivate *priv; GtkMenuPrivate *priv;
GtkStyleContext *context; GtkStyleContext *context;
GdkRectangle border; gint width, height;
GdkRectangle upper;
GdkRectangle lower;
gint arrow_space;
GtkBorder menu_padding;
menu = GTK_MENU (widget); menu = GTK_MENU (widget);
priv = menu->priv; priv = menu->priv;
context = gtk_widget_get_style_context (widget); context = gtk_widget_get_style_context (widget);
get_arrows_visible_area (menu, &border, &upper, &lower, &arrow_space); width = gtk_widget_get_allocated_width (widget);
get_menu_padding (widget, &menu_padding); height = gtk_widget_get_allocated_height (widget);
if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget))) if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget)))
{ {
gfloat arrow_scaling;
gint arrow_size;
gtk_widget_style_get (widget, "arrow-scaling", &arrow_scaling, NULL);
arrow_size = arrow_scaling * arrow_space;
gtk_render_background (context, cr, 0, 0, gtk_render_background (context, cr, 0, 0,
gtk_widget_get_allocated_width (widget), width, height);
gtk_widget_get_allocated_height (widget));
gtk_render_frame (context, cr, 0, 0, gtk_render_frame (context, cr, 0, 0,
gtk_widget_get_allocated_width (widget), width, height);
gtk_widget_get_allocated_height (widget));
if (priv->upper_arrow_visible && !priv->tearoff_active) if (priv->upper_arrow_visible && !priv->tearoff_active)
{ gtk_css_gadget_draw (priv->top_arrow_gadget, cr);
gtk_style_context_save_to_node (context, priv->top_arrow);
gtk_render_background (context, cr,
upper.x, upper.y,
upper.width, upper.height);
gtk_render_frame (context, cr,
upper.x, upper.y,
upper.width, upper.height);
gtk_render_arrow (context, cr, 0,
upper.x + (upper.width - arrow_size) / 2,
upper.y + menu_padding.top + (arrow_space - arrow_size) / 2,
arrow_size);
gtk_style_context_restore (context);
}
if (priv->lower_arrow_visible && !priv->tearoff_active) if (priv->lower_arrow_visible && !priv->tearoff_active)
{ gtk_css_gadget_draw (priv->bottom_arrow_gadget, cr);
gtk_style_context_save_to_node (context, priv->bottom_arrow);
gtk_render_background (context, cr,
lower.x, lower.y,
lower.width, lower.height);
gtk_render_frame (context, cr,
lower.x, lower.y,
lower.width, lower.height);
gtk_render_arrow (context, cr, G_PI,
lower.x + (lower.width - arrow_size) / 2,
lower.y + menu_padding.bottom + (arrow_space - arrow_size) / 2,
arrow_size);
gtk_style_context_restore (context);
}
}
if (gtk_cairo_should_draw_window (cr, priv->bin_window))
{
gint y = -border.y + priv->scroll_offset;
cairo_save (cr);
gtk_cairo_transform_to_window (cr, widget, priv->bin_window);
if (!priv->tearoff_active)
{
GtkBorder arrow_border;
get_arrows_border (menu, &arrow_border);
y -= arrow_border.top;
}
gtk_render_background (context, cr,
- border.x, y,
border.width, border.height);
gtk_render_frame (context, cr,
- border.x, y,
border.width, border.height);
cairo_restore (cr);
} }
GTK_WIDGET_CLASS (gtk_menu_parent_class)->draw (widget, cr); GTK_WIDGET_CLASS (gtk_menu_parent_class)->draw (widget, cr);
@ -3647,22 +3562,30 @@ get_arrows_sensitive_area (GtkMenu *menu,
GdkRectangle *upper, GdkRectangle *upper,
GdkRectangle *lower) GdkRectangle *lower)
{ {
GtkMenuPrivate *priv = menu->priv;
GtkWidget *widget = GTK_WIDGET (menu); GtkWidget *widget = GTK_WIDGET (menu);
GdkWindow *window; GdkWindow *window;
gint width, height; gint width, height;
guint border; guint border;
gint win_x, win_y; gint win_x, win_y;
gint scroll_arrow_height;
GtkBorder padding; GtkBorder padding;
gint top_arrow_height, bottom_arrow_height;
gtk_css_gadget_get_preferred_size (priv->top_arrow_gadget,
GTK_ORIENTATION_VERTICAL,
-1,
&top_arrow_height, NULL,
NULL, NULL);
gtk_css_gadget_get_preferred_size (priv->bottom_arrow_gadget,
GTK_ORIENTATION_VERTICAL,
-1,
&bottom_arrow_height, NULL,
NULL, NULL);
window = gtk_widget_get_window (widget); window = gtk_widget_get_window (widget);
width = gdk_window_get_width (window); width = gdk_window_get_width (window);
height = gdk_window_get_height (window); height = gdk_window_get_height (window);
gtk_widget_style_get (widget,
"scroll-arrow-vlength", &scroll_arrow_height,
NULL);
border = gtk_container_get_border_width (GTK_CONTAINER (menu)); border = gtk_container_get_border_width (GTK_CONTAINER (menu));
get_menu_padding (widget, &padding); get_menu_padding (widget, &padding);
@ -3673,19 +3596,18 @@ get_arrows_sensitive_area (GtkMenu *menu,
upper->x = win_x; upper->x = win_x;
upper->y = win_y; upper->y = win_y;
upper->width = width; upper->width = width;
upper->height = scroll_arrow_height + border + padding.top; upper->height = top_arrow_height + border + padding.top;
} }
if (lower) if (lower)
{ {
lower->x = win_x; lower->x = win_x;
lower->y = win_y + height - border - padding.bottom - scroll_arrow_height; lower->y = win_y + height - border - padding.bottom - bottom_arrow_height;
lower->width = width; lower->width = width;
lower->height = scroll_arrow_height + border + padding.bottom; lower->height = bottom_arrow_height + border + padding.bottom;
} }
} }
static void static void
gtk_menu_handle_scrolling (GtkMenu *menu, gtk_menu_handle_scrolling (GtkMenu *menu,
gint x, gint x,
@ -3773,7 +3695,8 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
if (arrow_state != priv->upper_arrow_state) if (arrow_state != priv->upper_arrow_state)
{ {
priv->upper_arrow_state = arrow_state; priv->upper_arrow_state = arrow_state;
gtk_css_node_set_state (priv->top_arrow, arrow_state); gtk_css_node_set_state (gtk_css_gadget_get_node (priv->top_arrow_gadget),
arrow_state);
gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (menu)), gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (menu)),
&rect, FALSE); &rect, FALSE);
@ -3847,7 +3770,8 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
if (arrow_state != priv->lower_arrow_state) if (arrow_state != priv->lower_arrow_state)
{ {
priv->lower_arrow_state = arrow_state; priv->lower_arrow_state = arrow_state;
gtk_css_node_set_state (priv->bottom_arrow, arrow_state); gtk_css_node_set_state (gtk_css_gadget_get_node (priv->bottom_arrow_gadget),
arrow_state);
gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (menu)), gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (menu)),
&rect, FALSE); &rect, FALSE);
@ -4575,16 +4499,20 @@ static void
gtk_menu_stop_scrolling (GtkMenu *menu) gtk_menu_stop_scrolling (GtkMenu *menu)
{ {
GtkMenuPrivate *priv = menu->priv; GtkMenuPrivate *priv = menu->priv;
GtkCssNode *top_arrow_node, *bottom_arrow_node;
GtkStateFlags state; GtkStateFlags state;
gtk_menu_remove_scroll_timeout (menu); gtk_menu_remove_scroll_timeout (menu);
priv->upper_arrow_prelight = FALSE; priv->upper_arrow_prelight = FALSE;
priv->lower_arrow_prelight = FALSE; priv->lower_arrow_prelight = FALSE;
state = gtk_css_node_get_state (priv->top_arrow); top_arrow_node = gtk_css_gadget_get_node (priv->top_arrow_gadget);
gtk_css_node_set_state (priv->top_arrow, state & ~GTK_STATE_FLAG_PRELIGHT); state = gtk_css_node_get_state (top_arrow_node);
state = gtk_css_node_get_state (priv->bottom_arrow); gtk_css_node_set_state (top_arrow_node, state & ~GTK_STATE_FLAG_PRELIGHT);
gtk_css_node_set_state (priv->bottom_arrow, state & ~GTK_STATE_FLAG_PRELIGHT);
bottom_arrow_node = gtk_css_gadget_get_node (priv->bottom_arrow_gadget);
state = gtk_css_node_get_state (bottom_arrow_node);
gtk_css_node_set_state (bottom_arrow_node, state & ~GTK_STATE_FLAG_PRELIGHT);
} }
static void static void
@ -4592,6 +4520,7 @@ gtk_menu_scroll_to (GtkMenu *menu,
gint offset) gint offset)
{ {
GtkMenuPrivate *priv = menu->priv; GtkMenuPrivate *priv = menu->priv;
GtkCssNode *top_arrow_node, *bottom_arrow_node;
GtkBorder arrow_border, padding; GtkBorder arrow_border, padding;
GtkWidget *widget; GtkWidget *widget;
gint x, y; gint x, y;
@ -4700,10 +4629,13 @@ gtk_menu_scroll_to (GtkMenu *menu,
} }
} }
gtk_css_node_set_visible (priv->top_arrow, priv->upper_arrow_visible); top_arrow_node = gtk_css_gadget_get_node (priv->top_arrow_gadget);
gtk_css_node_set_visible (priv->bottom_arrow, priv->lower_arrow_visible); gtk_css_node_set_visible (top_arrow_node, priv->upper_arrow_visible);
gtk_css_node_set_state (priv->top_arrow, priv->upper_arrow_state); gtk_css_node_set_state (top_arrow_node, priv->upper_arrow_state);
gtk_css_node_set_state (priv->bottom_arrow, priv->lower_arrow_state);
bottom_arrow_node = gtk_css_gadget_get_node (priv->bottom_arrow_gadget);
gtk_css_node_set_visible (bottom_arrow_node, priv->lower_arrow_visible);
gtk_css_node_set_state (bottom_arrow_node, priv->lower_arrow_state);
/* Scroll the menu: */ /* Scroll the menu: */
if (gtk_widget_get_realized (widget)) if (gtk_widget_get_realized (widget))
@ -4981,7 +4913,8 @@ gtk_menu_attach (GtkMenu *menu,
widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu)); widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu));
child_node = gtk_widget_get_css_node (child); child_node = gtk_widget_get_css_node (child);
gtk_css_node_insert_before (widget_node, child_node, menu->priv->bottom_arrow); gtk_css_node_insert_before (widget_node, child_node,
gtk_css_gadget_get_node (menu->priv->bottom_arrow_gadget));
gtk_widget_set_parent (child, GTK_WIDGET (menu)); gtk_widget_set_parent (child, GTK_WIDGET (menu));

View File

@ -26,6 +26,7 @@
#define __GTK_MENU_PRIVATE_H__ #define __GTK_MENU_PRIVATE_H__
#include <gtk/gtkmenu.h> #include <gtk/gtkmenu.h>
#include <gtk/gtkcssgadgetprivate.h>
#include <gtk/gtkcssnodeprivate.h> #include <gtk/gtkcssnodeprivate.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -69,8 +70,8 @@ struct _GtkMenuPrivate
GdkWindow *view_window; GdkWindow *view_window;
GdkWindow *bin_window; GdkWindow *bin_window;
GtkCssNode *top_arrow; GtkCssGadget *top_arrow_gadget;
GtkCssNode *bottom_arrow; GtkCssGadget *bottom_arrow_gadget;
gint scroll_offset; gint scroll_offset;
gint saved_scroll_offset; gint saved_scroll_offset;

View File

@ -1540,8 +1540,16 @@ menu,
@extend %undecorated_button; @extend %undecorated_button;
border-style: none; border-style: none;
border-radius: 0; border-radius: 0;
&.top { border-bottom: 1px solid mix($fg_color, $base_color, 10%); } min-height: 16px;
&.bottom { border-top: 1px solid mix($fg_color, $base_color, 10%); } min-width: 16px;
&.top {
-gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
border-bottom: 1px solid mix($fg_color, $base_color, 10%);
}
&.bottom {
-gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
border-top: 1px solid mix($fg_color, $base_color, 10%);
}
&:hover { background-color: mix($fg_color, $base_color, 10%); } &:hover { background-color: mix($fg_color, $base_color, 10%); }
&:insensitive { &:insensitive {
color: transparent; color: transparent;

View File

@ -2143,12 +2143,16 @@ menu,
menu arrow, menu arrow,
.menu arrow { .menu arrow {
border-style: none; border-style: none;
border-radius: 0; } border-radius: 0;
min-height: 16px;
min-width: 16px; }
menu arrow.top, menu arrow.top,
.menu arrow.top { .menu arrow.top {
-gtk-icon-source: -gtk-icontheme("pan-up-symbolic");
border-bottom: 1px solid #3d3d3d; } border-bottom: 1px solid #3d3d3d; }
menu arrow.bottom, menu arrow.bottom,
.menu arrow.bottom { .menu arrow.bottom {
-gtk-icon-source: -gtk-icontheme("pan-down-symbolic");
border-top: 1px solid #3d3d3d; } border-top: 1px solid #3d3d3d; }
menu arrow:hover, menu arrow:hover,
.menu arrow:hover { .menu arrow:hover {

View File

@ -2149,12 +2149,16 @@ menu,
menu arrow, menu arrow,
.menu arrow { .menu arrow {
border-style: none; border-style: none;
border-radius: 0; } border-radius: 0;
min-height: 16px;
min-width: 16px; }
menu arrow.top, menu arrow.top,
.menu arrow.top { .menu arrow.top {
-gtk-icon-source: -gtk-icontheme("pan-up-symbolic");
border-bottom: 1px solid #eaebeb; } border-bottom: 1px solid #eaebeb; }
menu arrow.bottom, menu arrow.bottom,
.menu arrow.bottom { .menu arrow.bottom {
-gtk-icon-source: -gtk-icontheme("pan-down-symbolic");
border-top: 1px solid #eaebeb; } border-top: 1px solid #eaebeb; }
menu arrow:hover, menu arrow:hover,
.menu arrow:hover { .menu arrow:hover {