.

Breaking News
recent

-

Styles of fonts in Gtk 3.6

Encontré un pequeño código en C que utiliza las Librerias Gtk .
Yo al código lo porte a Gtk 3.6 .
El código en C permite obtener la lista de las fuentes de escritura disponibles
en nuestro escritorio .

Para compilarlo necesitas tener instalado el compilador GCC y las
librerias GTK 3

##############################################################

Instalar Librerias Gtk

En consola vamos a teclear estas instrucciones para instalar las librerías:


sudo apt-get install libgtk-3-dev


Con esto se nos descargarán toda una serie de librerías, las cuales dependen de ésta, incluyendo los paquetes de desarrollo de gtk3, glib, librerías para X windows .

Una vez que la instalación ha finalizado, simplemente tenemos que compilar nuestro programa de esta manera:


gcc -o font font.c `pkg-config --cflags gtk+-3.0 --libs gtk+-3.0`


Con esto generamos un archivo ejecutable, y por lo tanto el programa ejecutable en Gnome.

////////////////////////////////////////////////////////////////////////////////////////////////////
Descargar código :

ir a Fuente de Informacion .


#########################################################

El código es simple aquí lo pueden ver :

#########################################################
font.c

#########################################################

#include <gtk/gtk.h>
#include <string.h>

struct FontSpec {
GtkCellRenderer *renderer;
GtkTreeModel *model;
GtkTreeModel *empty_model;
GtkWidget *view;

GtkWidget *size;

GtkWidget *label;

guint timer;
gdouble old_size;
};

static gint _family_sort(GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data)
{
PangoFontFamily *familya;
PangoFontFamily *familyb;
gint retval;

(void)user_data;

gtk_tree_model_get(model, a,
0, &familya,
-1);
gtk_tree_model_get(model, b,
0, &familyb,
-1);

retval = strcmp(pango_font_family_get_name(familya),
pango_font_family_get_name(familyb)) ;

g_object_unref(familya);
g_object_unref(familyb);

return retval;
}




static gboolean _update_details(struct FontSpec *spec)
{

gchar *markup = g_strdup ("<span size='x-large'> Gnome Style New </span>" ) ;


g_object_set(spec->renderer,
"markup", markup,
NULL);

g_free(markup);


spec->timer = 0;

return FALSE;
}



static void _selection_changed(GtkTreeSelection *sel,
struct FontSpec *spec)
{
GtkTreeModel *model;
GtkTreeIter iter;

if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
PangoFontFamily *family;
gtk_tree_model_get(model, &iter,
0, &family,
-1);
gtk_label_set_text(GTK_LABEL(spec->label),
pango_font_family_get_name(family) ) ;
g_object_unref(family);
} else {
gtk_label_set_text(GTK_LABEL(spec->label), "" ) ;
}
}

static void _set_font(GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
PangoFontFamily *family;

(void)tree_column;
(void)data;

gtk_tree_model_get(model, iter,
0, &family,
-1);
g_object_set(cell,
"family", pango_font_family_get_name(family),
NULL);
g_object_unref(family);
}

int main(int argc, char **argv)
{
struct FontSpec spec;
GtkWidget *window;
GtkListStore *store;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *scroll;
GtkTreeIter iter;

GtkTreeViewColumn *column;

PangoContext *ctx;
PangoFontFamily **families = NULL;
int n_families;
int i;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);


spec.label = gtk_label_new( " " ) ;

gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, TRUE, 0);

hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);

gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, TRUE, 0);

gtk_container_add(GTK_CONTAINER(window), vbox);

gtk_widget_realize(window);


store = gtk_list_store_new(1, PANGO_TYPE_FONT_FAMILY);
ctx = gtk_widget_get_pango_context(window);
pango_context_list_families(ctx, &families, &n_families);
for (i = 0; i < n_families; i++) {
if (families) {
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, families,
-1);
g_object_unref(families);
}
}
g_free(families);

spec.model = gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(store));
spec.empty_model = GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING));
spec.timer = 0;

gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(spec.model),
0, _family_sort,
NULL, NULL);
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(spec.model),
0, GTK_SORT_ASCENDING);

scroll = gtk_scrolled_window_new(NULL, NULL);
spec.view = gtk_tree_view_new_with_model(spec.model);

column = gtk_tree_view_column_new();
spec.renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, spec.renderer, TRUE);
gtk_tree_view_column_set_cell_data_func(column,
spec.renderer,
_set_font,
&spec,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(spec.view), column);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(spec.view), FALSE);
gtk_tree_selection_set_mode(
gtk_tree_view_get_selection(
GTK_TREE_VIEW(spec.view)),
GTK_SELECTION_SINGLE);

gtk_container_add(GTK_CONTAINER(scroll), spec.view);
gtk_box_pack_start(GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX (vbox), spec.label, FALSE, TRUE, 0);

g_signal_connect(window, "delete-event",
G_CALLBACK(gtk_main_quit),
NULL);


g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(spec.view)),
"changed", G_CALLBACK(_selection_changed),
&spec);

_update_details(&spec);

gtk_widget_show_all(window);

gtk_main();

return 0;
}

###########################################################

Este es nuestro programita final .

Styles   of  fonts  in  Gtk 3.6

No hay comentarios:

Publicar un comentario en la entrada

-

Con la tecnología de Blogger.