diff --git a/src/include/pw3270/v3270.h b/src/include/pw3270/v3270.h index fb287d6..0e5e58f 100644 --- a/src/include/pw3270/v3270.h +++ b/src/include/pw3270/v3270.h @@ -225,7 +225,7 @@ LIB3270_EXPORT void v3270_set_color_table(GdkRGBA *table, const gchar *colors); LIB3270_EXPORT const GdkRGBA * v3270_get_color_table(GtkWidget *widget); LIB3270_EXPORT void v3270_set_mono_color_table(GdkRGBA *table, const gchar *fg, const gchar *bg); - LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkRGBA *color); + LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *color); LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkRGBA *color); LIB3270_EXPORT GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); diff --git a/src/pw3270/print.c b/src/pw3270/print.c index 6cb551d..ed1ac64 100644 --- a/src/pw3270/print.c +++ b/src/pw3270/print.c @@ -189,7 +189,7 @@ { if(!info->show_selection) attr &= ~LIB3270_ATTR_SELECTED; - v3270_draw_element(cr,c,attr,info->session,info->font.height,&rect,info->color); + v3270_draw_element(cr,c,attr,info->session,&info->font,&rect,info->color); } rect.x += (rect.width-1); diff --git a/src/pw3270/v3270/draw.c b/src/pw3270/v3270/draw.c index ac96bb3..690218a 100644 --- a/src/pw3270/v3270/draw.c +++ b/src/pw3270/v3270/draw.c @@ -112,13 +112,13 @@ static void get_element_colors(unsigned short attr, GdkRGBA **fg, GdkRGBA **bg, } } -void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkRGBA *color) +void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *fontInfo, GdkRectangle *rect, GdkRGBA *color) { GdkRGBA *fg; GdkRGBA *bg; get_element_colors(attr,&fg,&bg,color); - v3270_draw_char(cr,chr,attr,session,height,rect,fg,bg); + v3270_draw_char(cr,chr,attr,session,fontInfo,rect,fg,bg); if(attr & LIB3270_ATTR_UNDERLINE) { @@ -142,7 +142,7 @@ void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H32 } -void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, guint height, const char *str) { +void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo *font, const char *str) { cairo_status_t status; cairo_glyph_t * glyphs = NULL; @@ -154,13 +154,13 @@ void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, guint height, const status = cairo_scaled_font_text_to_glyphs( scaled_font, - (double) rect->x, (double) (rect->y+height), + (double) rect->x, (double) (rect->y+font->height), str, strlen(str), &glyphs, &num_glyphs, &clusters, &num_clusters, &cluster_flags ); if (status == CAIRO_STATUS_SUCCESS) { - cairo_show_text_glyphs (cr,str,strlen(str),glyphs, num_glyphs,clusters, num_clusters, cluster_flags); + cairo_show_text_glyphs(cr,str,strlen(str),glyphs, num_glyphs,clusters, num_clusters, cluster_flags); } if(glyphs) @@ -169,14 +169,9 @@ void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, guint height, const if(clusters) cairo_text_cluster_free(clusters); -/* - cairo_move_to(cr,rect->x,rect->y+height); - cairo_show_text(cr, str); -*/ - } -void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkRGBA *fg, GdkRGBA *bg) +void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *fg, GdkRGBA *bg) { // Clear element area gdk_cairo_set_source_rgba(cr,bg); @@ -277,23 +272,23 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 break; case 0x8c: // CG 0xf7, less or equal "≤" - v3270_draw_text(cr,rect,height,"≤"); + v3270_draw_text(cr,rect,font,"≤"); break; case 0xae: // CG 0xd9, greater or equal "≥" - v3270_draw_text(cr,rect,height,"≥"); + v3270_draw_text(cr,rect,font,"≥"); break; case 0xbe: // CG 0x3e, not equal "≠" - v3270_draw_text(cr,rect,height,"≠"); + v3270_draw_text(cr,rect,font,"≠"); break; case 0xad: // "[" - v3270_draw_text(cr,rect,height,"["); + v3270_draw_text(cr,rect,font,"["); break; case 0xbd: // "]" - v3270_draw_text(cr,rect,height,"]"); + v3270_draw_text(cr,rect,font,"]"); break; default: @@ -306,7 +301,7 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 if(utf) { - v3270_draw_text(cr,rect,height,utf); + v3270_draw_text(cr,rect,font,utf); g_free(utf); } } @@ -386,7 +381,7 @@ 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->font.height,&rect,terminal->color); + v3270_draw_element(cr,chr,attr,terminal->host,&terminal->font,&rect,terminal->color); addr++; rect.x += rect.width; @@ -432,7 +427,7 @@ void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned sho cr = cairo_create(terminal->surface); cairo_set_scaled_font(cr,terminal->font.scaled); - v3270_draw_element(cr, chr, attr, terminal->host, terminal->font.height, &rect,terminal->color); + v3270_draw_element(cr, chr, attr, terminal->host, &terminal->font, &rect,terminal->color); cairo_destroy(cr); if(cursor) v3270_update_cursor_rect(terminal,&rect,chr,attr); @@ -458,7 +453,7 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned short rect.x = 0; rect.y = 0; - v3270_draw_char(cr,chr,attr,widget->host,widget->font.height,&rect,bg,fg); + v3270_draw_char(cr,chr,attr,widget->host,&widget->font,&rect,bg,fg); cairo_destroy(cr); } diff --git a/src/pw3270/v3270/oia.c b/src/pw3270/v3270/oia.c index e6a4dbb..f0a67c7 100644 --- a/src/pw3270/v3270/oia.c +++ b/src/pw3270/v3270/oia.c @@ -158,7 +158,7 @@ static void setup_spinner_position(GdkRectangle *rect, v3270FontInfo *metrics, c // draw_spinner(cr,rect,color,0); } -static void setup_luname_position(GdkRectangle *rect, v3270FontInfo *metrics, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) +static void setup_luname_position(GdkRectangle *rect, v3270FontInfo *font, cairo_t *cr, H3270 *host, int cols, GdkRGBA *color) { const char *luname = lib3270_get_luname(host); @@ -180,10 +180,13 @@ static void setup_luname_position(GdkRectangle *rect, v3270FontInfo *metrics, ca if(luname) { - cairo_move_to(cr,rect->x,rect->y+metrics->height); +// cairo_move_to(cr,rect->x,rect->y+font->height); + gdk_cairo_set_source_rgba(cr,color+V3270_COLOR_OIA_LUNAME); - cairo_show_text(cr,luname); - cairo_stroke(cr); + v3270_draw_text(cr,rect,font,luname); + +// cairo_show_text(cr,luname); +// cairo_stroke(cr); } cairo_restore(cr); @@ -279,16 +282,6 @@ static void draw_undera(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGB } -/* -static void draw_centered_text(cairo_t *cr, struct v3270_metrics *metrics, int x, int y, const gchar *str) -{ - cairo_text_extents_t extents; - cairo_text_extents(cr,str,&extents); - cairo_move_to(cr,x+(((metrics->width+2)/2)-(extents.width/2)),y+extents.height+( (metrics->spacing/2) - (extents.height/2))); - cairo_show_text(cr,str); -} -*/ - static void draw_centered_char(cairo_t *cr, v3270FontInfo *metrics, int x, int y, const gchar chr) { char str[2] = { chr, 0 }; @@ -396,7 +389,7 @@ void v3270_draw_ssl_status(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, Gdk } -static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) +static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo *font, GdkRGBA *color, const GdkRectangle *r) { #ifdef DEBUG #define OIA_MESSAGE(x,c,y) { #x, c, y } @@ -477,7 +470,10 @@ static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo * }; - const gchar *msg = message[0].msg; + GdkRectangle rect; + const gchar * msg = message[0].msg; + + memcpy(&rect,r,sizeof(GdkRectangle)); // trace("%s: id=%d",__FUNCTION__,id); @@ -492,7 +488,7 @@ static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo * // Limpa o bloco gdk_cairo_set_source_rgba(cr,color+V3270_COLOR_OIA_BACKGROUND); - cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); + cairo_rectangle(cr, rect.x, rect.y, rect.width, rect.height); cairo_fill(cr); if(msg && *msg) @@ -502,7 +498,7 @@ static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo * if(msg && *msg) { - int x = rect->x+1; + rect.x++; debug("%s(%s)",__FUNCTION__,msg); @@ -512,13 +508,13 @@ static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo * { cairo_save(cr); - cairo_move_to(cr,x+1,rect->y+(metrics->height)-(metrics->ascent)); - cairo_rel_line_to(cr,metrics->width,metrics->ascent); - cairo_rel_move_to(cr,-metrics->width,0); - cairo_rel_line_to(cr,metrics->width,-metrics->ascent); + cairo_move_to(cr,rect.x+1,rect.y+(font->height)-(font->ascent)); + cairo_rel_line_to(cr,font->width,font->ascent); + cairo_rel_move_to(cr,-font->width,0); + cairo_rel_line_to(cr,font->width,-font->ascent); cairo_stroke(cr); - x += metrics->width; + rect.x += font->width; msg++; cairo_restore(cr); @@ -527,13 +523,14 @@ static void draw_status_message(cairo_t *cr, LIB3270_MESSAGE id, v3270FontInfo * while(isspace(*msg)) { msg++; - x += metrics->width; + rect.x += font->width; } if(*msg) { - cairo_move_to(cr,x,rect->y+metrics->height); - cairo_show_text(cr,msg); + v3270_draw_text(cr,&rect, font, msg); +// cairo_move_to(cr,x,rect->y+metrics->height); +// cairo_show_text(cr,msg); } } diff --git a/src/pw3270/v3270/private.h b/src/pw3270/v3270/private.h index 37ea6e7..0461dd0 100644 --- a/src/pw3270/v3270/private.h +++ b/src/pw3270/v3270/private.h @@ -268,7 +268,8 @@ void v3270_update_cursor_surface(v3270 *widget,unsigned char chr,unsigned sho void v3270_register_io_handlers(v3270Class *cls); -void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkRGBA *fg, GdkRGBA *bg); +void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *fg, GdkRGBA *bg); +void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo *font, const char *str); void v3270_start_timer(GtkWidget *terminal); void v3270_stop_timer(GtkWidget *terminal); -- libgit2 0.21.2