From ced9539fef270fe133cb0ad6fc04c30bd5fa2dfe Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 7 Apr 2013 18:11:42 +0200 Subject: Add ability to specify thumbnail square crop hint In simple crop square mode it's sometimes viable to specify position of the square. This is vastly useful for portrait pictures so that you don't crop the head off the body. --- src/items.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) (limited to 'src/items.c') diff --git a/src/items.c b/src/items.c index 85f0a26..31ab41f 100644 --- a/src/items.c +++ b/src/items.c @@ -85,6 +85,29 @@ parse_datetime_string (const gchar *str) return rt; } +static TCropHint +parse_thumbnail_crop_hint (const gchar *str) +{ + g_return_val_if_fail (str != NULL, CROP_HINT_UNDEFINED); + + if (g_ascii_strcasecmp (str, "center") == 0) + return CROP_HINT_CENTER; + else + if (g_ascii_strcasecmp (str, "left") == 0) + return CROP_HINT_LEFT; + else + if (g_ascii_strcasecmp (str, "right") == 0) + return CROP_HINT_RIGHT; + else + if (g_ascii_strcasecmp (str, "top") == 0) + return CROP_HINT_TOP; + else + if (g_ascii_strcasecmp (str, "bottom") == 0) + return CROP_HINT_BOTTOM; + else + return CROP_HINT_UNDEFINED; +} + /* * parse_album_xml: XML parser for gallery index.xml files @@ -161,6 +184,12 @@ parse_album_xml (const gchar *filename, TPathInfo *path_info) g_free (s); } + s = xml_file_get_node_attribute (xml, "/gallery/general/thumbnail", "crop"); + if (s != NULL) { + index->thumbnail_crop_hint = parse_thumbnail_crop_hint (s); + g_free (s); + } + index->nofullsize = xml_file_get_node_present (xml, "/gallery/general/nofullsize"); index->fullsize = xml_file_get_node_present (xml, "/gallery/general/fullsize"); @@ -306,6 +335,14 @@ parse_album_xml (const gchar *filename, TPathInfo *path_info) g_free (s2); } + s = g_strdup_printf ("/gallery/items/*[%d]/thumbnail", i + 1); + s2 = xml_file_get_node_attribute (xml, s, "crop"); + g_free (s); + if (s2 != NULL) { + item->thumbnail_crop_hint = parse_thumbnail_crop_hint (s2); + g_free (s2); + } + if (item->path || item->preview) { g_ptr_array_add (index->items, item); } else { @@ -422,15 +459,15 @@ free_album_data (TAlbum *album) * get_album_info: retrieve number of items and protected status in the specified album */ void -get_album_info (const gchar *filename, int *objects_count, gboolean *protected) +get_album_info (const gchar *filename, int *objects_count, gboolean *is_protected) { TXMLFile *xml; int count, hidden; if (objects_count) *objects_count = 0; - if (protected) - *protected = FALSE; + if (is_protected) + *is_protected = FALSE; xml = xml_parser_load (filename); if (xml == NULL) @@ -441,9 +478,9 @@ get_album_info (const gchar *filename, int *objects_count, gboolean *protected) if (objects_count) *objects_count = count - hidden; - if (protected) - *protected = xml_file_get_node_present (xml, "/gallery/general/auth/username") && - xml_file_get_node_present (xml, "/gallery/general/auth/password"); + if (is_protected) + *is_protected = xml_file_get_node_present (xml, "/gallery/general/auth/username") && + xml_file_get_node_present (xml, "/gallery/general/auth/password"); xml_parser_free (xml); } -- cgit v1.2.3