| @@ -0,0 +1,136 @@ | |||
| /* | |||
| * 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 | |||
| { | |||
| 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); | |||
| } | |||
| } | |||
| class DemoDisplay : 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); | |||
| } | |||
| } | |||
| class Test | |||
| { | |||
| public static void Main() | |||
| { | |||
| Console.WriteLine("libcaca {0} .NET test", Libcaca.getVersion()); | |||
| Console.WriteLine("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>"); | |||
| /* Instanciate a caca canvas */ | |||
| DemoCanvas cv = new DemoCanvas(); | |||
| /* We have a proper canvas, let's display it using Caca */ | |||
| DemoDisplay 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)); | |||
| dp.EventLoop(); | |||
| } | |||
| } | |||