summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/generators.c53
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);