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

Last change on this file since 114 was 114, checked in by Sam Hocevar, 19 years ago
  • test/demo.c: + outlined triangles demo.
  • Property svn:keywords set to Id
File size: 7.7 KB
RevLine 
[86]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
[106]23#include "config.h"
24
[100]25#include <math.h>
26#include <string.h>
27
[86]28#include "ee.h"
29
[100]30static void display_menu(void);
31
32static void demo_dots(void);
33static void demo_lines(void);
[104]34static void demo_thin_lines(void);
[100]35static void demo_circles(void);
[108]36static void demo_triangles(void);
[114]37static void demo_outlined_triangles(void);
[100]38
39int clipping = 0;
40
[86]41int main(int argc, char **argv)
42{
[100]43    void (*demo)(void) = NULL;
[86]44    int quit = 0;
45
46    if(ee_init())
47    {
48        return 1;
49    }
50
[100]51    display_menu();
52
[86]53    /* Go ! */
54    while(!quit)
55    {
56        char key = ee_get_key();
[100]57        if(key && demo)
[86]58        {
[100]59            display_menu();
60            demo = NULL;
[86]61        }
[100]62        else if(key)
[94]63        {
[100]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();
[104]80                demo = demo_thin_lines;
[100]81                break;
82            case '4':
83                ee_clear();
[104]84                demo = demo_circles;
85                break;
86            case '5':
87                ee_clear();
[108]88                demo = demo_triangles;
[106]89                break;
[114]90            case '6':
91                ee_clear();
92                demo = demo_outlined_triangles;
93                break;
[100]94            }
[94]95        }
96
[100]97        if(demo)
98            demo();
[86]99    }
100
101    /* Clean up */
102    ee_end();
103
104    return 0;
105}
106
[100]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);
[104]129    ee_putstr("3: thin lines demo");
[100]130    ee_goto(4, 9);
[104]131    ee_putstr("4: circles demo");
132    ee_goto(4, 10);
[108]133    ee_putstr("5: triangles demo");
[114]134    ee_goto(4, 11);
135    ee_putstr("6: outlined triangles demo");
[100]136
137    ee_goto(4, yo - 2);
138    ee_putstr("q: quit");
139
140    ee_refresh();
141}
142
143static void demo_dots(void)
144{
[104]145    int xmax = ee_get_width() - 1;
146    int ymax = ee_get_height() - 1;
[100]147    int i;
148
[104]149    for(i = 1000; i--;)
[100]150    {
151        /* Putpixel */
152        ee_color(ee_rand(1, 10));
[104]153        ee_goto(ee_rand(0, xmax), ee_rand(0, ymax));
[100]154        ee_putchar('#');
155    }
156    ee_refresh();
157}
158
159static void demo_lines(void)
160{
[104]161    int w = ee_get_width();
162    int h = ee_get_height();
163
[100]164    /* Draw lines */
165    ee_color(ee_rand(1, 10));
166    if(clipping)
167    {
[104]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), '#');
[100]170    }
171    else
172    {
[104]173        ee_draw_line(ee_rand(0, w - 1), ee_rand(0, h - 1),
[108]174                     ee_rand(0, w - 1), ee_rand(0, h - 1), '#');
[100]175    }
176    ee_refresh();
177}
178
[104]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
[100]199static void demo_circles(void)
200{
[104]201    int w = ee_get_width();
202    int h = ee_get_height();
203
[100]204    /* Draw circles */
205    if(clipping)
206    {
207        ee_color(ee_rand(1, 10));
[104]208        ee_draw_circle(ee_rand(- w, 2 * w),
209                       ee_rand(- h, 2 * h),
210                       ee_rand(0, (w + h) / 2),
[100]211                       '#');
212    }
213    else
214    {
[104]215        int x = ee_rand(0, w);
216        int y = ee_rand(0, h);
217        int r = ee_rand(0, (w + h) / 2);
[100]218
[104]219        if(x - r < 0 || x + r >= w || y - r < 0 || y + r >= h)
[100]220        {
221            demo_circles();
222            return;
223        }
224
225        ee_color(ee_rand(1, 10));
[108]226        ee_draw_circle(x, y, r, '#');
[100]227    }
228
229    ee_refresh();
230}
231
[108]232static void demo_triangles(void)
[106]233{
[108]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
[114]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
[108]288static void demo_pyramid(void)
289{
[106]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.