| @@ -1,136 +1,150 @@ | |||||
| /* | |||||
| * Test .NET bindings test program | |||||
| * Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org> | |||||
| * 2007 Sam Hocevar <sam@zoy.org> | |||||
| * All Rights Reserved | |||||
| * | |||||
| * $Id$ | |||||
| * | |||||
| * This program is free software. It comes without any warranty, to | |||||
| * the extent permitted by applicable law. You can redistribute it | |||||
| * and/or modify it under the terms of the Do What The Fuck You Want | |||||
| * To Public License, Version 2, as published by Sam Hocevar. See | |||||
| * http://sam.zoy.org/wtfpl/COPYING for more details. | |||||
| */ | |||||
| using System; | |||||
| using System.Drawing; | |||||
| using System.Runtime.InteropServices; | |||||
| using Caca; | |||||
| class DemoCanvas : Canvas | |||||
| #!/usr/bin/php5 | |||||
| <?php | |||||
| /* | |||||
| * Test PHP bindings test program | |||||
| * Copyright (c) 2008 Benjamin C. Wiley Sittler <bsittler@gmail.com> | |||||
| * | |||||
| * This file is a Php port of "caca-sharp/test.cs" | |||||
| * which is: | |||||
| * Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org> | |||||
| * 2007 Sam Hocevar <sam@zoy.org> | |||||
| * All Rights Reserved | |||||
| * | |||||
| * $Id$ | |||||
| * | |||||
| * This program is free software. It comes without any warranty, to | |||||
| * the extent permitted by applicable law. You can redistribute it | |||||
| * and/or modify it under the terms of the Do What The Fuck You Want | |||||
| * To Public License, Version 2, as published by Sam Hocevar. See | |||||
| * http://sam.zoy.org/wtfpl/COPYING for more details. | |||||
| */ | |||||
| if (php_sapi_name() != "cli") { | |||||
| die("You have to run this program with php-cli!\n"); | |||||
| } | |||||
| include dirname($argv[0]) . '/../caca.php'; | |||||
| class DemoCanvas extends Canvas | |||||
| { | { | ||||
| private uint[,] image; | |||||
| private DateTime startTime; | |||||
| private Dither d; | |||||
| private Canvas scroll; | |||||
| public DemoCanvas() | |||||
| { | |||||
| startTime = DateTime.Now; | |||||
| string message = " --- POWERED BY LIBCACA --- OLDSCHOOL TEXT EFFECTS ARE 100% PURE WIN"; | |||||
| scroll = new Canvas(new Size(message.Length, 1)); | |||||
| scroll.setColorAnsi(AnsiColor.WHITE, AnsiColor.TRANSPARENT); | |||||
| scroll.putStr(new Point(0, 0), message); | |||||
| Caca.Font f = new Caca.Font(Caca.Font.getList()[1]); | |||||
| int w = f.Size.Width * message.Length; | |||||
| int h = f.Size.Height; | |||||
| image = new uint[w, h]; | |||||
| d = new Dither(32, new Size(w, h), w * 4, | |||||
| 0xff00, 0xff0000, 0xff000000, 0xff); | |||||
| f.Render(scroll, image, image.GetLength(0) * 4); | |||||
| } | |||||
| public void Draw() | |||||
| { | |||||
| int barCount = 6; | |||||
| double t = (DateTime.Now - startTime).TotalMilliseconds; | |||||
| Clear(); | |||||
| setColorAnsi(AnsiColor.WHITE, AnsiColor.BLACK); | |||||
| for(int i = 0; i < barCount; i++) | |||||
| { | |||||
| double v = ((Math.Sin((t / 500.0) | |||||
| + (i / ((double)barCount))) + 1) / 2) * Size.Height; | |||||
| Point p1 = new Point(0, (int)v); | |||||
| Point p2 = new Point(Size.Width - 1, (int)v); | |||||
| setColorAnsi((uint)(i + 9), AnsiColor.BLACK); | |||||
| /* drawLine is already clipped, we don't care about overflows */ | |||||
| drawLine(p1 + new Size(0, -2), p2 + new Size(0, -2), '-'); | |||||
| drawLine(p1 + new Size(0, -1), p2 + new Size(0, -1), '*'); | |||||
| drawLine(p1, p2, '#'); | |||||
| drawLine(p1 + new Size(0, 1), p2 + new Size(0, 1), '*'); | |||||
| drawLine(p1 + new Size(0, 2), p2 + new Size(0, 2), '-'); | |||||
| } | |||||
| int w = Size.Width; | |||||
| int h = Size.Height; | |||||
| int x = (int)(t / 10) % (12 * w); | |||||
| int y = (int)(h * (2.0 + Math.Sin(t / 200.0)) / 4); | |||||
| ditherBitmap(new Rectangle(- x, h / 2 - y, w * 12, y * 2), d, image); | |||||
| ditherBitmap(new Rectangle(12 * w - x, h / 2 - y, w * 12, y * 2), d, image); | |||||
| setColorAnsi(AnsiColor.WHITE, AnsiColor.BLUE); | |||||
| putStr(new Point(-30, -2) + Size, " -=[ Powered by libcaca ]=- "); | |||||
| setColorAnsi(AnsiColor.WHITE, AnsiColor.BLACK); | |||||
| } | |||||
| private $image; | |||||
| private $startTime; | |||||
| private $d; | |||||
| private $scroll; | |||||
| function __construct() | |||||
| { | |||||
| parent::__construct(); | |||||
| $this->startTime = gettimeofday(true); | |||||
| $message = " --- POWERED BY LIBCACA --- OLDSCHOOL TEXT EFFECTS ARE 100% PURE WIN"; | |||||
| $this->scroll = new Canvas(strlen($message), 1); | |||||
| $this->scroll->setColorAnsi(CACA_WHITE, CACA_TRANSPARENT); | |||||
| $this->scroll->putStr(0, 0, $message); | |||||
| $fontList = Font::getList(); | |||||
| $f = new Font($fontList[1]); | |||||
| $w = $f->getWidth() * strlen($message); | |||||
| $h = $f->getHeight(); | |||||
| $this->image = imagecreatetruecolor($w, $h); | |||||
| imagefilledrectangle($this->image, 0, 0, $w - 1, $h - 1, imagecolorallocatealpha($this->image, 0, 0, 0, 127)); | |||||
| imagealphablending($this->image, false); | |||||
| imagesavealpha($this->image, true); | |||||
| $this->d = new Dither($this->image); | |||||
| $f->Render($this->scroll, $this->image); | |||||
| imagepng($this->image, "out.png"); | |||||
| } | |||||
| function Draw() | |||||
| { | |||||
| $barCount = 6; | |||||
| $t = (gettimeofday(true) - $this->startTime) * 1000; | |||||
| $this->Clear(); | |||||
| $this->setColorAnsi(CACA_WHITE, CACA_BLACK); | |||||
| for($i = 0; $i < $barCount; $i++) | |||||
| { | |||||
| $v = ((sin(($t / 500.0) | |||||
| + (1.0 * $i / $barCount)) + 1) / 2) * $this->getHeight(); | |||||
| $p1_x = 0; $p1_y = intval($v); | |||||
| $p2_x = $this->getWidth() - 1; $p2_y = intval($v); | |||||
| $this->setColorAnsi(($i + 9), CACA_BLACK); | |||||
| /* drawLine is already clipped, we don't care about overflows */ | |||||
| $this->drawLine($p1_x + 0, $p1_y - 2, $p2_x + 0, $p2_y - 2, ord('-')); | |||||
| $this->drawLine($p1_x + 0, $p1_y - 1, $p2_x + 0, $p2_y - 1, ord('*')); | |||||
| $this->drawLine($p1_x, $p1_y, $p2_x, $p2_y, ord('#')); | |||||
| $this->drawLine($p1_x + 0, $p1_y + 1, $p2_x + 0, $p2_y + 1, ord('*')); | |||||
| $this->drawLine($p1_x + 0, $p1_y + 2, $p2_x + 0, $p2_y + 2, ord('-')); | |||||
| } | |||||
| $w = $this->getWidth(); | |||||
| $h = $this->getHeight(); | |||||
| $x = intval(($t / 10) % (12 * $w)); | |||||
| $y = intval($h * (2.0 + sin($t / 200.0)) / 4); | |||||
| $this->d->bitmap($this, - $x, $h / 2 - $y, $w * 12, $y * 2); | |||||
| $this->d->bitmap($this, 12 * $w - $x, $h / 2 - $y, $w * 12, $y * 2); | |||||
| $this->setColorAnsi(CACA_WHITE, CACA_BLUE); | |||||
| $this->putStr($this->getWidth() - 30, $this->getHeight() - 2, " -=[ Powered by libcaca ]=- "); | |||||
| $this->setColorAnsi(CACA_WHITE, CACA_BLACK); | |||||
| } | |||||
| } | } | ||||
| class DemoDisplay : Display | |||||
| class DemoDisplay extends Display | |||||
| { | { | ||||
| private DemoCanvas cv; | |||||
| public DemoDisplay(DemoCanvas _cv) : base(_cv) | |||||
| { | |||||
| Title = "libcaca .NET Bindings test suite"; | |||||
| DisplayTime = 20000; // Refresh every 20 ms | |||||
| cv = _cv; | |||||
| } | |||||
| public void EventLoop() | |||||
| { | |||||
| Event ev; | |||||
| while((ev = getEvent(EventType.KEY_RELEASE, 10)).Type == 0) | |||||
| { | |||||
| cv.Draw(); | |||||
| Refresh(); | |||||
| } | |||||
| if(ev.KeyCh > 0x20 && ev.KeyCh < 0x7f) | |||||
| Console.WriteLine("Key pressed: {0}", ev.KeyUtf8); | |||||
| else | |||||
| Console.WriteLine("Key pressed: 0x{0:x}", ev.KeyCh); | |||||
| } | |||||
| private $cv; | |||||
| function __construct(DemoCanvas $_cv) | |||||
| { | |||||
| parent::__construct($_cv); | |||||
| $this->setTitle("libcaca PHP Bindings test suite"); | |||||
| $this->setDisplayTime(20000); // Refresh every 20 ms | |||||
| $this->cv = $_cv; | |||||
| } | |||||
| function EventLoop() | |||||
| { | |||||
| while(! ($ev = $this->getEvent(CACA_EVENT_KEY_RELEASE, 10))) | |||||
| { | |||||
| $this->cv->Draw(); | |||||
| $this->Refresh(); | |||||
| } | |||||
| if($ev->getKeyCh() > 0x20 && $ev->getKeyCh() < 0x7f) | |||||
| printf("Key pressed: %c\n", $ev->getKeyCh()); | |||||
| else | |||||
| printf("Key pressed: 0x%x\n", $ev->getKeyCh()); | |||||
| } | |||||
| } | } | ||||
| class Test | class Test | ||||
| { | { | ||||
| public static void Main() | |||||
| { | |||||
| Console.WriteLine("libcaca {0} .NET test", Libcaca.getVersion()); | |||||
| Console.WriteLine("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>"); | |||||
| static function Main() | |||||
| { | |||||
| printf("libcaca %s PHP test\n", caca_get_version()); | |||||
| printf("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>\n"); | |||||
| printf("(c) 2007 Sam Hocevar <sam@zoy.org>\n"); | |||||
| printf("(c) 2008 Benjamin C. Wiley Sittler <bsittler@gmail.com>\n"); | |||||
| /* Instanciate a caca canvas */ | |||||
| DemoCanvas cv = new DemoCanvas(); | |||||
| /* Instanciate a caca canvas */ | |||||
| $cv = new DemoCanvas(); | |||||
| /* We have a proper canvas, let's display it using Caca */ | |||||
| DemoDisplay dp = new DemoDisplay(cv); | |||||
| /* We have a proper canvas, let's display it using Caca */ | |||||
| $dp = new DemoDisplay($cv); | |||||
| /* Random number. This is a static method, | |||||
| not to be used with previous instance */ | |||||
| Console.WriteLine("A random number: {0}", Libcaca.Rand(0, 1337)); | |||||
| /* Random number. This is a static method, | |||||
| not to be used with previous instance */ | |||||
| printf("A random number: %d\n", caca_rand(0, 1337)); | |||||
| dp.EventLoop(); | |||||
| } | |||||
| $dp->EventLoop(); | |||||
| } | |||||
| } | } | ||||
| Test::Main(); | |||||
| ?> | |||||