From 20344fea5cccae6605d10018f481b7a7fbdade52 Mon Sep 17 00:00:00 2001 From: dvorakmortonxd Date: Thu, 3 Sep 2026 13:01:25 +0200 Subject: [PATCH] initial commit --- CLAUDE.md | 1 - error.txt | 2 ++ sprechen | Bin 36104 -> 35640 bytes sprechen.c | 88 ++++++----------------------------------------------- 4 files changed, 11 insertions(+), 80 deletions(-) create mode 100644 error.txt diff --git a/CLAUDE.md b/CLAUDE.md index 5cd8c8e..456db2c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -60,7 +60,6 @@ The application is a simple GUI program written in C using GTK 4. It features: - A main window with a title "Sprechen.c". - A vertical box layout containing a centered label with welcome text. - Custom CSS styling for a gradient background and styled label box. -- The text size scales dynamically with the window width to ensure readability on different screen sizes. - The GTK application lifecycle is managed via `GtkApplication`, with activation callback setting up the UI. Future extensions may include: diff --git a/error.txt b/error.txt new file mode 100644 index 0000000..5264cf8 --- /dev/null +++ b/error.txt @@ -0,0 +1,2 @@ +Entering activate +After gtk_window_present diff --git a/sprechen b/sprechen index d8bcafcaecacdccd945e3684e02789709b3d4855..213c8acafce075123ac0bf06f63e54114516754a 100755 GIT binary patch delta 1638 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 -#include -#include - -typedef struct { - GtkWidget *label; - GtkCssProvider *provider; -} ScaleData; - -static void -on_window_notify (GObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - // We get the ScaleData from the window - ScaleData *scale_data = g_object_get_data(G_OBJECT(object), "scale-data"); - if (!scale_data || !scale_data->label || !scale_data->provider) - return; - - GtkWidget *window = GTK_WIDGET(object); - int width; - g_object_get(window, "width", &width, NULL); - - // Calculate font size in points based on width - // Base: 600px width -> 18 points - double points_per_pixel = 18.0 / 600.0; - double font_size_points = width * points_per_pixel; - // Clamp between 10 and 24 points - if (font_size_points < 10.0) font_size_points = 10.0; - if (font_size_points > 24.0) font_size_points = 24.0; - - // Update the CSS provider with the new font size - char *css_data = g_strdup_printf( - "window {" - " background-color: #2E3440;" - " background-image: linear-gradient(135deg, #2E3440 0%%, #3B4252 100%%);" - " color: #ECEFF4;" - " font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;" - "}" - "label {" - " margin: 30px;" - " padding: 30px;" - " background-color: rgba(59, 66, 82, 0.8);" - " border-radius: 16px;" - " box-shadow: 0 8px 16px rgba(0,0,0,0.4);" - " font-size: %dpt;" - "}", - (int)font_size_points); - - gtk_css_provider_load_from_string(scale_data->provider, css_data); - g_free(css_data); -} static void activate(GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *box; GtkWidget *label; GtkCssProvider *provider; - ScaleData *scale_data; // Create a new application window window = gtk_application_window_new(app); @@ -79,19 +27,15 @@ static void activate(GtkApplication *app, gpointer user_data) { gtk_label_set_max_width_chars(label, 40); gtk_box_append(GTK_BOX(box), label); - // Create and load CSS for beautiful background with initial font size + // Load CSS for beautiful background provider = gtk_css_provider_new(); - int initial_width = 600; // default width - double points_per_pixel = 18.0 / 600.0; - double initial_font_size_points = initial_width * points_per_pixel; - if (initial_font_size_points < 10.0) initial_font_size_points = 10.0; - if (initial_font_size_points > 24.0) initial_font_size_points = 24.0; - char *initial_css = g_strdup_printf( + gtk_css_provider_load_from_string(provider, "window {" - " background-color: #2E3440;" - " background-image: linear-gradient(135deg, #2E3440 0%%, #3B4252 100%%);" + " background-color: #2E3440;" /* Dark bluish background */ + " background-image: linear-gradient(135deg, #2E3440 0%, #3B4252 100%);" " color: #ECEFF4;" " font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;" + " font-size: 18px;" "}" "label {" " margin: 30px;" @@ -99,11 +43,8 @@ static void activate(GtkApplication *app, gpointer user_data) { " background-color: rgba(59, 66, 82, 0.8);" " border-radius: 16px;" " box-shadow: 0 8px 16px rgba(0,0,0,0.4);" - " font-size: %dpt;" - "}", - (int)initial_font_size_points); - gtk_css_provider_load_from_string(provider, initial_css); - g_free(initial_css); + "}" + ); // Apply CSS to the window gtk_style_context_add_provider_for_display( @@ -111,18 +52,7 @@ static void activate(GtkApplication *app, gpointer user_data) { GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER); - // We keep the provider to update it later, so we don't unreference it yet - // g_object_unref(provider); // We will unreference it in the cleanup? We'll store it in ScaleData and unreference when the window is destroyed. - - // Set up scaling data - scale_data = g_new(ScaleData, 1); - scale_data->label = label; - scale_data->provider = provider; - g_object_set_data_full(G_OBJECT(window), "scale-data", scale_data, g_free); - - // Connect to the window's notify::width and notify::height signals - g_signal_connect(window, "notify::width", G_CALLBACK(on_window_notify), NULL); - g_signal_connect(window, "notify::height", G_CALLBACK(on_window_notify), NULL); + g_object_unref(provider); gtk_window_present(window); } @@ -137,4 +67,4 @@ int main(int argc, char **argv) { g_object_unref(app); return status; -} \ No newline at end of file +}