aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c109
1 files changed, 100 insertions, 9 deletions
diff --git a/main.c b/main.c
index 7743c8e..5ac2806 100644
--- a/main.c
+++ b/main.c
@@ -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));
}