This commit is contained in:
2026-05-13 18:39:46 +02:00
parent 11c26a5b63
commit 8ad80cbfa7
2 changed files with 10 additions and 5 deletions

View File

@@ -106,7 +106,7 @@ module BBS
double: { tl: '╔', tr: '╗', bl: '╚', br: '╝', h: '═', v: '║' }, double: { tl: '╔', tr: '╗', bl: '╚', br: '╝', h: '═', v: '║' },
}.freeze }.freeze
def box(x:, y:, width:, height:, sgr: nil, fill_sgr: nil, style: :single, title: nil, title_sgr: nil) def box(x:, y:, width:, height:, sgr: nil, fill_sgr: nil, style: :single, title: nil, title_sgr: nil, title_indent: 0)
return if width < 2 || height < 2 return if width < 2 || height < 2
g = BOX_CHARS[style] || BOX_CHARS[:single] g = BOX_CHARS[style] || BOX_CHARS[:single]
iw = width - 2 iw = width - 2
@@ -114,11 +114,14 @@ module BBS
move(x, y) move(x, y)
write(g[:tl], sgr: sgr) write(g[:tl], sgr: sgr)
if title && title.length > 0 if title && title.length > 0
clipped = title[0, [iw - 2, 0].max] indent = [title_indent, 0].max
title_max = [iw - 2 - indent, 0].max
clipped = title[0, title_max]
write(g[:h] * indent, sgr: sgr) if indent > 0
prefix = "#{g[:h]} " prefix = "#{g[:h]} "
write(prefix, sgr: sgr) write(prefix, sgr: sgr)
write(clipped, sgr: title_sgr || sgr) write(clipped, sgr: title_sgr || sgr)
rest = iw - prefix.length - clipped.length rest = iw - indent - prefix.length - clipped.length
write(g[:h] * [rest, 0].max, sgr: sgr) if rest > 0 write(g[:h] * [rest, 0].max, sgr: sgr) if rest > 0
else else
write(g[:h] * iw, sgr: sgr) write(g[:h] * iw, sgr: sgr)

View File

@@ -34,14 +34,16 @@ module BBS
frame.shadow(x: bounds.x, y: bounds.y, width: bounds.width, frame.shadow(x: bounds.x, y: bounds.y, width: bounds.width,
height: bounds.height, sgr: style(:window_shadow)) height: bounds.height, sgr: style(:window_shadow))
end end
show_close = @on_close != false && bounds.width >= 6
frame.box( frame.box(
x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height, x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height,
sgr: style(:window_border), fill_sgr: style(:window_bg), sgr: style(:window_border), fill_sgr: style(:window_bg),
style: :double, title: @title, style: :double, title: @title,
title_sgr: focused ? style(:window_title_focused) : style(:window_title) title_sgr: focused ? style(:window_title_focused) : style(:window_title),
title_indent: show_close ? 4 : 0
) )
# Close gadget — Turbo Vision style "[■]" # Close gadget — Turbo Vision style "[■]"
if @on_close != false && bounds.width >= 6 if show_close
frame.move(bounds.x + 2, bounds.y) frame.move(bounds.x + 2, bounds.y)
frame.write('[■]', sgr: style(:window_title)) frame.write('[■]', sgr: style(:window_title))
end end