mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-13 14:00:09 +00:00
Use the theme colours for rubber banding
This commit is contained in:
parent
1f8942769b
commit
8f5c1b6a3c
@ -377,6 +377,21 @@ egg_icon_list_class_init (EggIconListClass *klass)
|
|||||||
_ICON_LIST_RIGHT_MARGIN,
|
_ICON_LIST_RIGHT_MARGIN,
|
||||||
G_PARAM_READABLE));
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
|
gtk_widget_class_install_style_property (widget_class,
|
||||||
|
g_param_spec_boxed ("selection_box_color",
|
||||||
|
_("Selection Box Color"),
|
||||||
|
_("Color of the selection box"),
|
||||||
|
GDK_TYPE_COLOR,
|
||||||
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
|
gtk_widget_class_install_style_property (widget_class,
|
||||||
|
g_param_spec_uchar ("selection_box_alpha",
|
||||||
|
_("Selection Box Alpha"),
|
||||||
|
_("Opacity of the selection box"),
|
||||||
|
0, 0xff,
|
||||||
|
0x40,
|
||||||
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
widget_class->set_scroll_adjustments_signal =
|
widget_class->set_scroll_adjustments_signal =
|
||||||
g_signal_new ("set_scroll_adjustments",
|
g_signal_new ("set_scroll_adjustments",
|
||||||
@ -1673,6 +1688,16 @@ egg_icon_list_paint_item (EggIconList *icon_list,
|
|||||||
item->layout_height + 2 * ICON_TEXT_PADDING);
|
item->layout_height + 2 * ICON_TEXT_PADDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static guint32
|
||||||
|
egg_gdk_color_to_rgb (const GdkColor *color)
|
||||||
|
{
|
||||||
|
guint32 result;
|
||||||
|
result = (0xff0000 | (color->red & 0xff00));
|
||||||
|
result <<= 8;
|
||||||
|
result |= ((color->green & 0xff00) | (color->blue >> 8));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
egg_icon_list_paint_rubberband (EggIconList *icon_list,
|
egg_icon_list_paint_rubberband (EggIconList *icon_list,
|
||||||
GdkRectangle *area)
|
GdkRectangle *area)
|
||||||
@ -1680,8 +1705,10 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
|
|||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
GdkGC *gc;
|
GdkGC *gc;
|
||||||
GdkColor color;
|
|
||||||
GdkRectangle rubber_rect;
|
GdkRectangle rubber_rect;
|
||||||
|
GdkColor *fill_color_gdk;
|
||||||
|
guint fill_color;
|
||||||
|
guchar fill_color_alpha;
|
||||||
|
|
||||||
rubber_rect.x = MIN (icon_list->priv->rubberband_x1, icon_list->priv->rubberband_x2);
|
rubber_rect.x = MIN (icon_list->priv->rubberband_x1, icon_list->priv->rubberband_x2);
|
||||||
rubber_rect.y = MIN (icon_list->priv->rubberband_y1, icon_list->priv->rubberband_y2);
|
rubber_rect.y = MIN (icon_list->priv->rubberband_y1, icon_list->priv->rubberband_y2);
|
||||||
@ -1691,8 +1718,19 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
|
|||||||
if (!gdk_rectangle_intersect (&rubber_rect, area, &rect))
|
if (!gdk_rectangle_intersect (&rubber_rect, area, &rect))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
gtk_widget_style_get (GTK_WIDGET (icon_list),
|
||||||
|
"selection_box_color", &fill_color_gdk,
|
||||||
|
"selection_box_alpha", &fill_color_alpha,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (!fill_color_gdk) {
|
||||||
|
fill_color_gdk = gdk_color_copy (>K_WIDGET (icon_list)->style->base[GTK_STATE_SELECTED]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fill_color = egg_gdk_color_to_rgb (fill_color_gdk) << 8 | fill_color_alpha;
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, rect.width, rect.height);
|
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, rect.width, rect.height);
|
||||||
gdk_pixbuf_fill (pixbuf, 0x9db8d27F);
|
gdk_pixbuf_fill (pixbuf, fill_color);
|
||||||
|
|
||||||
gdk_pixbuf_render_to_drawable_alpha (pixbuf,
|
gdk_pixbuf_render_to_drawable_alpha (pixbuf,
|
||||||
icon_list->priv->bin_window,
|
icon_list->priv->bin_window,
|
||||||
@ -1705,15 +1743,13 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
|
|||||||
0, 0);
|
0, 0);
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
gc = gdk_gc_new (icon_list->priv->bin_window);
|
gc = gdk_gc_new (icon_list->priv->bin_window);
|
||||||
color.red = 0x72 * 255;
|
gdk_gc_set_rgb_fg_color (gc, fill_color_gdk);
|
||||||
color.green = 0x7d * 255;
|
|
||||||
color.blue = 0x97 * 255;
|
|
||||||
gdk_gc_set_rgb_fg_color (gc, &color);
|
|
||||||
gdk_gc_set_clip_rectangle (gc, &rect);
|
gdk_gc_set_clip_rectangle (gc, &rect);
|
||||||
gdk_draw_rectangle (icon_list->priv->bin_window,
|
gdk_draw_rectangle (icon_list->priv->bin_window,
|
||||||
gc, FALSE,
|
gc, FALSE,
|
||||||
rubber_rect.x, rubber_rect.y,
|
rubber_rect.x, rubber_rect.y,
|
||||||
rubber_rect.width - 1, rubber_rect.height - 1);
|
rubber_rect.width - 1, rubber_rect.height - 1);
|
||||||
|
gdk_color_free (fill_color_gdk);
|
||||||
g_object_unref (gc);
|
g_object_unref (gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user