#endif
#include <stdlib.h>
-#include <sys/stat.h>
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <errno.h>
#include <string.h>
+#include <glib.h>
+#include <glib/gstdio.h>
#include "viking.h"
#include "thumbnails.h"
-#include "thumbnails_pixbuf.h"
+#include "icons/icons.h"
#ifdef __CYGWIN__
#ifdef __CYGWIN_USE_BIG_TYPES__
#undef MIN /* quit yer whining, gcc */
#undef MAX
-#include <sys/param.h> /* for realpath() */
#ifndef MAX
/* We need MAX macro and some system does not offer it */
#define MAX(a,b) (((a)>(b))?(a):(b))
#endif
+#define HOME_DIR g_get_home_dir()
+
#ifdef WINDOWS
-#define HOME_DIR "C:\\VIKING"
#define THUMB_DIR "\\THUMBNAILS\\" /* viking maps default viking\maps */
#define THUMB_SUB_DIR "normal\\"
-#define mkdir(a,b) mkdir(a)
-#define realpath(X,Y) _fullpath(Y,X,MAX_PATH)
-
#else
-#define HOME_DIR g_get_home_dir()
#define THUMB_DIR "/.thumbnails/"
#define THUMB_SUB_DIR "normal/"
#endif
GdkPixbuf *a_thumbnails_get_default ()
{
- return gdk_pixbuf_from_pixdata ( &tnnyl_pixbuf, FALSE, NULL );
+ return gdk_pixbuf_from_pixdata ( &thumbnails_pixbuf, FALSE, NULL );
}
/* filename must be absolute. you could have a function to make sure it exists and absolutize it */
if (w <= max_w && h <= max_h)
{
- gdk_pixbuf_ref(src);
+ g_object_ref ( G_OBJECT ( src ) );
return src;
}
else
static GdkPixbuf *child_create_thumbnail(const gchar *path)
{
- GdkPixbuf *image;
+ GdkPixbuf *image, *tmpbuf;
image = gdk_pixbuf_new_from_file(path, NULL);
+ if (!image)
+ return NULL;
+
+ tmpbuf = gdk_pixbuf_apply_embedded_orientation(image);
+ g_object_unref(G_OBJECT(image));
+ image = tmpbuf;
if (image)
{
GdkPixbuf *thumb = save_thumbnail(path, image);
- gdk_pixbuf_unref ( image );
+ g_object_unref ( G_OBJECT ( image ) );
return thumb;
}
struct stat info;
gchar *path;
int original_width, original_height;
+ const gchar* orientation;
GString *to;
char *md5, *swidth, *sheight, *ssize, *smtime, *uri;
mode_t old_mask;
thumb = a_thumbnails_scale_pixbuf(full, PIXMAP_THUMB_SIZE, PIXMAP_THUMB_SIZE);
+ orientation = gdk_pixbuf_get_option (full, "orientation");
+
original_width = gdk_pixbuf_get_width(full);
original_height = gdk_pixbuf_get_height(full);
g_free(path);
to = g_string_new(HOME_DIR);
-#ifndef WINDOWS
- mkdir(to->str, 0700);
-#endif
g_string_append(to, THUMB_DIR);
- mkdir(to->str, 0700);
g_string_append(to, THUMB_SUB_DIR);
- mkdir(to->str, 0700);
+ g_mkdir_with_parents(to->str, 0700);
g_string_append(to, md5);
name_len = to->len + 4; /* Truncate to this length when renaming */
#ifdef WINDOWS
"tEXt::Thumb::MTime", smtime,
"tEXt::Thumb::URI", uri,
"tEXt::Software", PROJECT,
+ "tEXt::Software::Orientation", orientation ? orientation : "0",
NULL);
umask(old_mask);
goto out;
err:
if (thumb)
- gdk_pixbuf_unref(thumb);
+ g_object_unref ( G_OBJECT ( thumb ) );
thumb = NULL;
out:
g_free(path);
g_return_val_if_fail(path != NULL, NULL);
- if (realpath(path, real))
+ if (file_realpath(path, real))
return g_strdup(real);
return g_strdup(path);
MD5Context ctx;
MD5Init(&ctx);
- MD5Update(&ctx, message, strlen(message));
+ MD5Update(&ctx, (md5byte *) message, strlen(message));
return MD5Final(&ctx);
}