source: libcaca/trunk/caca-php/examples/test.php @ 3290

Last change on this file since 3290 was 3290, checked in by bsittler, 11 years ago

preliminary port of jylam and sam's test.cs to PHP using an early version of nico's caca.php; right now it looks in dirname($argv[0]) . "/.." for caca.php, which will need to be fixed once caca.php is installed in a php standard include directory

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.2 KB
Line 
1#!/usr/bin/php5
2<?php
3  /*
4   *  Test          PHP bindings test program
5   *  Copyright (c) 2008 Benjamin C. Wiley Sittler <bsittler@gmail.com>
6   *
7   *  This file is a Php port of "caca-sharp/test.cs"
8   *  which is:
9   *  Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>
10   *                2007 Sam Hocevar <sam@zoy.org>
11   *                All Rights Reserved
12   *
13   *  $Id: test.php 3290 2008-11-05 00:04:35Z bsittler $
14   *
15   *  This program is free software. It comes without any warranty, to
16   *  the extent permitted by applicable law. You can redistribute it
17   *  and/or modify it under the terms of the Do What The Fuck You Want
18   *  To Public License, Version 2, as published by Sam Hocevar. See
19   *  http://sam.zoy.org/wtfpl/COPYING for more details.
20   */
21
22if (php_sapi_name() != "cli") {
23        die("You have to run this program with php-cli!\n");
24}
25
26include dirname($argv[0]) . '/../caca.php';
27
28class DemoCanvas extends Canvas
29{
30        private $image;
31
32        private $startTime;
33        private $d;
34        private $scroll;
35
36        function __construct()
37        {
38                parent::__construct();
39                $this->startTime = gettimeofday(true);
40
41                $message = " --- POWERED BY LIBCACA --- OLDSCHOOL TEXT EFFECTS ARE 100% PURE WIN";
42
43                $this->scroll = new Canvas(strlen($message), 1);
44                $this->scroll->setColorAnsi(CACA_WHITE, CACA_TRANSPARENT);
45                $this->scroll->putStr(0, 0, $message);
46
47                $fontList = Font::getList();
48                $f = new Font($fontList[1]);
49                $w = $f->getWidth() * strlen($message);
50                $h = $f->getHeight();
51                $this->image = imagecreatetruecolor($w, $h);
52                imagefilledrectangle($this->image, 0, 0, $w - 1, $h - 1, imagecolorallocatealpha($this->image, 0, 0, 0, 127));
53                imagealphablending($this->image, false);
54                imagesavealpha($this->image, true);
55                $this->d = new Dither($this->image);
56                $f->Render($this->scroll, $this->image);
57                imagepng($this->image, "out.png");
58        }
59
60        function Draw()
61        {
62                $barCount = 6;
63                $t = (gettimeofday(true) - $this->startTime) * 1000;
64
65                $this->Clear();
66
67                $this->setColorAnsi(CACA_WHITE, CACA_BLACK);
68                for($i = 0; $i < $barCount; $i++)
69                {
70                        $v = ((sin(($t / 500.0)
71                                        + (1.0 * $i / $barCount)) + 1) / 2) * $this->getHeight();
72                        $p1_x = 0; $p1_y = intval($v);
73                        $p2_x = $this->getWidth() - 1; $p2_y = intval($v);
74
75                        $this->setColorAnsi(($i + 9), CACA_BLACK);
76                        /* drawLine is already clipped, we don't care about overflows */
77                        $this->drawLine($p1_x + 0, $p1_y - 2, $p2_x + 0, $p2_y - 2, ord('-'));
78                        $this->drawLine($p1_x + 0, $p1_y - 1, $p2_x + 0, $p2_y - 1, ord('*'));
79                        $this->drawLine($p1_x,     $p1_y,     $p2_x,     $p2_y,     ord('#'));
80                        $this->drawLine($p1_x + 0, $p1_y + 1, $p2_x + 0, $p2_y + 1, ord('*'));
81                        $this->drawLine($p1_x + 0, $p1_y + 2, $p2_x + 0, $p2_y + 2, ord('-'));
82                }
83
84                $w = $this->getWidth();
85                $h = $this->getHeight();
86                $x = intval(($t / 10) % (12 * $w));
87                $y = intval($h * (2.0 + sin($t / 200.0)) / 4);
88                $this->d->bitmap($this, - $x, $h / 2 - $y, $w * 12, $y * 2);
89                $this->d->bitmap($this, 12 * $w - $x, $h / 2 - $y, $w * 12, $y * 2);
90 
91                $this->setColorAnsi(CACA_WHITE, CACA_BLUE);
92                $this->putStr($this->getWidth() - 30, $this->getHeight() - 2, " -=[ Powered by libcaca ]=- ");
93                $this->setColorAnsi(CACA_WHITE, CACA_BLACK);
94        }
95}
96
97class DemoDisplay extends Display
98{
99        private $cv;
100
101        function __construct(DemoCanvas $_cv)
102        {
103                parent::__construct($_cv);
104                $this->setTitle("libcaca PHP Bindings test suite");
105                $this->setDisplayTime(20000); // Refresh every 20 ms
106                $this->cv = $_cv;
107        }
108
109        function EventLoop()
110        {
111                while(! ($ev = $this->getEvent(CACA_EVENT_KEY_RELEASE, 10)))
112                {
113                        $this->cv->Draw();
114
115                        $this->Refresh();
116                }
117
118                if($ev->getKeyCh() > 0x20 && $ev->getKeyCh() < 0x7f)
119                        printf("Key pressed: %c\n", $ev->getKeyCh());
120                else
121                        printf("Key pressed: 0x%x\n", $ev->getKeyCh());
122        }
123}
124
125class Test
126{
127        static function Main()
128        {
129                printf("libcaca %s PHP test\n", caca_get_version());
130                printf("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>\n");
131                printf("(c) 2007 Sam Hocevar <sam@zoy.org>\n");
132                printf("(c) 2008 Benjamin C. Wiley Sittler <bsittler@gmail.com>\n");
133
134                /* Instanciate a caca canvas */
135                $cv = new DemoCanvas();
136
137                /* We have a proper canvas, let's display it using Caca */
138                $dp = new DemoDisplay($cv);
139
140                /* Random number. This is a static method,
141                not to be used with previous instance */
142                printf("A random number: %d\n", caca_rand(0, 1337));
143
144                $dp->EventLoop();
145        }
146}
147
148Test::Main();
149
150?>
Note: See TracBrowser for help on using the repository browser.