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 | } | ... | ... |