mirror of
https://github.com/mpv-player/mpv
synced 2024-12-29 02:22:19 +00:00
7a76b577d8
This is more or less a minimal hack to make _some_ text measurement functionality available to scripts. Since libass does not support such a thing, this simply uses the bounding box of the rendered text. This is far from ideal. Problems include: - using a bitmap bounding box - additional memory waste and/or flushing caches - dependency on window size - odd small deviations with different window sizes (run osd-test.lua and resize the window after each timer update; the bounding boxes aren't adjusted in an overly useful way) - inability to query the size _after_ actual rendering But I guess it's a start. Since I'm aware that it's crap, add a threat to the manpage that this may be changed/removed again. For now, I'm interested whether anyone will have use for it in its current form, as it's an often requested feature.
36 lines
1.0 KiB
Lua
36 lines
1.0 KiB
Lua
local assdraw = require 'mp.assdraw'
|
|
local utils = require 'mp.utils'
|
|
|
|
things = {}
|
|
for i = 1, 2 do
|
|
things[i] = {
|
|
osd1 = mp.create_osd_overlay("ass-events"),
|
|
osd2 = mp.create_osd_overlay("ass-events")
|
|
}
|
|
end
|
|
things[1].text = "{\\an5}hello\\Nworld"
|
|
things[2].text = "{\\pos(400, 200)}something something"
|
|
|
|
mp.add_periodic_timer(2, function()
|
|
for i, thing in ipairs(things) do
|
|
thing.osd1.data = thing.text
|
|
thing.osd1.compute_bounds = true
|
|
--thing.osd1.hidden = true
|
|
local res = thing.osd1:update()
|
|
print("res " .. i .. ": " .. utils.to_string(res))
|
|
|
|
thing.osd2.hidden = true
|
|
if res ~= nil and res.x0 ~= nil then
|
|
local draw = assdraw.ass_new()
|
|
draw:append("{\\alpha&H80}")
|
|
draw:draw_start()
|
|
draw:pos(0, 0)
|
|
draw:rect_cw(res.x0, res.y0, res.x1, res.y1)
|
|
draw:draw_stop()
|
|
thing.osd2.hidden = false
|
|
thing.osd2.data = draw.text
|
|
end
|
|
thing.osd2:update()
|
|
end
|
|
end)
|