59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
|
#include <gtk/gtk.h>
|
||
|
|
||
|
#include <iostream>
|
||
|
|
||
|
gboolean press_key(GtkWidget *widget, GdkEventKey *event, gpointer data);
|
||
|
gboolean click_mouse(GtkWidget *widget, GdkEventButton *event, gpointer data);
|
||
|
gboolean draw_canvas(GtkWidget *widget, cairo_t *cairo, gpointer data);
|
||
|
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
GtkBuilder *builder;
|
||
|
GObject *window;
|
||
|
GError *error = nullptr;
|
||
|
|
||
|
gtk_init(&argc, &argv);
|
||
|
|
||
|
/* Construct a GtkBuilder instance and load our UI description */
|
||
|
builder = gtk_builder_new();
|
||
|
if(gtk_builder_add_from_file(builder, "main.ui", &error) == 0) {
|
||
|
g_printerr("Error loading file: %s\n", error->message);
|
||
|
g_clear_error(&error);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/* Connect signal handlers to the constructed widgets. */
|
||
|
window = gtk_builder_get_object(builder, "MainWindow");
|
||
|
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
|
||
|
|
||
|
gtk_main();
|
||
|
|
||
|
g_object_unref(builder);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
gboolean press_key(GtkWidget *, GdkEventKey *event, gpointer)
|
||
|
{
|
||
|
// see: https://developer.gnome.org/gdk3/stable/gdk3-Keyboard-Handling.html
|
||
|
std::cout << gdk_keyval_name(event->keyval) << " was pressed.\n";
|
||
|
|
||
|
return FALSE; // propagate the event
|
||
|
}
|
||
|
|
||
|
gboolean click_mouse(GtkWidget *, GdkEventButton *event, gpointer)
|
||
|
{
|
||
|
if(event->type == GDK_BUTTON_PRESS) {
|
||
|
std::cout << "User clicked mouse at " << event->x << ", " << event->y << "\n";
|
||
|
} else if(event->type == GDK_BUTTON_RELEASE) {
|
||
|
std::cout << "User released mouse button at " << event->x << ", " << event->y << "\n";
|
||
|
}
|
||
|
|
||
|
return TRUE; // consume the event
|
||
|
}
|
||
|
|
||
|
gboolean draw_canvas(GtkWidget *, cairo_t *cairo, gpointer)
|
||
|
{
|
||
|
return FALSE; // propagate event
|
||
|
}
|