Commit 6485411de0b30ebbbab8fe9b91d1b3eda3611083

Authored by perry.werneck@gmail.com
1 parent b57a46c3

Corrigindo problema no sublinhado...

Fórum: PW3270 Suporte
Thread: Sublinhado Versão 5.0
Último Post: David Dourado
Enviados: 2013-01-09 18:35:31.386784-02

Caros,

Ao instalar a  versão 5.0 (GTK 3.6) no Windows 7 64 bits percebemos que
os inputs não tem o sublinhado.

Resolvemos instalar a versão 4.2 e percebemos que funcionou
perfeitamente. 

P.S.: Não tentamos instalar a versão 5 em outros ambientes. 

Isto é um novo comportamento padrão ou há um problema?
src/include/lib3270.h
@@ -110,7 +110,7 @@ @@ -110,7 +110,7 @@
110 LIB3270_TOGGLE_SMART_PASTE, 110 LIB3270_TOGGLE_SMART_PASTE,
111 LIB3270_TOGGLE_BOLD, 111 LIB3270_TOGGLE_BOLD,
112 LIB3270_TOGGLE_KEEP_SELECTED, 112 LIB3270_TOGGLE_KEEP_SELECTED,
113 - LIB3270_TOGGLE_UNDERLINE, 113 + LIB3270_TOGGLE_UNDERLINE, /**< Show underline ? */
114 LIB3270_TOGGLE_CONNECT_ON_STARTUP, 114 LIB3270_TOGGLE_CONNECT_ON_STARTUP,
115 LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */ 115 LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */
116 LIB3270_TOGGLE_BEEP, /**< Beep on errors */ 116 LIB3270_TOGGLE_BEEP, /**< Beep on errors */
src/lib3270/api.h
@@ -291,39 +291,11 @@ @@ -291,39 +291,11 @@
291 #define COLOR_ATTR_NONE 0x0000 291 #define COLOR_ATTR_NONE 0x0000
292 #define COLOR_ATTR_FIELD LIB3270_ATTR_FIELD 292 #define COLOR_ATTR_FIELD LIB3270_ATTR_FIELD
293 #define COLOR_ATTR_BLINK LIB3270_ATTR_BLINK 293 #define COLOR_ATTR_BLINK LIB3270_ATTR_BLINK
294 - #define COLOR_ATTR_UNDERLINE LIB3270_ATTR_UNDERLINE 294 +// #define COLOR_ATTR_UNDERLINE LIB3270_ATTR_UNDERLINE
295 #define COLOR_ATTR_INTENSIFY LIB3270_ATTR_INTENSIFY 295 #define COLOR_ATTR_INTENSIFY LIB3270_ATTR_INTENSIFY
296 296
297 -// #define CHAR_ATTR_CG LIB3270_ATTR_CG  
298 -// #define CHAR_ATTR_MARKER LIB3270_ATTR_MARKER  
299 -  
300 #define CHAR_ATTR_UNCONVERTED LIB3270_ATTR_CG 297 #define CHAR_ATTR_UNCONVERTED LIB3270_ATTR_CG
301 298
302 -/*  
303 - struct _lib3270_option  
304 - {  
305 - const char *name;  
306 - enum  
307 - {  
308 - OPT_BOOLEAN,  
309 - OPT_STRING,  
310 - OPT_INTEGER,  
311 - OPT_XRM,  
312 - OPT_SKIP2,  
313 - OPT_NOP,  
314 - OPT_DONE  
315 - } type;  
316 - unsigned char flag;  
317 - const char *res_name;  
318 - void *aoff;  
319 - const char *description;  
320 - };  
321 -  
322 - #define new_3270_session(m) lib3270_session_new(m)  
323 -  
324 - LOCAL_EXTERN const struct _lib3270_option * get_3270_option_table(int sz);  
325 -*/  
326 -  
327 299
328 /* Set/Get screen contents */ 300 /* Set/Get screen contents */
329 #define find_field_attribute(s,a) lib3270_field_addr(s,a) 301 #define find_field_attribute(s,a) lib3270_field_addr(s,a)
src/lib3270/screen.c
@@ -210,16 +210,13 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa) @@ -210,16 +210,13 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa)
210 else 210 else
211 gr = 0; 211 gr = 0;
212 212
213 - if(!(gr & GR_REVERSE) && !bg)  
214 - {  
215 - if(gr & GR_BLINK)  
216 - a |= LIB3270_ATTR_BLINK; 213 + if(gr & GR_BLINK)
  214 + a |= LIB3270_ATTR_BLINK;
217 215
218 - if(gr & GR_UNDERLINE)  
219 - a |= LIB3270_ATTR_UNDERLINE;  
220 - } 216 + if( (gr & GR_UNDERLINE) && lib3270_get_toggle(session,LIB3270_TOGGLE_UNDERLINE))
  217 + a |= LIB3270_ATTR_UNDERLINE;
