summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/generators.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/generators.c b/src/generators.c
index ae3219d..845e5c1 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -332,6 +332,43 @@ have_exif_key_cb (gchar **args, gpointer user_data)
return exif_has_key (exif, *args);
}
+struct HaveImageSizeData {
+ TGallerySetup *setup;
+ TAlbum *items;
+ TIndexItem *item;
+};
+
+static gboolean
+have_image_size_cb (gchar **args, gpointer user_data)
+{
+ struct HaveImageSizeData *data = user_data;
+ gboolean is_original;
+
+ g_return_val_if_fail (g_strv_length (args) != 2, FALSE); /* incl. trailing NULL */
+
+ /* no image size of that name available */
+ if (! lookup_image_size_for_name (data->setup, *args))
+ return FALSE;
+
+ is_original = g_ascii_strcasecmp ("original", *args) == 0;
+
+ /* no custom image sizes defined for the particular item */
+ if (! is_original && ! data->item->image_sizes)
+ return FALSE;
+
+ if (! is_original && data->item->image_sizes && g_hash_table_lookup (data->item->image_sizes, *args))
+ return TRUE;
+
+ if (is_original && data->item->path && ! IS_NOFULLSIZE (data->item, data->items, data->setup))
+ return TRUE;
+
+ if (is_original && (! data->item->path || IS_NOFULLSIZE (data->item, data->items, data->setup)) &&
+ data->item->image_sizes && g_hash_table_lookup (data->item->image_sizes, "preview"))
+ return TRUE;
+
+ return FALSE;
+}
+
/*
@@ -764,6 +801,7 @@ process_img_item (TGallerySetup *setup,
gchar *title, *title_desc;
TImageSize *orig_image_size;
ExifData *exif = NULL;
+ struct HaveImageSizeData *img_size_data;
if (list_mode) {
/* Index stuff */
@@ -891,6 +929,13 @@ process_img_item (TGallerySetup *setup,
/* Common tags */
replace_table_add_key_printf (replace_table, "IMG_POS_MARKER", POSITION_MARKER_FMT, get_item_index (items, item));
replace_table_add_key_int (replace_table, "ITEM_INDEX", get_display_item_index (items, item));
+
+ /* Single image size callback */
+ img_size_data = g_new0 (struct HaveImageSizeData, 1);
+ img_size_data->setup = setup;
+ img_size_data->item = item;
+ img_size_data->items = items;
+ block_parser_register_function (block_parser, "have_image_size", have_image_size_cb, img_size_data, g_free);
}