diff options
author | nirav <nirav@teisuu.com> | 2018-09-02 13:07:04 +0530 |
---|---|---|
committer | Dandelion <nirav@teisuu.com> | 2018-09-02 13:07:04 +0530 |
commit | 4283d4074c45d27704b00d9ea80eae7847d66375 (patch) | |
tree | 2b3cdc93496a22feba9af1a50444c7d7ab6cdce4 /main.c | |
parent | 86031af54187b1815dbf18e0da463dffcb193733 (diff) | |
download | im-4283d4074c45d27704b00d9ea80eae7847d66375.tar.gz im-4283d4074c45d27704b00d9ea80eae7847d66375.zip |
Added support for loading next, prev image
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 109 |
1 files changed, 100 insertions, 9 deletions
@@ -1,4 +1,12 @@ +#include <curses.h> +#include <dirent.h> #include <gtk-3.0/gtk/gtk.h> +#include <libgen.h> +#include <stdlib.h> +#include <string.h> + +#include "dir.h" + #define TIMEOUT 20 #define ZOOM_FACTOR 0.1 @@ -15,6 +23,34 @@ int pixbuf_width, pixbuf_height; double aspect_ratio; double curr_zoom = 1.0; enum scale_mode curr_scale_mod; +GError *error = NULL; + +char *curr_file_name; +GDir *dir; +char **file_list; +int curr_file_index, file_list_count; + +void print_supported_formats() +{ + GSList *list, *it; + GdkPixbufFormat *format; + gchar **extensions; + gchar *ex; + + list = gdk_pixbuf_get_formats(); + if (list != NULL) { + for (it = list; it->next != NULL; it = it->next) { + format = (GdkPixbufFormat *)it->data; + g_print("%s:", gdk_pixbuf_format_get_description(format)); + extensions = gdk_pixbuf_format_get_extensions(format); + for (ex = *extensions; *ex; ex++) { + g_print(" %s", ex); + } + g_print("\n"); + } + g_slist_free(list); + } +} void fit_image() { @@ -50,6 +86,52 @@ void fit_image() gtk_image_set_from_pixbuf(GTK_IMAGE(image), GDK_PIXBUF(curr_pixbuf)); } +void next() +{ + if (curr_file_index >= file_list_count - 1) { + return; + } + curr_file_index++; + curr_file_name = file_list[curr_file_index]; + g_print("qwe2: %s\n", curr_file_name); + g_object_unref(pixbuf); + pixbuf = gdk_pixbuf_new_from_file(curr_file_name, &error); + if (error) { + g_warning("gdk_pixbuf_new_from_file() failed with error: %s\n", + error->message); + g_clear_error(&error); + return; + } + pixbuf_width = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf)); + pixbuf_height = gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf)); + aspect_ratio = (double)pixbuf_width / (double)pixbuf_height; + curr_zoom = 1.0; + fit_image(); +} + +void prev() +{ + if (curr_file_index <= 0) { + return; + } + curr_file_index--; + curr_file_name = file_list[curr_file_index]; + g_print("qwe2: %s\n", curr_file_name); + g_object_unref(pixbuf); + pixbuf = gdk_pixbuf_new_from_file(curr_file_name, &error); + if (error) { + g_warning("gdk_pixbuf_new_from_file() failed with error: %s\n", + error->message); + g_clear_error(&error); + return; + } + pixbuf_width = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf)); + pixbuf_height = gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf)); + aspect_ratio = (double)pixbuf_width / (double)pixbuf_height; + curr_zoom = 1.0; + fit_image(); +} + void zoom(int type) { if (type == 0) { @@ -85,17 +167,22 @@ static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) fit_image(); return FALSE; case GDK_KEY_plus: - case GDK_KEY_ScrollUp: zoom(1); return FALSE; case GDK_KEY_minus: - case GDK_KEY_ScrollDown: zoom(-1); return FALSE; case GDK_KEY_equal: - case GDK_KEY_ScrollClick: zoom(0); return FALSE; + case GDK_KEY_n: + case GDK_KEY_j: + next(); + return FALSE; + case GDK_KEY_p: + case GDK_KEY_k: + prev(); + return FALSE; default: return TRUE; } @@ -140,8 +227,6 @@ gboolean configure_callback(GtkWindow *window, GdkEvent *event, gpointer data) static void activate(GtkApplication *app, gpointer user_data) { - GError *error = NULL; - window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "qwe"); gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); @@ -153,23 +238,29 @@ static void activate(GtkApplication *app, gpointer user_data) g_signal_connect(G_OBJECT(window), "scroll-event", G_CALLBACK(scroll_callback), NULL); - pixbuf = gdk_pixbuf_new_from_file( - "/home/nirav/Downloads/Saved Pictures/bash help shortcuts.png", &error); + char *curr_filename = + "/home/nirav/Downloads/Saved Pictures/bash help shortcuts.png"; + + curr_file_index = scan(curr_filename, &file_list, &file_list_count); + printf("num %d %d\n", curr_file_index, file_list_count); + printf("file %s\n", file_list[curr_file_index]); + + pixbuf = gdk_pixbuf_new_from_file(curr_filename, &error); if (error) { g_warning("gdk_pixbuf_new_from_file() failed with error: %s\n", error->message); g_clear_error(&error); return; } - image = gtk_image_new_from_pixbuf(GDK_PIXBUF(pixbuf)); pixbuf_width = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf)); pixbuf_height = gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf)); aspect_ratio = (double)pixbuf_width / (double)pixbuf_height; + + image = gtk_image_new_from_pixbuf(GDK_PIXBUF(pixbuf)); GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(image)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(scrolled_window)); gtk_widget_show_all(GTK_WIDGET(window)); } |