Commit 462bca78e8fd8eaa363e0885f4500cf1c23f97e3
1 parent
fd3e7e30
Exists in
master
and in
5 other branches
Mudando tratamento da tabela de fontes durante a impressão
Showing
1 changed file
with
42 additions
and
34 deletions
Show diff stats
src/pw3270/print.c
| ... | ... | @@ -60,13 +60,17 @@ |
| 60 | 60 | int cols; /**< Max line width */ |
| 61 | 61 | int pages; |
| 62 | 62 | int lpp; /**< Lines per page */ |
| 63 | - cairo_font_extents_t extents; | |
| 63 | + | |
| 64 | + v3270FontInfo font; | |
| 65 | + | |
| 66 | +// cairo_font_extents_t extents; | |
| 67 | +// cairo_scaled_font_t * font_scaled; | |
| 68 | +// gchar * font; /**< Font name */ | |
| 69 | + | |
| 64 | 70 | double left; |
| 65 | 71 | double width; /**< Report width */ |
| 66 | 72 | double height; /**< Report height (all pages) */ |
| 67 | - cairo_scaled_font_t * font_scaled; | |
| 68 | 73 | |
| 69 | - gchar * font; /**< Font name */ | |
| 70 | 74 | gchar **text; |
| 71 | 75 | |
| 72 | 76 | } PRINT_INFO; |
| ... | ... | @@ -76,13 +80,14 @@ |
| 76 | 80 | |
| 77 | 81 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) |
| 78 | 82 | { |
| 83 | + cairo_font_extents_t extents; | |
| 84 | + | |
| 79 | 85 | cairo_t * cr = gtk_print_context_get_cairo_context(context); |
| 80 | 86 | gchar * font = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); |
| 81 | 87 | |
| 82 | 88 | trace("%s: operation=%p context=%p font=\"%s\"",__FUNCTION__,prt,context,font); |
| 83 | 89 | |
| 84 | 90 | // Setup font |
| 85 | - | |
| 86 | 91 | if(*font) |
| 87 | 92 | { |
| 88 | 93 | PangoFontDescription * descr = pango_font_description_from_string(font); |
| ... | ... | @@ -102,7 +107,6 @@ |
| 102 | 107 | #endif // GTK(3,0,0) |
| 103 | 108 | double current = width / cols; |
| 104 | 109 | double valid = current; |
| 105 | - cairo_font_extents_t extents; | |
| 106 | 110 | |
| 107 | 111 | do |
| 108 | 112 | { |
| ... | ... | @@ -124,12 +128,16 @@ |
| 124 | 128 | } |
| 125 | 129 | g_free(font); |
| 126 | 130 | |
| 127 | - info->font_scaled = cairo_get_scaled_font(cr); | |
| 128 | - cairo_scaled_font_reference(info->font_scaled); | |
| 129 | - cairo_scaled_font_extents(info->font_scaled,&info->extents); | |
| 131 | + info->font.scaled = cairo_get_scaled_font(cr); | |
| 132 | + cairo_scaled_font_reference(info->font.scaled); | |
| 133 | + cairo_scaled_font_extents(info->font.scaled,&extents); | |
| 130 | 134 | |
| 131 | - info->width = ((double) info->cols) * info->extents.max_x_advance; | |
| 132 | - info->height = ((double) info->rows) * (info->extents.height + info->extents.descent); | |
| 135 | + info->font.height = extents.height; | |
| 136 | + info->font.descent = extents.descent; | |
| 137 | + info->font.width = extents.max_x_advance; | |
| 138 | + | |
| 139 | + info->width = ((double) info->cols) * extents.max_x_advance; | |
| 140 | + info->height = ((double) info->rows) * (extents.height + extents.descent); | |
| 133 | 141 | |
| 134 | 142 | // Center image |
| 135 | 143 | info->left = (gtk_print_context_get_width(context)-info->width)/2; |
| ... | ... | @@ -137,7 +145,7 @@ |
| 137 | 145 | info->left = 2; |
| 138 | 146 | |
| 139 | 147 | // Setup page size |
| 140 | - info->lpp = (gtk_print_context_get_height(context) / (info->extents.height + info->extents.descent)); | |
| 148 | + info->lpp = (gtk_print_context_get_height(context) / (extents.height + extents.descent)); | |
| 141 | 149 | info->pages = (info->rows / info->lpp)+1; |
| 142 | 150 | |
| 143 | 151 | trace("%d lines per page, %d pages to print",info->lpp,info->pages); |
| ... | ... | @@ -153,12 +161,12 @@ |
| 153 | 161 | int baddr = info->baddr; |
| 154 | 162 | GdkRectangle rect; |
| 155 | 163 | |
| 156 | - cairo_set_scaled_font(cr,info->font_scaled); | |
| 164 | + cairo_set_scaled_font(cr,info->font.scaled); | |
| 157 | 165 | |
| 158 | 166 | memset(&rect,0,sizeof(rect)); |
| 159 | 167 | rect.y = 2; |
| 160 | - rect.height = (info->extents.height + info->extents.descent); | |
| 161 | - rect.width = info->extents.max_x_advance; | |
| 168 | + rect.height = (info->font.height + info->font.descent); | |
| 169 | + rect.width = info->font.width; | |
| 162 | 170 | |
| 163 | 171 | // Clear page |
| 164 | 172 | gdk_cairo_set_source_rgba(cr,info->color+V3270_COLOR_BACKGROUND); |
| ... | ... | @@ -181,7 +189,7 @@ |
| 181 | 189 | { |
| 182 | 190 | if(!info->show_selection) |
| 183 | 191 | attr &= ~LIB3270_ATTR_SELECTED; |
| 184 | - v3270_draw_element(cr,c,attr,info->session,info->extents.height,&rect,info->color); | |
| 192 | + v3270_draw_element(cr,c,attr,info->session,info->font.height,&rect,info->color); | |
| 185 | 193 | } |
| 186 | 194 | |
| 187 | 195 | rect.x += (rect.width-1); |
| ... | ... | @@ -335,14 +343,14 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 335 | 343 | |
| 336 | 344 | } |
| 337 | 345 | |
| 338 | - if(info->font_scaled) | |
| 339 | - cairo_scaled_font_destroy(info->font_scaled); | |
| 346 | + if(info->font.scaled) | |
| 347 | + cairo_scaled_font_destroy(info->font.scaled); | |
| 340 | 348 | |
| 341 | 349 | if(info->text) |
| 342 | 350 | g_strfreev(info->text); |
| 343 | 351 | |
| 344 | - if(info->font) | |
| 345 | - g_free(info->font); | |
| 352 | + if(info->font.family) | |
| 353 | + g_free(info->font.family); | |
| 346 | 354 | |
| 347 | 355 | g_free(info); |
| 348 | 356 | } |
| ... | ... | @@ -376,10 +384,10 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 376 | 384 | |
| 377 | 385 | gtk_tree_model_get_value(gtk_combo_box_get_model(combo),&iter,0,&value); |
| 378 | 386 | |
| 379 | - if(info->font) | |
| 380 | - g_free(info->font); | |
| 387 | + if(info->font.family) | |
| 388 | + g_free(info->font.family); | |
| 381 | 389 | |
| 382 | - info->font = g_value_dup_string(&value); | |
| 390 | + info->font.family = g_value_dup_string(&value); | |
| 383 | 391 | |
| 384 | 392 | } |
| 385 | 393 | |
| ... | ... | @@ -424,14 +432,14 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 424 | 432 | gtk_table_attach(GTK_TABLE(container),label[f],0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); |
| 425 | 433 | } |
| 426 | 434 | |
| 427 | - if(info->font) | |
| 428 | - g_free(info->font); | |
| 435 | + if(info->font.family) | |
| 436 | + g_free(info->font.family); | |
| 429 | 437 | |
| 430 | - info->font = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); | |
| 431 | - if(!*info->font) | |
| 438 | + info->font.family = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); | |
| 439 | + if(!*info->font.family) | |
| 432 | 440 | { |
| 433 | - g_free(info->font); | |
| 434 | - info->font = g_strdup(DEFAULT_FONT); | |
| 441 | + g_free(info->font.family); | |
| 442 | + info->font.family = g_strdup(DEFAULT_FONT); | |
| 435 | 443 | } |
| 436 | 444 | |
| 437 | 445 | // Font selection button |
| ... | ... | @@ -460,7 +468,7 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 460 | 468 | gtk_list_store_append((GtkListStore *) model,&iter); |
| 461 | 469 | gtk_list_store_set((GtkListStore *) model, &iter,0, name, -1); |
| 462 | 470 | |
| 463 | - if(!g_ascii_strcasecmp(name,info->font)) | |
| 471 | + if(!g_ascii_strcasecmp(name,info->font.family)) | |
| 464 | 472 | gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); |
| 465 | 473 | } |
| 466 | 474 | } |
| ... | ... | @@ -525,8 +533,8 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 525 | 533 | |
| 526 | 534 | trace("%s starts combo=%p clr=%p widget=%p",__FUNCTION__,combo,clr,widget); |
| 527 | 535 | |
| 528 | - if(info->font) | |
| 529 | - set_string_to_config("print",FONT_CONFIG,info->font); | |
| 536 | + if(info->font.family) | |
| 537 | + set_string_to_config("print",FONT_CONFIG,info->font.family); | |
| 530 | 538 | |
| 531 | 539 | if(clr) |
| 532 | 540 | { |
| ... | ... | @@ -805,12 +813,12 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 805 | 813 | int row = pg*info->lpp; |
| 806 | 814 | int l; |
| 807 | 815 | |
| 808 | - cairo_set_scaled_font(cr,info->font_scaled); | |
| 816 | + cairo_set_scaled_font(cr,info->font.scaled); | |
| 809 | 817 | |
| 810 | 818 | memset(&rect,0,sizeof(rect)); |
| 811 | 819 | rect.y = 2; |
| 812 | - rect.height = (info->extents.height + info->extents.descent)+1; | |
| 813 | - rect.width = info->extents.max_x_advance+1; | |
| 820 | + rect.height = (info->font.height + info->font.descent)+1; | |
| 821 | + rect.width = info->font.width+1; | |
| 814 | 822 | |
| 815 | 823 | for(l=0;l<info->lpp && row < info->rows;l++) |
| 816 | 824 | { | ... | ... |