Hi Radomir,

The function gtk_widget_override_font() is deprecated but as far as I know it 
still works fine in GTK3. 

With the Pango font description and the textview you should be able to set 
everything up without getting any deprecated warnings. It doesn't set the 
textview widget itself to a particular font but you do have the Pango font 
description that you can use elsewhere if needed.

Eric

    
//gcc -Wall font_chooser1.c -o font_chooser1 `pkg-config --cflags --libs 
gtk+-3.0`

#include <gtk/gtk.h>

static void show_font_chooser(GtkWidget *button, gpointer **user_data)
  {
    static gint i=1;
    GtkWidget *chooser=gtk_font_chooser_dialog_new("Font Chooser", 
GTK_WINDOW(user_data[0]));
    gint result=gtk_dialog_run(GTK_DIALOG(chooser));

    if(result==GTK_RESPONSE_OK)
      {       
        PangoFontDescription 
*desc=gtk_font_chooser_get_font_desc(GTK_FONT_CHOOSER(chooser));
        GtkTextBuffer 
*buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(user_data[1]));
        gchar *tag_name=g_strdup_printf("font-tag%i", i);
        GtkTextTag *font_tag=gtk_text_buffer_create_tag(buffer, tag_name, 
"font-desc", desc, NULL);
        g_ptr_array_add((GPtrArray*)user_data[2], (gpointer)font_tag);
        i++;
        g_free(tag_name);
        pango_font_description_free(desc);
      }
    
    gtk_widget_destroy(chooser);
  }
static void insert_text(GtkTextBuffer *textbuffer, GtkTextIter *location, gchar 
*text, gint len, GPtrArray *tags)
  {
    GtkTextIter *start=gtk_text_iter_copy(location);
    gtk_text_iter_backward_chars(start, len);
    //Get the last tag added to the tag array.
    GtkTextTag *font_tag=GTK_TEXT_TAG(g_ptr_array_index(tags, ((tags->len)-1)));
    gtk_text_buffer_apply_tag(textbuffer, font_tag, start, location);
    gtk_text_iter_free(start);
  }
int main(int argc, char *argv[])
  {
    gtk_init(&argc, &argv);

    GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Font Chooser");
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 300);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_container_set_border_width(GTK_CONTAINER(window), 20);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    GtkWidget *textview=gtk_text_view_new();
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_CHAR);
    gtk_widget_set_hexpand(textview, TRUE);
    gtk_widget_set_vexpand(textview, TRUE);

    PangoContext *context=gtk_widget_get_pango_context(textview);
    PangoFontDescription *desc=pango_context_get_font_description(context);

    //For saving the tag pointers.
    GPtrArray *tags=g_ptr_array_new();

    GtkTextBuffer *buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    GtkTextTag *font_tag=gtk_text_buffer_create_tag(buffer, "font-tag", 
"font-desc", desc, NULL);
    g_ptr_array_add(tags, (gpointer)font_tag);
    g_signal_connect_after(buffer, "insert-text", G_CALLBACK(insert_text), 
tags); 

    GtkWidget *button=gtk_button_new_with_label("FontChooser");
    gtk_widget_set_hexpand(button, TRUE);
    gpointer user_data[]={window, textview, tags};
    g_signal_connect(button, "clicked", G_CALLBACK(show_font_chooser), 
user_data);

    GtkWidget *grid=gtk_grid_new();
    gtk_grid_attach(GTK_GRID(grid), textview, 0, 0, 1, 1);
    gtk_grid_attach(GTK_GRID(grid), button, 0, 1, 1, 1);

    gtk_container_add(GTK_CONTAINER(window), grid);

    gtk_widget_show_all(window);
    
    gtk_main();

    return 0;
  }

 
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to