Quellcode durchsuchen

* Add php binding for 4 new functions

* Add "full" demo to "examples/demo.php"
tags/v0.99.beta17
Nicolas Vion nico vor 16 Jahren
Ursprung
Commit
2bba9c4267
2 geänderte Dateien mit 164 neuen und 11 gelöschten Zeilen
  1. +120
    -11
      caca-php/examples/demo.php
  2. +44
    -0
      caca-php/php_caca.c

+ 120
- 11
caca-php/examples/demo.php Datei anzeigen

@@ -12,7 +12,6 @@ function main() {
die("Error while attaching canvas to display\n");
}

display_menu($cv, $dp);

caca_set_display_time($dp, 40000);

@@ -20,7 +19,7 @@ function main() {
caca_set_mouse($dp, 0);

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


@@ -47,18 +46,18 @@ function main() {
case ord('o'):
case ord('O'):
$outline = ($outline + 1) % 3;
display_menu($cv, $dp);
display_menu($cv, $dp, $bounds, $outline);
break;
case ord('b'):
case ord('B'):
$bounds = ($bounds + 1) % 2;
display_menu($cv, $dp);
display_menu($cv, $dp, $bounds, $outline);
break;
case ord('d'):
case ord('D'):
$dithering = ($dithering + 1) % 5;
caca_set_feature($cv, $dithering);
display_menu($cv, $dp);
display_menu($cv, $dp, $bounds, $outline);
break;
case ord('f'):
case ord('F'):
@@ -105,7 +104,7 @@ function main() {
}

if ($menu || ($mouse && !$demo)) {
display_menu($cv, $dp);
display_menu($cv, $dp, $bounds, $outline);
if ($mouse && !$demo) {
caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
caca_put_str($cv, $xmouse, $ymouse,".");
@@ -116,18 +115,103 @@ function main() {
}

if ($demo) {
$demo($cv, $bounds, $outline, $dithering);
if (function_exists($demo))
$demo($cv, $bounds, $outline, $dithering);

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 = (1000000 / caca_get_display_time($dp)).".".((10000000 / caca_get_display_time($dp)) % 10);
$rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp));
caca_put_str($cv, 4, 1, "[$rate fps]----");
caca_refresh_display($dp);
}
}
}

function display_menu($cv, $dp) {
function demo_all($cv, $dp, $bounds, $outline) {
global $i;

$i++;

caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
caca_clear_canvas($cv);

/* Draw the sun */
caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
$xo = caca_get_canvas_width($cv) / 4;
$yo = caca_get_canvas_height($cv) / 4 + 5 * sin(0.03 * $i);

for ($j = 0; $j < 16; $j++) {
$xa = $xo - (30 + sin(0.03 * $i) * 8) * sin(0.03 * $i + M_PI * $j / 8);
$ya = $yo + (15 + sin(0.03 * $i) * 4) * cos(0.03 * $i + M_PI * $j / 8);
caca_draw_thin_line($cv, $xo, $yo, $xa, $ya);
}

$j = 15 + sin(0.03 * $i) * 8;
caca_set_color_ansi($cv, CACA_WHITE, CACA_BLACK);
caca_fill_ellipse($cv, $xo, $yo, $j, $j / 2, '#');
caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
caca_draw_ellipse($cv, $xo, $yo, $j, $j / 2, '#');

/* Draw the pyramid */
$xo = caca_get_canvas_width($cv) * 5 / 8;
$yo = 2;

$xa = caca_get_canvas_width($cv) / 8 + sin(0.03 * $i) * 5;
$ya = caca_get_canvas_height($cv) / 2 + cos(0.03 * $i) * 5;

$xb = caca_get_canvas_width($cv) - 10 - cos(0.02 * $i) * 10;
$yb = caca_get_canvas_height($cv) * 3 / 4 - 5 + sin(0.02 * $i) * 5;

$xc = caca_get_canvas_width($cv) / 4 - sin(0.02 * $i) * 5;
$yc = caca_get_canvas_height($cv) * 3 / 4 + cos(0.02 * $i) * 5;

caca_set_color_ansi($cv, CACA_GREEN, CACA_BLACK);
caca_fill_triangle($cv, $xo, $yo, $xb, $yb, $xa, $ya, '%');
caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
caca_draw_thin_triangle($cv, $xo, $yo, $xb, $yb, $xa, $ya);

caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
caca_fill_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');
caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);

caca_set_color_ansi($cv, CACA_BLUE, CACA_BLACK);
caca_fill_triangle($cv, $xo, $yo, $xb, $yb, $xc, $yc, '%');
caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
caca_draw_thin_triangle($cv, $xo, $yo, $xb, $yb, $xc, $yc);

/* Draw a background triangle */
$xa = 2;
$ya = 2;

$xb = caca_get_canvas_width($cv) - 3;
$yb = caca_get_canvas_height($cv) / 2;

$xc = caca_get_canvas_width($cv) / 3;
$yc = caca_get_canvas_height($cv) - 3;

caca_set_color_ansi($cv, CACA_CYAN, CACA_BLACK);
caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);

