diff options
Diffstat (limited to 'src/eom-exif-util.c')
| -rw-r--r-- | src/eom-exif-util.c | 91 | 
1 files changed, 91 insertions, 0 deletions
| diff --git a/src/eom-exif-util.c b/src/eom-exif-util.c index 8ff9636..8bc4afd 100644 --- a/src/eom-exif-util.c +++ b/src/eom-exif-util.c @@ -35,6 +35,7 @@  #include <time.h>  #include "eom-exif-util.h" +#include "eom-util.h"  #include <string.h>  #include <glib/gi18n.h> @@ -192,6 +193,96 @@ eom_exif_util_format_date (const gchar *date)  	return new_date;  } +void +eom_exif_util_set_label_text (GtkLabel *label, +			      EomExifData *exif_data, +			      gint tag_id) +{ +	gchar exif_buffer[512]; +	const gchar *buf_ptr; +	gchar *label_text = NULL; + +	g_return_if_fail (GTK_IS_LABEL (label)); + +	if (exif_data) { +		buf_ptr = eom_exif_data_get_value (exif_data, tag_id, +						   exif_buffer, 512); + +		if (tag_id == EXIF_TAG_DATE_TIME_ORIGINAL && buf_ptr) +			label_text = eom_exif_util_format_date (buf_ptr); +		else +			label_text = eom_util_make_valid_utf8 (buf_ptr); +	} + +	gtk_label_set_text (label, label_text); +	g_free (label_text); +} + +void +eom_exif_util_set_focal_length_label_text (GtkLabel *label, +					   EomExifData *exif_data) +{ +	ExifEntry *entry = NULL, *entry35mm = NULL; +	ExifByteOrder byte_order; +	gfloat f_val = 0.0; +	gchar *fl_text = NULL,*fl35_text = NULL; + +	/* If no ExifData is supplied the label will be +	 * cleared later as fl35_text is NULL. */ +	if (exif_data != NULL) { +		entry = exif_data_get_entry (exif_data, EXIF_TAG_FOCAL_LENGTH); +		entry35mm = exif_data_get_entry (exif_data, +					    EXIF_TAG_FOCAL_LENGTH_IN_35MM_FILM); +		byte_order = exif_data_get_byte_order (exif_data); +	} + +	if (entry && G_LIKELY (entry->format == EXIF_FORMAT_RATIONAL)) { +		ExifRational value; + +		/* Decode value by hand as libexif is not necessarily returning +		 * it in the format we want it to be. +		 */ +		value = exif_get_rational (entry->data, byte_order); +		/* Guard against div by zero */ +		if (G_LIKELY(value.denominator != 0)) +			f_val = (gfloat)value.numerator/ +				(gfloat)value.denominator; + +		/* TRANSLATORS: This is the actual focal length used when +		   the image was taken.*/ +		fl_text = g_strdup_printf (_("%.1f (lens)"), f_val); + +	} +	if (entry35mm && G_LIKELY (entry35mm->format == EXIF_FORMAT_SHORT)) { +		ExifShort s_val; + +		s_val = exif_get_short (entry35mm->data, byte_order); + +		/* Print as float to get a similar look as above. */ +		/* TRANSLATORS: This is the equivalent focal length assuming +		   a 35mm film camera. */ +		fl35_text = g_strdup_printf(_("%.1f (35mm film)"),(float)s_val); +	} + +	if (fl_text) { +		if (fl35_text) { +			gchar *merged_txt; + +			merged_txt = g_strconcat (fl35_text,", ", fl_text, NULL); +			gtk_label_set_text (label, merged_txt); +			g_free (merged_txt); +		} else { +			gtk_label_set_text (label, fl_text); +		} +	} else { +		/* This will also clear the label if no ExifData was supplied */ +		gtk_label_set_text (label, fl35_text); +	} + +	g_free (fl35_text); +	g_free (fl_text); +} +  /**   * eom_exif_data_get_value:   * @exif_data: pointer to an <structname>ExifData</structname> struct | 
