diff --git a/caca-php/examples/demo.php b/caca-php/examples/demo.php index 847b72c..ac834f8 100644 --- a/caca-php/examples/demo.php +++ b/caca-php/examples/demo.php @@ -15,6 +15,8 @@ * http://sam.zoy.org/wtfpl/COPYING for more details. */ + + function main() { $cv = caca_create_canvas(0, 0); if (!$cv) { @@ -33,21 +35,14 @@ function main() { /* Main menu */ display_menu($cv, $dp, $bounds, $outline); - caca_refresh_display($dp); /* Go ! */ $bounds = $outline = $dithering = 0; - + $need_refresh = false; $ev = caca_create_event(); while(!$quit) { - $menu = $mouse = $xmouse = $ymouse = 0; - - while (caca_get_event($dp, CACA_EVENT_ANY, $ev, 0)) { - if ($demo and (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS)) { - $menu = 1; - $demo = false; - } - else if (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS) { + while (caca_get_event($dp, CACA_EVENT_ANY, $ev, 1000)) { + if (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS) { switch (caca_get_event_key_ch($ev)) { case ord('q'): case ord('Q'): @@ -73,73 +68,75 @@ function main() { break; case ord('f'): case ord('F'): - $demo = "demo_all"; + demo_go($dp, "demo_all", $cv, $bounds, $outline); break; case ord('1'): - $demo = "demo_dots"; + demo_go($dp, "demo_dots", $cv, $bounds, $outline); break; case ord('2'): - $demo = "demo_lines"; + demo_go($dp, "demo_lines", $cv, $bounds, $outline); break; case ord('3'): - $demo = "demo_boxes"; + demo_go($dp, "demo_boxes", $cv, $bounds, $outline); break; case ord('4'): - $demo = "demo_triangles"; + demo_go($dp, "demo_triangles", $cv, $bounds, $outline); break; case ord('5'): - $demo = "demo_ellipses"; + demo_go($dp, "demo_ellipses", $cv, $bounds, $outline); break; case ord('s'): case ord('S'): - $demo = "demo_sprites"; + demo_go($dp, "demo_sprites", $cv, $bounds, $outline); break; case ord('r'): case ord('R'): - $demo = "demo_render"; + demo_go($dp, "demo_render", $cv, $bounds, $outline); break; } - - if ($demo) { - caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK); - caca_clear_canvas($cv); - } } else if(caca_get_event_type($ev) & CACA_EVENT_MOUSE_MOTION) { - $mouse = 1; - $xmouse = caca_get_event_mouse_x($ev); - $ymouse = caca_get_event_mouse_y($ev); + $x = caca_get_event_mouse_x($ev); + $y = caca_get_event_mouse_y($ev); + display_menu($cv, $dp, $bounds, $outline, false); + caca_set_color_ansi($cv, CACA_RED, CACA_BLACK); + caca_put_str($cv, $x, $y, "."); + caca_put_str($cv, $x, $y + 1, "|\\"); + $need_refresh = true; } else if(caca_get_event_type($ev) & CACA_EVENT_RESIZE) { - $mouse = 1; /* old hack */ + display_menu($cv, $dp, $bounds, $outline); } } - if ($menu || ($mouse && !$demo)) { - display_menu($cv, $dp, $bounds, $outline); - if ($mouse && !$demo) { - caca_set_color_ansi($cv, CACA_RED, CACA_BLACK); - caca_put_str($cv, $xmouse, $ymouse,"."); - caca_put_str($cv, $xmouse, $ymouse + 1, "|\\"); - } + if ($need_refresh) { caca_refresh_display($dp); - $mouse = $menu = 0; + $need_refresh = false; } + } +} + +function demo_go($dp, $demo, $cv, $bounds, $outline) { + caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK); + caca_clear_canvas($cv); - if ($demo) { - if (function_exists($demo)) - $demo($cv, $bounds, $outline, $dithering); + while (!caca_get_event($dp, CACA_EVENT_KEY_PRESS)) { + if (function_exists($demo)) + $demo($cv, $bounds, $outline); - caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK); - caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2); - $rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp)); - caca_put_str($cv, 4, 1, "[$rate fps]----"); - caca_refresh_display($dp); - } + caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK); + caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2); + $rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp)); + caca_put_str($cv, 4, 1, "[$rate fps]----"); + caca_refresh_display($dp); } + + display_menu($cv, $dp, $bounds, $outline); + caca_refresh_display($dp); } -function demo_all($cv, $dp, $bounds, $outline) { + +function demo_all($cv, $bounds, $outline) { global $i; $i++; @@ -223,7 +220,7 @@ function demo_all($cv, $dp, $bounds, $outline) { } } -function display_menu($cv, $dp, $bounds, $outline) { +function display_menu($cv, $dp, $bounds, $outline, $refresh = true) { $xo = caca_get_canvas_width($cv) - 2; $yo = caca_get_canvas_height($cv) - 2; @@ -252,10 +249,11 @@ function display_menu($cv, $dp, $bounds, $outline) { caca_put_str($cv, 4, 18, "'b': drawing boundaries: ".(($bounds == 0) ? "screen" : "infinite")); caca_put_str($cv, 4, $yo - 2, "'q': quit"); - caca_refresh_display($dp); + if ($refresh) + caca_refresh_display($dp); } -function demo_dots($cv, $bounds, $outline, $dithering) { +function demo_dots($cv, $bounds, $outline) { $xmax = caca_get_canvas_width($cv); $ymax = caca_get_canvas_height($cv); @@ -268,7 +266,7 @@ function demo_dots($cv, $bounds, $outline, $dithering) { } } -function demo_lines($cv, $bounds, $outline, $dithering) { +function demo_lines($cv, $bounds, $outline) { $w = caca_get_canvas_width($cv); $h = caca_get_canvas_height($cv); @@ -288,7 +286,7 @@ function demo_lines($cv, $bounds, $outline, $dithering) { caca_draw_line($cv, $xa, $ya, $xb, $yb, ord('#')); } -function demo_boxes($cv, $bounds, $outline, $dithering) { +function demo_boxes($cv, $bounds, $outline) { $w = caca_get_canvas_width($cv); $h = caca_get_canvas_height($cv); @@ -311,7 +309,7 @@ function demo_boxes($cv, $bounds, $outline, $dithering) { caca_draw_box($cv, $xa, $ya, $xb, $yb, ord('#')); } -function demo_ellipses($cv, $bounds, $outline, $dithering) { +function demo_ellipses($cv, $bounds, $outline) { $w = caca_get_canvas_width($cv); $h = caca_get_canvas_height($cv); @@ -336,7 +334,7 @@ function demo_ellipses($cv, $bounds, $outline, $dithering) { caca_draw_ellipse($cv, $x, $y, $a, $b, ord('#')); } -function demo_triangles($cv, $bounds, $outline, $dithering) { +function demo_triangles($cv, $bounds, $outline) { $w = caca_get_canvas_width($cv); $h = caca_get_canvas_height($cv); @@ -361,10 +359,8 @@ function demo_triangles($cv, $bounds, $outline, $dithering) { caca_draw_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, ord('#')); } -function demo_render($cv, $bounds, $outline, $dithering) { +function demo_render($cv, $bounds, $outline) { } main(); - -?>