source: libcaca/trunk/src/cacadraw.c @ 1267

Last change on this file since 1267 was 1267, checked in by Sam Hocevar, 13 years ago
  • Got rid of cucul_ansi_to_attr() and cucul_argb_to_attr() and restored cucul_set_color() and cucul_set_truecolor() under the new names cucul_set_color_ansi() and cucul_set_color_argb().
  • Renamed cucul_get_color_name() into cucul_ansi_to_str().
  • Property svn:keywords set to Id
File size: 4.0 KB
Line 
1/*
2 *  event         event lister for libcaca
3 *  Copyright (c) 2004 Sam Hocevar <sam@zoy.org>
4 *                All Rights Reserved
5 *
6 *  $Id: cacadraw.c 1267 2006-10-31 13:29:48Z sam $
7 *
8 *  This program is free software; you can redistribute it and/or
9 *  modify it under the terms of the Do What The Fuck You Want To
10 *  Public License, Version 2, as published by Sam Hocevar. See
11 *  http://sam.zoy.org/wtfpl/COPYING for more details.
12 */
13
14#include "config.h"
15#include "common.h"
16
17#if !defined(__KERNEL__)
18#   include <stdio.h>
19#   include <string.h>
20#   include <stdlib.h>
21#endif
22
23#include "cucul.h"
24#include "caca.h"
25
26static int refresh_screen(void);
27
28static cucul_canvas_t *cv, *image;
29static caca_display_t *dp;
30static int x = 0, y = 0;
31
32int main(int argc, char **argv)
33{
34    int refresh = 1, file = 1;
35    unsigned int iw = 0, ih = 0;
36
37    if(argc < 2)
38    {
39        fprintf(stderr, "%s: missing argument (filename).\n", argv[0]);
40        return 1;
41    }
42
43    cv = cucul_create_canvas(0, 0);
44    if(!cv)
45        return 1;
46    dp = caca_create_display(cv);
47    if(!dp)
48        return 1;
49
50    for(;;)
51    {
52        caca_event_t ev;
53        unsigned int w, h;
54        int dx = 0, dy = 0;
55
56        if(!image)
57        {
58            cucul_buffer_t *b = cucul_load_file(argv[file]);
59            if(!b)
60            {
61                fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
62                return 1;
63            }
64
65            image = cucul_import_canvas(b, "ansi");
66            if(!image)
67            {
68                fprintf(stderr, "%s: invalid file `%s'.\n", argv[0], argv[1]);
69                return 1;
70            }
71
72            cucul_free_buffer(b);
73
74            ih = cucul_get_canvas_height(image);
75            iw = cucul_get_canvas_width(image);
76            x = y = 0;
77
78            caca_set_display_title(dp, argv[file]);
79
80            refresh = 1;
81        }
82
83        if(refresh)
84        {
85            refresh_screen();
86            refresh = 0;
87        }
88
89        while(caca_get_event(dp, CACA_EVENT_ANY, &ev, -1))
90        {
91            switch(ev.type)
92            {
93                case CACA_EVENT_QUIT:
94                    goto quit;
95                case CACA_EVENT_KEY_PRESS:
96                    switch(ev.data.key.ch)
97                    {
98                    case CACA_KEY_LEFT: dx -= 2; break;
99                    case CACA_KEY_RIGHT: dx += 2; break;
100                    case CACA_KEY_UP: dy--; break;
101                    case CACA_KEY_DOWN: dy++; break;
102                    case CACA_KEY_PAGEUP: dy -= 12; break;
103                    case CACA_KEY_PAGEDOWN: dy += 12; break;
104                    case CACA_KEY_ESCAPE:
105                    case 'q':
106                        goto quit;
107                    case 'n':
108                        file = file + 1 < argc ? file + 1 : 1;
109                        cucul_free_canvas(image);
110                        image = NULL;
111                        goto stopevents;
112                    case 'p':
113                        file = file > 1 ? file - 1 : argc - 1;
114                        cucul_free_canvas(image);
115                        image = NULL;
116                        goto stopevents;
117                    default:
118                        break;
119                    }
120                case CACA_EVENT_RESIZE:
121                    refresh = 1;
122                    goto stopevents;
123                default:
124                    break;
125            }
126        }
127stopevents:
128
129        w = cucul_get_canvas_width(cv);
130        h = cucul_get_canvas_height(cv);
131
132        if(dx | dy)
133        {
134            refresh = 1;
135            x += dx;
136            y += dy;
137
138            if(x < 0) x = 0; else if(x + w > iw) x = iw > w ? iw - w : 0;
139            if(y < 0) y = 0; else if(y + h > ih) y = ih > h ? ih - h : 0;
140        }
141    }
142quit:
143
144    /* Clean up */
145    caca_free_display(dp);
146    cucul_free_canvas(image);
147    cucul_free_canvas(cv);
148
149    return 0;
150}
151
152static int refresh_screen(void)
153{
154    cucul_set_color_ansi(cv, CUCUL_DEFAULT, CUCUL_DEFAULT);
155    cucul_clear_canvas(cv);
156
157    cucul_blit(cv, - x, - y, image, NULL);
158
159    caca_refresh_display(dp);
160
161    return 0;
162}
163
Note: See TracBrowser for help on using the repository browser.