diff options
Diffstat (limited to 'player/lua/console.lua')
-rw-r--r-- | player/lua/console.lua | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/player/lua/console.lua b/player/lua/console.lua index f9397e06f5..3377380e8d 100644 --- a/player/lua/console.lua +++ b/player/lua/console.lua @@ -64,7 +64,8 @@ local history = {} local history_pos = 1 local log_buffer = {} local key_bindings = {} -local global_margin_y = 0 +local global_margin_top = 0 +local global_margin_bottom = 0 local update_timer = nil update_timer = mp.add_periodic_timer(0.05, function() @@ -84,9 +85,11 @@ utils.shared_script_property_observe("osc-margins", function(_, val) for v in string.gmatch(val, "[^,]+") do vals[#vals + 1] = tonumber(v) end - global_margin_y = vals[4] -- bottom + global_margin_top = vals[3] -- top + global_margin_bottom = vals[4] -- bottom else - global_margin_y = 0 + global_margin_top = 0 + global_margin_bottom = 0 end update() end) @@ -143,12 +146,16 @@ function update() return end + local coordinate_top = math.floor(global_margin_top * screeny + 0.5) + local clipping_coordinates = '0,' .. coordinate_top .. ',' .. + screenx .. ',' .. screeny local ass = assdraw.ass_new() local style = '{\\r' .. '\\1a&H00&\\3a&H00&\\4a&H99&' .. '\\1c&Heeeeee&\\3c&H111111&\\4c&H000000&' .. '\\fn' .. opts.font .. '\\fs' .. opts.font_size .. - '\\bord1\\xshad0\\yshad1\\fsp0\\q1}' + '\\bord1\\xshad0\\yshad1\\fsp0\\q1' .. + '\\clip(' .. clipping_coordinates .. ')}' -- Create the cursor glyph as an ASS drawing. ASS will draw the cursor -- inline with the surrounding text, but it sets the advance to the width -- of the drawing. So the cursor doesn't affect layout too much, make it as @@ -168,7 +175,10 @@ function update() -- messages. local log_ass = '' local log_messages = #log_buffer - local log_max_lines = math.ceil(screeny / opts.font_size) + local screeny_factor = (1 - global_margin_top - global_margin_bottom) + -- subtract 1.5 to account for the input line + local log_max_lines = screeny * screeny_factor / opts.font_size - 1.5 + log_max_lines = math.ceil(log_max_lines) if log_max_lines < log_messages then log_messages = log_max_lines end @@ -178,7 +188,7 @@ function update() ass:new_event() ass:an(1) - ass:pos(2, screeny - 2 - global_margin_y * screeny) + ass:pos(2, screeny - 2 - global_margin_bottom * screeny) ass:append(log_ass .. '\\N') ass:append(style .. '> ' .. before_cur) ass:append(cglyph) @@ -188,7 +198,7 @@ function update() -- cursor appear in front of the text. ass:new_event() ass:an(1) - ass:pos(2, screeny - 2 - global_margin_y * screeny) + ass:pos(2, screeny - 2 - global_margin_bottom * screeny) ass:append(style .. '{\\alpha&HFF&}> ' .. before_cur) ass:append(cglyph) ass:append(style .. '{\\alpha&HFF&}' .. after_cur) |