summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Janssen <medhefgo@web.de>2019-10-25 11:30:56 +0200
committerwm4 <1387750+wm4@users.noreply.github.com>2019-10-28 17:16:02 +0100
commit00c9a6c237e445469df8daeb455669e80b756749 (patch)
treef419b250cd57dc8c326e639b5a0b26778619c439
parent69f7251f32dd5136d2d6fc7350ec8b7082ccf805 (diff)
downloadmpv-00c9a6c237e445469df8daeb455669e80b756749.tar.bz2
mpv-00c9a6c237e445469df8daeb455669e80b756749.tar.xz
osc: Unify bottom and topbar code
Among the pointless duplication the right timecode label was given some extra space that wasn't needed. Fixes: #6904
-rw-r--r--DOCS/man/osc.rst4
-rw-r--r--player/lua/osc.lua210
2 files changed, 33 insertions, 181 deletions
diff --git a/DOCS/man/osc.rst b/DOCS/man/osc.rst
index d8a82a0ee7..d9c3b3fe96 100644
--- a/DOCS/man/osc.rst
+++ b/DOCS/man/osc.rst
@@ -330,8 +330,8 @@ Configurable Options
user has set them. (It will not overwrite them if all of them are set to
default values.)
- Currently, this is supported for the ``bottombar`` layout only. The other
- layouts do not change if this option is set.
+ Currently, this is supported for the ``bottombar`` and ``topbar`` layout
+ only. The other layouts do not change if this option is set.
The border is static and appears even if the OSC is configured to appear
only on mouse interaction. If the OSC is invisible, the border is simply
diff --git a/player/lua/osc.lua b/player/lua/osc.lua
index 6297aeb3b8..2d9e7be5a0 100644
--- a/player/lua/osc.lua
+++ b/player/lua/osc.lua
@@ -1252,11 +1252,13 @@ layouts["slimbox"] = function ()
end
-layouts["bottombar"] = function()
+function bar_layout(direction)
+ local y_offset = (direction < 0) and osc_param.playresy or 0
+
local osc_geo = {
x = -2,
- y = osc_param.playresy - 54 - user_opts.barmargin,
- an = 7,
+ y = y_offset + direction * (54 + user_opts.barmargin),
+ an = (direction < 0) and 7 or 1,
w = osc_param.playresx + 4,
h = 56,
}
@@ -1271,12 +1273,12 @@ layouts["bottombar"] = function()
if ((osc_param.display_aspect > 0) and (osc_param.playresx < minW)) then
osc_param.playresy = minW / osc_param.display_aspect
osc_param.playresx = osc_param.playresy * osc_param.display_aspect
- osc_geo.y = osc_param.playresy - 54 - user_opts.barmargin
+ osc_geo.y = y_offset + direction * (54 + user_opts.barmargin)
osc_geo.w = osc_param.playresx + 4
end
- local line1 = osc_geo.y + 9 + padY
- local line2 = osc_geo.y + 36 + padY
+ local line1 = osc_geo.y - direction * (9 + padY)
+ local line2 = osc_geo.y - direction * (36 + padY)
osc_param.areas = {}
@@ -1284,9 +1286,18 @@ layouts["bottombar"] = function()
osc_geo.w, osc_geo.h))
local sh_area_y0, sh_area_y1
- sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize),
- osc_geo.y - (osc_geo.h / 2), 0, 0)
- sh_area_y1 = osc_param.playresy - user_opts.barmargin
+ if direction > 0 then
+ -- deadzone below OSC
+ sh_area_y0 = user_opts.barmargin
+ sh_area_y1 = (osc_geo.y + (osc_geo.h / 2)) +
+ get_align(1 - (2*user_opts.deadzonesize),
+ osc_param.playresy - (osc_geo.y + (osc_geo.h / 2)), 0, 0)
+ else
+ -- deadzone above OSC
+ sh_area_y0 = get_align(-1 + (2*user_opts.deadzonesize),
+ osc_geo.y - (osc_geo.h / 2), 0, 0)
+ sh_area_y1 = osc_param.playresy - user_opts.barmargin
+ end
add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1)
local lo, geo
@@ -1413,7 +1424,7 @@ layouts["bottombar"] = function()
lo = add_layout("seekbar")
lo.geometry = geo
- lo.style = osc_styles.timecodes
+ lo.style = osc_styles.timecodesBar
lo.slider.border = 0
lo.slider.gap = 2
lo.slider.tooltip_style = osc_styles.timePosBar
@@ -1421,178 +1432,19 @@ layouts["bottombar"] = function()
lo.slider.stype = user_opts["seekbarstyle"]
lo.slider.rtype = user_opts["seekrangestyle"]
- osc_param.video_margins.b = osc_geo.h / osc_param.playresy
-end
-
-layouts["topbar"] = function()
- local osc_geo = {
- x = -2,
- y = 54 + user_opts.barmargin,
- an = 1,
- w = osc_param.playresx + 4,
- h = 56,
- }
-
- local padX = 9
- local padY = 3
- local buttonW = 27
- local tcW = (state.tc_ms) and 170 or 110
- local tsW = 90
- local minW = (buttonW + padX)*5 + (tcW + padX)*4 + (tsW + padX)*2
-
- if ((osc_param.display_aspect > 0) and (osc_param.playresx < minW)) then
- osc_param.playresy = minW / osc_param.display_aspect
- osc_param.playresx = osc_param.playresy * osc_param.display_aspect
- osc_geo.y = 54 + user_opts.barmargin
- osc_geo.w = osc_param.playresx + 4
- end
-
- local line1 = osc_geo.y - 36 - padY
- local line2 = osc_geo.y - 9 - padY
-
- osc_param.areas = {}
-
- add_area("input", get_hitbox_coords(osc_geo.x, osc_geo.y, osc_geo.an,
- osc_geo.w, osc_geo.h))
-
- local sh_area_y0, sh_area_y1
- sh_area_y0 = user_opts.barmargin
- sh_area_y1 = (osc_geo.y + (osc_geo.h / 2)) +
- get_align(1 - (2*user_opts.deadzonesize),
- osc_param.playresy - (osc_geo.y + (osc_geo.h / 2)), 0, 0)
- add_area("showhide", 0, sh_area_y0, osc_param.playresx, sh_area_y1)
-
- local lo, geo
-
- -- Background bar
- new_element("bgbox", "box")
- lo = add_layout("bgbox")
-
- lo.geometry = osc_geo
- lo.layer = 10
- lo.style = osc_styles.box
- lo.alpha[1] = user_opts.boxalpha
-
-
- -- Playback control buttons
- geo = { x = osc_geo.x + padX, y = line1, an = 4,
- w = buttonW, h = 36 - padY*2 }
- lo = add_layout("playpause")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
- geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h }
- lo = add_layout("ch_prev")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
- geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h }
- lo = add_layout("ch_next")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
-
- -- Left timecode
- geo = { x = geo.x + geo.w + padX + tcW, y = geo.y, an = 6,
- w = tcW, h = geo.h }
- lo = add_layout("tc_left")
- lo.geometry = geo
- lo.style = osc_styles.timecodesBar
-
- local sb_l = geo.x + padX
-
- -- Fullscreen button
- geo = { x = osc_geo.x + osc_geo.w - buttonW - padX, y = geo.y, an = 4,
- w = buttonW, h = geo.h }
- lo = add_layout("tog_fs")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
- -- Volume
- geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h }
- lo = add_layout("volume")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
- -- Track selection buttons
- geo = { x = geo.x - tsW - padX, y = geo.y, an = geo.an, w = tsW, h = geo.h }
- lo = add_layout("cy_sub")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
- geo = { x = geo.x - geo.w - padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h }
- lo = add_layout("cy_audio")
- lo.geometry = geo
- lo.style = osc_styles.smallButtonsBar
-
-
- -- Right timecode
- geo = { x = geo.x - geo.w - padX - tcW - 10, y = geo.y, an = 4,
- w = tcW, h = geo.h }
- lo = add_layout("tc_right")
- lo.geometry = geo
- lo.style = osc_styles.timecodesBar
-
- local sb_r = geo.x - padX
-
-
- -- Seekbar
- geo = { x = sb_l, y = user_opts.barmargin, an = 7,
- w = math.max(0, sb_r - sb_l), h = geo.h }
- new_element("bgbar1", "box")
- lo = add_layout("bgbar1")
-
- lo.geometry = geo
- lo.layer = 15
- lo.style = osc_styles.timecodesBar
- lo.alpha[1] =
- math.min(255, user_opts.boxalpha + (255 - user_opts.boxalpha)*0.8)
- if not (user_opts["seekbarstyle"] == "bar") then
- lo.box.radius = geo.h / 2
- lo.box.hexagon = user_opts["seekbarstyle"] == "diamond"
+ if direction < 0 then
+ osc_param.video_margins.b = osc_geo.h / osc_param.playresy
+ else
+ osc_param.video_margins.t = osc_geo.h / osc_param.playresy
end
+end
- lo = add_layout("seekbar")
- lo.geometry = geo
- lo.style = osc_styles.timecodesBar
- lo.slider.border = 0
- lo.slider.gap = 2
- lo.slider.tooltip_style = osc_styles.timePosBar
- lo.slider.stype = user_opts["seekbarstyle"]
- lo.slider.rtype = user_opts["seekrangestyle"]
- lo.slider.tooltip_an = 5
-
-
- -- Playlist prev/next
- geo = { x = osc_geo.x + padX, y = line2, an = 4, w = 18, h = 18 - padY }
- lo = add_layout("pl_prev")
- lo.geometry = geo
- lo.style = osc_styles.topButtonsBar
-
- geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h }
- lo = add_layout("pl_next")
- lo.geometry = geo
- lo.style = osc_styles.topButtonsBar
-
- local t_l = geo.x + geo.w + padX
-
- -- Cache
- geo = { x = osc_geo.x + osc_geo.w - padX, y = geo.y,
- an = 6, w = 150, h = geo.h }
- lo = add_layout("cache")
- lo.geometry = geo
- lo.style = osc_styles.vidtitleBar
-
- local t_r = geo.x - geo.w - padX*2
+layouts["bottombar"] = function()
+ bar_layout(-1)
+end
- -- Title
- geo = { x = t_l, y = geo.y, an = 4,
- w = t_r - t_l, h = geo.h }
- lo = add_layout("title")
- lo.geometry = geo
- lo.style = string.format("%s{\\clip(%f,%f,%f,%f)}",
- osc_styles.vidtitleBar,
- geo.x, geo.y-geo.h, geo.w, geo.y+geo.h)
+layouts["topbar"] = function()
+ bar_layout(1)
end
-- Validate string type user options