summaryrefslogtreecommitdiff
path: root/gtk/gtkiconview.c
diff options
context:
space:
mode:
authorRoss Burton <rburton@src.gnome.org>2003-07-03 13:10:41 +0000
committerRoss Burton <rburton@src.gnome.org>2003-07-03 13:10:41 +0000
commit8f5c1b6a3c1fcc06249e48ab2db329da2ae9190a (patch)
tree068132a09dc308434e4b1c353e724f4f90ae463e /gtk/gtkiconview.c
parent1f8942769b08a48c83cc748e52ae480f38045b4a (diff)
downloadgtk+-8f5c1b6a3c1fcc06249e48ab2db329da2ae9190a.tar.gz
Use the theme colours for rubber banding
Diffstat (limited to 'gtk/gtkiconview.c')
-rw-r--r--gtk/gtkiconview.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index 20a345e993..a667b04121 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -377,6 +377,21 @@ egg_icon_list_class_init (EggIconListClass *klass)
_ICON_LIST_RIGHT_MARGIN,
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 */
widget_class->set_scroll_adjustments_signal =
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);
}
+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
egg_icon_list_paint_rubberband (EggIconList *icon_list,
GdkRectangle *area)
@@ -1680,9 +1705,11 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
GdkRectangle rect;
GdkPixbuf *pixbuf;
GdkGC *gc;
- GdkColor color;
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.y = MIN (icon_list->priv->rubberband_y1, icon_list->priv->rubberband_y2);
rubber_rect.width = ABS (icon_list->priv->rubberband_x1 - icon_list->priv->rubberband_x2) + 1;
@@ -1691,8 +1718,19 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
if (!gdk_rectangle_intersect (&rubber_rect, area, &rect))
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 (&GTK_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);
- gdk_pixbuf_fill (pixbuf, 0x9db8d27F);
+ gdk_pixbuf_fill (pixbuf, fill_color);
gdk_pixbuf_render_to_drawable_alpha (pixbuf,
icon_list->priv->bin_window,
@@ -1705,15 +1743,13 @@ egg_icon_list_paint_rubberband (EggIconList *icon_list,
0, 0);
g_object_unref (pixbuf);
gc = gdk_gc_new (icon_list->priv->bin_window);
- color.red = 0x72 * 255;
- color.green = 0x7d * 255;
- color.blue = 0x97 * 255;
- gdk_gc_set_rgb_fg_color (gc, &color);
+ gdk_gc_set_rgb_fg_color (gc, fill_color_gdk);
gdk_gc_set_clip_rectangle (gc, &rect);
gdk_draw_rectangle (icon_list->priv->bin_window,
gc, FALSE,
rubber_rect.x, rubber_rect.y,
rubber_rect.width - 1, rubber_rect.height - 1);
+ gdk_color_free (fill_color_gdk);
g_object_unref (gc);
}