$xo = caca_get_canvas_width($cv) / 2 + cos(0.027 * $i) * caca_get_canvas_width($cv) / 3;
$yo = caca_get_canvas_height($cv) / 2 - sin(0.027 * $i) * caca_get_canvas_height($cv) / 2;

caca_draw_thin_line($cv, $xa, $ya, $xo, $yo);
caca_draw_thin_line($cv, $xb, $yb, $xo, $yo);
caca_draw_thin_line($cv, $xc, $yc, $xo, $yo);

/* Draw a trail behind the foreground sprite */
for($j = $i - 60; $j < $i; $j++) {
$delta = caca_rand(-5, 6);
caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
caca_put_char($cv,
caca_get_canvas_width($cv) / 2 + cos(0.02 * $j) * ($delta + caca_get_canvas_width($cv) / 4),
caca_get_canvas_height($cv) / 2 + sin(0.02 * $j) * ($delta + caca_get_canvas_height($cv) / 3),
'#');
}
}

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

@@ -152,8 +236,8 @@ function display_menu($cv, $dp) {
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, 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);
@@ -240,6 +324,31 @@ function demo_ellipses($cv, $bounds, $outline, $dithering) {
caca_draw_ellipse($cv, $x, $y, $a, $b, '#');
}

function demo_triangles($cv, $bounds, $outline, $dithering) {
$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);
$xc = caca_rand(- $w, 2 * $w); $yc = 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);
$xc = caca_rand(0, $w); $yc = caca_rand(0, $h);
}

caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
caca_fill_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');

caca_set_color_ansi($cv, caca_rand(0, 16), CACA_BLACK);
if ($outline == 2)
caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);
else if ($outline == 1)
caca_draw_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');
}



main();

+ 44
- 0
caca-php/php_caca.c Datei anzeigen

@@ -626,6 +626,18 @@ PHP_FUNCTION(caca_draw_thin_polyline) {
}

PHP_FUNCTION(caca_draw_circle) {
zval *_zval;
char *str;
long str_len, x, y, r = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllls", &_zval, &x, &y, &r, &str, &str_len) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
if (str_len != 1) {
RETURN_FALSE;
}
RETURN_BOOL(caca_draw_circle(canvas, x, y, r, str[0]) == 0);
}

PHP_FUNCTION(caca_draw_ellipse) {
@@ -722,12 +734,44 @@ PHP_FUNCTION(caca_fill_box) {
}

PHP_FUNCTION(caca_draw_triangle) {
zval *_zval;
char *str;
long str_len, xa, ya, xb, yb, xc, yc = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
if (str_len != 1) {
RETURN_FALSE;
}
RETURN_BOOL(caca_draw_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]) == 0);
}

PHP_FUNCTION(caca_draw_thin_triangle) {
zval *_zval;
long xa, ya, xb, yb, xc, yc = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &_zval, &xa, &ya, &xb, &yb, &xc, &yc) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_BOOL(caca_draw_thin_triangle(canvas, xa, ya, xb, yb, xc, yc) == 0);
}

PHP_FUNCTION(caca_fill_triangle) {
zval *_zval;
char *str;
long str_len, xa, ya, xb, yb, xc, yc = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
if (str_len != 1) {
RETURN_FALSE;
}
RETURN_BOOL(caca_fill_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]) == 0);
}

PHP_FUNCTION(caca_get_frame_count) {


Laden…
Abbrechen
Speichern