Ignore:
Timestamp:
May 19, 2009, 2:51:47 AM (11 years ago)
Author:
Sam Hocevar
Message:

Change the dirty rectangle API so that it can handle several rectangles. The
inner implementation still only handles one dirty rectangle, but this way
we can prepare supporting applictions for the future.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/tests/dirty.cpp

    r3449 r3470  
    3939    {
    4040        caca_canvas_t *cv;
    41         int xmin, xmax, ymin, ymax;
     41        int i, xmin, xmax, ymin, ymax;
    4242
    4343        /* Check that the dirty rectangle contains the whole canvas
    4444         * upon creation. */
    4545        cv = caca_create_canvas(WIDTH, HEIGHT);
    46         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    47         CPPUNIT_ASSERT(xmin <= 0);
    48         CPPUNIT_ASSERT(ymin <= 0);
    49         CPPUNIT_ASSERT(xmax >= caca_get_canvas_width(cv) - 1);
    50         CPPUNIT_ASSERT(ymax >= caca_get_canvas_height(cv) - 1);
     46        i = caca_get_dirty_rectangle_count(cv);
     47        CPPUNIT_ASSERT_EQUAL(i, 1);
     48
     49        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     50        CPPUNIT_ASSERT_EQUAL(xmin, 0);
     51        CPPUNIT_ASSERT_EQUAL(ymin, 0);
     52        CPPUNIT_ASSERT_EQUAL(xmax, caca_get_canvas_width(cv) - 1);
     53        CPPUNIT_ASSERT_EQUAL(ymax, caca_get_canvas_height(cv) - 1);
    5154
    5255        /* Invalidate the dirty rectangle and check that it stays so. */
    53         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
    54         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    55         CPPUNIT_ASSERT(xmin > xmax || ymin > ymax);
     56        caca_clear_dirty_rectangle_list(cv);
     57        i = caca_get_dirty_rectangle_count(cv);
     58        CPPUNIT_ASSERT_EQUAL(i, 0);
    5659
    5760        caca_free_canvas(cv);
     
    6164    {
    6265        caca_canvas_t *cv;
    63         int xmin, xmax, ymin, ymax;
     66        int i, xmin, xmax, ymin, ymax;
    6467
    6568        cv = caca_create_canvas(WIDTH, HEIGHT);
    6669
    67         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     70        caca_clear_dirty_rectangle_list(cv);
    6871        caca_put_char(cv, 7, 3, 'x');
    69         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    70         CPPUNIT_ASSERT(xmin <= 7);
    71         CPPUNIT_ASSERT(ymin <= 3);
    72         CPPUNIT_ASSERT(xmax >= 7);
    73         CPPUNIT_ASSERT(ymax >= 3);
     72        i = caca_get_dirty_rectangle_count(cv);
     73        CPPUNIT_ASSERT_EQUAL(i, 1);
     74        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     75        CPPUNIT_ASSERT_EQUAL(xmin, 7);
     76        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     77        CPPUNIT_ASSERT_EQUAL(xmax, 7);
     78        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    7479
    7580        caca_clear_canvas(cv);
    76         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     81        caca_clear_dirty_rectangle_list(cv);
    7782        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    78         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    79         CPPUNIT_ASSERT(xmin <= 7);
    80         CPPUNIT_ASSERT(ymin <= 3);
    81         CPPUNIT_ASSERT(xmax >= 8);
    82         CPPUNIT_ASSERT(ymax >= 3);
     83        i = caca_get_dirty_rectangle_count(cv);
     84        CPPUNIT_ASSERT_EQUAL(i, 1);
     85        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     86        CPPUNIT_ASSERT_EQUAL(xmin, 7);
     87        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     88        CPPUNIT_ASSERT_EQUAL(xmax, 8);
     89        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    8390
    8491        caca_clear_canvas(cv);
    8592        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    86         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     93        caca_clear_dirty_rectangle_list(cv);
    8794        caca_put_char(cv, 7, 3, 'x');
    88         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    89         CPPUNIT_ASSERT(xmin <= 7);
    90         CPPUNIT_ASSERT(ymin <= 3);
    91         CPPUNIT_ASSERT(xmax >= 8);
    92         CPPUNIT_ASSERT(ymax >= 3);
     95        i = caca_get_dirty_rectangle_count(cv);
     96        CPPUNIT_ASSERT_EQUAL(i, 1);
     97        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     98        CPPUNIT_ASSERT_EQUAL(xmin, 7);
     99        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     100        CPPUNIT_ASSERT_EQUAL(xmax, 8);
     101        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    93102
    94103        caca_clear_canvas(cv);
    95104        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    96         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     105        caca_clear_dirty_rectangle_list(cv);
    97106        caca_put_char(cv, 8, 3, 'x');
    98         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    99         CPPUNIT_ASSERT(xmin <= 7);
    100         CPPUNIT_ASSERT(ymin <= 3);
    101         CPPUNIT_ASSERT(xmax >= 8);
    102         CPPUNIT_ASSERT(ymax >= 3);
     107        i = caca_get_dirty_rectangle_count(cv);
     108        CPPUNIT_ASSERT_EQUAL(i, 1);
     109        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     110        CPPUNIT_ASSERT_EQUAL(xmin, 7);
     111        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     112        CPPUNIT_ASSERT_EQUAL(xmax, 8);
     113        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    103114
    104115        caca_clear_canvas(cv);
    105116        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    106         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     117        caca_clear_dirty_rectangle_list(cv);
    107118        caca_put_char(cv, 6, 3, 0x2f06 /* ⼆ */);
    108         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    109         CPPUNIT_ASSERT(xmin <= 6);
    110         CPPUNIT_ASSERT(ymin <= 3);
    111         CPPUNIT_ASSERT(xmax >= 8);
    112         CPPUNIT_ASSERT(ymax >= 3);
     119        i = caca_get_dirty_rectangle_count(cv);
     120        CPPUNIT_ASSERT_EQUAL(i, 1);
     121        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     122        CPPUNIT_ASSERT_EQUAL(xmin, 6);
     123        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     124        CPPUNIT_ASSERT_EQUAL(xmax, 8);
     125        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    113126
    114127        caca_clear_canvas(cv);
    115128        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    116         caca_set_dirty_rectangle(cv, -1, -1, -1, -1);
     129        caca_clear_dirty_rectangle_list(cv);
    117130        caca_put_char(cv, 8, 3, 0x2f06 /* ⼆ */);
    118         caca_get_dirty_rectangle(cv, &xmin, &ymin, &xmax, &ymax);
    119         CPPUNIT_ASSERT(xmin <= 7);
    120         CPPUNIT_ASSERT(ymin <= 3);
    121         CPPUNIT_ASSERT(xmax >= 9);
    122         CPPUNIT_ASSERT(ymax >= 3);
     131        i = caca_get_dirty_rectangle_count(cv);
     132        CPPUNIT_ASSERT_EQUAL(i, 1);
     133        caca_get_dirty_rectangle(cv, 0, &xmin, &ymin, &xmax, &ymax);
     134        CPPUNIT_ASSERT_EQUAL(xmin, 7);
     135        CPPUNIT_ASSERT_EQUAL(ymin, 3);
     136        CPPUNIT_ASSERT_EQUAL(xmax, 9);
     137        CPPUNIT_ASSERT_EQUAL(ymax, 3);
    123138    }
    124139
Note: See TracChangeset for help on using the changeset viewer.