[nautilus/wip/csoriano/flow] create icon view item
- From: Carlos Soriano <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/csoriano/flow] create icon view item
- Date: Sun, 4 Dec 2016 23:45:47 +0000 (UTC)
commit 74561da75221bbf291e22a6c6abbf41f33b9c206
Author: Carlos Soriano <csoriano gnome org>
Date: Mon Dec 5 00:45:17 2016 +0100
create icon view item
src/nautilus-icon-view-item.c | 134 ++++++++++++++++++++++++++++++++++++++++-
src/nautilus-icon-view-item.h | 8 +++
src/nautilus-icon-view.c | 75 +----------------------
3 files changed, 142 insertions(+), 75 deletions(-)
---
diff --git a/src/nautilus-icon-view-item.c b/src/nautilus-icon-view-item.c
index d1c0edc..921acba 100644
--- a/src/nautilus-icon-view-item.c
+++ b/src/nautilus-icon-view-item.c
@@ -4,6 +4,7 @@ struct _NautilusIconViewItem
{
GtkFlowBoxChild parent_instance;
GtkWidget *item_container;
+ guint icon_size;
};
G_DEFINE_TYPE (NautilusIconViewItem, nautilus_icon_view_item, GTK_TYPE_FLOW_BOX_CHILD)
@@ -12,6 +13,7 @@ enum
{
PROP_0,
PROP_FILE,
+ PROP_ICON_SIZE,
N_PROPS
};
@@ -41,8 +43,22 @@ nautilus_icon_view_item_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_FILE:
+ {
+ g_value_set_object (value, self->file);
+ }
+ break;
+
+ case PROP_ICON_SIZE:
+ {
+ g_value_set_int (value, self->icon_size);
+ }
+ break;
+
default:
+ {
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
}
@@ -56,8 +72,22 @@ nautilus_icon_view_item_set_property (GObject *object,
switch (prop_id)
{
+ case PROP_FILE:
+ {
+ nautilus_icon_view_item_set_file (self, g_value_get_object (value));
+ }
+ break;
+
+ case PROP_ICON_SIZE:
+ {
+ nautilus_icon_view_item_set_icon_size (self, g_value_get_int (value));
+ }
+ break;
+
default:
+ {
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
}
@@ -69,14 +99,92 @@ nautilus_icon_view_item_class_init (NautilusIconViewItemClass *klass)
object_class->finalize = nautilus_icon_view_item_finalize;
object_class->get_property = nautilus_icon_view_item_get_property;
object_class->set_property = nautilus_icon_view_item_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ICON_SIZE,
+ g_param_spec_int ("icon-size",
+ "Icon size",
+ "The size in pixels of the icon",
+ NAUTILUS_CANVAS_ICON_SIZE_SMALL,
+ NAUTILUS_CANVAS_ICON_SIZE_LARGER,
+ NAUTILUS_CANVAS_ICON_SIZE_LARGE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_FILE,
+ g_param_spec_object ("icon-size",
+ "Icon size",
+ "The size in pixels of the icon",
+ NAUTILUS_TYPE_FILE,
+ G_PARAM_READWRITE));
+}
+
+static GtkWidget *
+create_icon (NautilusIconViewItem *self)
+{
+ NautilusFileIconFlags flags;
+ g_autoptr (GdkPixbuf) icon_pixbuf;
+ GtkImage *icon;
+ GtkWidget *fixed_height_box;
+ GtkStyleContext *style_context;
+
+ flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
+ NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE |
+ NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
+ NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
+
+ icon_pixbuf = nautilus_file_get_icon_pixbuf (self->file, priv->icon_size,
+ TRUE, 1, flags);
+ icon = gtk_image_new_from_pixbuf (icon_pixbuf);
+ gtk_widget_set_hexpand (icon, TRUE);
+ gtk_widget_set_vexpand (icon, TRUE);
+ gtk_widget_set_valign (icon, GTK_ALIGN_CENTER);
+ gtk_widget_set_halign (icon, GTK_ALIGN_CENTER);
+
+ fixed_height_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_widget_set_valign (fixed_height_box, GTK_ALIGN_CENTER);
+ gtk_widget_set_halign (fixed_height_box, GTK_ALIGN_CENTER);
+ gtk_widget_set_size_request (fixed_height_box, get_icon_size_for_zoom_level (priv->zoom_level),
+ get_icon_size_for_zoom_level (priv->zoom_level));
+
+
+ style_context = gtk_widget_get_style_context (fixed_height_box);
+ gtk_style_context_add_class (style_contet, "icon-background");
+
+ gtk_box_pack_start (fixed_height_box, icon, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (fixed_height_box);
+
+ return fixed_height_box;
+}
+
+static void
+update_icon (NautilusIconViewItem *self)
+{
+ GtkWidget *new_icon;
+ GtkWidget *old_icon;
+ GtkWidget *box;
+ GtkWidget *label;
+ NautilusFile *file;
+ gint label_nat_size;
+ gint icon_nat_size;
+
+ file = g_object_get_data (flow_box_item, "file");
+ old_icon = g_object_get_data (flow_box_item, "icon");
+ label = g_object_get_data (flow_box_item, "label");
+
+ nautilus_container_max_width_set_max_width (NAUTILUS_CONTAINER_MAX_WIDTH (self->item_container),
+ get_icon_size_for_zoom_level (priv->zoom_level));
+ box = gtk_bin_get_child (GTK_BIN (self->item_container));
+ gtk_container_remove (GTK_CONTAINER (box), old_icon);
+ new_icon = create_icon (self);
+ gtk_box_pack_start (box, new_icon, FALSE, FALSE, 0);
+ g_object_set_data (flow_box_item, "icon", new_icon);
}
static void
nautilus_icon_view_item_init (NautilusIconViewItem *self)
{
- NautilusIconView *self = NAUTILUS_ICON_VIEW (user_data);
NautilusFile *file = NAUTILUS_FILE (item);
- NautilusIconViewPrivate *priv = nautilus_icon_view_get_instance_private (self);
GtkFlowBoxChild *child;
GtkBox *container;
NautilusContainerMaxWidth *item_container;
@@ -89,7 +197,7 @@ nautilus_icon_view_item_init (NautilusIconViewItem *self)
container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
self->item_container = nautilus_container_max_width_new ();
- icon = create_icon (self, file);
+ icon = create_icon (self);
gtk_box_pack_start (container, icon, FALSE, FALSE, 0);
label = gtk_label_new (nautilus_file_get_display_name (file));
@@ -121,3 +229,23 @@ nautilus_icon_view_item_init (NautilusIconViewItem *self)
gtk_widget_show_all (child);
}
+
+void
+nautilus_icon_view_item_set_icon_size (NautilusIconViewItem *self,
+ guint icon_size)
+{
+ g_return_if_fail (NAUTILUS_IS_ICON_VIEW_ITEM (self));
+
+ priv->icon_size = icon_size;
+ update_icon (self);
+}
+
+void
+nautilus_icon_view_item_set_file (NautilusIconViewItem *self,
+ NautilusFile *file)
+{
+ g_return_if_fail (NAUTILUS_IS_ICON_VIEW_ITEM (self));
+
+ g_clear_object (self->file);
+ self->file = g_object_ref (file);
+}
diff --git a/src/nautilus-icon-view-item.h b/src/nautilus-icon-view-item.h
index 1cbaa29..a33c1f5 100644
--- a/src/nautilus-icon-view-item.h
+++ b/src/nautilus-icon-view-item.h
@@ -4,6 +4,8 @@
#include <glib.h>
#include <gtk/gtk.h>
+#include "nautilus-file.h"
+
G_BEGIN_DECLS
#define NAUTILUS_TYPE_ICON_VIEW_ITEM (nautilus_icon_view_item_get_type())
@@ -12,6 +14,12 @@ G_DECLARE_FINAL_TYPE (NautilusIconViewItem, nautilus_icon_view_item, NAUTILUS, I
NautilusIconViewItem *nautilus_icon_view_item_new (void);
+void nautilus_icon_view_item_set_icon_size (NautilusIconViewItem *item,
+ guint icon_size);
+
+void nautilus_icon_view_item_set_file (NautilusIconViewItem *item,
+ NautilusFile *file);
+
G_END_DECLS
#endif /* NAUTILUS_ICON_VIEW_ITEM_H */
diff --git a/src/nautilus-icon-view.c b/src/nautilus-icon-view.c
index 7819c58..41ef305 100644
--- a/src/nautilus-icon-view.c
+++ b/src/nautilus-icon-view.c
@@ -200,75 +200,6 @@ get_icon_size_for_zoom_level (NautilusCanvasZoomLevel zoom_level)
g_return_val_if_reached (NAUTILUS_CANVAS_ICON_SIZE_STANDARD);
}
-static GtkWidget *
-create_icon (NautilusIconView *self,
- NautilusFile *file)
-{
- NautilusIconViewPrivate *priv = nautilus_icon_view_get_instance_private (self);
- NautilusFileIconFlags flags;
- g_autoptr (GdkPixbuf) icon_pixbuf;
- GtkImage *icon;
- GtkWidget *fixed_height_box;
-
- flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
- NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE |
- NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS |
- NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM;
-
- icon_pixbuf = nautilus_file_get_icon_pixbuf (file, get_icon_size_for_zoom_level (priv->zoom_level),
- TRUE, 1, flags);
- icon = gtk_image_new_from_pixbuf (icon_pixbuf);
- gtk_widget_set_hexpand (icon, TRUE);
- gtk_widget_set_vexpand (icon, TRUE);
- gtk_widget_set_valign (icon, GTK_ALIGN_CENTER);
- gtk_widget_set_halign (icon, GTK_ALIGN_CENTER);
-
- fixed_height_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_widget_set_valign (fixed_height_box, GTK_ALIGN_CENTER);
- gtk_widget_set_halign (fixed_height_box, GTK_ALIGN_CENTER);
- gtk_widget_set_size_request (fixed_height_box, get_icon_size_for_zoom_level (priv->zoom_level),
- get_icon_size_for_zoom_level (priv->zoom_level));
-
-
- GtkStyleContext *style_contet = gtk_widget_get_style_context (fixed_height_box);
- /*.icon-background {background-color:#fbfbfb; box-shadow: 0px 0px 4px #DDD; margin-bottom:4px} */
- gtk_style_context_add_class (style_contet, "icon-background");
-
- gtk_box_pack_start (fixed_height_box, icon, FALSE, FALSE, 0);
-
- gtk_widget_show_all (fixed_height_box);
-
- return fixed_height_box;
-}
-
-static void
-replace_icon (NautilusIconView *self,
- GtkWidget *flow_box_item)
-{
- NautilusIconViewPrivate *priv = nautilus_icon_view_get_instance_private (self);
- GtkWidget *new_icon;
- GtkWidget *old_icon;
- GtkWidget *box;
- GtkWidget *label;
- GtkWidget *icon_item;
- NautilusFile *file;
- gint label_nat_size;
- gint icon_nat_size;
-
- file = g_object_get_data (flow_box_item, "file");
- old_icon = g_object_get_data (flow_box_item, "icon");
- label = g_object_get_data (flow_box_item, "label");
-
- icon_item = gtk_bin_get_child (GTK_BIN (flow_box_item));
- nautilus_container_max_width_set_max_width (NAUTILUS_CONTAINER_MAX_WIDTH (icon_item),
- get_icon_size_for_zoom_level (priv->zoom_level));
- box = gtk_bin_get_child (GTK_BIN (icon_item));
- gtk_container_remove (GTK_CONTAINER (box), old_icon);
- new_icon = create_icon (self, file);
- gtk_box_pack_start (box, new_icon, FALSE, FALSE, 0);
- g_object_set_data (flow_box_item, "icon", new_icon);
-}
-
static void
set_icon_size (NautilusIconView *self,
gint icon_size)
@@ -277,14 +208,14 @@ set_icon_size (NautilusIconView *self,
g_autoptr (GList) items;
GList *l;
g_autoptr (GList) box_children;
- GtkWidget *flow_box_item;
+ NautilusIconViewItem *item;
items = gtk_container_get_children (priv->flow_box);
for (l = items; l; l = l->next)
{
- flow_box_item = GTK_WIDGET (l->data);
- replace_icon (self, flow_box_item);
+ item = GTK_WIDGET (l->data);
+ nautilus_icon_view_item_set_icon_size (self, get_icon_size_for_zoom_level (priv->zoom_level));
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]