aboutsummaryrefslogtreecommitdiff
path: root/demo/fullcolor/fullcolor.ha
blob: 5d46c7c6fc8900d6fd04306cfa18d9cf44e90361 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use fmt;
use tb = termbox2;

fn paint_cell(x: size, y: size, c: tb::uattr) void =
	tb::set_cell(x: int, y: int, ' ', tb::COLOR.DEFAULT, c)!;

fn show_colors(wmin: size, hmin: size, wmax: size, hmax: size) void = {
	tb::set_output_mode(tb::OUTPUT.TRUECOLOR)!;
	tb::print(wmin: int, hmin: int, tb::COLOR.DEFAULT, tb::COLOR.DEFAULT,
		"Color palette sample:")!;
	hmin = hmin + 1;

	let nsamples = (wmax - wmin +1) * (hmax - hmin + 1);
	let step = 0xffffff / nsamples;
	for (let y = hmin; y < hmax; y += 1) {
		for (let x = wmin; x < wmax; x += 1) {
			let c: tb::uattr = ((y - hmin) * wmax + (x - wmin)) * step;
			paint_cell(x, y, c);
		};
	};
};

export fn main() int = {
	let e = tb::init();
	if (e is tb::err)
		fmt::fatalf(tb::strerror(e as tb::err));
	defer tb::shutdown()!;

	let w = tb::width()!;
	let h = tb::height()!;
	tb::print(0, (h - 1): int, tb::COLOR.DEFAULT, tb::COLOR.DEFAULT,
		"Press any key to exit")!;

	switch (tb::OPT_ATTR_W) {
	case 64 => show_colors(0, 0, w, h-1);
	case => tb::print(0, ((h+1)/2): int, tb::COLOR.DEFAULT, tb::COLOR.DEFAULT,
		"This demo is only available with truecolor support, here "
		"tb::OPT_ATTR_W is {}", tb::OPT_ATTR_W)!;
	};

	for (true) {
		let e = tb::present();
		if (e is tb::err)
			fmt::fatalf(tb::strerror(e as tb::err));
		match (tb::poll_event()) {
		case let e: tb::err => {
			if (e == tb::ERR.NO_EVENT)
				continue
			else
				tb::print(0, h:int -1,
					tb::COLOR.DEFAULT, tb::COLOR.DEFAULT,
					"Unexpected error {}!", tb::strerror(e))!;
		};
		case tb::key_event => break;
		case (tb::mouse_event | tb::resize_event) => continue;
		};
	};
	return 0;
};

Generated with cgit - Back to sebastiano.tronto.net