Changeset 3480 for libcaca/trunk


Ignore:
Timestamp:
May 19, 2009, 10:42:12 PM (11 years ago)
Author:
Sam Hocevar
Message:

Fix dirty rectangle handling in the X11 and SLang drivers.

Location:
libcaca/trunk/caca/driver
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver/slang.c

    r3470 r3480  
    221221static void slang_display(caca_display_t *dp)
    222222{
    223     uint32_t const *cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv);
    224     uint32_t const *cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv);
    225223    int x, y, i;
    226224
    227225    for(i = 0; i < caca_get_dirty_rectangle_count(dp->cv); i++)
    228226    {
     227        uint32_t const *cvchars, *cvattrs;
    229228        int xmin, ymin, xmax, ymax;
    230229
    231230        caca_get_dirty_rectangle(dp->cv, i, &xmin, &ymin, &xmax, &ymax);
     231
     232        cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv)
     233                    + xmin + ymin * dp->cv->width;
     234        cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv)
     235                    + xmin + ymin * dp->cv->width;
    232236
    233237        for(y = ymin; y <= ymax; y++)
    234238        {
    235             SLsmg_gotorc(y, 0);
    236             for(x = xmax; x >= xmin; x--)
     239            SLsmg_gotorc(y, xmin);
     240            for(x = xmin; x <= xmax; x++)
    237241            {
    238242                uint32_t ch = *cvchars++;
     
    278282#endif
    279283            }
     284
     285            cvchars += dp->cv->width - (xmax - xmin) - 1;
     286            cvattrs += dp->cv->width - (xmax - xmin) - 1;
    280287        }
    281288    }
  • libcaca/trunk/caca/driver/x11.c

    r3470 r3480  
    143143            dp->drv.p->max_char = 0x7f;
    144144
    145         font_max_char = 
     145        font_max_char =
    146146            (dp->drv.p->font_struct->max_byte1 << 8)
    147147             | dp->drv.p->font_struct->max_char_or_byte2;
     
    154154    /* Reset the default X11 error handler */
    155155    XSetErrorHandler(old_error_handler);
    156    
     156
    157157    dp->drv.p->font_width = 0;
    158158    if(dp->drv.p->font_struct->per_char
     
    332332            int yoff = (y + 1) * dp->drv.p->font_height
    333333                                        - dp->drv.p->font_offset;
    334             uint32_t const *chars = cvchars + y * width;
    335             uint32_t const *attrs = cvattrs + y * width;
     334            uint32_t const *chars = cvchars + xmin + y * width;
     335            uint32_t const *attrs = cvattrs + xmin + y * width;
    336336
    337337            for(x = xmin; x <= xmax; x++, chars++, attrs++)
Note: See TracChangeset for help on using the changeset viewer.