diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/generators.c | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/src/generators.c b/src/generators.c index d7d180b..48a377a 100644 --- a/src/generators.c +++ b/src/generators.c @@ -40,6 +40,22 @@ (! parent_items->fullsize || item->force_nofullsize) && \ (item->force_nofullsize || parent_items->nofullsize || setup->nofullsize)) +static TImageSize * +find_image_size_for_name (TGallerySetup *setup, const gchar *name) +{ + GList *l; + TImageSize *image_size; + + for (l = g_list_first (setup->design->image_sizes); l; l = g_list_next (l)) { + image_size = l->data; + g_assert (image_size != NULL); + if (g_ascii_strcasecmp (name, image_size->name) == 0) + return image_size; + } + return NULL; +} + + static void get_image_paths (TGallerySetup *setup, TAlbum *items, @@ -57,6 +73,7 @@ get_image_paths (TGallerySetup *setup, gboolean is_original; gchar *s1, *s2, *s3; gchar *target_image_dir; + TImageSize *preview_image_size; if (full_img_src) *full_img_src = NULL; @@ -64,6 +81,7 @@ get_image_paths (TGallerySetup *setup, *full_img_dst = NULL; if (page_img_dst) *page_img_dst = NULL; + preview_image_size = NULL; /* ignore combinations that are not valid */ nofullsize = IS_NOFULLSIZE (item, items, setup); @@ -72,12 +90,13 @@ get_image_paths (TGallerySetup *setup, is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; if ((items->type == GALLERY_TYPE_INDEX && ! is_thumbnail) || (is_thumbnail && item->hidden) || - (is_thumbnail && items->type == GALLERY_TYPE_INDEX && (item->thumbnail == NULL || strlen (item->thumbnail) == 0)) /* || - -- in several cases we need to get path to the source image, e.g. to retrieve EXIF metadata; disabling the check for now - (is_original && nofullsize) */ ) + (is_thumbnail && items->type == GALLERY_TYPE_INDEX && (item->thumbnail == NULL || strlen (item->thumbnail) == 0))) return; - target_image_dir = g_strdup_printf ("%s%s", TARGET_IMAGE_DIR_PREFIX, image_size->name); + /* nofullsize specified, fall back to preview if available */ + if (is_original && nofullsize) + preview_image_size = find_image_size_for_name (setup, "preview"); + target_image_dir = g_strdup_printf ("%s%s", TARGET_IMAGE_DIR_PREFIX, preview_image_size ? preview_image_size->name : image_size->name); /* Thumbnail special case */ if (is_thumbnail) { @@ -109,6 +128,9 @@ get_image_paths (TGallerySetup *setup, s1 = (item->path == NULL && item->preview) ? item->preview : item->path; if (full_img_src) *full_img_src = g_build_filename (path_info->src_dir, s1, NULL); + /* Use preview image for targets but leave original source if nofullsize is defined */ + if (is_original && nofullsize) + s1 = (item->preview) ? item->preview : item->path; s2 = g_path_get_basename (s1); if (full_img_dst) *full_img_dst = g_build_filename (path_info->dest_dir, target_image_dir, s2, NULL); @@ -121,7 +143,6 @@ get_image_paths (TGallerySetup *setup, } - /* * generate_image: generate needed image sizes */ @@ -153,6 +174,9 @@ generate_image (TGallerySetup *setup, is_preview = g_ascii_strcasecmp ("preview", image_size->name) == 0; is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; + if (is_original && IS_NOFULLSIZE (item, items, setup)) + continue; + get_image_paths (setup, items, item, item_index, path_info, image_size, &img_src, &img_dst, NULL); if (img_src == NULL || img_dst == NULL) continue; @@ -213,23 +237,6 @@ generate_image (TGallerySetup *setup, } - -static TImageSize * -find_image_size_for_name (TGallerySetup *setup, const gchar *name) -{ - GList *l; - TImageSize *image_size; - - for (l = g_list_first (setup->design->image_sizes); l; l = g_list_next (l)) { - image_size = l->data; - g_assert (image_size != NULL); - if (g_ascii_strcasecmp (name, image_size->name) == 0) - return image_size; - } - return NULL; -} - - static gchar * get_index_filename (TAlbum *items, TGalleryDesignTheme *theme, TPathInfo *path_info, TIndexItem *retrieve_child) { @@ -747,7 +754,7 @@ write_html_image (TGallerySetup *setup, replace_table_add_key_int (replace_table, "FILE_NO", real_item_index); replace_table_add_key_int (replace_table, "IMG_SIZE_W", img_w); replace_table_add_key_int (replace_table, "IMG_SIZE_H", img_h); - replace_table_add_key_printf (replace_table, "IMG_SRC", "%s%s/%s", TARGET_IMAGE_DIR_PREFIX, image_size->name, imgname); + replace_table_add_key (replace_table, "IMG_SRC", img_dst_page); replace_table_add_key (replace_table, "IMG_SRC_PRELOAD", preload_imgname ? preload_imgname : ""); if (image_fullsize) { replace_table_add_key_int (replace_table, "IMG_SIZE_ORIG_W", img_orig_w); |
