241 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			V
		
	
	
// Copyright (c) 2020-2021 Raúl Hernández. All rights reserved.
 | 
						|
// Use of this source code is governed by an MIT license
 | 
						|
// that can be found in the LICENSE file.
 | 
						|
module ui
 | 
						|
 | 
						|
import os
 | 
						|
 | 
						|
pub enum KeyCode {
 | 
						|
	null = 0
 | 
						|
	tab = 9
 | 
						|
	enter = 10
 | 
						|
	escape = 27
 | 
						|
	space = 32
 | 
						|
	backspace = 127
 | 
						|
	exclamation = 33
 | 
						|
	double_quote = 34
 | 
						|
	hashtag = 35
 | 
						|
	dollar = 36
 | 
						|
	percent = 37
 | 
						|
	ampersand = 38
 | 
						|
	single_quote = 39
 | 
						|
	left_paren = 40
 | 
						|
	right_paren = 41
 | 
						|
	asterisk = 42
 | 
						|
	plus = 43
 | 
						|
	comma = 44
 | 
						|
	minus = 45
 | 
						|
	period = 46
 | 
						|
	slash = 47
 | 
						|
	_0 = 48
 | 
						|
	_1 = 49
 | 
						|
	_2 = 50
 | 
						|
	_3 = 51
 | 
						|
	_4 = 52
 | 
						|
	_5 = 53
 | 
						|
	_6 = 54
 | 
						|
	_7 = 55
 | 
						|
	_8 = 56
 | 
						|
	_9 = 57
 | 
						|
	colon = 58
 | 
						|
	semicolon = 59
 | 
						|
	less_than = 60
 | 
						|
	equal = 61
 | 
						|
	greater_than = 62
 | 
						|
	question_mark = 63
 | 
						|
	at = 64
 | 
						|
	a = 97
 | 
						|
	b = 98
 | 
						|
	c = 99
 | 
						|
	d = 100
 | 
						|
	e = 101
 | 
						|
	f = 102
 | 
						|
	g = 103
 | 
						|
	h = 104
 | 
						|
	i = 105
 | 
						|
	j = 106
 | 
						|
	k = 107
 | 
						|
	l = 108
 | 
						|
	m = 109
 | 
						|
	n = 110
 | 
						|
	o = 111
 | 
						|
	p = 112
 | 
						|
	q = 113
 | 
						|
	r = 114
 | 
						|
	s = 115
 | 
						|
	t = 116
 | 
						|
	u = 117
 | 
						|
	v = 118
 | 
						|
	w = 119
 | 
						|
	x = 120
 | 
						|
	y = 121
 | 
						|
	z = 122
 | 
						|
	left_square_bracket = 91
 | 
						|
	backslash = 92
 | 
						|
	right_square_bracket = 93
 | 
						|
	caret = 94
 | 
						|
	underscore = 95
 | 
						|
	backtick = 96
 | 
						|
	left_curly_bracket = 123
 | 
						|
	vertical_bar = 124
 | 
						|
	right_curly_bracket = 125
 | 
						|
	tilde = 126
 | 
						|
	insert = 260
 | 
						|
	delete = 261
 | 
						|
	up = 262
 | 
						|
	down = 263
 | 
						|
	right = 264
 | 
						|
	left = 265
 | 
						|
	page_up = 266
 | 
						|
	page_down = 267
 | 
						|
	home = 268
 | 
						|
	end = 269
 | 
						|
	f1 = 290
 | 
						|
	f2 = 291
 | 
						|
	f3 = 292
 | 
						|
	f4 = 293
 | 
						|
	f5 = 294
 | 
						|
	f6 = 295
 | 
						|
	f7 = 296
 | 
						|
	f8 = 297
 | 
						|
	f9 = 298
 | 
						|
	f10 = 299
 | 
						|
	f11 = 300
 | 
						|
	f12 = 301
 | 
						|
	f13 = 302
 | 
						|
	f14 = 303
 | 
						|
	f15 = 304
 | 
						|
	f16 = 305
 | 
						|
	f17 = 306
 | 
						|
	f18 = 307
 | 
						|
	f19 = 308
 | 
						|
	f20 = 309
 | 
						|
	f21 = 310
 | 
						|
	f22 = 311
 | 
						|
	f23 = 312
 | 
						|
	f24 = 313
 | 
						|
}
 | 
						|
 | 
						|
