pipe indicator graphics element

This commit is contained in:
Mikayla Fischler 2022-06-26 16:36:21 -04:00
parent f32cdf5563
commit 01caf3d914

View File

@ -0,0 +1,110 @@
-- Pipe Graphics Element
local util = require("scada-common.util")
local element = require("graphics.element")
---@class pipe_args
---@field parent graphics_element
---@field x? integer 1 if omitted
---@field y? integer 1 if omitted
---@field end_x integer end of pipe
---@field end_y integer end of pipe
---@field thin boolean true for 1 subpixels, false (default) for 2
---@field align_tr? boolean false to align bottom left (default), true to align top right
---@field fg_bg? cpair foreground/background colors
-- new pipe
---@param args pipe_args
local function pipe(args)
assert(util.is_int(args.end_x), "graphics.elements.indicators.pipe: end_x is a required field")
assert(util.is_int(args.end_y), "graphics.elements.indicators.pipe: end_y is a required field")
args.x = args.x or 1
args.y = args.y or 1
args.width = args.end_x - args.x
args.height = args.end_y - args.y
-- create new graphics element base object
local e = element.new(args)
-- draw pipe
local align_tr = args.align_tr or false
local x = 1
local y = 1
if align_tr then
-- cross width then height
for i = 1, args.width do
if args.thin then
if i == args.width then
-- corner
e.window.blit("\x93", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
else
e.window.blit("\x8c", e.fg_bg.blit_fgd, e.fg_bg.blit_bkg)
end
else
if i == args.width then
-- corner
e.window.blit(" ", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
else
e.window.blit("\x8f", e.fg_bg.blit_fgd, e.fg_bg.blit_bkg)
end
end
x = x + 1
e.window.setCursorPos(x, y)
end
-- back up one
x = x - 1
for _ = 1, args.height do
y = y + 1
e.window.setCursorPos(x, y)
if args.thin then
e.window.blit("\x95", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
else
e.window.blit(" ", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
end
end
else
-- cross height then width
for i = 1, args.height do
if args.thin then
if i == args.height then
-- corner
e.window.blit("\x8d", e.fg_bg.blit_fgd, e.fg_bg.blit_bkg)
else
e.window.blit("\x95", e.fg_bg.blit_fgd, e.fg_bg.blit_bkg)
end
else
e.window.blit(" ", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
end
y = y + 1
e.window.setCursorPos(x, y)
end
-- back up one
y = y - 1
for _ = 1, args.width do
x = x + 1
e.window.setCursorPos(x, y)
if args.thin then
e.window.blit("\x8c", e.fg_bg.blit_fgd, e.fg_bg.blit_bkg)
else
e.window.blit("\x83", e.fg_bg.blit_bkg, e.fg_bg.blit_fgd)
end
end
end
return e.get()
end
return pipe