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: test.cs 2867 2008-10-05 00:56:17Z sam $ |
---|
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 | |
---|