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

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

do not bother with an extraneous fill, and don't create out.png

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.1 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 3301 2008-11-06 23:21:15Z 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                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
95class 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
123class 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@zoy.org>\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
146Test::Main();
147
148?>
Note: See TracBrowser for help on using the repository browser.