diff --git a/src/include/pw3270/v3270.h b/src/include/pw3270/v3270.h index 0f7806f..2706b15 100644 --- a/src/include/pw3270/v3270.h +++ b/src/include/pw3270/v3270.h @@ -64,6 +64,7 @@ typedef struct _v3270 v3270; typedef struct _v3270Class v3270Class; + typedef struct _v3270FontInfo v3270FontInfo; enum V3270_COLOR { diff --git a/src/pw3270/v3270/accessible.c b/src/pw3270/v3270/accessible.c index d8ae7b8..779276c 100644 --- a/src/pw3270/v3270/accessible.c +++ b/src/pw3270/v3270/accessible.c @@ -308,10 +308,10 @@ static void v3270_accessible_get_character_extents( AtkText *text, gdk_window_get_origin(window, x, y); // Get screen position - *x += widget->metrics.left + ((offset%cols) * widget->metrics.width); - *y += widget->metrics.top + ((offset/cols) * widget->metrics.spacing); - *width = widget->metrics.width; - *height = widget->metrics.spacing; + *x += widget->font.left + ((offset%cols) * widget->font.width); + *y += widget->font.top + ((offset/cols) * widget->font.spacing); + *width = widget->font.width; + *height = widget->font.spacing; if(coords == ATK_XY_WINDOW) { @@ -631,7 +631,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint // The font family name attributes = add_attribute( attributes, ATK_TEXT_ATTR_FAMILY_NAME, - GTK_V3270(widget)->font_family ); + GTK_V3270(widget)->font.family ); return attributes; } diff --git a/src/pw3270/v3270/draw.c b/src/pw3270/v3270/draw.c index ec65ba4..ac96bb3 100644 --- a/src/pw3270/v3270/draw.c +++ b/src/pw3270/v3270/draw.c @@ -51,7 +51,7 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr) gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_CROSS_HAIR); - cairo_rectangle(cr, 0,terminal->cursor.rect.y+terminal->metrics.height,allocation.width,1); + cairo_rectangle(cr, 0,terminal->cursor.rect.y+terminal->font.height,allocation.width,1); cairo_fill(cr); cairo_rectangle(cr, terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3); @@ -72,9 +72,9 @@ gboolean v3270_draw(GtkWidget * widget, cairo_t * cr) else { cairo_rectangle(cr, terminal->cursor.rect.x, - terminal->cursor.rect.y+terminal->metrics.height, + terminal->cursor.rect.y+terminal->font.height, terminal->cursor.rect.width, - terminal->metrics.descent ); + terminal->font.descent ); } cairo_fill(cr); @@ -364,9 +364,9 @@ void v3270_reload(GtkWidget *widget) lib3270_get_screen_size(terminal->host,&rows,&cols); memset(&rect,0,sizeof(rect)); - rect.y = terminal->metrics.top; - rect.width = terminal->metrics.width; - rect.height = terminal->metrics.spacing; + rect.y = terminal->font.top; + rect.width = terminal->font.width; + rect.height = terminal->font.spacing; addr = 0; cursor = lib3270_get_cursor_address(terminal->host); @@ -374,7 +374,7 @@ void v3270_reload(GtkWidget *widget) { int c; - rect.x = terminal->metrics.left; + rect.x = terminal->font.left; for(c=0;c < cols;c++) { @@ -386,18 +386,18 @@ void v3270_reload(GtkWidget *widget) if(addr == cursor) v3270_update_cursor_rect(terminal,&rect,chr,attr); - v3270_draw_element(cr,chr,attr,terminal->host,terminal->metrics.height,&rect,terminal->color); + v3270_draw_element(cr,chr,attr,terminal->host,terminal->font.height,&rect,terminal->color); addr++; rect.x += rect.width; } - rect.y += terminal->metrics.spacing; + rect.y += terminal->font.spacing; } - cairo_set_scaled_font(cr,terminal->font_scaled); - v3270_draw_oia(cr, terminal->host, rect.y, cols, &terminal->metrics, terminal->color,terminal->oia_rect); + cairo_set_scaled_font(cr,terminal->font.scaled); + v3270_draw_oia(cr, terminal->host, rect.y, cols, &terminal->font, terminal->color,terminal->oia_rect); cairo_destroy(cr); @@ -423,16 +423,16 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho lib3270_get_screen_size(terminal->host,&rows,&cols); memset(&rect,0,sizeof(rect)); - rect.x = terminal->metrics.left + ((addr % cols) * terminal->metrics.width); - rect.y = terminal->metrics.top + ((addr / cols) * terminal->metrics.spacing); - rect.width = terminal->metrics.width; - rect.height = terminal->metrics.spacing; + rect.x = terminal->font.left + ((addr % cols) * terminal->font.width); + rect.y = terminal->font.top + ((addr / cols) * terminal->font.spacing); + rect.width = terminal->font.width; + rect.height = terminal->font.spacing; // trace("%s: c=%c attr=%04x addr=%d pos=%d,%d x=%d y=%d w=%d h=%d",__FUNCTION__,chr,(int) attr,addr,(addr / cols),(addr % cols),rect.x,rect.y,rect.width,rect.height); cr = cairo_create(terminal->surface); - cairo_set_scaled_font(cr,terminal->font_scaled); - v3270_draw_element(cr, chr, attr, terminal->host, terminal->metrics.height, &rect,terminal->color); + cairo_set_scaled_font(cr,terminal->font.scaled); + v3270_draw_element(cr, chr, attr, terminal->host, terminal->font.height, &rect,terminal->color); cairo_destroy(cr); if(cursor) v3270_update_cursor_rect(terminal,&rect,chr,attr); @@ -454,11 +454,11 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short get_element_colors(attr,&fg,&bg,widget->color); - cairo_set_scaled_font(cr,widget->font_scaled); + cairo_set_scaled_font(cr,widget->font.scaled); rect.x = 0; rect.y = 0; - v3270_draw_char(cr,chr,attr,widget->host,widget->metrics.height,&rect,bg,fg); + v3270_draw_char(cr,chr,attr,widget->host,widget->font.height,&rect,bg,fg); cairo_destroy(cr); } @@ -471,7 +471,7 @@ void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *rect, unsigned char c widget->cursor.chr = chr; widget->cursor.rect = *rect; widget->cursor.attr = attr; - widget->cursor.rect.height = widget->metrics.height + widget->metrics.descent; + widget->cursor.rect.height = widget->font.height + widget->font.descent; v3270_update_cursor_surface(widget,chr,attr); } diff --git a/src/pw3270/v3270/mouse.c b/src/pw3270/v3270/mouse.c index 29a2989..be9767d 100644 --- a/src/pw3270/v3270/mouse.c +++ b/src/pw3270/v3270/mouse.c @@ -49,12 +49,12 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) GdkPoint point; int r,c; - g_return_val_if_fail(widget->metrics.width > 0,-1); + g_return_val_if_fail(widget->font.width > 0,-1); if(x > 0 && y > 0) { - point.x = ((x-widget->metrics.left)/widget->metrics.width); - point.y = ((y-widget->metrics.top)/widget->metrics.spacing); + point.x = ((x-widget->font.left)/widget->font.width); + point.y = ((y-widget->font.top)/widget->font.spacing); lib3270_get_screen_size(widget->host,&r,&c); diff --git a/src/pw3270/v3270/oia.c b/src/pw3270/v3270/oia.c index 8d1f8f2..c21de07 100644 --- a/src/pw3270/v3270/oia.c +++ b/src/pw3270/v3270/oia.c @@ -47,7 +47,7 @@ /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ -static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_metrics *metrics, int row, int col); +static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo *metrics, int row, int col); /*--[ Statics ]--------------------------------------------------------------------------------------*/ @@ -124,7 +124,7 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step } #endif // HAVE_LIBM -static void setup_cursor_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_cursor_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { rect->width = metrics->width * 8; rect->x -= rect->width; @@ -136,7 +136,7 @@ static void setup_cursor_position(GdkRectangle *rect, struct v3270_metrics *metr } } -static void setup_timer_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_timer_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { char buffer[7]; cairo_text_extents_t extents; @@ -151,14 +151,14 @@ static void setup_timer_position(GdkRectangle *rect, struct v3270_metrics *metri rect->x -= rect->width; } -static void setup_spinner_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_spinner_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { rect->width = rect->height; rect->x -= rect->width; // draw_spinner(cr,rect,color,0); } -static void setup_luname_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_luname_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { const char *luname = lib3270_get_luname(host); @@ -190,7 +190,7 @@ static void setup_luname_position(GdkRectangle *rect, struct v3270_metrics *metr } -static void setup_single_char_right(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_single_char_right(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { rect->x -= rect->width; @@ -202,7 +202,7 @@ static void setup_single_char_right(GdkRectangle *rect, struct v3270_metrics *me } -static void setup_insert_position(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_insert_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { if(rect->width > rect->height) { @@ -239,7 +239,7 @@ static void setup_double_char_position(GdkRectangle *rect, struct v3270_metrics } -static void draw_undera(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) +static void draw_undera(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) { #ifdef DEBUG cairo_set_source_rgb(cr,0.1,0.1,0.1); @@ -289,7 +289,7 @@ static void draw_centered_text(cairo_t *cr, struct v3270_metrics *metrics, int x } */ -static void draw_centered_char(cairo_t *cr, struct v3270_metrics *metrics, int x, int y, const gchar chr) +static void draw_centered_char(cairo_t *cr, v3270FontInfo *metrics, int x, int y, const gchar chr) { char str[2] = { chr, 0 }; @@ -301,7 +301,7 @@ static void draw_centered_char(cairo_t *cr, struct v3270_metrics *metrics, int x } -void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, const GdkRectangle *rect) +void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect) { gchar str = ' '; @@ -352,7 +352,7 @@ static void draw_xbm(cairo_t *cr, GdkRectangle *rect, int width, int height, uns cairo_restore(cr); } -void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) +void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) { #ifdef DEBUG cairo_set_source_rgb(cr,0.1,0.1,0.1); @@ -396,7 +396,7 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metri } -static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) +static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) { #ifdef DEBUG #define OIA_MESSAGE(x,c,y) { #x, c, y } @@ -559,12 +559,12 @@ static void draw_insert(cairo_t *cr, H3270 *host, GdkRGBA *color, GdkRectangle * } -void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect) +void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) { static const struct _right_fields { V3270_OIA_FIELD id; - void (*draw)(GdkRectangle *rect, struct v3270_metrics *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color); + void (*draw)(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color); } right[] = { { V3270_OIA_CURSOR_POSITION, setup_cursor_position }, @@ -676,7 +676,7 @@ static cairo_t * set_update_region(v3270 * terminal, GdkRectangle **r, V3270_OIA GdkRectangle * rect = terminal->oia_rect + id; cairo_t * cr = cairo_create(terminal->surface); - cairo_set_scaled_font(cr,terminal->font_scaled); + cairo_set_scaled_font(cr,terminal->font.scaled); cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); cairo_clip(cr); @@ -709,7 +709,7 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name) if(name) { - cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height); + cairo_move_to(cr,rect->x,rect->y+terminal->font.height); gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME); cairo_show_text(cr,name); cairo_stroke(cr); @@ -738,7 +738,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) cr = set_update_region(widget,&rect,V3270_OIA_MESSAGE); - draw_status_message(cr,id,&widget->metrics,widget->color,rect); + draw_status_message(cr,id,&widget->font,widget->color,rect); cairo_destroy(cr); @@ -749,7 +749,7 @@ void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) } -static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, struct v3270_metrics *metrics, int row, int col) +static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo *metrics, int row, int col) { cairo_text_extents_t extents; char buffer[10]; @@ -777,10 +777,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, // Update cursor rectangle saved = terminal->cursor.rect; - terminal->cursor.rect.x = terminal->metrics.left + (col * terminal->cursor.rect.width); - terminal->cursor.rect.y = terminal->metrics.top + (row * terminal->metrics.spacing); - terminal->cursor.rect.width = terminal->metrics.width; - terminal->cursor.rect.height = terminal->metrics.height+terminal->metrics.descent; + terminal->cursor.rect.x = terminal->font.left + (col * terminal->cursor.rect.width); + terminal->cursor.rect.y = terminal->font.top + (row * terminal->font.spacing); + terminal->cursor.rect.width = terminal->font.width; + terminal->cursor.rect.height = terminal->font.height+terminal->font.descent; terminal->cursor.show |= 1; gtk_widget_queue_draw_area( GTK_WIDGET(terminal), saved.x, @@ -800,10 +800,10 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, GtkAllocation allocation; gtk_widget_get_allocation(GTK_WIDGET(terminal), &allocation); - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,saved.y+terminal->metrics.height,allocation.width,1); + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,saved.y+terminal->font.height,allocation.width,1); gtk_widget_queue_draw_area(GTK_WIDGET(terminal),saved.x,0,1,terminal->oia_rect->y-3); - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,terminal->cursor.rect.y+terminal->metrics.height,allocation.width,1); + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),0,terminal->cursor.rect.y+terminal->font.height,allocation.width,1); gtk_widget_queue_draw_area(GTK_WIDGET(terminal),terminal->cursor.rect.x,0,1,terminal->oia_rect->y-3); } @@ -815,7 +815,7 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, cr = set_update_region(terminal,&rect,V3270_OIA_CURSOR_POSITION); - draw_cursor_position(cr,rect,&terminal->metrics,row,col); + draw_cursor_position(cr,rect,&terminal->font,row,col); cairo_destroy(cr); @@ -940,7 +940,7 @@ static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id if(flag) { - cairo_move_to(cr,0,terminal->metrics.height); + cairo_move_to(cr,0,terminal->font.height); cairo_show_text(cr, text); cairo_stroke(cr); } @@ -1007,8 +1007,8 @@ static gboolean update_timer(struct timer_info *info) short2string(buffer+3,seconds%60,2); buffer[5] = 0; - cairo_set_scaled_font(cr,info->terminal->font_scaled); - cairo_move_to(cr,rect->x,rect->y+info->terminal->metrics.height); + cairo_set_scaled_font(cr,info->terminal->font.scaled); + cairo_move_to(cr,rect->x,rect->y+info->terminal->font.height); cairo_show_text(cr, buffer); cairo_stroke(cr); @@ -1092,7 +1092,7 @@ void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state) return; cr = set_update_region(terminal,&r,V3270_OIA_SSL); - v3270_draw_ssl_status(cr,terminal->host,&terminal->metrics,terminal->color,r); + v3270_draw_ssl_status(cr,terminal->host,&terminal->font,terminal->color,r); gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); cairo_destroy(cr); @@ -1113,7 +1113,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) case LIB3270_FLAG_BOXSOLID: debug("%s",__FUNCTION__); cr = set_update_region(terminal,&r,V3270_OIA_CONNECTION); - v3270_draw_connection(cr,terminal->host,&terminal->metrics,terminal->color,r); + v3270_draw_connection(cr,terminal->host,&terminal->font,terminal->color,r); gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); cairo_destroy(cr); break; @@ -1121,7 +1121,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) case LIB3270_FLAG_UNDERA: debug("%s",__FUNCTION__); cr = set_update_region(terminal,&r,V3270_OIA_UNDERA); - draw_undera(cr,terminal->host,&terminal->metrics,terminal->color,r); + draw_undera(cr,terminal->host,&terminal->font,terminal->color,r); gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); cairo_destroy(cr); break; diff --git a/src/pw3270/v3270/private.h b/src/pw3270/v3270/private.h index c297004..9dcbdf1 100644 --- a/src/pw3270/v3270/private.h +++ b/src/pw3270/v3270/private.h @@ -24,8 +24,6 @@ * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) - * licinio@bb.com.br (Licínio Luis Branco) - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) * */ @@ -109,19 +107,6 @@ G_BEGIN_DECLS #define V3270_CURSOR_COUNT LIB3270_CURSOR_USER+11 - struct v3270_metrics - { - guint width; - guint height; - guint ascent; - guint descent; - - guint spacing; - - guint left; - guint top; - }; - struct v3270_ssl_status_msg { long id; @@ -130,6 +115,28 @@ G_BEGIN_DECLS const gchar * message; }; + /** + * @brief Informações para desenho de fontes com o cairo. + * + */ + struct _v3270FontInfo { + + guint width; + guint height; + guint ascent; + guint descent; + + guint spacing; + + guint left; + guint top; + + gchar * family; + cairo_font_weight_t weight; + cairo_scaled_font_t * scaled; + + }; + /*--[ Widget data ]----------------------------------------------------------------------------------*/ struct _v3270 @@ -166,18 +173,14 @@ G_BEGIN_DECLS V3270_OIA_FIELD selected_field; /**< Clicked OIA field */ // Font info - gchar * font_family; - cairo_font_weight_t font_weight; - cairo_scaled_font_t * font_scaled; cairo_surface_t * surface; - - struct v3270_metrics metrics; + v3270FontInfo font; gint minimum_width; gint minimum_height; // Colors - GdkRGBA color[V3270_COLOR_COUNT]; /**< Terminal widget colors */ + GdkRGBA color[V3270_COLOR_COUNT]; /**< Terminal widget colors */ // Regions GdkRectangle oia_rect[V3270_OIA_FIELD_COUNT]; @@ -252,7 +255,7 @@ G_BEGIN_DECLS const GtkWidgetClass * v3270_get_parent_class(void); gboolean v3270_draw(GtkWidget * widget, cairo_t * cr); -void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect); +void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect); void v3270_update_mouse_pointer(GtkWidget *widget); #if ! GTK_CHECK_VERSION(2,18,0) @@ -292,8 +295,8 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3 void v3270_start_timer(GtkWidget *terminal); void v3270_stop_timer(GtkWidget *terminal); -void v3270_draw_connection(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, const GdkRectangle *rect); -void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, struct v3270_metrics *metrics, GdkRGBA *color, GdkRectangle *rect); +void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect); +void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect); void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor); diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index 9a04f6d..e3f75f3 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -54,8 +54,8 @@ #define WIDTH_IN_PIXELS(terminal,x) (x * cols) #define HEIGHT_IN_PIXELS(terminal,x) (x * (rows+1)) - #define CONTENTS_WIDTH(terminal) (cols * terminal->metrics.width) - #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->metrics.spacing)+OIA_TOP_MARGIN+2) + #define CONTENTS_WIDTH(terminal) (cols * terminal->font.width) + #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->font.spacing)+OIA_TOP_MARGIN+2) /** * SECTION: v3270 @@ -554,11 +554,11 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig lib3270_get_screen_size(terminal->host,&rows,&cols); - terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; - cairo_select_font_face(cr, terminal->font_family, CAIRO_FONT_SLANT_NORMAL,terminal->font_weight); + cairo_select_font_face(cr,terminal->font.family, CAIRO_FONT_SLANT_NORMAL,terminal->font.weight); - if(terminal->scaled_fonts) + if(terminal->font.scaled) { double w = ((double) width) / ((double)cols); double h = ((double) height) / ((double) (rows+2)); @@ -612,38 +612,38 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig cairo_font_extents(cr,&extents); // Save scaled font for use on next drawings - if(terminal->font_scaled) - cairo_scaled_font_destroy(terminal->font_scaled); + if(terminal->font.scaled) + cairo_scaled_font_destroy(terminal->font.scaled); - terminal->font_scaled = cairo_get_scaled_font(cr); - cairo_scaled_font_reference(terminal->font_scaled); + terminal->font.scaled = cairo_get_scaled_font(cr); + cairo_scaled_font_reference(terminal->font.scaled); - cairo_scaled_font_extents(terminal->font_scaled,&extents); + cairo_scaled_font_extents(terminal->font.scaled,&extents); - terminal->metrics.width = (int) extents.max_x_advance; - terminal->metrics.height = (int) extents.height; - terminal->metrics.ascent = (int) extents.ascent; - terminal->metrics.descent = (int) extents.descent; + terminal->font.width = (int) extents.max_x_advance; + terminal->font.height = (int) extents.height; + terminal->font.ascent = (int) extents.ascent; + terminal->font.descent = (int) extents.descent; - hFont = terminal->metrics.height + terminal->metrics.descent; + hFont = terminal->font.height + terminal->font.descent; // Create new cursor surface if(terminal->cursor.surface) cairo_surface_destroy(terminal->cursor.surface); - terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->metrics.width,hFont); + terminal->cursor.surface = gdk_window_create_similar_surface(gtk_widget_get_window(GTK_WIDGET(terminal)),CAIRO_CONTENT_COLOR,terminal->font.width,hFont); // Center image size = CONTENTS_WIDTH(terminal); - terminal->metrics.left = (width >> 1) - ((size) >> 1); + terminal->font.left = (width >> 1) - ((size) >> 1); - terminal->metrics.spacing = height / (rows+2); - if(terminal->metrics.spacing < hFont) - terminal->metrics.spacing = hFont; + terminal->font.spacing = height / (rows+2); + if(terminal->font.spacing < hFont) + terminal->font.spacing = hFont; size = CONTENTS_HEIGHT(terminal); - terminal->metrics.top = (height >> 1) - (size >> 1); + terminal->font.top = (height >> 1) - (size >> 1); } @@ -1021,16 +1021,16 @@ static void v3270_destroy(GtkObject *widget) terminal->host = NULL; } - if(terminal->font_family) + if(terminal->font.family) { - g_free(terminal->font_family); - terminal->font_family = 0; + g_free(terminal->font.family); + terminal->font.family = 0; } - if(terminal->font_scaled) + if(terminal->font.scaled) { - cairo_scaled_font_destroy(terminal->font_scaled); - terminal->font_scaled = NULL; + cairo_scaled_font_destroy(terminal->font.scaled); + terminal->font.scaled = NULL; } if(terminal->surface) @@ -1455,18 +1455,18 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) name = "courier new"; } - if(terminal->font_family) + if(terminal->font.family) { - if(!g_ascii_strcasecmp(terminal->font_family,name)) + if(!g_ascii_strcasecmp(terminal->font.family,name)) return; - g_free(terminal->font_family); - terminal->font_family = NULL; + g_free(terminal->font.family); + terminal->font.family = NULL; } - terminal->font_family = g_strdup(name); - terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; + terminal->font.family = g_strdup(name); + terminal->font.weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; - trace("%s: %s (%p)",__FUNCTION__,terminal->font_family,terminal->font_family); + trace("%s: %s (%p)",__FUNCTION__,terminal->font.family,terminal->font.family); g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "font-family", name); @@ -1479,7 +1479,7 @@ void v3270_set_font_family(GtkWidget *widget, const gchar *name) const gchar * v3270_get_font_family(GtkWidget *widget) { g_return_val_if_fail(GTK_IS_V3270(widget),NULL); - return GTK_V3270(widget)->font_family; + return GTK_V3270(widget)->font.family; } void v3270_disconnect(GtkWidget *widget) -- libgit2 0.21.2