diff options
Diffstat (limited to 'image.c')
-rw-r--r-- | image.c | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/image.c b/image.c deleted file mode 100644 index d4765fd..0000000 --- a/image.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "image.h" -#include "window.h" -#include <gtk-3.0/gtk/gtk.h> - -GtkWidget *new_image() -{ - image = gtk_image_new(); - return image; -} - -int load_image(char *file_name) -{ - GError *error = NULL; - if (pixbuf != NULL) - g_object_unref(pixbuf); - pixbuf = gdk_pixbuf_new_from_file(file_name, &error); - if (error) - return -1; - curr_pixbuf_width = pixbuf_width = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf)); - curr_pixbuf_height = pixbuf_height = - gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf)); - aspect_ratio = (double)pixbuf_width / (double)pixbuf_height; - curr_zoom = 1.0; - fit_image(); - set_window_title(g_path_get_basename(file_name)); - return 1; -} - -void update_pixbuf() -{ - if (curr_pixbuf != NULL) - g_object_unref(curr_pixbuf); - if (pixbuf == NULL) - return; - curr_pixbuf = - gdk_pixbuf_scale_simple(GDK_PIXBUF(pixbuf), curr_pixbuf_width, - curr_pixbuf_height, GDK_INTERP_BILINEAR); - gtk_image_set_from_pixbuf(GTK_IMAGE(image), GDK_PIXBUF(curr_pixbuf)); -} - -void fit_image() -{ - gint win_width, win_height; - get_curr_win_size(&win_width, &win_height); - curr_scale_mod = fit; - if (pixbuf == NULL || win_width < 1 || win_height < 1) - return; - if (win_width < pixbuf_width && win_height > pixbuf_height) { - curr_pixbuf_width = win_width; - curr_pixbuf_height = (double)curr_pixbuf_width / aspect_ratio; - } else if (win_width > pixbuf_width && win_height < pixbuf_height) { - curr_pixbuf_height = win_height; - curr_pixbuf_width = (double)curr_pixbuf_height * aspect_ratio; - } else if (win_width < pixbuf_width && win_height < pixbuf_height) { - if (((double)win_width / (double)win_height) > aspect_ratio) { - curr_pixbuf_height = win_height; - curr_pixbuf_width = ((double)curr_pixbuf_height * aspect_ratio); - } else { - curr_pixbuf_width = win_width; - curr_pixbuf_height = (double)curr_pixbuf_width / aspect_ratio; - } - } else { - curr_pixbuf_width = pixbuf_width; - curr_pixbuf_height = pixbuf_height; - } - - curr_zoom = (double)curr_pixbuf_width / (double)pixbuf_width; - if (curr_pixbuf_width < 1 || curr_pixbuf_height < 1) - return; - - update_pixbuf(); -} - -void zoom(int type) -{ - curr_scale_mod = zoomed; - if (pixbuf == NULL) - return; - if (type == 0) { - if (curr_zoom == 1.0) - return; - curr_zoom = 1.0; - } else if (type < 0) { - if (curr_zoom < 0.2) - return; - curr_zoom -= 0.1; - } else if (type > 0) { - if (curr_zoom > 2) - return; - curr_zoom += 0.1; - } - - curr_pixbuf_width = curr_zoom * (double)pixbuf_width; - curr_pixbuf_height = curr_zoom * (double)pixbuf_height; - - update_pixbuf(); -} |