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
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(, );
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