69 lines
1.8 KiB
Plaintext
69 lines
1.8 KiB
Plaintext
// lib_gui_box.ks contains functions to draw boxes in the terminal.
|
|
// Copyright © 2015,2019 KSLib team
|
|
// Lic. MIT
|
|
// This file is based on lib_window.ks from akrOS by akrasuski1.
|
|
|
|
function draw_custom_gui_box {
|
|
parameter
|
|
x, y, w, h,
|
|
horizontal_char,
|
|
vertical_char,
|
|
corner_char.
|
|
|
|
// Start Input Sanitization
|
|
|
|
if x < 0 or x >= terminal:width {
|
|
set x to max(0,min(terminal:width - 1,x)).
|
|
HUDTEXT("Error: [draw_custom_gui_box] X value outside terminal.", 10, 2, 30, RED, FALSE).
|
|
}
|
|
|
|
if y < 0 or y >= (terminal:height - 1) {
|
|
set y to max(0,min(terminal:height - 2,y)).
|
|
HUDTEXT("Error: [draw_custom_gui_box] Y value outside terminal", 10, 2, 30, RED, FALSE).
|
|
}
|
|
|
|
if w < 1 or x + w > terminal:width {
|
|
set w to max(1,min(terminal:width - x,w)).
|
|
HUDTEXT("Error: [draw_custom_gui_box] W value outside terminal.", 10, 2, 30, RED, FALSE).
|
|
}
|
|
|
|
if h < 1 or y + h >= terminal:height {
|
|
set h to max(1,min(terminal:height - 1 - y,h)).
|
|
HUDTEXT("Error: [draw_custom_gui_box] H value outside terminal.", 10, 2, 30, RED, FALSE).
|
|
}
|
|
|
|
// End Input Sanitization
|
|
|
|
local horizontal_str is "".
|
|
local i is 1.
|
|
until i > w {
|
|
if i = 1 or i = w {
|
|
set horizontal_str to horizontal_str + corner_char.
|
|
} else {
|
|
set horizontal_str to horizontal_str + horizontal_char.
|
|
}
|
|
set i to i + 1.
|
|
}
|
|
print horizontal_str at(x, y).
|
|
print horizontal_str at(x, y + h - 1).
|
|
set i to 1.
|
|
until i >= h - 1 {
|
|
print vertical_char at(x , y + i).
|
|
print vertical_char at(x + w - 1, y + i).
|
|
set i to i + 1.
|
|
}
|
|
}
|
|
|
|
function draw_gui_box {
|
|
parameter
|
|
x, y, w, h.
|
|
draw_custom_gui_box(x, y, w, h, "-", "|", "+").
|
|
}
|
|
|
|
function draw_one_char_gui_box {
|
|
parameter
|
|
x, y, w, h,
|
|
border_char.
|
|
draw_custom_gui_box(x, y, w, h, border_char, border_char, border_char).
|
|
}
|