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,13 +60,17 @@ | ||
| 60 | int cols; /**< Max line width */ | 60 | int cols; /**< Max line width */ |
| 61 | int pages; | 61 | int pages; |
| 62 | int lpp; /**< Lines per page */ | 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 | double left; | 70 | double left; |
| 65 | double width; /**< Report width */ | 71 | double width; /**< Report width */ |
| 66 | double height; /**< Report height (all pages) */ | 72 | double height; /**< Report height (all pages) */ |
| 67 | - cairo_scaled_font_t * font_scaled; | ||
| 68 | 73 | ||
| 69 | - gchar * font; /**< Font name */ | ||
| 70 | gchar **text; | 74 | gchar **text; |
| 71 | 75 | ||
| 72 | } PRINT_INFO; | 76 | } PRINT_INFO; |
| @@ -76,13 +80,14 @@ | @@ -76,13 +80,14 @@ | ||
| 76 | 80 | ||
| 77 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) | 81 | static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) |
| 78 | { | 82 | { |
| 83 | + cairo_font_extents_t extents; | ||
| 84 | + | ||
| 79 | cairo_t * cr = gtk_print_context_get_cairo_context(context); | 85 | cairo_t * cr = gtk_print_context_get_cairo_context(context); |
| 80 | gchar * font = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); | 86 | gchar * font = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); |
| 81 | 87 | ||
| 82 | trace("%s: operation=%p context=%p font=\"%s\"",__FUNCTION__,prt,context,font); | 88 | trace("%s: operation=%p context=%p font=\"%s\"",__FUNCTION__,prt,context,font); |
| 83 | 89 | ||
| 84 | // Setup font | 90 | // Setup font |
| 85 | - | ||
| 86 | if(*font) | 91 | if(*font) |
| 87 | { | 92 | { |
| 88 | PangoFontDescription * descr = pango_font_description_from_string(font); | 93 | PangoFontDescription * descr = pango_font_description_from_string(font); |
| @@ -102,7 +107,6 @@ | @@ -102,7 +107,6 @@ | ||
| 102 | #endif // GTK(3,0,0) | 107 | #endif // GTK(3,0,0) |
| 103 | double current = width / cols; | 108 | double current = width / cols; |
| 104 | double valid = current; | 109 | double valid = current; |
| 105 | - cairo_font_extents_t extents; | ||
| 106 | 110 | ||
| 107 | do | 111 | do |
| 108 | { | 112 | { |
| @@ -124,12 +128,16 @@ | @@ -124,12 +128,16 @@ | ||
| 124 | } | 128 | } |
| 125 | g_free(font); | 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 | // Center image | 142 | // Center image |
| 135 | info->left = (gtk_print_context_get_width(context)-info->width)/2; | 143 | info->left = (gtk_print_context_get_width(context)-info->width)/2; |
| @@ -137,7 +145,7 @@ | @@ -137,7 +145,7 @@ | ||
| 137 | info->left = 2; | 145 | info->left = 2; |
| 138 | 146 | ||
| 139 | // Setup page size | 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 | info->pages = (info->rows / info->lpp)+1; | 149 | info->pages = (info->rows / info->lpp)+1; |
| 142 | 150 | ||
| 143 | trace("%d lines per page, %d pages to print",info->lpp,info->pages); | 151 | trace("%d lines per page, %d pages to print",info->lpp,info->pages); |
| @@ -153,12 +161,12 @@ | @@ -153,12 +161,12 @@ | ||
| 153 | int baddr = info->baddr; | 161 | int baddr = info->baddr; |
| 154 | GdkRectangle rect; | 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 | memset(&rect,0,sizeof(rect)); | 166 | memset(&rect,0,sizeof(rect)); |
| 159 | rect.y = 2; | 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 | // Clear page | 171 | // Clear page |
| 164 | gdk_cairo_set_source_rgba(cr,info->color+V3270_COLOR_BACKGROUND); | 172 | gdk_cairo_set_source_rgba(cr,info->color+V3270_COLOR_BACKGROUND); |
| @@ -181,7 +189,7 @@ | @@ -181,7 +189,7 @@ | ||
| 181 | { | 189 | { |
| 182 | if(!info->show_selection) | 190 | if(!info->show_selection) |
| 183 | attr &= ~LIB3270_ATTR_SELECTED; | 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 | rect.x += (rect.width-1); | 195 | rect.x += (rect.width-1); |
| @@ -335,14 +343,14 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -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 | if(info->text) | 349 | if(info->text) |
| 342 | g_strfreev(info->text); | 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 | g_free(info); | 355 | g_free(info); |
| 348 | } | 356 | } |
| @@ -376,10 +384,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -376,10 +384,10 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 376 | 384 | ||
| 377 | gtk_tree_model_get_value(gtk_combo_box_get_model(combo),&iter,0,&value); | 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,14 +432,14 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 424 | gtk_table_attach(GTK_TABLE(container),label[f],0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); | 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 | // Font selection button | 445 | // Font selection button |
| @@ -460,7 +468,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -460,7 +468,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 460 | gtk_list_store_append((GtkListStore *) model,&iter); | 468 | gtk_list_store_append((GtkListStore *) model,&iter); |
| 461 | gtk_list_store_set((GtkListStore *) model, &iter,0, name, -1); | 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 | gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); | 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,8 +533,8 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 525 | 533 | ||
| 526 | trace("%s starts combo=%p clr=%p widget=%p",__FUNCTION__,combo,clr,widget); | 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 | if(clr) | 539 | if(clr) |
| 532 | { | 540 | { |
| @@ -805,12 +813,12 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -805,12 +813,12 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 805 | int row = pg*info->lpp; | 813 | int row = pg*info->lpp; |
| 806 | int l; | 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 | memset(&rect,0,sizeof(rect)); | 818 | memset(&rect,0,sizeof(rect)); |
| 811 | rect.y = 2; | 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 | for(l=0;l<info->lpp && row < info->rows;l++) | 823 | for(l=0;l<info->lpp && row < info->rows;l++) |
| 816 | { | 824 | { |