Commit 0965d449fb01f6c55a75b8847676e0a3a2631dfb
1 parent
29388aa5
Exists in
master
and in
5 other branches
Ampliando largura de fonte na impressão
Showing
1 changed file
with
48 additions
and
4 deletions
Show diff stats
src/pw3270/print.c
| ... | ... | @@ -68,6 +68,8 @@ |
| 68 | 68 | cairo_t * cr = gtk_print_context_get_cairo_context(context); |
| 69 | 69 | gchar * font = get_string_from_config("print","font","Courier New 10"); |
| 70 | 70 | |
| 71 | + trace("%s: operation=%p context=%p font=\"%s\"",__FUNCTION__,prt,context,font); | |
| 72 | + | |
| 71 | 73 | // Setup font |
| 72 | 74 | |
| 73 | 75 | if(*font) |
| ... | ... | @@ -80,7 +82,27 @@ |
| 80 | 82 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); |
| 81 | 83 | |
| 82 | 84 | #ifdef AUTO_FONT_SIZE |
| 83 | - cairo_set_font_size(cr,gtk_print_context_get_width(context)/info->cols); | |
| 85 | + { | |
| 86 | + double width = gtk_print_context_get_width(context); | |
| 87 | + double cols = (double)info->cols; | |
| 88 | + double current = width / cols; | |
| 89 | + double valid = current; | |
| 90 | + cairo_font_extents_t extents; | |
| 91 | + | |
| 92 | + do | |
| 93 | + { | |
| 94 | + valid = current; | |
| 95 | + current = valid +1.0; | |
| 96 | + cairo_set_font_size(cr,current); | |
| 97 | + cairo_font_extents(cr,&extents); | |
| 98 | + trace("Valid: %d",(int) valid); | |
| 99 | + } while( (cols * extents.max_x_advance) < width ); | |
| 100 | + | |
| 101 | + trace("Font size: %d",(int) valid); | |
| 102 | + cairo_set_font_size(cr,valid); | |
| 103 | + | |
| 104 | + | |
| 105 | + } | |
| 84 | 106 | #endif // AUTO_FONT_SIZE |
| 85 | 107 | |
| 86 | 108 | pango_font_description_free(descr); |
| ... | ... | @@ -479,7 +501,7 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 479 | 501 | (*info)->cols = 80; |
| 480 | 502 | |
| 481 | 503 | // Basic setup |
| 482 | - gtk_print_operation_set_allow_async(print,TRUE); | |
| 504 | + gtk_print_operation_set_allow_async(print,get_boolean_from_config("print","allow_async",TRUE)); | |
| 483 | 505 | |
| 484 | 506 | if(obj) |
| 485 | 507 | { |
| ... | ... | @@ -603,9 +625,10 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 603 | 625 | |
| 604 | 626 | LIB3270_EXPORT int pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src) |
| 605 | 627 | { |
| 606 | - PRINT_INFO * info = NULL; | |
| 628 | + PRINT_INFO * info = NULL; | |
| 607 | 629 | GtkPrintOperation * print; |
| 608 | 630 | const gchar * text; |
| 631 | + GError * err = NULL; | |
| 609 | 632 | |
| 610 | 633 | #ifdef X3270_TRACE |
| 611 | 634 | if(action) |
| ... | ... | @@ -657,7 +680,28 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 657 | 680 | } |
| 658 | 681 | |
| 659 | 682 | // Run Print dialog |
| 660 | - gtk_print_operation_run(print,oper,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); | |
| 683 | + gtk_print_operation_run(print,oper,GTK_WINDOW(gtk_widget_get_toplevel(widget)),&err); | |
| 684 | + | |
| 685 | + if(err) | |
| 686 | + { | |
| 687 | + GtkWidget *dialog; | |
| 688 | + | |
| 689 | + g_warning(err->message); | |
| 690 | + | |
| 691 | + dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
| 692 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 693 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | |
| 694 | + "%s",_( "Print operation failed" )); | |
| 695 | + | |
| 696 | + gtk_window_set_title(GTK_WINDOW(dialog),_("Error")); | |
| 697 | + | |
| 698 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",err->message); | |
| 699 | + g_error_free(err); | |
| 700 | + | |
| 701 | + gtk_dialog_run(GTK_DIALOG(dialog)); | |
| 702 | + gtk_widget_destroy(dialog); | |
| 703 | + } | |
| 704 | + | |
| 661 | 705 | g_object_unref(print); |
| 662 | 706 | |
| 663 | 707 | return 0; | ... | ... |