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@hocevar.net> |
---|
11 | * All Rights Reserved |
---|
12 | * |
---|
13 | * $Id: test.php 4148 2009-12-19 14:38:38Z sam $ |
---|
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 | |
---|
22 | if (php_sapi_name() != "cli") { |
---|
23 | die("You have to run this program with php-cli!\n"); |
---|
24 | } |
---|
25 | |
---|
26 | include dirname($argv[0]) . '/../caca.php'; |
---|
27 | |
---|
28 | class 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 | imagealphablending($this->image, false); |
---|
53 | imagesavealpha($this->image, true); |
---|
54 | $this->d = new Dither($this->image); |
---|
55 | $f->Render($this->scroll, $this->image); |
---|
56 | } |
---|
57 | |
---|
58 | function Draw() |
---|
59 | { |
---|
60 | $barCount = 6; |
---|
61 | $t = (gettimeofday(true) - $this->startTime) * 1000; |
---|
62 | |
---|
63 | $this->Clear(); |
---|
64 | |
---|
65 | $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLACK); |
---|
66 | for($i = 0; $i < $barCount; $i++) |
---|
67 | { |
---|
68 | $v = ((sin(($t / 500.0) |
---|
69 | + (1.0 * $i / $barCount)) + 1) / 2) * $this->getHeight(); |
---|
70 | $p1_x = 0; $p1_y = intval($v); |
---|
71 | $p2_x = $this->getWidth() - 1; $p2_y = intval($v); |
---|
72 | |
---|
73 | $this->setColorAnsi(($i + 9), AnsiColor::BLACK); |
---|
74 | /* drawLine is already clipped, we don't care about overflows */ |
---|
75 | $this->drawLine($p1_x + 0, $p1_y - 2, $p2_x + 0, $p2_y - 2, ord('-')); |
---|
76 | $this->drawLine($p1_x + 0, $p1_y - 1, $p2_x + 0, $p2_y - 1, ord('*')); |
---|
77 | $this->drawLine($p1_x, $p1_y, $p2_x, $p2_y, ord('#')); |
---|
78 | $this->drawLine($p1_x + 0, $p1_y + 1, $p2_x + 0, $p2_y + 1, ord('*')); |
---|
79 | $this->drawLine($p1_x + 0, $p1_y + 2, $p2_x + 0, $p2_y + 2, ord('-')); |
---|
80 | } |
---|
81 | |
---|
82 | $w = $this->getWidth(); |
---|
83 | $h = $this->getHeight(); |
---|
84 | $x = intval(($t / 10) % (12 * $w)); |
---|
85 | $y = intval($h * (2.0 + sin($t / 200.0)) / 4); |
---|
86 | $this->d->bitmap($this, - $x, $h / 2 - $y, $w * 12, $y * 2); |
---|
87 | $this->d->bitmap($this, 12 * $w - $x, $h / 2 - $y, $w * 12, $y * 2); |
---|
88 | |
---|
89 | $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLUE); |
---|
90 | $this->putStr($this->getWidth() - 30, $this->getHeight() - 2, " -=[ Powered by libcaca ]=- "); |
---|
91 | $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLACK); |
---|
92 | } |
---|
93 | } |
---|
94 | |
---|
95 | class DemoDisplay extends Display |
---|
96 | { |
---|
97 | private $cv; |
---|
98 | |
---|
99 | function __construct(DemoCanvas $_cv) |
---|
100 | { |
---|
101 | parent::__construct($_cv); |
---|
102 | $this->setTitle("libcaca PHP Bindings test suite"); |
---|
103 | $this->setDisplayTime(20000); // Refresh every 20 ms |
---|
104 | $this->cv = $_cv; |
---|
105 | } |
---|
106 | |
---|
107 | function EventLoop() |
---|
108 | { |
---|
109 | while(! ($ev = $this->getEvent(EventType::KEY_RELEASE, 10))) |
---|
110 | { |
---|
111 | $this->cv->Draw(); |
---|
112 | |
---|
113 | $this->Refresh(); |
---|
114 | } |
---|
115 | |
---|
116 | if($ev->getKeyCh() > 0x20 && $ev->getKeyCh() < 0x7f) |
---|
117 | printf("Key pressed: %c\n", $ev->getKeyCh()); |
---|
118 | else |
---|
119 | printf("Key pressed: 0x%x\n", $ev->getKeyCh()); |
---|
120 | } |
---|
121 | } |
---|
122 | |
---|
123 | class Test |
---|
124 | { |
---|
125 | static function Main() |
---|
126 | { |
---|
127 | printf("libcaca %s PHP test\n", Libcaca::getVersion()); |
---|
128 | printf("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>\n"); |
---|
129 | printf("(c) 2007 Sam Hocevar <sam@hocevar.net>\n"); |
---|
130 | printf("(c) 2008 Benjamin C. Wiley Sittler <bsittler@gmail.com>\n"); |
---|
131 | |
---|
132 | /* Instanciate a caca canvas */ |
---|
133 | $cv = new DemoCanvas(); |
---|
134 | |
---|
135 | /* We have a proper canvas, let's display it using Caca */ |
---|
136 | $dp = new DemoDisplay($cv); |
---|
137 | |
---|
138 | /* Random number. This is a static method, |
---|
139 | not to be used with previous instance */ |
---|
140 | printf("A random number: %d\n", Libcaca::Rand(0, 1337)); |
---|
141 | |
---|
142 | $dp->EventLoop(); |
---|
143 | } |
---|
144 | } |
---|
145 | |
---|
146 | Test::Main(); |
---|
147 | |
---|
148 | ?> |
---|