221 218
222 - if(session->m3279 && (gr & (GR_BLINK | GR_UNDERLINE)) && !(gr & GR_REVERSE) && !bg) 219 + if(session->m3279 && (gr & (GR_BLINK | GR_UNDERLINE)) && !(gr & GR_REVERSE))
223 a |= LIB3270_ATTR_BACKGROUND_INTENSITY; 220 a |= LIB3270_ATTR_BACKGROUND_INTENSITY;
224 221
225 if(!session->m3279 && ((gr & GR_INTENSIFY) || FA_IS_HIGH(fa))) 222 if(!session->m3279 && ((gr & GR_INTENSIFY) || FA_IS_HIGH(fa)))
@@ -762,11 +759,14 @@ LIB3270_ACTION( testpattern ) @@ -762,11 +759,14 @@ LIB3270_ACTION( testpattern )
762 { 0, text_pat }, 759 { 0, text_pat },
763 }; 760 };
764 761
765 - int row = 0; 762 + static const unsigned char gr[] = { 0, GR_UNDERLINE, GR_BLINK };
  763 +
  764 + int row = 0;
766 int max; 765 int max;
767 - int pos = 0; 766 + int pos = 0;
  767 + int grpos = 0;
768 int f; 768 int f;
769 - int fg = COLOR_BLUE; 769 + int fg = COLOR_BLUE;
770 770
771 CHECK_SESSION_HANDLE(hSession); 771 CHECK_SESSION_HANDLE(hSession);
772 772
@@ -779,7 +779,11 @@ LIB3270_ACTION( testpattern ) @@ -779,7 +779,11 @@ LIB3270_ACTION( testpattern )
779 { 779 {
780 row = 0; 780 row = 0;
781 if(++fg > COLOR_WHITE) 781 if(++fg > COLOR_WHITE)
  782 + {
782 fg = COLOR_BLUE; 783 fg = COLOR_BLUE;
  784 + if(++grpos > (sizeof(gr)/sizeof(gr[0])))
  785 + grpos = 0;
  786 + }
783 } 787 }
784 pos = 0; 788 pos = 0;
785 } 789 }
@@ -787,6 +791,7 @@ LIB3270_ACTION( testpattern ) @@ -787,6 +791,7 @@ LIB3270_ACTION( testpattern )
787 hSession->ea_buf[f].bg = (fg == COLOR_BLACK) ? COLOR_WHITE : COLOR_BLACK; 791 hSession->ea_buf[f].bg = (fg == COLOR_BLACK) ? COLOR_WHITE : COLOR_BLACK;
788 hSession->ea_buf[f].cs = pat[row].cs; 792 hSession->ea_buf[f].cs = pat[row].cs;
789 hSession->ea_buf[f].cc = pat[row].cc[pos++]; 793 hSession->ea_buf[f].cc = pat[row].cc[pos++];
  794 + hSession->ea_buf[f].gr = gr[grpos];
