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;
}
}
|