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

Last change on this file since 3313 was 3301, checked in by bsittler, 12 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
RevLine 
[3290]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"
[3293]8   *  which is:
[3290]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   */
[921]21
[3290]22if (php_sapi_name() != "cli") {
23        die("You have to run this program with php-cli!\n");
24}
[921]25
[3290]26include dirname($argv[0]) . '/../caca.php';
[921]27
[3290]28class DemoCanvas extends Canvas
[2047]29{
[3290]30        private $image;
[2058]31
[3290]32        private $startTime;
33        private $d;
34        private $scroll;
[921]35
[3290]36        function __construct()
37        {
38                parent::__construct();
39                $this->startTime = gettimeofday(true);
[2058]40
[3290]41                $message = " --- POWERED BY LIBCACA --- OLDSCHOOL TEXT EFFECTS ARE 100% PURE WIN";
[2082]42
[3290]43                $this->scroll = new Canvas(strlen($message), 1);
[3292]44                $this->scroll->setColorAnsi(AnsiColor::WHITE, AnsiColor::TRANSPARENT);
[3290]45                $this->scroll->putStr(0, 0, $message);
[2082]46
[3290]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        }
[921]57
[3290]58        function Draw()
59        {
60                $barCount = 6;
61                $t = (gettimeofday(true) - $this->startTime) * 1000;
[2046]62
[3290]63                $this->Clear();
[1424]64
[3292]65                $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLACK);
[3290]66                for($i = 0; $i < $barCount; $i++)
67                {
68                        $v = ((sin(($t / 500.0)
[3293]69                                           + (1.0 * $i / $barCount)) + 1) / 2) * $this->getHeight();
[3290]70                        $p1_x = 0; $p1_y = intval($v);
71                        $p2_x = $this->getWidth() - 1; $p2_y = intval($v);
[2046]72
[3292]73                        $this->setColorAnsi(($i + 9), AnsiColor::BLACK);
[3290]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                }
[921]81
[3290]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);
[3293]88
[3292]89                $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLUE);
[3290]90                $this->putStr($this->getWidth() - 30, $this->getHeight() - 2, " -=[ Powered by libcaca ]=- ");
[3292]91                $this->setColorAnsi(AnsiColor::WHITE, AnsiColor::BLACK);
[3290]92        }
[2047]93}
[921]94
[3290]95class DemoDisplay extends Display
[2047]96{
[3290]97        private $cv;
[921]98
[3290]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        }
[921]106
[3290]107        function EventLoop()
108        {
[3292]109                while(! ($ev = $this->getEvent(EventType::KEY_RELEASE, 10)))
[3290]110                {
111                        $this->cv->Draw();
[2052]112
[3290]113                        $this->Refresh();
114                }
[921]115
[3290]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        }
[2047]121}
[2046]122
[2047]123class Test
124{
[3290]125        static function Main()
126        {
[3293]127                printf("libcaca %s PHP test\n", Libcaca::getVersion());
[3290]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");
[1428]131
[3290]132                /* Instanciate a caca canvas */
133                $cv = new DemoCanvas();
[1428]134
[3290]135                /* We have a proper canvas, let's display it using Caca */
136                $dp = new DemoDisplay($cv);
[2046]137
[3290]138                /* Random number. This is a static method,
[3293]139                 not to be used with previous instance */
140                printf("A random number: %d\n", Libcaca::Rand(0, 1337));
[1428]141
[3290]142                $dp->EventLoop();
143        }
[2080]144}
[921]145
[3290]146Test::Main();
147
148?>
Note: See TracBrowser for help on using the repository browser.