Ignore:
Timestamp:
Oct 26, 2008, 2:38:47 PM (11 years ago)
Author:
nico
Message:
  • Add php binding for 4 new functions
  • Add "full" demo to "examples/demo.php"
Location:
libcaca/trunk/caca-php
Files:
2 edited

Legend:

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

    r3108 r3109  
    1313        }
    1414
    15         display_menu($cv, $dp);
    1615
    1716        caca_set_display_time($dp, 40000);
     
    2120
    2221        /* Main menu */
    23         display_menu($cv, $dp);
     22        display_menu($cv, $dp, $bounds, $outline);
    2423        caca_refresh_display($dp);
    2524
     
    4847                                        case ord('O'):
    4948                                                $outline = ($outline + 1) % 3;
    50                                                 display_menu($cv, $dp);
     49                                                display_menu($cv, $dp, $bounds, $outline);
    5150                                                break;
    5251                                        case ord('b'):
    5352                                        case ord('B'):
    5453                                                $bounds = ($bounds + 1) % 2;
    55                                                 display_menu($cv, $dp);
     54                                                display_menu($cv, $dp, $bounds, $outline);
    5655                                                break;
    5756                                        case ord('d'):
     
    5958                                                $dithering = ($dithering + 1) % 5;
    6059                                                caca_set_feature($cv, $dithering);
    61                                                 display_menu($cv, $dp);
     60                                                display_menu($cv, $dp, $bounds, $outline);
    6261                                                break;
    6362                                        case ord('f'):
     
    106105
    107106                if ($menu || ($mouse && !$demo)) {
    108                         display_menu($cv, $dp);
     107                        display_menu($cv, $dp, $bounds, $outline);
    109108                        if ($mouse && !$demo) {
    110109                                caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
     
    117116
    118117                if ($demo) {
    119                         $demo($cv, $bounds, $outline, $dithering);
     118                        if (function_exists($demo))
     119                                $demo($cv, $bounds, $outline, $dithering);
    120120
    121121                        caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
    122122                        caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2);
    123                         $rate = (1000000 / caca_get_display_time($dp)).".".((10000000 / caca_get_display_time($dp)) % 10);
     123                        $rate = sprintf("%01.2f", 1000000 / caca_get_display_time($dp));
    124124                        caca_put_str($cv, 4, 1, "[$rate fps]----");
    125125                        caca_refresh_display($dp);
     
    128128}
    129129
    130 function display_menu($cv, $dp) {
     130function demo_all($cv, $dp, $bounds, $outline) {
     131        global $i;
     132
     133        $i++;
     134
     135        caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
     136        caca_clear_canvas($cv);
     137
     138        /* Draw the sun */
     139        caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
     140        $xo = caca_get_canvas_width($cv) / 4;
     141        $yo = caca_get_canvas_height($cv) / 4 + 5 * sin(0.03 * $i);
     142
     143        for ($j = 0; $j < 16; $j++) {
     144                $xa = $xo - (30 + sin(0.03 * $i) * 8) * sin(0.03 * $i + M_PI * $j / 8);
     145                $ya = $yo + (15 + sin(0.03 * $i) * 4) * cos(0.03 * $i + M_PI * $j / 8);
     146                caca_draw_thin_line($cv, $xo, $yo, $xa, $ya);
     147        }
     148
     149        $j = 15 + sin(0.03 * $i) * 8;
     150        caca_set_color_ansi($cv, CACA_WHITE, CACA_BLACK);
     151        caca_fill_ellipse($cv, $xo, $yo, $j, $j / 2, '#');
     152        caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
     153        caca_draw_ellipse($cv, $xo, $yo, $j, $j / 2, '#');
     154
     155        /* Draw the pyramid */
     156        $xo = caca_get_canvas_width($cv) * 5 / 8;
     157        $yo = 2;
     158
     159        $xa = caca_get_canvas_width($cv) / 8 + sin(0.03 * $i) * 5;
     160        $ya = caca_get_canvas_height($cv) / 2 + cos(0.03 * $i) * 5;
     161
     162        $xb = caca_get_canvas_width($cv) - 10 - cos(0.02 * $i) * 10;
     163        $yb = caca_get_canvas_height($cv) * 3 / 4 - 5 + sin(0.02 * $i) * 5;
     164
     165        $xc = caca_get_canvas_width($cv) / 4 - sin(0.02 * $i) * 5;
     166        $yc = caca_get_canvas_height($cv) * 3 / 4 + cos(0.02 * $i) * 5;
     167
     168        caca_set_color_ansi($cv, CACA_GREEN, CACA_BLACK);
     169        caca_fill_triangle($cv, $xo, $yo, $xb, $yb, $xa, $ya, '%');
     170        caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
     171        caca_draw_thin_triangle($cv, $xo, $yo, $xb, $yb, $xa, $ya);
     172
     173        caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
     174        caca_fill_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');
     175        caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
     176        caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);
     177
     178        caca_set_color_ansi($cv, CACA_BLUE, CACA_BLACK);
     179        caca_fill_triangle($cv, $xo, $yo, $xb, $yb, $xc, $yc, '%');
     180        caca_set_color_ansi($cv, CACA_YELLOW, CACA_BLACK);
     181        caca_draw_thin_triangle($cv, $xo, $yo, $xb, $yb, $xc, $yc);
     182
     183        /* Draw a background triangle */
     184        $xa = 2;
     185        $ya = 2;
     186
     187        $xb = caca_get_canvas_width($cv) - 3;
     188        $yb = caca_get_canvas_height($cv) / 2;
     189
     190        $xc = caca_get_canvas_width($cv) / 3;
     191        $yc = caca_get_canvas_height($cv) - 3;
     192
     193        caca_set_color_ansi($cv, CACA_CYAN, CACA_BLACK);
     194        caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);
     195
     196        $xo = caca_get_canvas_width($cv) / 2 + cos(0.027 * $i) * caca_get_canvas_width($cv) / 3;
     197        $yo = caca_get_canvas_height($cv) / 2 - sin(0.027 * $i) * caca_get_canvas_height($cv) / 2;
     198
     199        caca_draw_thin_line($cv, $xa, $ya, $xo, $yo);
     200        caca_draw_thin_line($cv, $xb, $yb, $xo, $yo);
     201        caca_draw_thin_line($cv, $xc, $yc, $xo, $yo);
     202
     203        /* Draw a trail behind the foreground sprite */
     204        for($j = $i - 60; $j < $i; $j++) {
     205                $delta = caca_rand(-5, 6);
     206                caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
     207                caca_put_char($cv,
     208                        caca_get_canvas_width($cv) / 2 + cos(0.02 * $j) * ($delta + caca_get_canvas_width($cv) / 4),
     209                        caca_get_canvas_height($cv) / 2 + sin(0.02 * $j) * ($delta + caca_get_canvas_height($cv) / 3),
     210                        '#');
     211        }
     212}
     213
     214function display_menu($cv, $dp, $bounds, $outline) {
    131215        $xo = caca_get_canvas_width($cv) - 2;
    132216        $yo = caca_get_canvas_height($cv) - 2;
     
    153237
    154238        caca_put_str($cv, 4, 16, "settings:");
    155         caca_put_str($cv, 4, 17, "'o': outline: ".((outline == 0) ? "none" : ((outline == 1) ? "solid" : "thin")));
    156         caca_put_str($cv, 4, 18, "'b': drawing boundaries: ".((bounds == 0) ? "screen" : "infinite"));
     239        caca_put_str($cv, 4, 17, "'o': outline: ".(($outline == 0) ? "none" : (($outline == 1) ? "solid" : "thin")));
     240        caca_put_str($cv, 4, 18, "'b': drawing boundaries: ".(($bounds == 0) ? "screen" : "infinite"));
    157241        caca_put_str($cv, 4, $yo - 2, "'q': quit");
    158242
     
    241325}
    242326
     327function demo_triangles($cv, $bounds, $outline, $dithering) {
     328        $w = caca_get_canvas_width($cv);
     329        $h = caca_get_canvas_height($cv);
     330
     331        if ($bounds) {
     332                $xa = caca_rand(- $w, 2 * $w); $ya = caca_rand(- $h, 2 * $h);
     333                $xb = caca_rand(- $w, 2 * $w); $yb = caca_rand(- $h, 2 * $h);
     334                $xc = caca_rand(- $w, 2 * $w); $yc = caca_rand(- $h, 2 * $h);
     335        }
     336        else {
     337                $xa = caca_rand(0, $w); $ya = caca_rand(0, $h);
     338                $xb = caca_rand(0, $w); $yb = caca_rand(0, $h);
     339                $xc = caca_rand(0, $w); $yc = caca_rand(0, $h);
     340        }
     341
     342        caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
     343        caca_fill_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');
     344
     345        caca_set_color_ansi($cv, caca_rand(0, 16), CACA_BLACK);
     346        if ($outline == 2)
     347                caca_draw_thin_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc);
     348        else if ($outline == 1)
     349                caca_draw_triangle($cv, $xa, $ya, $xb, $yb, $xc, $yc, '#');
     350}
     351
    243352
    244353
  • libcaca/trunk/caca-php/php_caca.c

    r3108 r3109  
    627627
    628628PHP_FUNCTION(caca_draw_circle) {
     629        zval *_zval;
     630        char *str;
     631        long str_len, x, y, r = 0;
     632        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllls", &_zval, &x, &y, &r, &str, &str_len) == FAILURE) {
     633                RETURN_FALSE;
     634        }
     635        caca_canvas_t *canvas;
     636        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     637        if (str_len != 1) {
     638                RETURN_FALSE;
     639        }
     640        RETURN_BOOL(caca_draw_circle(canvas, x, y, r, str[0]) == 0);
    629641}
    630642
     
    723735
    724736PHP_FUNCTION(caca_draw_triangle) {
     737        zval *_zval;
     738        char *str;
     739        long str_len, xa, ya, xb, yb, xc, yc = 0;
     740        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
     741                RETURN_FALSE;
     742        }
     743        caca_canvas_t *canvas;
     744        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     745        if (str_len != 1) {
     746                RETURN_FALSE;
     747        }
     748        RETURN_BOOL(caca_draw_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]) == 0);
    725749}
    726750
    727751PHP_FUNCTION(caca_draw_thin_triangle) {
     752        zval *_zval;
     753        long xa, ya, xb, yb, xc, yc = 0;
     754        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &_zval, &xa, &ya, &xb, &yb, &xc, &yc) == FAILURE) {
     755                RETURN_FALSE;
     756        }
     757        caca_canvas_t *canvas;
     758        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     759        RETURN_BOOL(caca_draw_thin_triangle(canvas, xa, ya, xb, yb, xc, yc) == 0);
    728760}
    729761
    730762PHP_FUNCTION(caca_fill_triangle) {
     763        zval *_zval;
     764        char *str;
     765        long str_len, xa, ya, xb, yb, xc, yc = 0;
     766        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
     767                RETURN_FALSE;
     768        }
     769        caca_canvas_t *canvas;
     770        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     771        if (str_len != 1) {
     772                RETURN_FALSE;
     773        }
     774        RETURN_BOOL(caca_fill_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]) == 0);
    731775}
    732776
Note: See TracChangeset for help on using the changeset viewer.