Ignore:
Timestamp:
Nov 13, 2006, 1:19:18 AM (16 years ago)
Author:
Sam Hocevar
Message:
  • Improved ANSI import, especially wrt. drawing context persistence.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/import.c

    r1378 r1384  
    351351    unsigned int i, j, skip, dummy = 0;
    352352    unsigned int width = 0, height = 0, wch = 1;
     353    uint32_t savedattr, resizeattr;
    353354    unsigned long int ch;
    354355    int x = 0, y = 0, save_x = 0, save_y = 0;
    355356
    356     cucul_set_canvas_size(cv, width, height);
     357    cucul_set_canvas_size(cv, 0, 0);
    357358    if(utf8)
    358359    {
    359         grcm.dfg = cucul_attr_to_ansi_fg(cv->curattr);
    360         grcm.dbg = cucul_attr_to_ansi_bg(cv->curattr);
     360        grcm.dfg = CUCUL_DEFAULT;
     361        grcm.dbg = CUCUL_TRANSPARENT;
    361362    }
    362363    else
     
    364365        grcm.dfg = CUCUL_LIGHTGRAY;
    365366        grcm.dbg = CUCUL_BLACK;
    366         cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg);
    367     }
     367        cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK);
     368    }
     369
     370    resizeattr = cucul_get_attr(cv, -1, -1);
    368371
    369372    ansi_parse_grcm(cv, &grcm, 1, &dummy);
     
    492495            case 'K': /* EL - Erase In Line */
    493496                if(width < 80)
    494                     cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg);
     497                {
     498                    savedattr = cucul_get_attr(cv, -1, -1);
     499                    cucul_set_attr(cv, resizeattr);
    495500                    cucul_set_canvas_size(cv, width = 80, height);
     501                    cucul_set_attr(cv, savedattr);
     502                }
    496503                for(j = x; j < 80; j++)
    497504                    cucul_put_char(cv, j, y, ' ');
     
    542549        if((unsigned int)x + wch > width)
    543550        {
    544             cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg);
     551            savedattr = cucul_get_attr(cv, -1, -1);
     552            cucul_set_attr(cv, resizeattr);
    545553            cucul_set_canvas_size(cv, width = x + wch, height);
     554            cucul_set_attr(cv, savedattr);
    546555        }
    547556
    548557        if((unsigned int)y >= height)
    549558        {
    550             cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg);
     559            savedattr = cucul_get_attr(cv, -1, -1);
     560            cucul_set_attr(cv, resizeattr);
    551561            cucul_set_canvas_size(cv, width, height = y + 1);
     562            cucul_set_attr(cv, savedattr);
    552563        }
    553564
    554565        /* Now paste our character */
    555         cucul_set_color_ansi(cv, grcm.efg, grcm.ebg);
    556566        cucul_put_char(cv, x, y, ch);
    557567        x += wch;
     
    560570    if((unsigned int)y > height)
    561571    {
    562         cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg);
     572        savedattr = cucul_get_attr(cv, -1, -1);
     573        cucul_set_attr(cv, resizeattr);
    563574        cucul_set_canvas_size(cv, width, height = y);
     575        cucul_set_attr(cv, savedattr);
    564576    }
    565577
     
    646658        }
    647659    }
    648 }
    649 
     660
     661    cucul_set_color_ansi(cv, g->efg, g->ebg);
     662}
     663
Note: See TracChangeset for help on using the changeset viewer.