#include "window.h" #include "image.h" #include "input.h" #include GtkWidget *window; GtkWidget *scrolled_window; static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) { handle_key_press(event->key); return FALSE; } static gboolean button_press(GtkWindow *window, GdkEvent *event, gpointer data) { handle_button_press(event); return TRUE; } static gboolean button_release(GtkWindow *window, GdkEvent *event, gpointer data) { handle_button_release(); return TRUE; } static gboolean motion_notify(GtkWindow *window, GdkEvent *event, gpointer data) { handle_mouse_move(event->motion.x, event->motion.y); return TRUE; } static gboolean scroll_callback(GtkWindow *window, GdkEvent *event, gpointer data) { handle_scroll(event); return TRUE; } static gboolean configure_callback(GtkWindow *window, GdkEvent *event, gpointer data) { handle_resize(); return TRUE; } void create_main_window(GApplication *app) { 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); g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(button_press), NULL); g_signal_connect(G_OBJECT(window), "button-release-event", G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT(window), "motion-notify-event", G_CALLBACK(motion_notify), NULL); gtk_widget_add_events(GTK_WIDGET(window), GDK_SCROLL_MASK); g_signal_connect(G_OBJECT(window), "scroll-event", G_CALLBACK(scroll_callback), NULL); 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)); } void scroll_window(gdouble x, gdouble y) { GtkAdjustment *h_adj = gtk_scrolled_window_get_hadjustment( GTK_SCROLLED_WINDOW(scrolled_window)); GtkAdjustment *v_adj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(scrolled_window)); gtk_adjustment_set_value(h_adj, gtk_adjustment_get_value(h_adj) + x); gtk_adjustment_set_value(v_adj, gtk_adjustment_get_value(v_adj) + y); gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window), h_adj); gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolled_window), v_adj); } void get_curr_win_size(gint *width, gint *height) { gtk_window_get_size(GTK_WINDOW(window), width, height); } void quit() { g_application_quit( G_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))); }