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

Last change on this file since 2299 was 2299, checked in by Sam Hocevar, 12 years ago
  • Remove #include <stdint.h> etc. from "common.h". Instead, make sure that <cucul.h> will provide the C99 types, even if libcaca has been installed.
  • Rename what's left of "common.h" to "stubs.h".
  • Remove all references to erroneous <inttypes.h> from source files.
  • Property svn:keywords set to Id
File size: 3.9 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 2299 2008-04-19 12:42:50Z sam $
7 *
8 *  This program is free software. It comes without any warranty, to
9 *  the extent permitted by applicable law. You can redistribute it
10 *  and/or modify it under the terms of the Do What The Fuck You Want
11 *  To Public License, Version 2, as published by Sam Hocevar. See
12 *  http://sam.zoy.org/wtfpl/COPYING for more details.
13 */
14
15#include "config.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            image = cucul_create_canvas(0, 0);
59            if(cucul_import_file(image, argv[file], "ansi") < 0)
60            {
61                fprintf(stderr, "%s: invalid file `%s'.\n", argv[0], argv[1]);
62                return 1;
63            }
64
65            ih = cucul_get_canvas_height(image);
66            iw = cucul_get_canvas_width(image);
67            x = y = 0;
68
69            caca_set_display_title(dp, argv[file]);
70
71            refresh = 1;
72        }
73
74        if(refresh)
75        {
76            refresh_screen();
77            refresh = 0;
78        }
79
80        while(caca_get_event(dp, CACA_EVENT_ANY, &ev, -1))
81        {
82            switch(caca_get_event_type(&ev))
83            {
84                case CACA_EVENT_QUIT:
85                    goto quit;
86                case CACA_EVENT_KEY_PRESS:
87                    switch(caca_get_event_key_ch(&ev))
88                    {
89                    case CACA_KEY_LEFT: dx -= 2; break;
90                    case CACA_KEY_RIGHT: dx += 2; break;
91                    case CACA_KEY_UP: dy--; break;
92                    case CACA_KEY_DOWN: dy++; break;
93                    case CACA_KEY_PAGEUP: dy -= 12; break;
94                    case CACA_KEY_PAGEDOWN: dy += 12; break;
95                    case CACA_KEY_ESCAPE:
96                    case 'q':
97                        goto quit;
98                    case 'n':
99                        file = file + 1 < argc ? file + 1 : 1;
100                        cucul_free_canvas(image);
101                        image = NULL;
102                        goto stopevents;
103                    case 'p':
104                        file = file > 1 ? file - 1 : argc - 1;
105                        cucul_free_canvas(image);
106                        image = NULL;
107                        goto stopevents;
108                    default:
109                        break;
110                    }
111                case CACA_EVENT_RESIZE:
112                    refresh = 1;
113                    goto stopevents;
114                default:
115                    break;
116            }
117        }
118stopevents:
119
120        w = cucul_get_canvas_width(cv);
121        h = cucul_get_canvas_height(cv);
122
123        if(dx | dy)
124        {
125            refresh = 1;
126            x += dx;
127            y += dy;
128
129            if(x < 0) x = 0; else if(x + w > iw) x = iw > w ? iw - w : 0;
130            if(y < 0) y = 0; else if(y + h > ih) y = ih > h ? ih - h : 0;
131        }
132    }
133quit:
134
135    /* Clean up */
136    caca_free_display(dp);
137    cucul_free_canvas(image);
138    cucul_free_canvas(cv);
139
140    return 0;
141}
142
143static int refresh_screen(void)
144{
145    cucul_set_color_ansi(cv, CUCUL_DEFAULT, CUCUL_DEFAULT);
146    cucul_clear_canvas(cv);
147
148    cucul_blit(cv, - x, - y, image, NULL);
149
150    caca_refresh_display(dp);
151
152    return 0;
153}
154
Note: See TracBrowser for help on using the repository browser.