Commit f20576591a10e99378de90653e4cc8479188689c
1 parent
91fd639b
Exists in
master
and in
5 other branches
Melhorando dialogo de selecao de fontes para impressao
Showing
1 changed file
with
77 additions
and
28 deletions
Show diff stats
src/pw3270/print.c
... | ... | @@ -33,6 +33,8 @@ |
33 | 33 | #include <pw3270/v3270.h> |
34 | 34 | #include <lib3270/selection.h> |
35 | 35 | |
36 | + #define AUTO_FONT_SIZE 1 | |
37 | + | |
36 | 38 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ |
37 | 39 | |
38 | 40 | typedef struct _print_info |
... | ... | @@ -54,6 +56,7 @@ |
54 | 56 | double height; /**< Report height (all pages) */ |
55 | 57 | cairo_scaled_font_t * font_scaled; |
56 | 58 | |
59 | + gchar * font; /**< Font name */ | |
57 | 60 | gchar **text; |
58 | 61 | |
59 | 62 | } PRINT_INFO; |
... | ... | @@ -76,7 +79,9 @@ |
76 | 79 | CAIRO_FONT_SLANT_NORMAL, |
77 | 80 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); |
78 | 81 | |
82 | +#ifdef AUTO_FONT_SIZE | |
79 | 83 | cairo_set_font_size(cr,gtk_print_context_get_width(context)/info->cols); |
84 | +#endif // AUTO_FONT_SIZE | |
80 | 85 | |
81 | 86 | pango_font_description_free(descr); |
82 | 87 | } |
... | ... | @@ -260,17 +265,17 @@ static gchar * enum_to_string(GType type, guint enum_value) |
260 | 265 | if(info->font_scaled) |
261 | 266 | cairo_scaled_font_destroy(info->font_scaled); |
262 | 267 | |
263 | -/* | |
264 | - if(info->font) | |
265 | - g_free(info->font); | |
266 | -*/ | |
267 | - | |
268 | 268 | if(info->text) |
269 | 269 | g_strfreev(info->text); |
270 | 270 | |
271 | + if(info->font) | |
272 | + g_free(info->font); | |
273 | + | |
271 | 274 | g_free(info); |
272 | 275 | } |
273 | 276 | |
277 | +#ifndef AUTO_FONT_SIZE | |
278 | + | |
274 | 279 | #if GTK_CHECK_VERSION(3,2,0) |
275 | 280 | static gboolean filter_monospaced(const PangoFontFamily *family,const PangoFontFace *face,gpointer data) |
276 | 281 | { |
... | ... | @@ -280,29 +285,32 @@ static gchar * enum_to_string(GType type, guint enum_value) |
280 | 285 | |
281 | 286 | static void font_set(GtkFontButton *widget, PRINT_INFO *info) |
282 | 287 | { |
283 | - set_string_to_config("print","font",gtk_font_button_get_font_name(widget)); | |
284 | -/* | |
285 | - PangoFontDescription * descr = pango_font_description_from_string(name); | |
288 | + if(info->font) | |
289 | + g_free(info->font) | |
290 | + info->font = g_strdup(gtk_font_button_get_font_name(widget)); | |
291 | + } | |
286 | 292 | |
287 | - if(!descr) | |
288 | - return; | |
293 | +#else | |
289 | 294 | |
290 | - if(info->font) | |
291 | - g_free(info->font); | |
295 | + static void font_name_changed(GtkComboBox *combo, PRINT_INFO *info) | |
296 | + { | |
297 | + GValue value = { 0, }; | |
298 | + GtkTreeIter iter; | |
292 | 299 | |
293 | - info->font = g_strdup(pango_font_description_get_family(descr)); | |
294 | - info->fontsize = pango_font_description_get_size(descr); | |
295 | - info->fontweight = CAIRO_FONT_WEIGHT_NORMAL; | |
300 | + if(!gtk_combo_box_get_active_iter(combo,&iter)) | |
301 | + return; | |
296 | 302 | |
297 | - if(pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD) | |
298 | - info->fontweight = CAIRO_FONT_WEIGHT_BOLD; | |
303 | + gtk_tree_model_get_value(gtk_combo_box_get_model(combo),&iter,0,&value); | |
299 | 304 | |
300 | - pango_font_description_free(descr); | |
305 | + if(info->font) | |
306 | + g_free(info->font); | |
307 | + | |
308 | + info->font = g_value_dup_string(&value); | |
301 | 309 | |
302 | - trace("Font set to \"%s\" with size %d",info->font,info->fontsize); | |
303 | -*/ | |
304 | 310 | } |
305 | 311 | |
312 | +#endif // !AUTO_FONT_SIZE | |
313 | + | |
306 | 314 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) |
307 | 315 | { |
308 | 316 | gboolean active = gtk_toggle_button_get_active(togglebutton); |
... | ... | @@ -339,25 +347,64 @@ static gchar * enum_to_string(GType type, guint enum_value) |
339 | 347 | gtk_table_attach(GTK_TABLE(container),label[f],0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); |
340 | 348 | } |
341 | 349 | |
350 | + if(info->font) | |
351 | + g_free(info->font); | |
352 | + | |
353 | + info->font = get_string_from_config("print","font","Courier New"); | |
354 | + | |
342 | 355 | // Font selection button |
356 | +#ifdef AUTO_FONT_SIZE | |
343 | 357 | { |
344 | - gchar * font = get_string_from_config("print","font","Courier New 10"); | |
345 | - widget = gtk_font_button_new_with_font(font); | |
358 | + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING); | |
359 | + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); | |
360 | + PangoFontFamily **families; | |
361 | + gint n_families, i; | |
362 | + GtkTreeIter iter; | |
363 | + | |
364 | + widget = gtk_combo_box_new_with_model(model); | |
365 | + | |
366 | + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); | |
367 | + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL); | |
368 | + | |
369 | + g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(font_name_changed),info); | |
370 | + | |
371 | + pango_context_list_families(gtk_widget_get_pango_context(container),&families, &n_families); | |
372 | + | |
373 | + for(i=0; i<n_families; i++) | |
374 | + { | |
375 | + if(pango_font_family_is_monospace(families[i])) | |
376 | + { | |
377 | + const gchar *name = pango_font_family_get_name (families[i]); | |
378 | + gtk_list_store_append((GtkListStore *) model,&iter); | |
379 | + gtk_list_store_set((GtkListStore *) model, &iter,0, name, -1); | |
380 | + | |
381 | + if(!g_strcasecmp(name,info->font)) | |
382 | + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); | |
383 | + } | |
384 | + } | |
385 | + | |
386 | + g_free(families); | |
387 | + } | |
388 | +#else | |
389 | + { | |
390 | + widget = gtk_font_button_new_with_font(info->font); | |
346 | 391 | gtk_font_button_set_show_size((GtkFontButton *) widget,FALSE); |
347 | 392 | gtk_font_button_set_use_font((GtkFontButton *) widget,TRUE); |
348 | 393 | gtk_label_set_mnemonic_widget(GTK_LABEL(label[0]),widget); |
349 | 394 | g_free(font); |
350 | - } | |
351 | 395 | |
352 | 396 | #if GTK_CHECK_VERSION(3,2,0) |
353 | - gtk_font_chooser_set_filter_func((GtkFontChooser *) widget,filter_monospaced,NULL,NULL); | |
397 | + gtk_font_chooser_set_filter_func((GtkFontChooser *) widget,filter_monospaced,NULL,NULL); | |
354 | 398 | #endif // GTK(3,2,0) |
355 | - gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | |
356 | 399 | |
357 | - load_settings(info); | |
400 | + g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); | |
401 | + | |
402 | + } | |
403 | +#endif | |
358 | 404 | |
405 | + gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | |
359 | 406 | |
360 | - g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); | |
407 | + load_settings(info); | |
361 | 408 | |
362 | 409 | widget = color_scheme_new(info->color); |
363 | 410 | gtk_label_set_mnemonic_widget(GTK_LABEL(label[1]),widget); |
... | ... | @@ -393,6 +440,9 @@ static gchar * enum_to_string(GType type, guint enum_value) |
393 | 440 | GtkWidget * combo = g_object_get_data(G_OBJECT(widget),"combo"); |
394 | 441 | GdkColor * clr = g_object_get_data(G_OBJECT(combo),"selected"); |
395 | 442 | |
443 | + if(info->font) | |
444 | + set_string_to_config("print","font",info->font); | |
445 | + | |
396 | 446 | if(clr) |
397 | 447 | { |
398 | 448 | int f; |
... | ... | @@ -478,7 +528,6 @@ static gchar * enum_to_string(GType type, guint enum_value) |
478 | 528 | RegCloseKey(hKey); |
479 | 529 | } |
480 | 530 | |
481 | - | |
482 | 531 | #warning Work in progress |
483 | 532 | RegCloseKey(registry); |
484 | 533 | } | ... | ... |