summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/generators.c67
1 files changed, 55 insertions, 12 deletions
diff --git a/src/generators.c b/src/generators.c
index 4648f49..5a76827 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -854,7 +854,8 @@ process_img_item (TGallerySetup *setup,
GHashTable *defines,
TImageSize *image_size,
TImageSize *thumb_image_size,
- gboolean list_mode)
+ gboolean list_mode,
+ gboolean all_image_sizes)
{
unsigned long img_w, img_h;
unsigned long img_orig_w, img_orig_h;
@@ -868,6 +869,7 @@ process_img_item (TGallerySetup *setup,
TImageSize *tmp_image_size;
ExifData *exif = NULL;
struct HaveImageSizeData *img_size_data;
+ GList *l;
if (list_mode) {
/* Index stuff */
@@ -927,27 +929,59 @@ process_img_item (TGallerySetup *setup,
}
/* Image stuff */
- if (image_size != NULL) {
+ for (l = g_list_first (setup->design->image_sizes); l; l = g_list_next (l)) {
+ tmp_image_size = l->data;
+ if (! all_image_sizes && tmp_image_size != image_size)
+ continue;
+ if (tmp_image_size->is_thumbnail)
+ continue;
/* First calculate image paths */
- img_dst = get_image_dest_path_with_fallback (setup, items, item, path_info, image_size, FALSE);
- img_dst_page = get_image_dest_path_with_fallback (setup, items, item, path_info, image_size, TRUE);
+ if (all_image_sizes) {
+ img_dst = get_image_dest_path (setup, items, item, path_info, tmp_image_size, FALSE);
+ if (g_access (img_dst, R_OK) != 0) {
+ g_free (img_dst);
+ continue;
+ }
+ img_dst_page = get_image_dest_path (setup, items, item, path_info, tmp_image_size, TRUE);
+ } else {
+ img_dst = get_image_dest_path_with_fallback (setup, items, item, path_info, tmp_image_size, FALSE);
+ img_dst_page = get_image_dest_path_with_fallback (setup, items, item, path_info, tmp_image_size, TRUE);
+ }
/* Retrieve image sizes */
get_image_sizes (img_dst, &img_w, &img_h, NULL, setup->autorotate);
- exif = get_img_exif_data (setup, path_info, items, item, image_size);
- 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 (replace_table, "IMG_SRC", img_dst_page);
+ exif = get_img_exif_data (setup, path_info, items, item, tmp_image_size);
+ if (all_image_sizes) {
+ s1 = g_ascii_strup (tmp_image_size->name, -1);
+ s2 = g_strdup_printf ("IMG_SIZE_W__%s", s1);
+ replace_table_add_key_int (replace_table, s2, img_w);
+ g_free (s2);
+ s2 = g_strdup_printf ("IMG_SIZE_H__%s", s1);
+ replace_table_add_key_int (replace_table, s2, img_h);
+ g_free (s2);
+ s2 = g_strdup_printf ("IMG_SRC__%s", s1);
+ replace_table_add_key (replace_table, s2, img_dst_page);
+ g_free (s2);
+ g_hash_table_replace (defines, g_strdup_printf ("HAVE_IMG_SIZE_%s", s1), g_strdup (""));
+ g_free (s1);
+ }
+ if (tmp_image_size == image_size) {
+ 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 (replace_table, "IMG_SRC", img_dst_page);
+ }
g_free (img_dst);
g_free (img_dst_page);
+ }
+ if (! all_image_sizes && image_size != NULL) {
/* Legacy stuff, subject to removal */
tmp_image_size = NULL;
/* Take the last image size from the sorted list */
if (g_list_length (setup->design->image_sizes) > 0)
tmp_image_size = (TImageSize *) (g_list_last (setup->design->image_sizes))->data;
- if (tmp_image_size != NULL && tmp_image_size != image_size) {
+ if (tmp_image_size != NULL && tmp_image_size != image_size && ! tmp_image_size->is_thumbnail) {
img_dst = get_image_dest_path_with_fallback (setup, items, item, path_info, tmp_image_size, FALSE);
img_dst_page = get_image_dest_path_with_fallback (setup, items, item, path_info, tmp_image_size, TRUE);
get_image_sizes (img_dst, &img_orig_w, &img_orig_h, NULL, setup->autorotate);
@@ -960,6 +994,7 @@ process_img_item (TGallerySetup *setup,
}
}
+
/* Get title and description from IPTC/EXIF/JPEG if not defined */
get_item_titles (setup, item, exif, &title, &title_desc);
replace_table_add_key (replace_table, "IMG_TITLE", title);
@@ -1045,6 +1080,7 @@ write_html_page (TGallerySetup *setup,
GHashTable *local_defines;
TImageSize *image_size, *thumb_image_size;
struct HaveImageSizeData *img_size_data;
+ gboolean all_sizes;
res = TRUE;
@@ -1127,12 +1163,13 @@ write_html_page (TGallerySetup *setup,
/* Picture page tags */
if (item != NULL) {
add_next_prev_links (setup, path_info, theme, items, item, global_replace_table, image_size);
- process_img_item (setup, path_info, theme, items, item, block_parser, global_replace_table, defines, image_size, thumb_image_size, FALSE);
+ process_img_item (setup, path_info, theme, items, item, block_parser, global_replace_table, defines, image_size, thumb_image_size, FALSE, FALSE);
}
/* Setup block parser */
block_parser_register_key (block_parser, "IMG_LIST", "IMG_LIST");
block_parser_register_key (block_parser, "LIST_PICTURE", NULL);
+ block_parser_register_key (block_parser, "LIST_PICTURE_ALL_SIZES", NULL);
block_parser_register_key (block_parser, "LIST_SEPARATOR", NULL);
block_parser_register_key (block_parser, "LIST_INTERSPACE", NULL);
block_parser_register_key (block_parser, "NAV_BAR", "NAV_BAR");
@@ -1166,8 +1203,13 @@ write_html_page (TGallerySetup *setup,
switch (iter_item->type) {
case INDEX_ITEM_TYPE_PICTURE:
if (! iter_item->hidden) {
- s1 = block_parser_get_data (block_parser, "LIST_PICTURE");
- process_img_item (setup, path_info, theme, items, iter_item, local_block_parser, local_replace_table, local_defines, image_size, thumb_image_size, TRUE);
+ all_sizes = FALSE;
+ s1 = block_parser_get_data (block_parser, "LIST_PICTURE_ALL_SIZES");
+ if (s1)
+ all_sizes = TRUE;
+ else
+ s1 = block_parser_get_data (block_parser, "LIST_PICTURE");
+ process_img_item (setup, path_info, theme, items, iter_item, local_block_parser, local_replace_table, local_defines, image_size, thumb_image_size, TRUE, all_sizes);
}
break;
@@ -1202,6 +1244,7 @@ write_html_page (TGallerySetup *setup,
/* Clear processed nested keys for further use */
block_parser_clear_key_data (block_parser, "IMG_LIST");
block_parser_clear_key_data (block_parser, "LIST_PICTURE");
+ block_parser_clear_key_data (block_parser, "LIST_PICTURE_ALL_SIZES");
block_parser_clear_key_data (block_parser, "LIST_SEPARATOR");
block_parser_clear_key_data (block_parser, "LIST_INTERSPACE");
}