Commit 3cbfdef2c6f524d23303bafe628c85d2168f659d
1 parent
83eab83e
Exists in
master
and in
1 other branch
Visual adjustments.
Showing
1 changed file
with
91 additions
and
15 deletions
Show diff stats
src/terminal/drawing/oia.c
| ... | ... | @@ -258,10 +258,8 @@ static void setup_double_char_position(GdkRectangle *rect, G_GNUC_UNUSED v3270Fo |
| 258 | 258 | static int draw_centered_char(cairo_t *cr, v3270FontInfo *metrics, int x, int y, const gchar chr) |
| 259 | 259 | { |
| 260 | 260 | char str[2] = { chr, 0 }; |
| 261 | -// cairo_text_extents_t extents; | |
| 262 | 261 | |
| 263 | 262 | cairo_set_scaled_font(cr,metrics->scaled); |
| 264 | -// cairo_text_extents(cr,str,&extents); | |
| 265 | 263 | |
| 266 | 264 | v3270_draw_text_at(cr, x, y, metrics, str); |
| 267 | 265 | |
| ... | ... | @@ -293,33 +291,95 @@ static void draw_undera(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGB |
| 293 | 291 | |
| 294 | 292 | } |
| 295 | 293 | |
| 294 | +static void draw_boxed_char(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo *metrics, const char *str) { | |
| 295 | + | |
| 296 | + cairo_status_t status; | |
| 297 | + cairo_glyph_t * glyphs = NULL; | |
| 298 | + int num_glyphs = 0; | |
| 299 | + cairo_text_cluster_t * clusters = NULL; | |
| 300 | + int num_clusters = 0; | |
| 301 | + cairo_text_cluster_flags_t cluster_flags; | |
| 302 | + double x = ((double) rect->x); | |
| 303 | + double y = (rect->y+metrics->height); | |
| 304 | + | |
| 305 | + status = cairo_scaled_font_text_to_glyphs( | |
| 306 | + metrics->scaled, | |
| 307 | + x+1, | |
| 308 | + y, | |
| 309 | + str, strlen(str), | |
| 310 | + &glyphs, | |
| 311 | + &num_glyphs, | |
| 312 | + &clusters, | |
| 313 | + &num_clusters, | |
| 314 | + &cluster_flags | |
| 315 | + ); | |
| 316 | + | |
| 317 | + if (status == CAIRO_STATUS_SUCCESS) { | |
| 318 | + cairo_show_text_glyphs( | |
| 319 | + cr, | |
| 320 | + str, | |
| 321 | + strlen(str), | |
| 322 | + glyphs, | |
| 323 | + num_glyphs, | |
| 324 | + clusters, | |
| 325 | + num_clusters, | |
| 326 | + cluster_flags | |
| 327 | + ); | |
| 328 | + } | |
| 329 | + | |
| 330 | + if(glyphs) | |
| 331 | + cairo_glyph_free(glyphs); | |
| 332 | + | |
| 333 | + if(clusters) | |
| 334 | + cairo_text_cluster_free(clusters); | |
| 335 | + | |
| 336 | + // https://www.cairographics.org/FAQ/#sharp_lines | |
| 337 | + cairo_set_line_width(cr, 1); | |
| 338 | + cairo_move_to(cr,rect->x + 0.5, rect->y + 0.5); | |
| 339 | + cairo_line_to(cr,rect->x + 0.5, rect->y + rect->height + 0.5); | |
| 340 | + cairo_line_to(cr,rect->x + rect->width + 0.5, rect->y + rect->height + 0.5); | |
| 341 | + cairo_line_to(cr,rect->x + rect->width + 0.5, rect->y + 0.5); | |
| 342 | + cairo_close_path(cr); | |
| 343 | + | |
| 344 | + cairo_stroke(cr); | |
| 345 | + | |
| 346 | +} | |
| 347 | + | |
| 296 | 348 | void v3270_draw_connection(cairo_t *cr, H3270 *host, v3270FontInfo *metrics, GdkRGBA *color, const GdkRectangle *rect) |
| 297 | 349 | { |
| 298 | - gchar str = ' '; | |
| 299 | - | |
| 300 | 350 | gdk_cairo_set_source_rgba(cr,color+V3270_COLOR_OIA_BACKGROUND); |
| 301 | 351 | cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); |
| 302 | 352 | cairo_fill(cr); |
| 353 | + cairo_stroke(cr); | |
| 303 | 354 | |
| 304 | 355 | gdk_cairo_set_source_rgba(cr,color+V3270_COLOR_OIA_FOREGROUND); |
| 305 | - cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); | |
| 306 | - cairo_stroke(cr); | |
| 307 | 356 | |
| 308 | - if(lib3270_get_oia_box_solid(host)) | |
| 357 | + //cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); | |
| 358 | + | |
| 359 | + if(lib3270_get_oia_box_solid(host)) | |
| 309 | 360 | { |
| 310 | 361 | cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); |
| 311 | 362 | cairo_fill(cr); |
| 363 | + cairo_stroke(cr); | |
| 312 | 364 | return; |
| 313 | 365 | } |
| 314 | 366 | |
| 367 | + const gchar *str = " "; | |
| 315 | 368 | if(lib3270_in_ansi(host)) |
| 316 | - str = 'N'; | |
| 369 | + str = "N"; | |
| 317 | 370 | else if(lib3270_in_sscp(host)) |
| 318 | - str = 'S'; | |
| 371 | + str = "S"; | |
| 319 | 372 | else |
| 320 | - str = '?'; | |
| 373 | + str = "?"; | |
| 374 | + | |
| 375 | + draw_boxed_char( | |
| 376 | + cr, | |
| 377 | + rect, | |
| 378 | + metrics, | |
| 379 | + str | |
| 380 | + ); | |
| 321 | 381 | |
| 322 | - draw_centered_char(cr,metrics,rect->x,rect->y,str); | |
| 382 | +// draw_centered_char(cr,metrics,rect->x,rect->y,str[0]); | |
| 323 | 383 | |
| 324 | 384 | } |
| 325 | 385 | |
| ... | ... | @@ -553,9 +613,6 @@ static void draw_insert(cairo_t *cr, H3270 *host, GdkRGBA *color, GdkRectangle * |
| 553 | 613 | |
| 554 | 614 | } |
| 555 | 615 | |
| 556 | -// v3270_draw_oia(cr, terminal->host, rect.y, cols, &terminal->font, terminal->color,terminal->oia_rect); | |
| 557 | -// void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, v3270FontInfo *metrics, GdkRGBA *color, GdkRectangle *rect) | |
| 558 | - | |
| 559 | 616 | void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols) |
| 560 | 617 | { |
| 561 | 618 | static const struct _right_fields |
| ... | ... | @@ -611,11 +668,29 @@ void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols) |
| 611 | 668 | |
| 612 | 669 | gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_FOREGROUND); |
| 613 | 670 | |
| 671 | + { | |
| 672 | + GdkRectangle rect = { | |
| 673 | + .x = lCol, | |
| 674 | + .y = row, | |
| 675 | + .width = terminal->font.width+2, | |
| 676 | + .height = terminal->font.spacing.value | |
| 677 | + }; | |
| 678 | + | |
| 679 | + draw_boxed_char( | |
| 680 | + cr, | |
| 681 | + &rect, | |
| 682 | + &terminal->font, | |
| 683 | + "4" | |
| 684 | + ); | |
| 685 | + } | |
| 686 | + | |
| 687 | + /* | |
| 614 | 688 | draw_centered_char(cr,&terminal->font,lCol,row,'4'); |
| 615 | 689 | |
| 616 | 690 | cairo_stroke(cr); |
| 617 | 691 | cairo_rectangle(cr, lCol, row, terminal->font.width+2, terminal->font.spacing.value); |
| 618 | 692 | cairo_stroke(cr); |
| 693 | + */ | |
| 619 | 694 | |
| 620 | 695 | lCol += (terminal->font.width+5); |
| 621 | 696 | |
| ... | ... | @@ -631,8 +706,9 @@ void v3270_draw_oia(v3270 *terminal, cairo_t *cr, int row, int cols) |
| 631 | 706 | // Connection indicator |
| 632 | 707 | terminal->oia.rect[V3270_OIA_CONNECTION].x = lCol; |
| 633 | 708 | terminal->oia.rect[V3270_OIA_CONNECTION].y = row; |
| 634 | - terminal->oia.rect[V3270_OIA_CONNECTION].width = terminal->font.width+3; | |
| 709 | + terminal->oia.rect[V3270_OIA_CONNECTION].width = terminal->font.width; | |
| 635 | 710 | terminal->oia.rect[V3270_OIA_CONNECTION].height = terminal->font.spacing.value; |
| 711 | + | |
| 636 | 712 | v3270_draw_connection(cr,terminal->host,&terminal->font,terminal->color,terminal->oia.rect+V3270_OIA_CONNECTION); |
| 637 | 713 | |
| 638 | 714 | lCol += (4 + terminal->oia.rect[V3270_OIA_CONNECTION].width); | ... | ... |