Commit 4aa1a1f9f487c5b178e04137b592f314dd39a60d

Authored by perry.werneck@gmail.com
1 parent b9a96fce
Exists in master and in 1 other branch develop

Incluindo opcao para ajustar a escala das fontes automaticamente

Showing 2 changed files with 45 additions and 38 deletions   Show diff stats
private.h
... ... @@ -125,10 +125,11 @@ G_BEGIN_DECLS
125 125 GtkWidget parent;
126 126  
127 127 // flags
128   - int selecting : 1; /**< Selecting region */
129   - int moving : 1; /**< Moving selected region */
130   - int resizing : 1; /**< Resizing selected region */
131   - int table : 1; /**< Copy mode is table */
  128 + int selecting : 1; /**< Selecting region */
  129 + int moving : 1; /**< Moving selected region */
  130 + int resizing : 1; /**< Resizing selected region */
  131 + int table : 1; /**< Copy mode is table */
  132 + int scaled_fonts : 1; /**< Use scaled fonts */
132 133  
133 134 #if GTK_CHECK_VERSION(3,0,0)
134 135  
... ...
widget.c
... ... @@ -521,9 +521,7 @@ static void v3270_class_init(v3270Class *klass)
521 521 void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int height)
522 522 {
523 523 // update font metrics
524   - static const int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72, 0 };
525   - int f, rows, cols, hFont;
526   - int size = font_size[0];
  524 + int rows, cols, hFont, size;
527 525  
528 526 cairo_font_extents_t extents;
529 527  
... ... @@ -533,47 +531,46 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
533 531  
534 532 cairo_select_font_face(cr, terminal->font_family, CAIRO_FONT_SLANT_NORMAL,terminal->font_weight);
535 533  
536   - for(f=0;font_size[f];f++)
537   - {
538   - cairo_set_font_size(cr,font_size[f]);
539   - cairo_font_extents(cr,&extents);
540   -
541   - if(f == 0)
542   - {
543   - terminal->minimum_width = (cols * extents.max_x_advance);
544   - terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2);
545   - }
  534 + if(terminal->scaled_fonts)
  535 + {
  536 + double w = ((double)width) / ((double)cols);
  537 + double h = ((double) height) / ((double) (rows+2));
546 538  
547   - if( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
548   - size = font_size[f];
549   - }
  539 + cairo_set_font_size(cr,w < h ? w : h);
  540 + }
  541 + else
  542 + {
  543 + static const int font_size[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 40, 48, 56, 64, 72, 0 };
  544 + int f;
550 545  
551   - cairo_set_font_size(cr,size);
  546 + size = font_size[0];
552 547  
553   -#if !GTK_CHECK_VERSION(3,0,0)
554   - gtk_widget_set_size_request(GTK_WIDGET(terminal),terminal->minimum_width,terminal->minimum_height);
555   -#endif // !GTK(3,0,0)
  548 + for(f=0;font_size[f];f++)
  549 + {
  550 + cairo_set_font_size(cr,font_size[f]);
  551 + cairo_font_extents(cr,&extents);
556 552  
557   -/*
558   - double sx, sy;
559   - cairo_matrix_t font_matrix;
  553 + if(f == 0)
  554 + {
  555 + terminal->minimum_width = (cols * extents.max_x_advance);
  556 + terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2);
  557 + }
560 558  
561   - cairo_set_font_size(cr,10);
562   - cairo_font_extents(cr,&extents);
  559 + if( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width )
  560 + size = font_size[f];
  561 + }
563 562  
564   - trace("font - extents.height=%f extents.width=%f",extents.height,extents.max_x_advance);
  563 + cairo_set_font_size(cr,size);
565 564  
566   - sx = ((double) width) / (((double) terminal->cols) * extents.max_x_advance);
567   - sy = ((double) height) / (((double) terminal->rows) * extents.height);
  565 + #if !GTK_CHECK_VERSION(3,0,0)
  566 + gtk_widget_set_size_request(GTK_WIDGET(terminal),terminal->minimum_width,terminal->minimum_height);
  567 + #endif // !GTK(3,0,0)
568 568  
569   - trace("sy=%f sx=%f ",sy,sx);
  569 + }
570 570  
571   - cairo_get_font_matrix(cr,&font_matrix);
572   - cairo_matrix_scale(&font_matrix, sx, sy);
573   - cairo_set_font_matrix(cr,&font_matrix);
574   -*/
  571 + cairo_font_extents(cr,&extents);
575 572  
576   - /* Save scaled font for use on next drawings */
  573 + // Save scaled font for use on next drawings
577 574 if(terminal->font_scaled)
578 575 cairo_scaled_font_destroy(terminal->font_scaled);
579 576  
... ... @@ -1407,6 +1404,15 @@ const gchar * v3270_get_session_name(GtkWidget *widget)
1407 1404 return GTK_V3270(widget)->session_name;
1408 1405 }
1409 1406  
  1407 +void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on)
  1408 +{
  1409 + g_return_if_fail(GTK_IS_V3270(widget));
  1410 +
  1411 + GTK_V3270(widget)->scaled_fonts = on ? 1 : 0;
  1412 +
  1413 + trace("Sfonts is %s",GTK_V3270(widget)->scaled_fonts ? "YES" : "NO");
  1414 +}
  1415 +
1410 1416 void v3270_set_session_name(GtkWidget *widget, const gchar *name)
1411 1417 {
1412 1418 g_return_if_fail(GTK_IS_V3270(widget));
... ...