Changeset 945 for libcaca


Ignore:
Timestamp:
May 9, 2006, 3:12:58 AM (15 years ago)
Author:
Sam Hocevar
Message:
  • Allow cacadraw to open several files; use 'n' and 'p' to cycle.
  • Decreased PgUp/PgDn? scrolling rate.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/cacadraw.c

    r917 r945  
    3030int main(int argc, char **argv)
    3131{
    32     cucul_buffer_t *b;
    33     int refresh = 1;
    34     unsigned int iw, ih;
     32    int refresh = 1, file = 1;
     33    unsigned int iw = 0, ih = 0;
    3534
    3635    if(argc < 2)
     
    4645    if(!dp)
    4746        return 1;
    48     caca_set_display_title(dp, argv[1]);
    49 
    50     b = cucul_load_file(argv[1]);
    51     if(!b)
    52     {
    53         fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
    54         return 1;
    55     }
    56 
    57     image = cucul_import_canvas(b, "");
    58     if(!image)
    59     {
    60         fprintf(stderr, "%s: could not import `%s'.\n", argv[0], argv[1]);
    61         return 1;
    62     }
    63 
    64     cucul_free_buffer(b);
    65 
    66     ih = cucul_get_canvas_height(image);
    67     iw = cucul_get_canvas_width(image);
    6847
    6948    for(;;)
     
    7150        caca_event_t ev;
    7251        unsigned int w, h;
     52        int dx = 0, dy = 0;
     53
     54        if(!image)
     55        {
     56            cucul_buffer_t *b = cucul_load_file(argv[file]);
     57            if(!b)
     58            {
     59                fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
     60                return 1;
     61            }
     62
     63            image = cucul_import_canvas(b, "ansi");
     64            if(!image)
     65            {
     66                fprintf(stderr, "%s: invalid file `%s'.\n", argv[0], argv[1]);
     67                return 1;
     68            }
     69
     70            cucul_free_buffer(b);
     71
     72            ih = cucul_get_canvas_height(image);
     73            iw = cucul_get_canvas_width(image);
     74            x = y = 0;
     75
     76            caca_set_display_title(dp, argv[file]);
     77
     78            refresh = 1;
     79        }
    7380
    7481        if(refresh)
     
    8794                    switch(ev.data.key.ch)
    8895                    {
    89                     case CACA_KEY_LEFT: x -= 2; refresh = 1; goto stopevents;
    90                     case CACA_KEY_RIGHT: x += 2; refresh = 1; goto stopevents;
    91                     case CACA_KEY_UP: y--; refresh = 1; goto stopevents;
    92                     case CACA_KEY_DOWN: y++; refresh = 1; goto stopevents;
    93                     case CACA_KEY_PAGEUP: y-=25; refresh = 1; goto stopevents;
    94                     case CACA_KEY_PAGEDOWN: y+=25; refresh = 1; goto stopevents;
     96                    case CACA_KEY_LEFT: dx -= 2; break;
     97                    case CACA_KEY_RIGHT: dx += 2; break;
     98                    case CACA_KEY_UP: dy--; break;
     99                    case CACA_KEY_DOWN: dy++; break;
     100                    case CACA_KEY_PAGEUP: dy -= 12; break;
     101                    case CACA_KEY_PAGEDOWN: dy += 12; break;
    95102                    case CACA_KEY_ESCAPE:
    96103                    case 'q':
    97104                        goto quit;
     105                    case 'n':
     106                        file = file + 1 < argc ? file + 1 : 1;
     107                        cucul_free_canvas(image);
     108                        image = NULL;
     109                        goto stopevents;
     110                    case 'p':
     111                        file = file > 1 ? file - 1 : argc - 1;
     112                        cucul_free_canvas(image);
     113                        image = NULL;
     114                        goto stopevents;
    98115                    default:
    99116                        break;
     
    110127        w = cucul_get_canvas_width(cv);
    111128        h = cucul_get_canvas_height(cv);
    112         if(x < 0) x = 0; else if(x + w > iw) x = iw > w ? iw - w : 0;
    113         if(y < 0) y = 0; else if(y + h > ih) y = ih > h ? ih - h : 0;
     129
     130        if(dx | dy)
     131        {
     132            refresh = 1;
     133            x += dx;
     134            y += dy;
     135
     136            if(x < 0) x = 0; else if(x + w > iw) x = iw > w ? iw - w : 0;
     137            if(y < 0) y = 0; else if(y + h > ih) y = ih > h ? ih - h : 0;
     138        }
    114139    }
    115140quit:
Note: See TracChangeset for help on using the changeset viewer.