790 } 795 }
791 796
792 hSession->display(hSession); 797 hSession->display(hSession);
src/lib3270/toggles.c
@@ -149,7 +149,7 @@ static void toggle_altscreen(H3270 *session, struct lib3270_toggle *t, LIB3270_T @@ -149,7 +149,7 @@ static void toggle_altscreen(H3270 *session, struct lib3270_toggle *t, LIB3270_T
149 set_viewsize(session,t->value ? 24 : session->maxROWS,80); 149 set_viewsize(session,t->value ? 24 : session->maxROWS,80);
150 } 150 }
151 151
152 -static void toggle_monocase(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt) 152 +static void toggle_redraw(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt)
153 { 153 {
154 session->display(session); 154 session->display(session);
155 } 155 }
@@ -172,17 +172,10 @@ void initialize_toggles(H3270 *session) @@ -172,17 +172,10 @@ void initialize_toggles(H3270 *session)
172 session->toggle[f].upcall = toggle_nop; 172 session->toggle[f].upcall = toggle_nop;
173 173
174 session->toggle[LIB3270_TOGGLE_RECTANGLE_SELECT].upcall = toggle_rectselect; 174 session->toggle[LIB3270_TOGGLE_RECTANGLE_SELECT].upcall = toggle_rectselect;
175 - session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_monocase; 175 + session->toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_redraw;
  176 + session->toggle[LIB3270_TOGGLE_UNDERLINE].upcall = toggle_redraw;
176 session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen; 177 session->toggle[LIB3270_TOGGLE_ALTSCREEN].upcall = toggle_altscreen;
177 178
178 -/*  
179 -#if defined(X3270_TRACE)  
180 - session->toggle[LIB3270_TOGGLE_DS_TRACE].upcall = toggle_dsTrace;  
181 - session->toggle[LIB3270_TOGGLE_SCREEN_TRACE].upcall = toggle_screenTrace;  
182 - session->toggle[LIB3270_TOGGLE_EVENT_TRACE].upcall = toggle_eventTrace;  
183 -#endif  
184 -*/  
185 -  
186 #if defined(X3270_ANSI) 179 #if defined(X3270_ANSI)
187 session->toggle[LIB3270_TOGGLE_LINE_WRAP].upcall = toggle_lineWrap; 180 session->toggle[LIB3270_TOGGLE_LINE_WRAP].upcall = toggle_lineWrap;
188 #endif 181 #endif
src/pw3270/v3270/draw.c
@@ -119,6 +119,28 @@ void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H32 @@ -119,6 +119,28 @@ void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H32
119 119
120 get_element_colors(attr,&fg,&bg,color); 120 get_element_colors(attr,&fg,&bg,color);
121 v3270_draw_char(cr,chr,attr,session,height,rect,fg,bg); 121 v3270_draw_char(cr,chr,attr,session,height,rect,fg,bg);
  122 +
  123 + if(attr & LIB3270_ATTR_UNDERLINE)
  124 + {
  125 + cairo_scaled_font_t * font = cairo_get_scaled_font(cr);
  126 + cairo_font_extents_t extents;
  127 + double sl;
  128 +
  129 + cairo_scaled_font_extents(font,&extents);
  130 +
  131 + sl = extents.descent/3;
  132 + if(sl < 1)
  133 + sl = 1;
  134 +
  135 + gdk_cairo_set_source_color(cr,fg);
  136 +
  137 + cairo_rectangle(cr,rect->x,rect->y+sl+extents.ascent+(extents.descent/2),rect->width,sl);
  138 + cairo_fill(cr);
  139 +
  140 + cairo_stroke(cr);
  141 + }
  142 +
  143 +
122 } 144 }
123 145
124 void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *fg, GdkColor *bg) 146 void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *fg, GdkColor *bg)
@@ -262,6 +284,7 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 @@ -262,6 +284,7 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270
262 g_free(utf); 284 g_free(utf);
263 } 285 }
264 } 286 }
  287 +
265 cairo_stroke(cr); 288 cairo_stroke(cr);
266 } 289 }
267 290