diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 161 |
1 files changed, 10 insertions, 151 deletions
@@ -1,178 +1,37 @@ #include "file.h" #include "image.h" -#include <dirent.h> +#include "input.h" +#include "window.h" #include <gtk-3.0/gtk/gtk.h> -#include <libgen.h> -#include <stdlib.h> -#include <string.h> -#define TIMEOUT 20 - -GtkWidget *window; -gint win_width, win_height; -GError *error = NULL; - -void next() -{ - char *name; - if ((name = get_next_file()) != NULL) - load_image(name, win_width, win_height); -} - -void prev() -{ - char *name; - if ((name = get_prev_file()) != NULL) - load_image(name, win_width, win_height); -} - -void first() -{ - char *name; - if ((name = get_first_file()) != NULL) - load_image(name, win_width, win_height); -} - -void last() -{ - char *name; - if ((name = get_last_file()) != NULL) - load_image(name, win_width, win_height); -} - -static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) -{ - switch (event->key.keyval) { - case GDK_KEY_q: - g_application_quit( - G_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))); - return FALSE; - case GDK_KEY_w: - curr_scale_mod = fit; - fit_image(win_width, win_height); - return FALSE; - case GDK_KEY_plus: - case GDK_KEY_KP_Add: - zoom(1); - return FALSE; - case GDK_KEY_minus: - case GDK_KEY_KP_Subtract: - zoom(-1); - return FALSE; - case GDK_KEY_equal: - zoom(0); - return FALSE; - case GDK_KEY_n: - case GDK_KEY_j: - case GDK_KEY_Right: - next(); - return FALSE; - case GDK_KEY_p: - case GDK_KEY_k: - case GDK_KEY_Left: - prev(); - return FALSE; - case GDK_KEY_g: - case GDK_KEY_Home: - first(); - return FALSE; - case GDK_KEY_G: - case GDK_KEY_End: - last(); - return FALSE; - default: - return TRUE; - } -} - -gboolean scroll_callback(GtkWindow *window, GdkEvent *event, gpointer data) -{ - GdkModifierType state; - gdk_event_get_state(event, &state); - - switch (event->scroll.direction) { - case GDK_SCROLL_UP: - if (state & GDK_CONTROL_MASK) { - zoom(1); - curr_scale_mod = zoomed; - } else { - next(); - } - return FALSE; - break; - case GDK_SCROLL_DOWN: - if (state & GDK_CONTROL_MASK) { - zoom(-1); - curr_scale_mod = zoomed; - } else { - prev(); - } - return FALSE; - break; - default: - break; - } - return TRUE; -} - -gboolean resize_done(gpointer data) +void print_help() { - guint *id = data; - *id = 0; - gtk_window_get_size(GTK_WINDOW(window), &win_width, &win_height); - fit_image(win_width, win_height); - return FALSE; -} - -gboolean configure_callback(GtkWindow *window, GdkEvent *event, gpointer data) -{ - if (curr_scale_mod != fit) { - return FALSE; - } - static guint id = 0; - if (id) - g_source_remove(id); - id = g_timeout_add(TIMEOUT, resize_done, &id); - return FALSE; + printf("usage: qwe [filename]\n"); } static void activate(GtkApplication *app, gpointer user_data) { + print_help(); } static void open(GApplication *app, GFile **files, gint n_files, const gchar *hint) { if (n_files != 1) { + print_help(); return; } - window = gtk_application_window_new(GTK_APPLICATION(app)); - gtk_window_set_title(GTK_WINDOW(window), "qwe"); - gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); - g_signal_connect(G_OBJECT(window), "configure-event", - G_CALLBACK(configure_callback), NULL); - g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press), - NULL); - gtk_widget_add_events(GTK_WIDGET(window), GDK_SCROLL_MASK); - g_signal_connect(G_OBJECT(window), "scroll-event", - G_CALLBACK(scroll_callback), NULL); - char *curr_filename = g_file_get_path(files[0]); + create_main_window(app); + char *curr_filename = g_file_get_path(files[0]); int i = scan(curr_filename); if (i < 0) { - printf("scan() error %d\n", i); + printf("failed to load file"); return; } - 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(new_image())); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(scrolled_window)); - gtk_widget_show_all(GTK_WIDGET(window)); - - load_image(curr_filename, win_width, win_height); + load_image(curr_filename); } int main(int argc, char *argv[]) |