[gtk+] Add a GtkIconView::item-padding property
- From: Matthias Clasen <matthiasc src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+] Add a GtkIconView::item-padding property
- Date: Fri, 7 Aug 2009 03:59:11 +0000 (UTC)
commit 549ffcbf5cb3ef0e18b8c0cc5ca155ffb7d37559
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Aug 6 23:56:30 2009 -0400
Add a GtkIconView::item-padding property
The property can be used to fine-tune who much space each column
needs. See bug 586100.
docs/reference/gtk/gtk-sections.txt | 2 +
gtk/gtk.symbols | 2 +
gtk/gtkiconview.c | 104 ++++++++++++++++++++++++++++-------
gtk/gtkiconview.h | 3 +
4 files changed, 90 insertions(+), 21 deletions(-)
---
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index a7cc587..2a5f40f 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -1972,6 +1972,8 @@ gtk_icon_view_set_column_spacing
gtk_icon_view_get_column_spacing
gtk_icon_view_set_margin
gtk_icon_view_get_margin
+gtk_icon_view_set_item_padding
+gtk_icon_view_get_item_padding
gtk_icon_view_select_path
gtk_icon_view_unselect_path
gtk_icon_view_path_is_selected
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index bf8a06e..ba61ba3 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -1988,6 +1988,7 @@ gtk_icon_theme_set_search_path_utf8
gtk_icon_view_get_column_spacing
gtk_icon_view_get_columns
gtk_icon_view_get_cursor
+gtk_icon_view_get_item_padding
gtk_icon_view_get_item_width
gtk_icon_view_get_margin
gtk_icon_view_get_markup_column
@@ -2015,6 +2016,7 @@ gtk_icon_view_select_path
gtk_icon_view_set_column_spacing
gtk_icon_view_set_columns
gtk_icon_view_set_cursor
+gtk_icon_view_set_item_padding
gtk_icon_view_set_item_width
gtk_icon_view_set_margin
gtk_icon_view_set_markup_column
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index d5fb9e0..60ee1ae 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -46,7 +46,6 @@
#undef DEBUG_ICON_VIEW
#define SCROLL_EDGE_SIZE 15
-#define ITEM_PADDING 6
#define GTK_ICON_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ICON_VIEW, GtkIconViewPrivate))
@@ -150,6 +149,7 @@ struct _GtkIconViewPrivate
gint row_spacing;
gint column_spacing;
gint margin;
+ gint item_padding;
gint text_column;
gint markup_column;
@@ -220,7 +220,8 @@ enum
PROP_COLUMN_SPACING,
PROP_MARGIN,
PROP_REORDERABLE,
- PROP_TOOLTIP_COLUMN
+ PROP_TOOLTIP_COLUMN,
+ PROP_ITEM_PADDING
};
/* GObject vfuncs */
@@ -714,7 +715,6 @@ gtk_icon_view_class_init (GtkIconViewClass *klass)
0, G_MAXINT, 6,
GTK_PARAM_READWRITE));
-
/**
* GtkIconView:orientation:
*
@@ -758,6 +758,22 @@ gtk_icon_view_class_init (GtkIconViewClass *klass)
-1,
GTK_PARAM_READWRITE));
+ /**
+ * GtkIconView:item-padding:
+ *
+ * The item-padding property specifies the padding around each
+ * of the icon view's item.
+ *
+ * Since: 2.18
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_ITEM_PADDING,
+ g_param_spec_int ("item-padding",
+ P_("Item Padding"),
+ P_("Padding around icon view items"),
+ 0, G_MAXINT, 6,
+ GTK_PARAM_READWRITE));
+
/* Style properties */
@@ -1106,6 +1122,7 @@ gtk_icon_view_init (GtkIconView *icon_view)
icon_view->priv->row_spacing = 6;
icon_view->priv->column_spacing = 6;
icon_view->priv->margin = 6;
+ icon_view->priv->item_padding = 6;
icon_view->priv->draw_focus = TRUE;
}
@@ -1418,10 +1435,10 @@ gtk_icon_view_allocate_children (GtkIconView *icon_view)
/* totally ignore our child's requisition */
if (child->cell < 0)
{
- allocation.x = child->item->x + ITEM_PADDING;
- allocation.y = child->item->y + ITEM_PADDING;
- allocation.width = child->item->width - ITEM_PADDING * 2;
- allocation.height = child->item->height - ITEM_PADDING * 2;
+ allocation.x = child->item->x + icon_view->priv->item_padding;
+ allocation.y = child->item->y + icon_view->priv->item_padding;
+ allocation.width = child->item->width - icon_view->priv->item_padding * 2;
+ allocation.height = child->item->height - icon_view->priv->item_padding * 2;
}
else
{
@@ -2858,16 +2875,16 @@ gtk_icon_view_get_cell_area (GtkIconView *icon_view,
if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
cell_area->x = item->box[info->position].x - item->before[info->position];
- cell_area->y = item->y + ITEM_PADDING;
+ cell_area->y = item->y + icon_view->priv->item_padding;
cell_area->width = item->box[info->position].width +
item->before[info->position] + item->after[info->position];
- cell_area->height = item->height - ITEM_PADDING * 2;
+ cell_area->height = item->height - icon_view->priv->item_padding * 2;
}
else
{
- cell_area->x = item->x + ITEM_PADDING;
+ cell_area->x = item->x + icon_view->priv->item_padding;
cell_area->y = item->box[info->position].y - item->before[info->position];
- cell_area->width = item->width - ITEM_PADDING * 2;
+ cell_area->width = item->width - icon_view->priv->item_padding * 2;
cell_area->height = item->box[info->position].height +
item->before[info->position] + item->after[info->position];
}
@@ -2925,7 +2942,7 @@ adjust_wrap_width (GtkIconView *icon_view,
wrap_width = item_width - pixbuf_width - icon_view->priv->spacing;
}
- wrap_width -= ITEM_PADDING * 2;
+ wrap_width -= icon_view->priv->item_padding * 2;
g_object_set (text_info->cell, "wrap-width", wrap_width, NULL);
g_object_set (text_info->cell, "width", wrap_width, NULL);
@@ -2986,8 +3003,8 @@ gtk_icon_view_calculate_item_size (GtkIconView *icon_view,
}
}
- item->width += ITEM_PADDING * 2;
- item->height += ITEM_PADDING * 2;
+ item->width += icon_view->priv->item_padding * 2;
+ item->height += icon_view->priv->item_padding * 2;
}
static void
@@ -3016,8 +3033,8 @@ gtk_icon_view_calculate_item_size2 (GtkIconView *icon_view,
item->height += max_height[i] + (i > 0 ? spacing : 0);
}
- cell_area.x = item->x + ITEM_PADDING;
- cell_area.y = item->y + ITEM_PADDING;
+ cell_area.x = item->x + icon_view->priv->item_padding;
+ cell_area.y = item->y + icon_view->priv->item_padding;
for (k = 0; k < 2; k++)
for (l = icon_view->priv->cell_list, i = 0; l; l = l->next, i++)
@@ -3032,7 +3049,7 @@ gtk_icon_view_calculate_item_size2 (GtkIconView *icon_view,
if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
- /* We should not subtract ITEM_PADDING from item->height,
+ /* We should not subtract icon_view->priv->item_padding from item->height,
* because item->height is recalculated above using
* max_height which does not contain item padding.
*/
@@ -3044,7 +3061,7 @@ gtk_icon_view_calculate_item_size2 (GtkIconView *icon_view,
/* item->width is not recalculated and thus needs to be
* corrected for the padding.
*/
- cell_area.width = item->width - 2 * ITEM_PADDING;
+ cell_area.width = item->width - 2 * icon_view->priv->item_padding;
cell_area.height = max_height[i];
}
@@ -3063,9 +3080,9 @@ gtk_icon_view_calculate_item_size2 (GtkIconView *icon_view,
}
else
{
- if (item->box[info->position].width > item->width - ITEM_PADDING * 2)
+ if (item->box[info->position].width > item->width - icon_view->priv->item_padding * 2)
{
- item->width = item->box[info->position].width + ITEM_PADDING * 2;
+ item->width = item->box[info->position].width + icon_view->priv->item_padding * 2;
cell_area.width = item->width;
}
item->before[info->position] = item->box[info->position].y - cell_area.y;
@@ -3083,7 +3100,7 @@ gtk_icon_view_calculate_item_size2 (GtkIconView *icon_view,
}
}
- item->height += ITEM_PADDING * 2;
+ item->height += icon_view->priv->item_padding * 2;
}
static void
@@ -6239,6 +6256,51 @@ gtk_icon_view_get_margin (GtkIconView *icon_view)
return icon_view->priv->margin;
}
+/**
+ * gtk_icon_view_set_item_padding:
+ * @icon_view: a #GtkIconView
+ * @column_spacing: the item padding
+ *
+ * Sets the ::item-padding property which specifies the padding
+ * around each of the icon view's items.
+ *
+ * Since: 2.18
+ */
+void
+gtk_icon_view_set_item_padding (GtkIconView *icon_view,
+ gint item_padding)
+{
+ g_return_if_fail (GTK_IS_ICON_VIEW (icon_view));
+
+ if (icon_view->priv->item_padding != item_padding)
+ {
+ icon_view->priv->item_padding = item_padding;
+
+ gtk_icon_view_stop_editing (icon_view, TRUE);
+ gtk_icon_view_invalidate_sizes (icon_view);
+ gtk_icon_view_queue_layout (icon_view);
+
+ g_object_notify (G_OBJECT (icon_view), "item-padding");
+ }
+}
+
+/**
+ * gtk_icon_view_get_item_padding:
+ * @icon_view: a #GtkIconView
+ *
+ * Returns the value of the ::item-padding property.
+ *
+ * Return value: the padding around items
+ *
+ * Since: 2.18
+ */
+gint
+gtk_icon_view_get_item_padding (GtkIconView *icon_view)
+{
+ g_return_val_if_fail (GTK_IS_ICON_VIEW (icon_view), -1);
+
+ return icon_view->priv->item_padding;
+}
/* Get/set whether drag_motion requested the drag data and
* drag_data_received should thus not actually insert the data,
diff --git a/gtk/gtkiconview.h b/gtk/gtkiconview.h
index 65b0588..7b9e51d 100644
--- a/gtk/gtkiconview.h
+++ b/gtk/gtkiconview.h
@@ -125,6 +125,9 @@ gint gtk_icon_view_get_column_spacing (GtkIconView *icon_view);
void gtk_icon_view_set_margin (GtkIconView *icon_view,
gint margin);
gint gtk_icon_view_get_margin (GtkIconView *icon_view);
+void gtk_icon_view_set_item_padding (GtkIconView *icon_view,
+ gint item_padding);
+gint gtk_icon_view_get_item_padding (GtkIconView *icon_view);
GtkTreePath * gtk_icon_view_get_path_at_pos (GtkIconView *icon_view,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]