summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniof@gnome.org>2021-11-02 21:19:55 +0000
committerAntónio Fernandes <antoniof@gnome.org>2022-02-11 22:11:20 +0000
commit46dab7eaff3324e18a6a3f6431f612897d6fd726 (patch)
treeef4d7fee2aec6054c88db123458e5cd9bf673152
parent7694bd3d79aa770112b14374a5debd4b087c8611 (diff)
downloadnautilus-46dab7eaff3324e18a6a3f6431f612897d6fd726.tar.gz
canvas-view: Add shadows for thumbnails
The frame around thumbnails has been removed in preparation for GTK4, but it was also a blocker for adopting dark mode. Following the example of the GTK 4 port, use shadows to keep contrast between thumbnails and background while working also for dark mode.
-rw-r--r--src/nautilus-canvas-container.c11
-rw-r--r--src/nautilus-canvas-container.h3
-rw-r--r--src/nautilus-canvas-item.c10
-rw-r--r--src/nautilus-canvas-item.h3
-rw-r--r--src/nautilus-canvas-view-container.c12
-rw-r--r--src/resources/css/Adwaita.css7
6 files changed, 38 insertions, 8 deletions
diff --git a/src/nautilus-canvas-container.c b/src/nautilus-canvas-container.c
index 44b637166..17701b161 100644
--- a/src/nautilus-canvas-container.c
+++ b/src/nautilus-canvas-container.c
@@ -4788,14 +4788,15 @@ static NautilusIconInfo *
nautilus_canvas_container_get_icon_images (NautilusCanvasContainer *container,
NautilusCanvasIconData *data,
int size,
- gboolean for_drag_accept)
+ gboolean for_drag_accept,
+ gboolean *is_thumbnail)
{
NautilusCanvasContainerClass *klass;
klass = NAUTILUS_CANVAS_CONTAINER_GET_CLASS (container);
g_assert (klass->get_icon_images != NULL);
- return klass->get_icon_images (container, data, size, for_drag_accept);
+ return klass->get_icon_images (container, data, size, for_drag_accept, is_thumbnail);
}
static void
@@ -4897,6 +4898,7 @@ nautilus_canvas_container_update_icon (NautilusCanvasContainer *container,
guint icon_size;
guint min_image_size, max_image_size;
NautilusIconInfo *icon_info;
+ gboolean is_thumbnail;
GdkPixbuf *pixbuf;
char *editable_text, *additional_text;
@@ -4921,7 +4923,8 @@ nautilus_canvas_container_update_icon (NautilusCanvasContainer *container,
/* Get the icons. */
icon_info = nautilus_canvas_container_get_icon_images (container, icon->data, icon_size,
- icon == details->drop_target);
+ icon == details->drop_target,
+ &is_thumbnail);
pixbuf = nautilus_icon_info_get_pixbuf (icon_info);
g_object_unref (icon_info);
@@ -4938,7 +4941,7 @@ nautilus_canvas_container_update_icon (NautilusCanvasContainer *container,
"highlighted_for_drop", icon == details->drop_target,
NULL);
- nautilus_canvas_item_set_image (icon->item, pixbuf);
+ nautilus_canvas_item_set_image (icon->item, pixbuf, is_thumbnail);
/* Let the pixbufs go. */
g_object_unref (pixbuf);
diff --git a/src/nautilus-canvas-container.h b/src/nautilus-canvas-container.h
index 7955cf34d..01df2ad62 100644
--- a/src/nautilus-canvas-container.h
+++ b/src/nautilus-canvas-container.h
@@ -134,7 +134,8 @@ typedef struct {
NautilusIconInfo *(* get_icon_images) (NautilusCanvasContainer *container,
NautilusCanvasIconData *data,
int canvas_size,
- gboolean for_drag_accept);
+ gboolean for_drag_accept,
+ gboolean *is_thumbnail);
void (* get_icon_text) (NautilusCanvasContainer *container,
NautilusCanvasIconData *data,
char **editable_text,
diff --git a/src/nautilus-canvas-item.c b/src/nautilus-canvas-item.c
index 762c8832a..f51967d23 100644
--- a/src/nautilus-canvas-item.c
+++ b/src/nautilus-canvas-item.c
@@ -116,6 +116,8 @@ struct NautilusCanvasItemDetails
guint is_visible : 1;
+ guint is_thumbnail : 1;
+
/* Cached PangoLayouts. Only used if the icon is visible */
PangoLayout *editable_text_layout;
PangoLayout *additional_text_layout;
@@ -472,7 +474,8 @@ get_scaled_icon_size (NautilusCanvasItem *item,
void
nautilus_canvas_item_set_image (NautilusCanvasItem *item,
- GdkPixbuf *image)
+ GdkPixbuf *image,
+ gboolean is_thumbnail)
{
NautilusCanvasItemDetails *details;
@@ -488,6 +491,7 @@ nautilus_canvas_item_set_image (NautilusCanvasItem *item,
if (image != NULL)
{
g_object_ref (image);
+ details->is_thumbnail = is_thumbnail;
}
if (details->pixbuf != NULL)
{
@@ -1358,6 +1362,10 @@ nautilus_canvas_item_draw (EelCanvasItem *item,
context = gtk_widget_get_style_context (GTK_WIDGET (container));
gtk_style_context_save (context);
gtk_style_context_add_class (context, "nautilus-canvas-item");
+ if (details->is_thumbnail)
+ {
+ gtk_style_context_add_class (context, "thumbnail");
+ }
icon_rect = canvas_item->details->icon_rect;
temp_surface = map_surface (canvas_item);
diff --git a/src/nautilus-canvas-item.h b/src/nautilus-canvas-item.h
index 436fb6b46..92b59c4eb 100644
--- a/src/nautilus-canvas-item.h
+++ b/src/nautilus-canvas-item.h
@@ -64,7 +64,8 @@ GType nautilus_canvas_item_get_type (void);
/* attributes */
void nautilus_canvas_item_set_image (NautilusCanvasItem *item,
- GdkPixbuf *image);
+ GdkPixbuf *image,
+ gboolean is_thumbnail);
cairo_surface_t* nautilus_canvas_item_get_drag_surface (NautilusCanvasItem *item);
void nautilus_canvas_item_set_emblems (NautilusCanvasItem *item,
GList *emblem_pixbufs);
diff --git a/src/nautilus-canvas-view-container.c b/src/nautilus-canvas-view-container.c
index a8b1f8ad6..23564aaa2 100644
--- a/src/nautilus-canvas-view-container.c
+++ b/src/nautilus-canvas-view-container.c
@@ -53,7 +53,8 @@ static NautilusIconInfo *
nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *container,
NautilusCanvasIconData *data,
int size,
- gboolean for_drag_accept)
+ gboolean for_drag_accept,
+ gboolean *is_thumbnail)
{
NautilusCanvasView *canvas_view;
NautilusFile *file;
@@ -78,6 +79,15 @@ nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *contain
scale = gtk_widget_get_scale_factor (GTK_WIDGET (canvas_view));
icon_info = nautilus_file_get_icon (file, size, scale, flags);
+ if (is_thumbnail != NULL)
+ {
+ g_autofree gchar *thumbnail_path = NULL;
+
+ thumbnail_path = nautilus_file_get_thumbnail_path (file);
+ *is_thumbnail = (thumbnail_path != NULL &&
+ nautilus_file_should_show_thumbnail (file));
+ }
+
return icon_info;
}
diff --git a/src/resources/css/Adwaita.css b/src/resources/css/Adwaita.css
index 968794388..62fb4f16d 100644
--- a/src/resources/css/Adwaita.css
+++ b/src/resources/css/Adwaita.css
@@ -12,6 +12,13 @@
border-radius: 5px;
}
+.nautilus-canvas-item.thumbnail {
+ -gtk-icon-shadow: 0px 1px 2px @borders,
+ 1px 0px 0px alpha(@borders, 0.25),
+ -1px 0px 0px alpha(@borders, 0.25),
+ 0px 2px 0px alpha(@borders, 0.5);
+}
+
.nautilus-canvas-item.dim-label {
color: mix (@theme_fg_color, @theme_bg_color, 0.50);
}