From 821bf8c133f6ee9b739352dc707c9a4953f4b0e5 Mon Sep 17 00:00:00 2001 From: Romain de Laage Date: Thu, 11 Feb 2021 10:50:58 +0100 Subject: [PATCH] Initial commit --- Makefile | 12 +++ src/main.c | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 Makefile create mode 100644 src/main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d867f89 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +CFLAGS=$(shell pkg-config --cflags --libs gtk+-3.0) +CC=gcc +VERSION=0.0 +BUILD_DIR=build +BUILD_NAME=gemgui +OS=$(shell uname -r) + +all: debug + +debug: + mkdir -p build/debug + $(CC) -o $(BUILD_DIR)/debug/$(BUILD_NAME)-$(OS) $(CFLAGS) src/* diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..0003b6e --- /dev/null +++ b/src/main.c @@ -0,0 +1,232 @@ +#include + +GtkEntryBuffer *pathBarContent = NULL; +GtkWidget *render = NULL; +GtkWidget *window = NULL; + +static void +loadPage (const char *link) +{ + printf("Loading page : %s\n", link); +} + +static void +linkAction (GtkWidget *widget, + gpointer data) +{ + loadPage ((const char*)data); +} + +static void +goAction (GtkWidget *widget, + gpointer data) +{ + loadPage ((const char*)gtk_entry_buffer_get_text (pathBarContent)); +} + +static void +addText (GtkWidget *root, + gchar *text) +{ + GtkWidget *label = gtk_label_new (text); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle1 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle2 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle3 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle4 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle5 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addTitle6 (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addLink (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + g_signal_connect (label, "clicked", G_CALLBACK (linkAction), "un lien"); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +addCode (GtkWidget *root, + gchar *text) +{ + gchar *markup = g_markup_printf_escaped ("%s", text); + GtkWidget *label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), markup); + g_free (markup); + + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_container_add (GTK_CONTAINER (root), label); + //gtk_label_set_selectable (GTK_LABEL (label), TRUE); +} + +static void +makeRender (void) +{ + if (render != NULL) + gtk_widget_destroy (render); + + render = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); + + addTitle1 (render, "Titre de test"); + addTitle2 (render, "Titre de test"); + addTitle3 (render, "Titre de test"); + addTitle4 (render, "Titre de test"); + addTitle5 (render, "Titre de test"); + addTitle6 (render, "Titre de test"); + addText (render, "Bonjour, ceci est un test.\nFonctionne-t-il ?"); + addLink(render, "lien test"); + addCode(render, " .~.\n /V\\\n // \\\\\n/( )\\\n ^`~'^"); + + gtk_container_add (GTK_CONTAINER (window), render); +} + +/* This function's goal is to build the main interface */ +static void +build_interface () +{ + GtkWidget *pathBar; + GtkWidget *headerBar; + GtkWidget *goButtonBox; + GtkWidget *goButton; + + /* Building title bar */ + headerBar = gtk_header_bar_new (); + gtk_header_bar_set_title(GTK_HEADER_BAR (headerBar), "GTK Gemini Browser"); + gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerBar), TRUE); + gtk_window_set_titlebar (GTK_WINDOW (window), headerBar); + pathBarContent = gtk_entry_buffer_new (NULL, -1); + pathBar = gtk_entry_new_with_buffer (pathBarContent); + goButtonBox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); + goButton = gtk_button_new_with_label ("Go !"); + g_signal_connect (goButton, "clicked", G_CALLBACK (goAction), NULL); + gtk_container_add (GTK_CONTAINER (goButtonBox), goButton); + gtk_container_add (GTK_CONTAINER (headerBar), pathBar); + gtk_container_add (GTK_CONTAINER (headerBar), goButtonBox); + + makeRender (); +} + +/* This function's goal is to create the window then show it */ +static void +activate (GtkApplication *app, + gpointer user_data) +{ + window = gtk_application_window_new (app); + gtk_window_set_title (GTK_WINDOW (window), "MDViewer"); + gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); + build_interface (); + gtk_widget_show_all (window); +} + +int +main (int argc, + char **argv) +{ + GtkApplication *app; + int status; + + app = gtk_application_new ("ovh.rdelaage.mdviewer", G_APPLICATION_FLAGS_NONE); + g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); + status = g_application_run(G_APPLICATION (app), argc, argv); + g_object_unref (app); + + return status; +}