| @@ -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(); | |||
| ?> | |||