249 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			5.1 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
 | |
| 
 | |
| 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
 | |
| 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                []int = [1, 2, 3, 4, 6, 7, 8, 9, 11, 13, 14, 15, 19]
 | |
| }
 | |
| 
 | |
| [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)
 | |
| 	}
 | |
| }
 |