pub enum Direction {
 | 
						|
	unknown
 | 
						|
	up
 | 
						|
	down
 | 
						|
	left
 | 
						|
	right
 | 
						|
}
 | 
						|
 | 
						|
pub enum MouseButton {
 | 
						|
	unknown
 | 
						|
	left
 | 
						|
	middle
 | 
						|
	right
 | 
						|
}
 | 
						|
 | 
						|
pub enum EventType {
 | 
						|
	unknown
 | 
						|
	mouse_down
 | 
						|
	mouse_up
 | 
						|
	mouse_move
 | 
						|
	mouse_drag
 | 
						|
	mouse_scroll
 | 
						|
	key_down
 | 
						|
	resized
 | 
						|
}
 | 
						|
 | 
						|
[flag]
 | 
						|
pub enum Modifiers {
 | 
						|
	ctrl
 | 
						|
	shift
 | 
						|
	alt
 | 
						|
}
 | 
						|
 | 
						|
pub struct Event {
 | 
						|
pub:
 | 
						|
	typ EventType
 | 
						|
	// Mouse event info
 | 
						|
	x         int
 | 
						|
	y         int
 | 
						|
	button    MouseButton
 | 
						|
	direction Direction
 | 
						|
	// Keyboard event info
 | 
						|
	code      KeyCode
 | 
						|
	modifiers Modifiers
 | 
						|
	ascii     byte
 | 
						|
	utf8      string
 | 
						|
	// Resized event info
 | 
						|
	width  int
 | 
						|
	height int
 | 
						|
}
 | 
						|
 | 
						|
pub struct Context {
 | 
						|
	ExtraContext // contains fields specific to an implementation
 | 
						|
pub:
 | 
						|
	cfg Config // adsasdas
 | 
						|
mut:
 | 
						|
	print_buf  []byte
 | 
						|
	paused     bool
 | 
						|
	enable_su  bool
 | 
						|
	enable_rgb bool
 | 
						|
pub mut:
 | 
						|
	frame_count   u64
 | 
						|
	window_width  int
 | 
						|
	window_height int
 | 
						|
}
 | 
						|
 | 
						|
pub struct Config {
 | 
						|
	user_data  voidptr
 | 
						|
	init_fn    fn (voidptr)
 | 
						|
	frame_fn   fn (voidptr)
 | 
						|
	cleanup_fn fn (voidptr)
 | 
						|
	event_fn   fn (&Event, voidptr)
 | 
						|
	fail_fn    fn (string)
 | 
						|
 | 
						|
	buffer_size int = 256
 | 
						|
	frame_rate  int = 30
 | 
						|
	use_x11     bool
 | 
						|
 | 
						|
	window_title         string
 | 
						|
	hide_cursor          bool
 | 
						|
	capture_events       bool
 | 
						|
	use_alternate_buffer bool = true
 | 
						|
	skip_init_checks     bool
 | 
						|
	// All kill signals to set up exit listeners on:
 | 
						|
	reset []os.Signal = [.hup, .int, .quit, .ill, .abrt, .bus, .fpe, .kill, .segv, .pipe, .alrm, .term,
 | 
						|
	.stop]
 | 
						|
}
 | 
						|
 | 
						|
[inline]
 | 
						|
fn (ctx &Context) init() {
 | 
						|
	if ctx.cfg.init_fn != voidptr(0) {
 | 
						|
		ctx.cfg.init_fn(ctx.cfg.user_data)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
[inline]
 | 
						|
fn (ctx &Context) frame() {
 | 
						|
	if ctx.cfg.frame_fn != voidptr(0) {
 | 
						|
		ctx.cfg.frame_fn(ctx.cfg.user_data)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
[inline]
 | 
						|
fn (ctx &Context) cleanup() {
 | 
						|
	if ctx.cfg.cleanup_fn != voidptr(0) {
 | 
						|
		ctx.cfg.cleanup_fn(ctx.cfg.user_data)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
[inline]
 | 
						|
fn (ctx &Context) fail(error string) {
 | 
						|
	if ctx.cfg.fail_fn != voidptr(0) {
 | 
						|
		ctx.cfg.fail_fn(error)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
[inline]
 | 
						|
fn (ctx &Context) event(event &Event) {
 | 
						|
	if ctx.cfg.event_fn != voidptr(0) {
 | 
						|
		ctx.cfg.event_fn(event, ctx.cfg.user_data)
 | 
						|
	}
 | 
						|
}
 |