#!/usr/bin/php5
<?

function display_menu($cv, $dp) {
	$xo = caca_get_canvas_width($cv) - 2;
	$yo = caca_get_canvas_height($cv) - 2;

	caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
	caca_clear_canvas($cv);
	caca_draw_thin_box($cv, 1, 1, $xo, $yo);

	caca_put_str($cv, ($xo - strlen("libcaca demo")) / 2, 3, "libcaca demo");
	caca_put_str($cv, ($xo - strlen("==============")) / 2, 4, "==============");

	caca_put_str($cv, 4, 6, "demos:");
	caca_put_str($cv, 4, 7, "'f': full");
	caca_put_str($cv, 4, 8, "'1': dots");
	caca_put_str($cv, 4, 9, "'2': lines");
	caca_put_str($cv, 4, 10, "'3': boxes");
	caca_put_str($cv, 4, 11, "'4': triangles");
	caca_put_str($cv, 4, 12, "'5': ellipses");
	caca_put_str($cv, 4, 13, "'c': colour");
	caca_put_str($cv, 4, 14, "'r': render");

	if ($sprite)
		caca_put_str($cv, 4, 15, "'s': sprites");

	caca_put_str($cv, 4, 16, "settings:");
	caca_put_str($cv, 4, 17, "'o': outline: ".((outline == 0) ? "none" : ((outline == 1) ? "solid" : "thin")));
	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);
}

function main() {
	$cv = caca_create_canvas(0, 0);
	if (!$cv) {
		die("Error while creating canvas\n");
	}

	$dp = caca_create_display($cv);
	if (!$dp) {
		die("Error while attaching canvas to display\n");
	}

	display_menu($cv, $dp);

	caca_set_display_time($dp, 40000);

	/* Disable cursor */
	caca_set_mouse($dp, 0);

	/* Main menu */
	display_menu($cv, $dp);
	caca_refresh_display($dp);

	sleep(1);

	for ($i = 0; $i < 100; $i++) {
		demo_lines($cv, true, 2);
		caca_refresh_display($dp);
	}

}

function demo_lines($cv, $bounds = true, $outline = 1) {
	$w = caca_get_canvas_width($cv);
	$h = caca_get_canvas_height($cv);

	if ($bounds) {
		$xa = caca_rand(- $w, 2 * $w); $ya = caca_rand(- $h, 2 * $h);
		$xb = caca_rand(- $w, 2 * $w); $yb = caca_rand(- $h, 2 * $h);
	}
	else {
		$xa = caca_rand(0, $w); $ya = caca_rand(0, $h);
		$xb = caca_rand(0, $w); $yb = caca_rand(0, $h);
	}

	caca_set_color_ansi($cv, caca_rand(0, 16), CACA_BLACK);
	if ($outline > 1)
		caca_draw_thin_line($cv, $xa, $ya, $xb, $yb);
	else
		caca_draw_line($cv, $xa, $ya, $xb, $yb, '#');
}


main();