summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2011-01-23 19:08:22 +0100
committerTomas Bzatek <tbzatek@users.sourceforge.net>2011-01-23 19:08:22 +0100
commit45b9708729828f944c07f8b99e7001490261cc53 (patch)
tree1e0ac9d90d53e3b8db7a9650e63e1381a1c17ee7 /src
parentede4432dab952314a57c94d8e713814e651f83ca (diff)
downloadcataract-45b9708729828f944c07f8b99e7001490261cc53.tar.xz
Get thumbnail orientation when really needed
No need to store generated data during thread work anymore.
Diffstat (limited to 'src')
-rw-r--r--src/generators.c41
-rw-r--r--src/generators.h4
-rw-r--r--src/items.h4
-rw-r--r--src/job-manager.c10
4 files changed, 24 insertions, 35 deletions
diff --git a/src/generators.c b/src/generators.c
index a8bdc36..c9fc4ef 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -109,8 +109,7 @@ generate_image (TGallerySetup *setup,
TIndexItem *item,
unsigned int item_index,
TPathInfo *path_info,
- gboolean update_when_necessary,
- gboolean *thumb_portrait)
+ gboolean update_when_necessary)
{
unsigned long new_w, new_h;
unsigned long thumb_w, thumb_h;
@@ -163,12 +162,11 @@ generate_image (TGallerySetup *setup,
if (new_w > 0 && new_h > 0) {
stats_images_inc ();
- source_img_portrait = (new_w / new_h) < 1;
+ source_img_portrait = new_h > new_w;
/* Generate thumbnail */
g_assert (thumb_src_full != NULL);
get_image_sizes (thumb_src_full, &thumb_w, &thumb_h);
- *thumb_portrait = (thumb_w / thumb_h) < 1;
if (thumb_w > 0 && thumb_h > 0) {
/* Squared thumbnails */
@@ -177,10 +175,10 @@ generate_image (TGallerySetup *setup,
thumb_h = setup->thumbnail_square_size;
} else
/* Portrait / Landscape thumbnails */
- if (! *thumb_portrait)
- calculate_sizes (setup->thumbnail_landscape_width, setup->thumbnail_landscape_height, &thumb_w, &thumb_h);
- else
+ if (thumb_h > thumb_w)
calculate_sizes (setup->thumbnail_portrait_width, setup->thumbnail_portrait_height, &thumb_w, &thumb_h);
+ else
+ calculate_sizes (setup->thumbnail_landscape_width, setup->thumbnail_landscape_height, &thumb_w, &thumb_h);
if (! resize_image (thumb_src_full, thumb_dst, thumb_w, thumb_h, setup->thumbnail_quality, TRUE, setup->squared_thumbnail_type))
log_error ("generate_image: error resizing thumbnail %s\n", thumb_src_full);
} else {
@@ -462,26 +460,31 @@ write_html_album (TGallerySetup *setup,
case INDEX_ITEM_TYPE_PICTURE:
/* Skip HTML code generation if it's a hidden item */
if (! item->hidden) {
+ s2 = item_get_thumbnail_src (setup, items, item, i);
+ if (s2 != NULL) {
+ s4 = g_build_filename (path_info->dest_dir, setup->thumbnail_dir, s2, NULL);
+ get_image_sizes (s4, &img_thumb_w, &img_thumb_h);
+ g_free (s4);
+ s1 = (img_thumb_h > img_thumb_w) ? "IMG_LIST_PORTRAIT" : "IMG_LIST_LANDSCAPE";
+ }
+
if (setup->squared_thumbnail_type != THUMBNAIL_SQUARE_TYPE_NONE)
s1 = "IMG_LIST_SQUARED";
- else
- s1 = item->gen_portrait ? "IMG_LIST_PORTRAIT" : "IMG_LIST_LANDSCAPE";
+ if (! s1)
+ s1 = "IMG_LIST_LANDSCAPE"; /* fallback case */
+
s1 = block_parser_get_data (block_parser, s1);
+ if (s2 != NULL) {
+ replace_table_add_key_printf (local_replace_table, "IMG_THUMBNAIL", "%s/%s", setup->thumbnail_dir, s2);
+ replace_table_add_key_int (local_replace_table, "IMG_SIZE_THUMB_W", img_thumb_w);
+ replace_table_add_key_int (local_replace_table, "IMG_SIZE_THUMB_H", img_thumb_h);
+ }
+ g_free (s2);
replace_table_add_key_printf (local_replace_table, "ALBUM_SUBPATH", "%s/%s", item->path, setup->index_file_name);
s3 = item_get_img_src (setup, items, item);
replace_table_add_key_printf (local_replace_table, "IMG_SUBPAGE", "%s%s", s3, GET_EXT (setup->index_file_name));
replace_table_add_key (local_replace_table, "IMG_FILENAME", s3);
g_free (s3);
- s3 = item_get_thumbnail_src (setup, items, item, i);
- if (s3 != NULL) {
- replace_table_add_key_printf (local_replace_table, "IMG_THUMBNAIL", "%s/%s", setup->thumbnail_dir, s3);
- s4 = g_build_filename (path_info->dest_dir, setup->thumbnail_dir, s3, NULL);
- get_image_sizes (s4, &img_thumb_w, &img_thumb_h);
- g_free (s4);
- replace_table_add_key_int (local_replace_table, "IMG_SIZE_THUMB_W", img_thumb_w);
- replace_table_add_key_int (local_replace_table, "IMG_SIZE_THUMB_H", img_thumb_h);
- }
- g_free (s3);
replace_table_add_key (local_replace_table, "IMG_TITLE", item->title);
replace_table_add_key (local_replace_table, "IMG_DESCRIPTION", item->title_description);
replace_table_add_key_printf (local_replace_table, "IMG_LIST_ID", "i%d", i + 1);
diff --git a/src/generators.h b/src/generators.h
index 9e9c55e..6a54ac3 100644
--- a/src/generators.h
+++ b/src/generators.h
@@ -29,7 +29,6 @@ G_BEGIN_DECLS
/*
* generate_image: generate needed image sizes
*
- * *portrait = indicate image orientation
* returns whether item needs to be updated
*/
gboolean generate_image (TGallerySetup *setup,
@@ -37,8 +36,7 @@ gboolean generate_image (TGallerySetup *setup,
TIndexItem *item,
unsigned int item_index,
TPathInfo *path_info,
- gboolean update_when_necessary,
- gboolean *thumb_portrait);
+ gboolean update_when_necessary);
/*
* write_html_album: process album and index template files
diff --git a/src/items.h b/src/items.h
index 491a8b3..6aad2a8 100644
--- a/src/items.h
+++ b/src/items.h
@@ -71,10 +71,6 @@ typedef struct {
gchar *border_style;
TIndexItemType type;
gboolean hidden;
-
- /* generated item info */
- /* !! be careful with writes to this structure during thread work !! */
- gboolean gen_portrait; /* thumbnail orientation, don't use for original image orientation */
} TIndexItem;
typedef struct {
diff --git a/src/job-manager.c b/src/job-manager.c
index 01515ec..1e088f8 100644
--- a/src/job-manager.c
+++ b/src/job-manager.c
@@ -51,7 +51,6 @@ typedef struct {
gboolean gen_done;
int index; /* processed image index */
int real_index; /* absolute index in the list */
- gboolean gen_thumb_portrait;
} TJobItem;
@@ -139,7 +138,7 @@ thread_func (gpointer data)
/* actually do some work */
if (item != NULL && job_item != NULL) {
imgname = g_path_get_basename ((item->path == NULL && item->preview) ? item->preview : item->path);
- updated = generate_image (job->setup, job->items, item, job_item->real_index, job->path_info, ! job->force_update, &job_item->gen_thumb_portrait);
+ updated = generate_image (job->setup, job->items, item, job_item->real_index, job->path_info, ! job->force_update);
if (updated && job->setup->verbose) {
G_LOCK (items_print);
@@ -319,7 +318,6 @@ build_tree (TGallerySetup *setup,
job_item->gen_done = FALSE;
job_item->index = job->total_items;
job_item->real_index = i;
- job_item->gen_thumb_portrait = FALSE;
job_items = g_list_append (job_items, job_item);
}
}
@@ -353,12 +351,6 @@ build_tree (TGallerySetup *setup,
#endif
g_free (job);
- /* Copy runtime flags back to items, outside of threading */
- for (l = job_items; l != NULL; l = l->next) {
- job_item = l->data;
- job_item->item->gen_portrait = job_item->gen_thumb_portrait;
- }
-
/* Cleanup generator objects */
g_list_foreach (job_items, (GFunc) g_free, NULL);
g_list_free (job_items);