diff options
| -rw-r--r-- | src/generators.c | 45 |
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); } |
