Skip to content

Commit

Permalink
console.lua: add scale_with_window script-opt
Browse files Browse the repository at this point in the history
If this is set to yes or auto and --osd-scale-by-window is true, console
scales with the window height like everything else in mpv.

Defaults to auto.
  • Loading branch information
guidocella authored and kasper93 committed Oct 27, 2024
1 parent fbf8695 commit e00d8dc
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 13 deletions.
1 change: 1 addition & 0 deletions DOCS/interface-changes/console-scale-with-window.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add `console-scale_with_window` script-opt
6 changes: 6 additions & 0 deletions DOCS/man/console.rst
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,12 @@ Configurable Options

Set the font border size used for the REPL and the console.

``scale_with_window``
Default: ``auto``

Whether to scale the console with the window height. Can be ``yes``, ``no``,
or ``auto``, which follows the value of ``--osd-scale-by-window``.

``case_sensitive``
Default: no on Windows, yes on other platforms.

Expand Down
47 changes: 34 additions & 13 deletions player/lua/console.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ local opts = {
font = "",
font_size = 16,
border_size = 1,
scale_with_window = "auto",
case_sensitive = true,
history_dedup = true,
font_hw_ratio = 'auto',
Expand Down Expand Up @@ -230,6 +231,30 @@ local function ass_escape(str)
return mp.command_native({'escape-ass', str})
end

local function should_scale()
return opts.scale_with_window == "yes" or
(opts.scale_with_window == "auto" and mp.get_property_native("osd-scale-by-window"))
end

local function get_scaled_osd_dimensions()
local w, h, aspect = mp.get_osd_size()

if w == 0 then
return 0, 0
end

if should_scale() then
h = 720
w = 720 * aspect
end

local scale = mp.get_property_native('display-hidpi-scale')
w = w / scale
h = h / scale

return w, h
end

local function calculate_max_log_lines()
if not mp.get_property_native('vo-configured')
or not mp.get_property_native('video-osd') then
Expand All @@ -239,8 +264,7 @@ local function calculate_max_log_lines()
select(2, mp.get_property('term-status-msg'):gsub('\\n', ''))
end

return math.floor(mp.get_property_native('osd-height')
/ mp.get_property_native('display-hidpi-scale', 1)
return math.floor(select(2, get_scaled_osd_dimensions())
* (1 - global_margins.t - global_margins.b)
/ opts.font_size
-- Subtract 1 for the input line and 1 for the newline
Expand Down Expand Up @@ -476,10 +500,7 @@ local function update()
return
end

local screenx, screeny = mp.get_osd_size()
local dpi_scale = mp.get_property_native('display-hidpi-scale', 1)
screenx = screenx / dpi_scale
screeny = screeny / dpi_scale
local screenx, screeny = get_scaled_osd_dimensions()

local bottom_left_margin = 6

Expand Down Expand Up @@ -784,16 +805,16 @@ local function handle_enter()
end

local function determine_hovered_item()
local height = mp.get_property_native('osd-height')
if height == 0 then
return
local height = select(2, get_scaled_osd_dimensions())
local y = mp.get_property_native('mouse-pos').y
if should_scale() then
y = y * 720 / mp.get_property_native('osd-height')
end

local y = mp.get_property_native('mouse-pos').y - global_margins.t * height
y = y - global_margins.t * height
-- Calculate how many lines could be printed without decreasing them for
-- the input line and OSC.
local max_lines = height / mp.get_property_native('display-hidpi-scale')
/ opts.font_size
local max_lines = height / mp.get_property_native('display-hidpi-scale', 1)
/ opts.font_size
local clicked_line = math.floor(y / height * max_lines + .5)

local offset = first_match_to_print - 1
Expand Down

0 comments on commit e00d8dc

Please sign in to comment.