Ignore:
Timestamp:
Nov 2, 2008, 10:18:51 PM (11 years ago)
Author:
bsittler
Message:

work around table layout bugs by ensuring that if there are multiple
cells on any row of the table then the very first row does not use the
cell-merging optimization; this appears to fix the last of the table
layout bugs seen in truecolor.php; also fix the foreground and
background color bugs seen in truecolor.php.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/codec/export.c

    r3214 r3223  
    461461    int x, y, len;
    462462    int maxcols;
     463    int has_multi_cell_row = 0;
    463464
    464465    /* Table */
     
    466467    for(y = 0; y < cv->height; y++)
    467468    {
     469        uint32_t *lineattr = cv->attrs + y * cv->width;
    468470        uint32_t *linechar = cv->chars + y * cv->width;
    469471        int cols = 0;
     
    471473        for(x = 0; x < cv->width; x++)
    472474        {
     475            if((! has_multi_cell_row)
     476               &&
     477               (x > 1)
     478               &&
     479               (caca_attr_to_ansi_bg(lineattr[x - 1])
     480                !=
     481                caca_attr_to_ansi_bg(lineattr[x]))
     482               &&
     483               ((caca_attr_to_ansi_bg(lineattr[x]) < 0x10)
     484                ?
     485                (_caca_attr_to_rgb24bg(lineattr[x - 1])
     486                 !=
     487                 _caca_attr_to_rgb24bg(lineattr[x]))
     488                :
     489                0))
     490            {
     491                has_multi_cell_row = 1;
     492            }
    473493            if(linechar[x] == 0x00000009)
    474494                while((cols + 1) % 8)
     
    507527             * (see below) */
    508528            len = 1;
    509             while((x + len < cv->width)
     529            while((y || ! has_multi_cell_row)
     530                  &&
     531                  (x + len < cv->width)
    510532                  &&
    511533                  (caca_attr_to_ansi_bg(lineattr[x + len])
     
    516538                   ?
    517539                   (_caca_attr_to_rgb24bg(lineattr[x + len])
    518                     &&
     540                    ==
    519541                    _caca_attr_to_rgb24bg(lineattr[x]))
    520542                   :
     
    544566                if((! i) || (lineattr[x + i] != lineattr[x + i - 1]))
    545567                {
    546                     needfont = caca_attr_to_ansi_fg(lineattr[x + i]) < 0x10;
     568                    needfont = (caca_attr_to_ansi_fg(lineattr[x + i]) != CACA_DEFAULT);
    547569
    548570                    if(needfont)
Note: See TracChangeset for help on using the changeset viewer.