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

Last change on this file since 3292 was 3292, checked in by bsittler, 12 years ago

add AnsiColor?, EventType? and EventKey? constants parallel to the .NET ones

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.3 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 3292 2008-11-05 00:39:18Z 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(AnsiColor::WHITE, AnsiColor::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(AnsiColor::WHITE, AnsiColor::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), AnsiColor::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(AnsiColor::WHITE, AnsiColor::BLUE);
92                $this->putStr($this->getWidth() - 30, $this->getHeight() - 2, " -=[ Powered by libcaca ]=- ");
93                $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::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(EventType::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.