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