/* * demo demo using libee * Copyright (c) 2003 Sam Hocevar * All Rights Reserved * * $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include "ee.h" static void display_menu(void); static void demo_dots(void); static void demo_lines(void); static void demo_circles(void); static void demo_radar(void); int clipping = 0; int main(int argc, char **argv) { void (*demo)(void) = NULL; int quit = 0; if(ee_init()) { return 1; } display_menu(); /* Go ! */ while(!quit) { char key = ee_get_key(); if(key && demo) { display_menu(); demo = NULL; } else if(key) { switch(key) { case 'q': demo = NULL; quit = 1; break; case '1': ee_clear(); demo = demo_dots; break; case '2': ee_clear(); demo = demo_lines; break; case '3': ee_clear(); demo = demo_circles; break; case '4': ee_clear(); demo = demo_radar; break; } } if(demo) demo(); } /* Clean up */ ee_end(); return 0; } static void display_menu(void) { int xo = ee_get_width() - 2; int yo = ee_get_height() - 2; ee_clear(); ee_color(EE_WHITE); ee_draw_line(xo, yo, 1, yo, '.'); ee_draw_line(1, yo, 1, 1, ':'); ee_draw_line(xo, 1, xo, yo, ':'); ee_draw_line(1, 1, xo, 1, '.'); ee_goto((xo - strlen("libee demo")) / 2, 3); ee_putstr("libee demo"); ee_goto((xo - strlen("============")) / 2, 4); ee_putstr("============"); ee_goto(4, 6); ee_putstr("1: dots demo"); ee_goto(4, 7); ee_putstr("2: lines demo"); ee_goto(4, 8); ee_putstr("3: circles demo"); ee_goto(4, 9); ee_putstr("4: radar demo"); ee_goto(4, yo - 2); ee_putstr("q: quit"); ee_refresh(); } static void demo_dots(void) { int i; for(i=1000; i--;) { /* Putpixel */ ee_color(ee_rand(1, 10)); ee_goto(ee_rand(0, ee_get_width() - 1), ee_rand(0, ee_get_height() - 1)); ee_putchar('#'); } ee_refresh(); } static void demo_lines(void) { /* Draw lines */ ee_color(ee_rand(1, 10)); if(clipping) { ee_draw_line(ee_rand(- ee_get_width(), 2 * ee_get_width()), ee_rand(- ee_get_height(), 2 * ee_get_height()), ee_rand(- ee_get_width(), 2 * ee_get_width()), ee_rand(- ee_get_height(), 2 * ee_get_height()), '#'); } else { ee_draw_line(ee_rand(0, ee_get_width()), ee_rand(0, ee_get_height()), ee_rand(0, ee_get_width()), ee_rand(0, ee_get_height()), '*'); } ee_refresh(); } static void demo_circles(void) { /* Draw circles */ if(clipping) { ee_color(ee_rand(1, 10)); ee_draw_circle(ee_rand(- ee_get_width(), 2 * ee_get_width()), ee_rand(- ee_get_height(), 2 * ee_get_height()), ee_rand(0, ee_get_width() + ee_get_height()) / 2, '#'); } else { int x = ee_rand(0, ee_get_width()); int y = ee_rand(0, ee_get_height()); int r = ee_rand(0, (ee_get_width() + ee_get_height()) / 2); if(x - r < 0 || x + r >= ee_get_width() || y - r < 0 || y + r >= ee_get_height()) { demo_circles(); return; } ee_color(ee_rand(1, 10)); ee_draw_circle(x, y, r, '*'); } ee_refresh(); } static void demo_radar(void) { static int i = 0; int xo = ee_get_width() / 2; int yo = ee_get_height() / 2; int l = ee_get_height() + ee_get_width(); i++; ee_color(EE_BLUE); ee_draw_line(xo,yo,xo+(sin(0.03*(i-30))*l*2),yo+(cos(0.03*(i-30))*l),'.'); ee_color(EE_CYAN); ee_draw_line(xo,yo,xo+(sin(0.03*(i-2))*l*2),yo+(cos(0.03*(i-2))*l),':'); ee_color(EE_WHITE); ee_draw_line(xo,yo,xo+(sin(0.03*(i-1))*l*2),yo+(cos(0.03*(i-1))*l),':'); ee_color(EE_WHITE); ee_draw_line(xo,yo,xo+(sin(0.03*i)*l*2),yo+(cos(0.03*i)*l),'#'); ee_refresh(); }