2017-12-29 13 views
1

Ich versuche, ein Etikett zu einem GTK3-Fenster hinzuzufügen und dann die Schriftgröße des Etiketts festzulegen. Hier ist mein Versuch:Wie wird die Schriftgröße eines Labels mit Pango-Attributen eingestellt?

#include <gtk/gtk.h> 

static void 
add_label (GtkWidget* window, gchar *text) 
{ 

    GtkWidget *label = gtk_label_new(text); 
    PangoAttrList *attrlist = pango_attr_list_new(); 
    PangoAttribute *attr = pango_attr_size_new_absolute(20); 
    pango_attr_list_insert(attrlist, attr); 
    gtk_label_set_attributes(GTK_LABEL(label), attrlist); 
    pango_attr_list_unref(attrlist); 
    gtk_container_add (GTK_CONTAINER (window), label); 
} 

static void 
activate (GtkApplication* app, 
      gpointer  user_data) 
{ 
    GtkWidget *window; 

    window = gtk_application_window_new (app); 
    gtk_window_set_title (GTK_WINDOW (window), "Window1"); 
    gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); 
    add_label(window, "Hello world"); 
    gtk_widget_show_all (window); 
} 

int 
main (int argc, char **argv) 
{ 
    GtkApplication *app; 
    int status; 

    app = gtk_application_new ("org.gtk.example", 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; 
} 

Dies erzeugt überhaupt kein Label. Wenn ich die Zeile auskommentiere:

gtk_label_set_attributes(GTK_LABEL(label), attrlist); 

das Etikett erscheint, aber die Schriftgröße ist nicht festgelegt.

+0

Dies ist ein weiterer Grund, warum Sie nur CSS verwenden sollten. :) –

Antwort

2

Ich glaube, PANGO_SCALE fehlt hier.

PangoAttribute *attr = pango_attr_size_new_absolute(20 * PANGO_SCALE); 

Dies sollte man das gewünschte Ergebnis:

enter image description here

+0

Großartig, das funktioniert! Ich war mir der Pango-Skalierung nicht bewusst. –

+1

[Die Dokumentation] (https://developer.gnome.org/pango/stable/pango-Text-Attributes.html#pango-attr-size-new-absolute) sagt 'Größe: die Schriftgröße, in PANGO_SCALEths von eine Geräteeinheit. Das ist der Grund, warum Sie multiplizieren müssen. –

Verwandte Themen