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