Commit 0bd2c878f4008e218a872a9aeae079c68fda37ec
1 parent
4e81c711
Exists in
master
and in
5 other branches
Remodelando ajustes de fonte durante a impressao
Showing
1 changed file
with
49 additions
and
14 deletions
Show diff stats
src/pw3270/print.c
| @@ -42,9 +42,11 @@ | @@ -42,9 +42,11 @@ | ||
| 42 | PW3270_SRC src; | 42 | PW3270_SRC src; |
| 43 | 43 | ||
| 44 | H3270 * session; | 44 | H3270 * session; |
| 45 | +/* | ||
| 45 | gchar * font; | 46 | gchar * font; |
| 46 | guint fontsize; | 47 | guint fontsize; |
| 47 | cairo_font_weight_t fontweight; | 48 | cairo_font_weight_t fontweight; |
| 49 | +*/ | ||
| 48 | int baddr; | 50 | int baddr; |
| 49 | int rows; | 51 | int rows; |
| 50 | int cols; | 52 | int cols; |
| @@ -62,6 +64,7 @@ | @@ -62,6 +64,7 @@ | ||
| 62 | 64 | ||
| 63 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 65 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 64 | 66 | ||
| 67 | +/* | ||
| 65 | static void setup_font(GtkPrintContext * context, PRINT_INFO *info) | 68 | static void setup_font(GtkPrintContext * context, PRINT_INFO *info) |
| 66 | { | 69 | { |
| 67 | cairo_t *cr = gtk_print_context_get_cairo_context(context); | 70 | cairo_t *cr = gtk_print_context_get_cairo_context(context); |
| @@ -83,11 +86,43 @@ | @@ -83,11 +86,43 @@ | ||
| 83 | 86 | ||
| 84 | 87 | ||
| 85 | } | 88 | } |
| 86 | - | 89 | +*/ |
| 87 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) | 90 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) |
| 88 | { | 91 | { |
| 89 | - setup_font(context,info); | 92 | + cairo_t * cr = gtk_print_context_get_cairo_context(context); |
| 93 | + gchar * font = get_string_from_config("print","font","Courier New 10"); | ||
| 94 | + | ||
| 95 | + // Setup font | ||
| 96 | + | ||
| 97 | + if(font) | ||
| 98 | + { | ||
| 99 | + PangoFontDescription * descr = pango_font_description_from_string(font); | ||
| 100 | + if(descr) | ||
| 101 | + { | ||
| 102 | + cairo_select_font_face(cr, pango_font_description_get_family(descr), | ||
| 103 | + CAIRO_FONT_SLANT_NORMAL, | ||
| 104 | + pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); | ||
| 105 | + | ||
| 106 | + cairo_set_font_size(cr,gtk_print_context_get_width(context)/80); | ||
| 107 | + | ||
| 108 | + pango_font_description_free(descr); | ||
| 109 | + } | ||
| 110 | + g_free(font); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + info->font_scaled = cairo_get_scaled_font(cr); | ||
| 114 | + cairo_scaled_font_reference(info->font_scaled); | ||
| 115 | + cairo_scaled_font_extents(info->font_scaled,&info->extents); | ||
| 90 | 116 | ||
| 117 | + info->width = ((double) info->cols) * info->extents.max_x_advance; | ||
| 118 | + info->height = ((double) info->rows) * (info->extents.height + info->extents.descent); | ||
| 119 | + | ||
| 120 | + // Center image | ||
| 121 | + info->left = (gtk_print_context_get_width(context)-info->width)/2; | ||
| 122 | + if(info->left < 2) | ||
| 123 | + info->left = 2; | ||
| 124 | + | ||
| 125 | + // Setup page size | ||
| 91 | info->lpp = (gtk_print_context_get_height(context) / (info->extents.height + info->extents.descent)); | 126 | info->lpp = (gtk_print_context_get_height(context) / (info->extents.height + info->extents.descent)); |
| 92 | info->pages = (info->rows / info->lpp)+1; | 127 | info->pages = (info->rows / info->lpp)+1; |
| 93 | 128 | ||
| @@ -252,8 +287,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -252,8 +287,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 252 | if(info->font_scaled) | 287 | if(info->font_scaled) |
| 253 | cairo_scaled_font_destroy(info->font_scaled); | 288 | cairo_scaled_font_destroy(info->font_scaled); |
| 254 | 289 | ||
| 290 | +/* | ||
| 255 | if(info->font) | 291 | if(info->font) |
| 256 | g_free(info->font); | 292 | g_free(info->font); |
| 293 | +*/ | ||
| 257 | 294 | ||
| 258 | if(info->text) | 295 | if(info->text) |
| 259 | g_strfreev(info->text); | 296 | g_strfreev(info->text); |
| @@ -270,7 +307,8 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -270,7 +307,8 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 270 | 307 | ||
| 271 | static void font_set(GtkFontButton *widget, PRINT_INFO *info) | 308 | static void font_set(GtkFontButton *widget, PRINT_INFO *info) |
| 272 | { | 309 | { |
| 273 | - const gchar * name = gtk_font_button_get_font_name(widget); | 310 | + set_string_to_config("print","font",gtk_font_button_get_font_name(widget)); |
| 311 | +/* | ||
| 274 | PangoFontDescription * descr = pango_font_description_from_string(name); | 312 | PangoFontDescription * descr = pango_font_description_from_string(name); |
| 275 | 313 | ||
| 276 | if(!descr) | 314 | if(!descr) |
| @@ -288,11 +326,8 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -288,11 +326,8 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 288 | 326 | ||
| 289 | pango_font_description_free(descr); | 327 | pango_font_description_free(descr); |
| 290 | 328 | ||
| 291 | - set_string_to_config("print","font",name); | ||
| 292 | - set_integer_to_config("print","fontsize",info->fontsize); | ||
| 293 | - set_integer_to_config("print","fontweight",info->fontweight); | ||
| 294 | - | ||
| 295 | trace("Font set to \"%s\" with size %d",info->font,info->fontsize); | 329 | trace("Font set to \"%s\" with size %d",info->font,info->fontsize); |
| 330 | +*/ | ||
| 296 | } | 331 | } |
| 297 | 332 | ||
| 298 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) | 333 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) |
| @@ -306,14 +341,11 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -306,14 +341,11 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 306 | { | 341 | { |
| 307 | gchar *ptr = get_string_from_config("print","colors",""); | 342 | gchar *ptr = get_string_from_config("print","colors",""); |
| 308 | 343 | ||
| 309 | - info->font = get_string_from_config("print","font","Courier New 10"); | ||
| 310 | - info->fontsize = get_integer_from_config("print","fontsize",10240); | ||
| 311 | - info->fontweight = get_integer_from_config("print","fontweight",0); | ||
| 312 | - | ||
| 313 | if(*ptr) | 344 | if(*ptr) |
| 314 | v3270_set_color_table(info->color,ptr); | 345 | v3270_set_color_table(info->color,ptr); |
| 315 | else | 346 | else |
| 316 | v3270_set_mono_color_table(info->color,"black","white"); | 347 | v3270_set_mono_color_table(info->color,"black","white"); |
| 348 | + | ||
| 317 | g_free(ptr); | 349 | g_free(ptr); |
| 318 | } | 350 | } |
| 319 | 351 | ||
| @@ -324,6 +356,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -324,6 +356,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 324 | GtkWidget * label[G_N_ELEMENTS(text)]; | 356 | GtkWidget * label[G_N_ELEMENTS(text)]; |
| 325 | GtkWidget * widget; | 357 | GtkWidget * widget; |
| 326 | int f; | 358 | int f; |
| 359 | + gchar * font; | ||
| 327 | 360 | ||
| 328 | trace("%s starts",__FUNCTION__); | 361 | trace("%s starts",__FUNCTION__); |
| 329 | 362 | ||
| @@ -344,8 +377,11 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -344,8 +377,11 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 344 | gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | 377 | gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); |
| 345 | 378 | ||
| 346 | load_settings(info); | 379 | load_settings(info); |
| 347 | - gtk_font_button_set_font_name((GtkFontButton *) widget,info->font); | ||
| 348 | - font_set((GtkFontButton *) widget,info); | 380 | + |
| 381 | + font = get_string_from_config("print","font","Courier New 10"); | ||
| 382 | + gtk_font_button_set_font_name((GtkFontButton *) widget, font); | ||
| 383 | + g_free(font); | ||
| 384 | + | ||
| 349 | g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); | 385 | g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); |
| 350 | 386 | ||
| 351 | widget = color_scheme_new(info->color); | 387 | widget = color_scheme_new(info->color); |
| @@ -414,7 +450,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -414,7 +450,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 414 | 450 | ||
| 415 | *info = g_new0(PRINT_INFO,1); | 451 | *info = g_new0(PRINT_INFO,1); |
| 416 | (*info)->session = v3270_get_session(widget); | 452 | (*info)->session = v3270_get_session(widget); |
| 417 | - (*info)->fontweight = CAIRO_FONT_WEIGHT_NORMAL; | ||
| 418 | 453 | ||
| 419 | // Basic setup | 454 | // Basic setup |
| 420 | gtk_print_operation_set_allow_async(print,TRUE); | 455 | gtk_print_operation_set_allow_async(print,TRUE); |