| 1 | /* |
|---|
| 2 | * Test .NET bindings test program |
|---|
| 3 | * Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org> |
|---|
| 4 | * 2007 Sam Hocevar <sam@zoy.org> |
|---|
| 5 | * All Rights Reserved |
|---|
| 6 | * |
|---|
| 7 | * $Id$ |
|---|
| 8 | * |
|---|
| 9 | * This program is free software. It comes without any warranty, to |
|---|
| 10 | * the extent permitted by applicable law. You can redistribute it |
|---|
| 11 | * and/or modify it under the terms of the Do What The Fuck You Want |
|---|
| 12 | * To Public License, Version 2, as published by Sam Hocevar. See |
|---|
| 13 | * http://sam.zoy.org/wtfpl/COPYING for more details. |
|---|
| 14 | */ |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | using System; |
|---|
| 18 | using System.Drawing; |
|---|
| 19 | using System.Runtime.InteropServices; |
|---|
| 20 | |
|---|
| 21 | using Caca; |
|---|
| 22 | |
|---|
| 23 | class DemoCanvas : Canvas |
|---|
| 24 | { |
|---|
| 25 | private uint[,] image; |
|---|
| 26 | |
|---|
| 27 | private DateTime startTime; |
|---|
| 28 | private Dither d; |
|---|
| 29 | private Canvas scroll; |
|---|
| 30 | |
|---|
| 31 | public DemoCanvas() |
|---|
| 32 | { |
|---|
| 33 | startTime = DateTime.Now; |
|---|
| 34 | |
|---|
| 35 | string message = " --- POWERED BY LIBCACA --- OLDSCHOOL TEXT EFFECTS ARE 100% PURE WIN"; |
|---|
| 36 | |
|---|
| 37 | scroll = new Canvas(new Size(message.Length, 1)); |
|---|
| 38 | scroll.setColorAnsi(AnsiColor.WHITE, AnsiColor.TRANSPARENT); |
|---|
| 39 | scroll.putStr(new Point(0, 0), message); |
|---|
| 40 | |
|---|
| 41 | Caca.Font f = new Caca.Font(Caca.Font.getList()[1]); |
|---|
| 42 | int w = f.Size.Width * message.Length; |
|---|
| 43 | int h = f.Size.Height; |
|---|
| 44 | image = new uint[w, h]; |
|---|
| 45 | d = new Dither(32, new Size(w, h), w * 4, |
|---|
| 46 | 0xff00, 0xff0000, 0xff000000, 0xff); |
|---|
| 47 | f.Render(scroll, image, image.GetLength(0) * 4); |
|---|
| 48 | } |
|---|
| 49 | |
|---|
| 50 | public void Draw() |
|---|
| 51 | { |
|---|
| 52 | int barCount = 6; |
|---|
| 53 | double t = (DateTime.Now - startTime).TotalMilliseconds; |
|---|
| 54 | |
|---|
| 55 | Clear(); |
|---|
| 56 | |
|---|
| 57 | setColorAnsi(AnsiColor.WHITE, AnsiColor.BLACK); |
|---|
| 58 | for(int i = 0; i < barCount; i++) |
|---|
| 59 | { |
|---|
| 60 | double v = ((Math.Sin((t / 500.0) |
|---|
| 61 | + (i / ((double)barCount))) + 1) / 2) * Size.Height; |
|---|
| 62 | Point p1 = new Point(0, (int)v); |
|---|
| 63 | Point p2 = new Point(Size.Width - 1, (int)v); |
|---|
| 64 | |
|---|
| 65 | setColorAnsi((uint)(i + 9), AnsiColor.BLACK); |
|---|
| 66 | /* drawLine is already clipped, we don't care about overflows */ |
|---|
| 67 | drawLine(p1 + new Size(0, -2), p2 + new Size(0, -2), '-'); |
|---|
| 68 | drawLine(p1 + new Size(0, -1), p2 + new Size(0, -1), '*'); |
|---|
| 69 | drawLine(p1, p2, '#'); |
|---|
| 70 | drawLine(p1 + new Size(0, 1), p2 + new Size(0, 1), '*'); |
|---|
| 71 | drawLine(p1 + new Size(0, 2), p2 + new Size(0, 2), '-'); |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | int w = Size.Width; |
|---|
| 75 | int h = Size.Height; |
|---|
| 76 | int x = (int)(t / 10) % (12 * w); |
|---|
| 77 | int y = (int)(h * (2.0 + Math.Sin(t / 200.0)) / 4); |
|---|
| 78 | ditherBitmap(new Rectangle(- x, h / 2 - y, w * 12, y * 2), d, image); |
|---|
| 79 | ditherBitmap(new Rectangle(12 * w - x, h / 2 - y, w * 12, y * 2), d, image); |
|---|
| 80 | |
|---|
| 81 | setColorAnsi(AnsiColor.WHITE, AnsiColor.BLUE); |
|---|
| 82 | putStr(new Point(-30, -2) + Size, " -=[ Powered by libcaca ]=- "); |
|---|
| 83 | setColorAnsi(AnsiColor.WHITE, AnsiColor.BLACK); |
|---|
| 84 | } |
|---|
| 85 | } |
|---|
| 86 | |
|---|
| 87 | class DemoDisplay : Display |
|---|
| 88 | { |
|---|
| 89 | private DemoCanvas cv; |
|---|
| 90 | |
|---|
| 91 | public DemoDisplay(DemoCanvas _cv) : base(_cv) |
|---|
| 92 | { |
|---|
| 93 | Title = "libcaca .NET Bindings test suite"; |
|---|
| 94 | DisplayTime = 20000; // Refresh every 20 ms |
|---|
| 95 | cv = _cv; |
|---|
| 96 | } |
|---|
| 97 | |
|---|
| 98 | public void EventLoop() |
|---|
| 99 | { |
|---|
| 100 | Event ev; |
|---|
| 101 | |
|---|
| 102 | while((ev = getEvent(EventType.KEY_RELEASE, 10)).Type == 0) |
|---|
| 103 | { |
|---|
| 104 | cv.Draw(); |
|---|
| 105 | |
|---|
| 106 | Refresh(); |
|---|
| 107 | } |
|---|
| 108 | |
|---|
| 109 | if(ev.KeyCh > 0x20 && ev.KeyCh < 0x7f) |
|---|
| 110 | Console.WriteLine("Key pressed: {0}", ev.KeyUtf8); |
|---|
| 111 | else |
|---|
| 112 | Console.WriteLine("Key pressed: 0x{0:x}", ev.KeyCh); |
|---|
| 113 | } |
|---|
| 114 | } |
|---|
| 115 | |
|---|
| 116 | class Test |
|---|
| 117 | { |
|---|
| 118 | public static void Main() |
|---|
| 119 | { |
|---|
| 120 | Console.WriteLine("libcaca {0} .NET test", Libcaca.getVersion()); |
|---|
| 121 | Console.WriteLine("(c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>"); |
|---|
| 122 | |
|---|
| 123 | /* Instanciate a caca canvas */ |
|---|
| 124 | DemoCanvas cv = new DemoCanvas(); |
|---|
| 125 | |
|---|
| 126 | /* We have a proper canvas, let's display it using Caca */ |
|---|
| 127 | DemoDisplay dp = new DemoDisplay(cv); |
|---|
| 128 | |
|---|
| 129 | /* Random number. This is a static method, |
|---|
| 130 | not to be used with previous instance */ |
|---|
| 131 | Console.WriteLine("A random number: {0}", Libcaca.Rand(0, 1337)); |
|---|
| 132 | |
|---|
| 133 | dp.EventLoop(); |
|---|
| 134 | } |
|---|
| 135 | } |
|---|
| 136 | |
|---|