From 8ad80cbfa7d1d82f724bf5cb68ab5baec33c0d19 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Wed, 13 May 2026 18:39:46 +0200 Subject: [PATCH] fixes --- lib/bbs/frame_buffer.rb | 9 ++++++--- lib/bbs/window.rb | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/bbs/frame_buffer.rb b/lib/bbs/frame_buffer.rb index 4d517df..5b753ad 100644 --- a/lib/bbs/frame_buffer.rb +++ b/lib/bbs/frame_buffer.rb @@ -106,7 +106,7 @@ module BBS double: { tl: '╔', tr: '╗', bl: '╚', br: '╝', h: '═', v: '║' }, }.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 g = BOX_CHARS[style] || BOX_CHARS[:single] iw = width - 2 @@ -114,11 +114,14 @@ module BBS move(x, y) write(g[:tl], sgr: sgr) 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]} " write(prefix, 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 else write(g[:h] * iw, sgr: sgr) diff --git a/lib/bbs/window.rb b/lib/bbs/window.rb index fb8a631..efbe3e3 100644 --- a/lib/bbs/window.rb +++ b/lib/bbs/window.rb @@ -34,14 +34,16 @@ module BBS frame.shadow(x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height, sgr: style(:window_shadow)) end + show_close = @on_close != false && bounds.width >= 6 frame.box( x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height, sgr: style(:window_border), fill_sgr: style(:window_bg), 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 "[■]" - if @on_close != false && bounds.width >= 6 + if show_close frame.move(bounds.x + 2, bounds.y) frame.write('[■]', sgr: style(:window_title)) end