OpenFPGA/libs/EXTERNAL/libezgl/examples/raw-gtk/raw-gtk.cpp

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
}