Gtk4 with Cpp.
References:
Gtk
1. Introduction
- Gtk4 is a widget toolkit for creating graphical user interface (UI). It works on many UNIX-like platform, Windows and Macos.
2. Setup the environment
Note:
- This is the guides for Windows machine using Windows Subsystem for Linux (WSL).
- [W]: The action will be performed on Windows Machine.
- [U]: The action will be performed on WSL (in my case, it named "Ubuntu") on the host Windows Machine.
- (Guides: ...): The reference link that I refer the step.
- (Not try yet): This is referred from the guides but I was not in that case, so that I could not try.
-------------------------------
A. Installing from packages
-------------------------------
1. [L] Install required packages.
1.1. [L] Debian/Ubuntu: sudo apt install libgtk-4-1 libgtk-4-dev gtk-4-examples
2. [L] Verify installation.
2.1. [L] gtk version - Run: pkg-config --modversion gtk4
2.2. [L] examples - Run: gtk4-demo
-------------------------------
B. (Optional) Build from Source
-------------------------------
1. [L] Install build tools.
1.1. [L] sudo apt install build-essential meson ninja-build \
libglib2.0-dev libpango1.0-dev libgdk-pixbuf-2.0-dev \
libatk1.0-dev libepoxy-dev libgirepository1.0-dev
2. [L] Clone GTK source.
2.1. [L] git clone https://gitlab.gnome.org/GNOME/gtk.git
2.2. [L] cd gtk
3. [L] Build with Meson + Ninja.
3.1. [L] meson setup builddir
3.2. [L] ninja -C builddir
4. [L] (Optional) Install system-wide.
4.1. [L] sudo ninja -C builddir install
3. HelloWorld
- Create a new file named
hello-world-gtk4.c
with following content:
#include <gtk/gtk.h>
static void
print_hello (GtkWidget *widget,
gpointer data)
{
g_print ("Hello World\n");
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
gtk_window_set_child (GTK_WINDOW (window), button);
gtk_window_present (GTK_WINDOW (window));
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
- Hints:
mkdir hello-world-project
cd hello-world-project
touch hello-world-gtk4.c
vi hello-world-gtk4.c
...
:wq
- Compile the program using gcc:
gcc [options] source.c -o program [libraries]
gcc $(pkg-config --cflags gtk4) hello-world-gtk4.c -o hell-world-gtk4 $(pkg-config --libs gtk4)
- Run the program
./hello-world-gtk4