aboutsummaryrefslogtreecommitdiff
path: root/src/window.c
blob: 2f0dbcecf1cd2ba2c59d451f6b4d4e865413c536 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "window.h"
#include "file.h"
#include "image.h"
#include "input.h"
#include <gtk-3.0/gtk/gtk.h>

GtkWidget *window;
GtkWidget *scrolled_window;
int is_fullscreen = 0;

static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data)
{
    handle_key_press(event);
    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 set_window_title(const char *title)
{
    gtk_window_set_title(GTK_WINDOW(window), title);
}

void get_curr_win_size(gint *width, gint *height)
{
    gtk_window_get_size(GTK_WINDOW(window), width, height);
}

void quit()
{
    clean();
    g_application_quit(
        G_APPLICATION(gtk_window_get_application(GTK_WINDOW(window))));
}

void toggle_fullscreen()
{
    if (is_fullscreen) {
        gtk_window_unfullscreen(GTK_WINDOW(window));
        is_fullscreen = 0;
    } else {
        gtk_window_fullscreen(GTK_WINDOW(window));
        is_fullscreen = 1;
    }
}