|
|
@@ -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 |
|
|
|
{ |
|
|
|
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(); |
|
|
|
|
|
|
|
?> |