Ignore:
Timestamp:
Oct 29, 2008, 11:58:24 PM (12 years ago)
Author:
nico
Message:
  • Rewrite main loop of sample program demo.php
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca-php/examples/demo.php

    r3135 r3140  
    1616 */
    1717
     18
     19
    1820function main() {
    1921        $cv = caca_create_canvas(0, 0);
     
    3436        /* Main menu */
    3537        display_menu($cv, $dp, $bounds, $outline);
    36         caca_refresh_display($dp);
    3738
    3839        /* Go ! */
    3940        $bounds = $outline = $dithering = 0;
    40 
     41        $need_refresh = false;
    4142        $ev = caca_create_event();
    4243        while(!$quit) {
    43                 $menu = $mouse = $xmouse = $ymouse = 0;
    44 
    45                 while (caca_get_event($dp, CACA_EVENT_ANY, $ev, 0)) {
    46                         if ($demo and (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS)) {
    47                                 $menu = 1;
    48                                 $demo = false;
    49                         }
    50                         else if (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS) {
     44                while (caca_get_event($dp, CACA_EVENT_ANY, $ev, 1000)) {
     45                        if (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS) {
    5146                                switch (caca_get_event_key_ch($ev)) {
    5247                                        case ord('q'):
     
    7469                                        case ord('f'):
    7570                                        case ord('F'):
    76                                                 $demo = "demo_all";
     71                                                demo_go($dp, "demo_all", $cv, $bounds, $outline);
    7772                                                break;
    7873                                        case ord('1'):
    79                                                 $demo = "demo_dots";
     74                                                demo_go($dp, "demo_dots", $cv, $bounds, $outline);
    8075                                                break;
    8176                                        case ord('2'):
    82                                                 $demo = "demo_lines";
     77                                                demo_go($dp, "demo_lines", $cv, $bounds, $outline);
    8378                                                break;
    8479                                        case ord('3'):
    85                                                 $demo = "demo_boxes";
     80                                                demo_go($dp, "demo_boxes", $cv, $bounds, $outline);
    8681                                                break;
    8782                                        case ord('4'):
    88                                                 $demo = "demo_triangles";
     83                                                demo_go($dp, "demo_triangles", $cv, $bounds, $outline);
    8984                                                break;
    9085                                        case ord('5'):
    91                                                 $demo = "demo_ellipses";
     86                                                demo_go($dp, "demo_ellipses", $cv, $bounds, $outline);
    9287                                                break;
    9388                                        case ord('s'):
    9489                                        case ord('S'):
    95                                                 $demo = "demo_sprites";
     90                                                demo_go($dp, "demo_sprites", $cv, $bounds, $outline);
    9691                                                break;
    9792                                        case ord('r'):
    9893                                        case ord('R'):
    99                                                 $demo = "demo_render";
    100                                                 break;
    101                                 }
    102 
    103                                 if ($demo) {
    104                                         caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
    105                                         caca_clear_canvas($cv);
     94                                                demo_go($dp, "demo_render", $cv, $bounds, $outline);
     95                                                break;
    10696                                }
    10797                        }
    10898                        else if(caca_get_event_type($ev) & CACA_EVENT_MOUSE_MOTION) {
    109                                 $mouse = 1;
    110                                 $xmouse = caca_get_event_mouse_x($ev);
    111                                 $ymouse = caca_get_event_mouse_y($ev);
     99                                $x = caca_get_event_mouse_x($ev);
     100                                $y = caca_get_event_mouse_y($ev);
     101                                display_menu($cv, $dp, $bounds, $outline, false);
     102                                caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
     103                                caca_put_str($cv, $x, $y, ".");
     104                                caca_put_str($cv, $x, $y + 1, "|\\");
     105                                $need_refresh = true;
    112106                        }
    113107                        else if(caca_get_event_type($ev) & CACA_EVENT_RESIZE) {
    114                                 $mouse = 1; /* old hack */
     108                                display_menu($cv, $dp, $bounds, $outline);
    115109                        }
    116110                }
    117111
    118                 if ($menu || ($mouse && !$demo)) {
    119                         display_menu($cv, $dp, $bounds, $outline);
    120                         if ($mouse && !$demo) {
    121                                 caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
    122                                 caca_put_str($cv, $xmouse, $ymouse,".");
    123                                 caca_put_str($cv, $xmouse, $ymouse + 1, "|\\");
    124                         }
     112                if ($need_refresh) {
    125113                        caca_refresh_display($dp);
    126                         $mouse = $menu = 0;
     114                        $need_refresh = false;
    127115                }
    128 
    129                 if ($demo) {
    130                         if (function_exists($demo))
    131                                 $demo($cv, $bounds, $outline, $dithering);
    132 
    133                         caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
    134                         caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2);
    135                         $rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp));
    136                         caca_put_str($cv, 4, 1, "[$rate fps]----");
    137                         caca_refresh_display($dp);
    138                 }
    139         }
    140 }
    141 
    142 function demo_all($cv, $dp, $bounds, $outline) {
     116        }
     117}
     118
     119function demo_go($dp, $demo, $cv, $bounds, $outline) {
     120        caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
     121        caca_clear_canvas($cv);
     122
     123        while (!caca_get_event($dp, CACA_EVENT_KEY_PRESS)) {
     124                if (function_exists($demo))
     125                        $demo($cv, $bounds, $outline);
     126
     127                caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
     128                caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2);
     129                $rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp));
     130                caca_put_str($cv, 4, 1, "[$rate fps]----");
     131                caca_refresh_display($dp);
     132        }
     133
     134        display_menu($cv, $dp, $bounds, $outline);
     135        caca_refresh_display($dp);
     136}
     137
     138
     139function demo_all($cv, $bounds, $outline) {
    143140        global $i;
    144141
     
    224221}
    225222
    226 function display_menu($cv, $dp, $bounds, $outline) {
     223function display_menu($cv, $dp, $bounds, $outline, $refresh = true) {
    227224        $xo = caca_get_canvas_width($cv) - 2;
    228225        $yo = caca_get_canvas_height($cv) - 2;
     
    253250        caca_put_str($cv, 4, $yo - 2, "'q': quit");
    254251
    255         caca_refresh_display($dp);
    256 }
    257 
    258 function demo_dots($cv, $bounds, $outline, $dithering) {
     252        if ($refresh)
     253                caca_refresh_display($dp);
     254}
     255
     256function demo_dots($cv, $bounds, $outline) {
    259257        $xmax = caca_get_canvas_width($cv);
    260258        $ymax = caca_get_canvas_height($cv);
     
    269267}
    270268
    271 function demo_lines($cv, $bounds, $outline, $dithering) {
     269function demo_lines($cv, $bounds, $outline) {
    272270        $w = caca_get_canvas_width($cv);
    273271        $h = caca_get_canvas_height($cv);
     
    289287}
    290288
    291 function demo_boxes($cv, $bounds, $outline, $dithering) {
     289function demo_boxes($cv, $bounds, $outline) {
    292290        $w = caca_get_canvas_width($cv);
    293291        $h = caca_get_canvas_height($cv);
     
    312310}
    313311
    314 function demo_ellipses($cv, $bounds, $outline, $dithering) {
     312function demo_ellipses($cv, $bounds, $outline) {
    315313        $w = caca_get_canvas_width($cv);
    316314        $h = caca_get_canvas_height($cv);
     
    337335}
    338336
    339 function demo_triangles($cv, $bounds, $outline, $dithering) {
     337function demo_triangles($cv, $bounds, $outline) {
    340338        $w = caca_get_canvas_width($cv);
    341339        $h = caca_get_canvas_height($cv);
     
    362360}
    363361
    364 function demo_render($cv, $bounds, $outline, $dithering) {
     362function demo_render($cv, $bounds, $outline) {
    365363}
    366364
    367365
    368366main();
    369 
    370 ?>
Note: See TracChangeset for help on using the changeset viewer.