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,6 +68,8 @@ | ||
| 68 | cairo_t * cr = gtk_print_context_get_cairo_context(context); | 68 | cairo_t * cr = gtk_print_context_get_cairo_context(context); |
| 69 | gchar * font = get_string_from_config("print","font","Courier New 10"); | 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 | // Setup font | 73 | // Setup font |
| 72 | 74 | ||
| 73 | if(*font) | 75 | if(*font) |
| @@ -80,7 +82,27 @@ | @@ -80,7 +82,27 @@ | ||
| 80 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); | 82 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); |
| 81 | 83 | ||
| 82 | #ifdef AUTO_FONT_SIZE | 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 | #endif // AUTO_FONT_SIZE | 106 | #endif // AUTO_FONT_SIZE |
| 85 | 107 | ||
| 86 | pango_font_description_free(descr); | 108 | pango_font_description_free(descr); |
| @@ -479,7 +501,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -479,7 +501,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 479 | (*info)->cols = 80; | 501 | (*info)->cols = 80; |
| 480 | 502 | ||
| 481 | // Basic setup | 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 | if(obj) | 506 | if(obj) |
| 485 | { | 507 | { |
| @@ -603,9 +625,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -603,9 +625,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 603 | 625 | ||
| 604 | LIB3270_EXPORT int pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src) | 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 | GtkPrintOperation * print; | 629 | GtkPrintOperation * print; |
| 608 | const gchar * text; | 630 | const gchar * text; |
| 631 | + GError * err = NULL; | ||
| 609 | 632 | ||
| 610 | #ifdef X3270_TRACE | 633 | #ifdef X3270_TRACE |
| 611 | if(action) | 634 | if(action) |
| @@ -657,7 +680,28 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -657,7 +680,28 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 657 | } | 680 | } |
| 658 | 681 | ||
| 659 | // Run Print dialog | 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 | g_object_unref(print); | 705 | g_object_unref(print); |
| 662 | 706 | ||
| 663 | return 0; | 707 | return 0; |