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,6 +33,8 @@ | ||
| 33 | #include <pw3270/v3270.h> | 33 | #include <pw3270/v3270.h> |
| 34 | #include <lib3270/selection.h> | 34 | #include <lib3270/selection.h> |
| 35 | 35 | ||
| 36 | + #define AUTO_FONT_SIZE 1 | ||
| 37 | + | ||
| 36 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ | 38 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ |
| 37 | 39 | ||
| 38 | typedef struct _print_info | 40 | typedef struct _print_info |
| @@ -54,6 +56,7 @@ | @@ -54,6 +56,7 @@ | ||
| 54 | double height; /**< Report height (all pages) */ | 56 | double height; /**< Report height (all pages) */ |
| 55 | cairo_scaled_font_t * font_scaled; | 57 | cairo_scaled_font_t * font_scaled; |
| 56 | 58 | ||
| 59 | + gchar * font; /**< Font name */ | ||
| 57 | gchar **text; | 60 | gchar **text; |
| 58 | 61 | ||
| 59 | } PRINT_INFO; | 62 | } PRINT_INFO; |
| @@ -76,7 +79,9 @@ | @@ -76,7 +79,9 @@ | ||
| 76 | CAIRO_FONT_SLANT_NORMAL, | 79 | CAIRO_FONT_SLANT_NORMAL, |
| 77 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); | 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 | cairo_set_font_size(cr,gtk_print_context_get_width(context)/info->cols); | 83 | cairo_set_font_size(cr,gtk_print_context_get_width(context)/info->cols); |
| 84 | +#endif // AUTO_FONT_SIZE | ||
| 80 | 85 | ||
| 81 | pango_font_description_free(descr); | 86 | pango_font_description_free(descr); |
| 82 | } | 87 | } |
| @@ -260,17 +265,17 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -260,17 +265,17 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 260 | if(info->font_scaled) | 265 | if(info->font_scaled) |
| 261 | cairo_scaled_font_destroy(info->font_scaled); | 266 | cairo_scaled_font_destroy(info->font_scaled); |
| 262 | 267 | ||
| 263 | -/* | ||
| 264 | - if(info->font) | ||
| 265 | - g_free(info->font); | ||
| 266 | -*/ | ||
| 267 | - | ||
| 268 | if(info->text) | 268 | if(info->text) |
| 269 | g_strfreev(info->text); | 269 | g_strfreev(info->text); |
| 270 | 270 | ||
| 271 | + if(info->font) | ||
| 272 | + g_free(info->font); | ||
| 273 | + | ||
| 271 | g_free(info); | 274 | g_free(info); |
| 272 | } | 275 | } |
| 273 | 276 | ||
| 277 | +#ifndef AUTO_FONT_SIZE | ||
| 278 | + | ||
| 274 | #if GTK_CHECK_VERSION(3,2,0) | 279 | #if GTK_CHECK_VERSION(3,2,0) |
| 275 | static gboolean filter_monospaced(const PangoFontFamily *family,const PangoFontFace *face,gpointer data) | 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,29 +285,32 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 280 | 285 | ||
| 281 | static void font_set(GtkFontButton *widget, PRINT_INFO *info) | 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 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) | 314 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) |
| 307 | { | 315 | { |
| 308 | gboolean active = gtk_toggle_button_get_active(togglebutton); | 316 | gboolean active = gtk_toggle_button_get_active(togglebutton); |
| @@ -339,25 +347,64 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -339,25 +347,64 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 339 | gtk_table_attach(GTK_TABLE(container),label[f],0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); | 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 | // Font selection button | 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 | gtk_font_button_set_show_size((GtkFontButton *) widget,FALSE); | 391 | gtk_font_button_set_show_size((GtkFontButton *) widget,FALSE); |
| 347 | gtk_font_button_set_use_font((GtkFontButton *) widget,TRUE); | 392 | gtk_font_button_set_use_font((GtkFontButton *) widget,TRUE); |
| 348 | gtk_label_set_mnemonic_widget(GTK_LABEL(label[0]),widget); | 393 | gtk_label_set_mnemonic_widget(GTK_LABEL(label[0]),widget); |
| 349 | g_free(font); | 394 | g_free(font); |
| 350 | - } | ||
| 351 | 395 | ||
| 352 | #if GTK_CHECK_VERSION(3,2,0) | 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 | #endif // GTK(3,2,0) | 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 | widget = color_scheme_new(info->color); | 409 | widget = color_scheme_new(info->color); |
| 363 | gtk_label_set_mnemonic_widget(GTK_LABEL(label[1]),widget); | 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,6 +440,9 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 393 | GtkWidget * combo = g_object_get_data(G_OBJECT(widget),"combo"); | 440 | GtkWidget * combo = g_object_get_data(G_OBJECT(widget),"combo"); |
| 394 | GdkColor * clr = g_object_get_data(G_OBJECT(combo),"selected"); | 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 | if(clr) | 446 | if(clr) |
| 397 | { | 447 | { |
| 398 | int f; | 448 | int f; |
| @@ -478,7 +528,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -478,7 +528,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 478 | RegCloseKey(hKey); | 528 | RegCloseKey(hKey); |
| 479 | } | 529 | } |
| 480 | 530 | ||
| 481 | - | ||
| 482 | #warning Work in progress | 531 | #warning Work in progress |
| 483 | RegCloseKey(registry); | 532 | RegCloseKey(registry); |
| 484 | } | 533 | } |