Ignore:
Timestamp:
May 20, 2009, 12:48:12 AM (12 years ago)
Author:
Sam Hocevar
Message:

Add dirty rectangle support to the ncurses and VGA drivers.

File:
1 edited

Legend:

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

    r2962 r3489  
    11/*
    22 *  libcaca       Colour ASCII-Art library
    3  *  Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
     3 *  Copyright (c) 2002-2009 Sam Hocevar <sam@hocevar.net>
    44 *                2007 Ben Wiley Sittler <bsittler@gmail.com>
    55 *                All Rights Reserved
     
    346346static void ncurses_display(caca_display_t *dp)
    347347{
    348     uint32_t const *cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv);
    349     uint32_t const *cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv);
    350     int width = caca_get_canvas_width(dp->cv);
    351     int height = caca_get_canvas_height(dp->cv);
    352     int x, y;
    353 
    354     for(y = 0; y < (int)height; y++)
    355     {
    356         move(y, 0);
    357         for(x = width; x--; )
     348    int x, y, i;
     349
     350    for(i = 0; i < caca_get_dirty_rectangle_count(dp->cv); i++)
     351    {
     352        uint32_t const *cvchars, *cvattrs;
     353        int xmin, ymin, xmax, ymax;
     354
     355        caca_get_dirty_rectangle(dp->cv, i, &xmin, &ymin, &xmax, &ymax);
     356
     357        cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv)
     358                    + xmin + ymin * dp->cv->width;
     359        cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv)
     360                    + xmin + ymin * dp->cv->width;
     361
     362        for(y = ymin; y <= ymax; y++)
    358363        {
    359             attrset(dp->drv.p->attr[caca_attr_to_ansi(*cvattrs++)]);
    360             ncurses_write_utf32(*cvchars++);
     364            move(y, xmin);
     365            for(x = xmin; x <= xmax; x++)
     366            {
     367                attrset(dp->drv.p->attr[caca_attr_to_ansi(*cvattrs++)]);
     368                ncurses_write_utf32(*cvchars++);
     369            }
     370
     371            cvchars += dp->cv->width - (xmax - xmin) - 1;
     372            cvattrs += dp->cv->width - (xmax - xmin) - 1;
    361373        }
    362374    }
    363    
     375
    364376    x = caca_get_cursor_x(dp->cv);
    365377    y = caca_get_cursor_y(dp->cv);
Note: See TracChangeset for help on using the changeset viewer.