source: ttyvaders/trunk/test/demo.c @ 114

Last change on this file since 114 was 114, checked in by Sam Hocevar, 17 years ago
  • test/demo.c: + outlined triangles demo.
  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1/*
2 *   demo          demo using libee
3 *   Copyright (c) 2003 Sam Hocevar <sam@zoy.org>
4 *                 All Rights Reserved
5 *
6 *   $Id: demo.c 114 2003-11-10 00:27:33Z sam $
7 *
8 *   This program is free software; you can redistribute it and/or modify
9 *   it under the terms of the GNU General Public License as published by
10 *   the Free Software Foundation; either version 2 of the License, or
11 *   (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include "config.h"
24
25#include <math.h>
26#include <string.h>
27
28#include "ee.h"
29
30static void display_menu(void);
31
32static void demo_dots(void);
33static void demo_lines(void);
34static void demo_thin_lines(void);
35static void demo_circles(void);
36static void demo_triangles(void);
37static void demo_outlined_triangles(void);
38
39int clipping = 0;
40
41int main(int argc, char **argv)
42{
43    void (*demo)(void) = NULL;
44    int quit = 0;
45
46    if(ee_init())
47    {
48        return 1;
49    }
50
51    display_menu();
52
53    /* Go ! */
54    while(!quit)
55    {
56        char key = ee_get_key();
57        if(key && demo)
58        {
59            display_menu();
60            demo = NULL;
61        }
62        else if(key)
63        {
64            switch(key)
65            {
66            case 'q':
67                demo = NULL;
68                quit = 1;
69                break;
70            case '1':
71                ee_clear();
72                demo = demo_dots;
73                break;
74            case '2':
75                ee_clear();
76                demo = demo_lines;
77                break;
78            case '3':
79                ee_clear();
80                demo = demo_thin_lines;
81                break;
82            case '4':
83                ee_clear();
84                demo = demo_circles;
85                break;
86            case '5':
87                ee_clear();
88                demo = demo_triangles;
89                break;
90            case '6':
91                ee_clear();
92                demo = demo_outlined_triangles;
93                break;
94            }
95        }
96
97        if(demo)
98            demo();
99    }
100
101    /* Clean up */
102    ee_end();
103
104    return 0;
105}
106
107static void display_menu(void)
108{
109    int xo = ee_get_width() - 2;
110    int yo = ee_get_height() - 2;
111
112    ee_clear();
113    ee_color(EE_WHITE);
114    ee_draw_line(xo, yo, 1, yo, '.');
115    ee_draw_line(1, yo, 1, 1, ':');
116    ee_draw_line(xo, 1, xo, yo, ':');
117    ee_draw_line(1, 1, xo, 1, '.');
118
119    ee_goto((xo - strlen("libee demo")) / 2, 3);
120    ee_putstr("libee demo");
121    ee_goto((xo - strlen("============")) / 2, 4);
122    ee_putstr("============");
123
124    ee_goto(4, 6);
125    ee_putstr("1: dots demo");
126    ee_goto(4, 7);
127    ee_putstr("2: lines demo");
128    ee_goto(4, 8);
129    ee_putstr("3: thin lines demo");
130    ee_goto(4, 9);
131    ee_putstr("4: circles demo");
132    ee_goto(4, 10);
133    ee_putstr("5: triangles demo");
134    ee_goto(4, 11);
135    ee_putstr("6: outlined triangles demo");
136
137    ee_goto(4, yo - 2);
138    ee_putstr("q: quit");
139
140    ee_refresh();
141}
142
143static void demo_dots(void)
144{
145    int xmax = ee_get_width() - 1;
146    int ymax = ee_get_height() - 1;
147    int i;
148
149    for(i = 1000; i--;)
150    {
151        /* Putpixel */
152        ee_color(ee_rand(1, 10));
153        ee_goto(ee_rand(0, xmax), ee_rand(0, ymax));
154        ee_putchar('#');
155    }
156    ee_refresh();
157}
158
159static void demo_lines(void)
160{
161    int w = ee_get_width();
162    int h = ee_get_height();
163
164    /* Draw lines */
165    ee_color(ee_rand(1, 10));
166    if(clipping)
167    {
168        ee_draw_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
169                     ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#');
170    }
171    else
172    {
173        ee_draw_line(ee_rand(0, w - 1), ee_rand(0, h - 1),
174                     ee_rand(0, w - 1), ee_rand(0, h - 1), '#');
175    }
176    ee_refresh();
177}
178
179static void demo_thin_lines(void)
180{
181    int w = ee_get_width();
182    int h = ee_get_height();
183
184    /* Draw lines */
185    ee_color(ee_rand(1, 10));
186    if(clipping)
187    {
188        ee_draw_thin_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
189                          ee_rand(- w, 2 * w), ee_rand(- h, 2 * h));
190    }
191    else
192    {
193        ee_draw_thin_line(ee_rand(0, w), ee_rand(0, h),
194                          ee_rand(0, w), ee_rand(0, h));
195    }
196    ee_refresh();
197}
198
199static void demo_circles(void)
200{
201    int w = ee_get_width();
202    int h = ee_get_height();
203
204    /* Draw circles */
205    if(clipping)
206    {
207        ee_color(ee_rand(1, 10));
208        ee_draw_circle(ee_rand(- w, 2 * w),
209                       ee_rand(- h, 2 * h),
210                       ee_rand(0, (w + h) / 2),
211                       '#');
212    }
213    else
214    {
215        int x = ee_rand(0, w);
216        int y = ee_rand(0, h);
217        int r = ee_rand(0, (w + h) / 2);
218
219        if(x - r < 0 || x + r >= w || y - r < 0 || y + r >= h)
220        {
221            demo_circles();
222            return;
223        }
224
225        ee_color(ee_rand(1, 10));
226        ee_draw_circle(x, y, r, '#');
227    }
228
229    ee_refresh();
230}
231
232static void demo_triangles(void)
233{
234    int w = ee_get_width();
235    int h = ee_get_height();
236
237    /* Draw lines */
238    ee_color(ee_rand(1, 10));
239    if(clipping)
240    {
241        ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
242                         ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
243                         ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#');
244    }
245    else
246    {
247        ee_fill_triangle(ee_rand(0, w - 1), ee_rand(0, h - 1),
248                         ee_rand(0, w - 1), ee_rand(0, h - 1),
249                         ee_rand(0, w - 1), ee_rand(0, h - 1), '#');
250    }
251    ee_refresh();
252}
253
254static void demo_outlined_triangles(void)
255{
256    int w = ee_get_width();
257    int h = ee_get_height();
258
259    /* Draw lines */
260    ee_color(ee_rand(1, 10));
261    if(clipping)
262    {
263        ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
264                         ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
265                         ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#');
266    }
267    else
268    {
269        int x1, y1, x2, y2, x3, y3;
270
271        x1 = ee_rand(0, w - 1);
272        y1 = ee_rand(0, h - 1);
273        x2 = ee_rand(0, w - 1);
274        y2 = ee_rand(0, h - 1);
275        x3 = ee_rand(0, w - 1);
276        y3 = ee_rand(0, h - 1);
277
278        ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#');
279
280        ee_color(ee_rand(1, 10));
281        ee_draw_thin_line(x1, y1, x2, y2);
282        ee_draw_thin_line(x2, y2, x3, y3);
283        ee_draw_thin_line(x3, y3, x1, y1);
284    }
285    ee_refresh();
286}
287
288static void demo_pyramid(void)
289{
290    static int i = 0;
291
292    int xo, yo, x1, y1, x2, y2, x3, y3;
293
294    i++;
295
296    xo = ee_get_width() * 5 / 8;
297    yo = 2;
298
299    x1 = ee_get_width() / 8 + sin(0.03*i) * 5;
300    y1 = ee_get_height() / 2 + cos(0.03*i) * 5;
301
302    x2 = ee_get_width() - 10 - cos(0.02*i) * 10;
303    y2 = ee_get_height() - 5 + sin(0.02*i) * 5;
304
305    x3 = ee_get_width() / 4 - sin(0.02*i) * 5;
306    y3 = ee_get_height() + cos(0.02*i) * 5;
307
308    ee_clear();
309
310    ee_color(EE_GREEN);
311    ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%');
312    ee_color(EE_YELLOW);
313    ee_draw_thin_line(xo, yo, x2, y2);
314    ee_draw_thin_line(x2, y2, x1, y1);
315    ee_draw_thin_line(x1, y1, xo, yo);
316
317    ee_color(EE_RED);
318    ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#');
319    ee_color(EE_YELLOW);
320    ee_draw_thin_line(x1, y1, x2, y2);
321    ee_draw_thin_line(x2, y2, x3, y3);
322    ee_draw_thin_line(x3, y3, x1, y1);
323
324    ee_color(EE_BLUE);
325    ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%');
326    ee_color(EE_YELLOW);
327    ee_draw_thin_line(xo, yo, x2, y2);
328    ee_draw_thin_line(x2, y2, x3, y3);
329    ee_draw_thin_line(x3, y3, xo, yo);
330
331    ee_refresh();
332}
333
Note: See TracBrowser for help on using the repository browser.