summaryrefslogtreecommitdiffstats
path: root/mpvcore
diff options
context:
space:
mode:
authorChrisK2 <spam@kalania.de>2013-10-26 05:01:33 +0200
committerChrisK2 <spam@kalania.de>2013-10-26 05:01:33 +0200
commitc54335e7df0f407913a50c33ef0e745c9eb7a464 (patch)
treec1d6558abed02614276238532b9b4896c3f5add1 /mpvcore
parent3a181bac1ff0a84a9b09eb21093500210458f110 (diff)
downloadmpv-c54335e7df0f407913a50c33ef0e745c9eb7a464.tar.bz2
mpv-c54335e7df0f407913a50c33ef0e745c9eb7a464.tar.xz
osc: add experimental seekbar tooltip
Not up to my quality standards (need ASS boundingboxes), so disabled by default and undocumented for now. Can be enabled with seektooltip=yes in plugin_osc.conf
Diffstat (limited to 'mpvcore')
-rw-r--r--mpvcore/lua/osc.lua52
1 files changed, 46 insertions, 6 deletions
diff --git a/mpvcore/lua/osc.lua b/mpvcore/lua/osc.lua
index 4a3729c018..ce918a539b 100644
--- a/mpvcore/lua/osc.lua
+++ b/mpvcore/lua/osc.lua
@@ -23,6 +23,7 @@ local user_opts = {
fadeduration = 200, -- duration of fade out in ms, 0 = no fade
deadzonesize = 0, -- size of deadzone
minmousemove = 3, -- minimum amount of pixels the mouse has to move between ticks to make the OSC show up
+ seektooltip = false, -- display tooltip over the seekbar indicating time at mouse position
iamaprogrammer = false, -- use native mpv values and disable OSC internal playlist management (and some functions that depend on it)
}
@@ -391,6 +392,8 @@ function register_element(type, x, y, an, w, h, style, content, eventresponder,
hitbox = hitbox,
w = w,
h = h,
+ x = x,
+ y = y,
content = content,
eventresponder = eventresponder,
metainfo = metainfo,
@@ -537,17 +540,13 @@ function render_elements(master_ass)
if element.type == "slider" then
elem_ass:merge(element.content) -- ASS objects
- -- draw pos marker
+ -- draw pos marker
local pos = element.metainfo.slider.posF()
if not (pos == nil) then
- if pos > element.metainfo.slider.max then
- pos = element.metainfo.slider.max
- elseif pos < element.metainfo.slider.min then
- pos = element.metainfo.slider.min
- end
+ pos = limit_range(element.metainfo.slider.min, element.metainfo.slider.max, pos)
local fill_offsetV = element.metainfo.slider.border + element.metainfo.slider.gap
local fill_offsetH = element.h/2
@@ -571,6 +570,32 @@ function render_elements(master_ass)
elem_ass:draw_stop()
+ -- add tooltip
+ if not (element.metainfo.slider.tooltipF == nil) then
+
+ if mouse_hit(element) then
+ local sliderpos = get_slider_value(element)
+ local tooltiplabel = element.metainfo.slider.tooltipF(sliderpos)
+ local s_min, s_max = element.metainfo.slider.min, element.metainfo.slider.max
+
+ local an = 2
+ if (sliderpos < (s_min + 10)) then
+ an = 1
+ elseif (sliderpos > (s_max - 10)) then
+ an = 3
+ end
+
+ elem_ass:new_event()
+ elem_ass:pos(mp.get_mouse_pos(), element.y - (element.h) - 0) -- positioning
+ elem_ass:an(an)
+ elem_ass:append(osc_styles.vidtitle) -- styling
+ elem_ass:append(tooltiplabel)
+
+ end
+ end
+
+
+
elseif element.type == "box" then
elem_ass:merge(element.content) -- ASS objects
elseif type(element.content) == "function" then
@@ -914,13 +939,28 @@ function osc_init()
end
end
+ local tooltipF = function (pos)
+ if not (mp.property_get("length") == nil) then
+ duration = tonumber(mp.property_get("length"))
+ possec = duration * (pos / 100)
+ return mp.format_time(possec)
+ else
+ return nil
+ end
+ end
+
local metainfo = {}
+
+
metainfo.enabled = (not (mp.property_get("length") == nil)) and (tonumber(mp.property_get("length")) > 0)
metainfo.styledown = false
metainfo.slider = {}
metainfo.slider.border = 1
metainfo.slider.gap = 1 -- >1 will draw triangle markers
metainfo.slider.type = "slider" -- "bar" for old bar-style filling
+ if (user_opts.seektooltip) then
+ metainfo.slider.tooltipF = tooltipF
+ end
local eventresponder = {}
local sliderF = function (element)