summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2019-11-29 20:35:05 +0800
committerwm4 <wm4@nowhere>2019-11-29 13:56:58 +0100
commit2b4c8675057cd43c21d4c124381bfb9c9930871c (patch)
tree4b6d30cdbcd7214fc0ecf27b3652ca0d976bfd24
parentd520258ffbc3a0e4e2c9a04f62af11feb0273754 (diff)
downloadmpv-2b4c8675057cd43c21d4c124381bfb9c9930871c.tar.bz2
mpv-2b4c8675057cd43c21d4c124381bfb9c9930871c.tar.xz
osc: handle deadzone and barmargin for window controls
I missed these due to only testing with my personal osc config. The deadzone needs to be correctly handled for the window controls, or they will fail to appear when the mouse is close to or over them. In the process of doing that, I realised that the controls should respect the barmargin, if set. This is because the controls should remain aligned when layout=topbar and as the control bar is top aligned, it should be equally affected if the user needs to set the barmargin. I also fixed a mistake in trying to the use the mpv-osd-symbols font for the window controls.
-rw-r--r--player/lua/osc.lua34
1 files changed, 28 insertions, 6 deletions
diff --git a/player/lua/osc.lua b/player/lua/osc.lua
index 46819858a5..dcdd650313 100644
--- a/player/lua/osc.lua
+++ b/player/lua/osc.lua
@@ -87,7 +87,7 @@ local osc_styles = {
timePosBar = "{\\blur0\\bord".. user_opts.tooltipborder .."\\1c&HFFFFFF\\3c&H000000\\fs30}",
vidtitleBar = "{\\blur0\\bord0\\1c&HFFFFFF\\3c&HFFFFFF\\fs18\\q2}",
- wcButtons = "{\\1c&HFFFFFF\\fs24\\fnmpv-osd-symbols}",
+ wcButtons = "{\\1c&HFFFFFF\\fs24}",
wcBar = "{\\1c&H000000}",
}
@@ -969,7 +969,7 @@ end
function window_controls(alignment, topbar)
local wc_geo = {
x = 0,
- y = 30,
+ y = 30 + user_opts.barmargin,
an = 1,
w = osc_param.playresx,
h = 30,
@@ -1006,12 +1006,13 @@ function window_controls(alignment, topbar)
lo.style = osc_styles.wcBar
lo.alpha[1] = user_opts.boxalpha
+ local button_y = wc_geo.y - (wc_geo.h / 2)
local first_geo =
- {x = controlbox_left + 5, y = 15, an = 4, w = 25, h = 25}
+ {x = controlbox_left + 5, y = button_y, an = 4, w = 25, h = 25}
local second_geo =
- {x = controlbox_left + 30, y = 15, an = 4, w = 25, h = 25}
+ {x = controlbox_left + 30, y = button_y, an = 4, w = 25, h = 25}
local third_geo =
- {x = controlbox_left + 55, y = 15, an = 4, w = 25, h = 25}
+ {x = controlbox_left + 55, y = button_y, an = 4, w = 25, h = 25}
-- Close
ne = new_element("close", "button")
@@ -1039,9 +1040,17 @@ function window_controls(alignment, topbar)
lo = add_layout("maximize")
lo.geometry = alignment == "left" and third_geo or second_geo
-- At least with default Ubuntu fonts, this symbol is differently aligned
- lo.geometry.y = 13
+ lo.geometry.y = lo.geometry.y - 2
lo.style = osc_styles.wcButtons
+ -- deadzone below window controls
+ local sh_area_y0, sh_area_y1
+ sh_area_y0 = user_opts.barmargin
+ sh_area_y1 = (wc_geo.y + (wc_geo.h / 2)) +
+ get_align(1 - (2 * user_opts.deadzonesize),
+ osc_param.playresy - (wc_geo.y + (wc_geo.h / 2)), 0, 0)
+ add_area("showhide_wc", wc_geo.x, sh_area_y0, wc_geo.w, sh_area_y1)
+
if topbar then
-- The title is already there as part of the top bar
return
@@ -2201,6 +2210,9 @@ function render()
for k,cords in pairs(osc_param.areas["showhide"]) do
set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "showhide")
end
+ for k,cords in pairs(osc_param.areas["showhide_wc"]) do
+ set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "showhide_wc")
+ end
do_enable_keybindings()
--mouse input area
@@ -2228,6 +2240,9 @@ function render()
for _,cords in ipairs(osc_param.areas["window-controls"]) do
if state.osc_visible then -- activate only when OSC is actually visible
set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, "window-controls")
+ mp.enable_key_bindings("window-controls")
+ else
+ mp.disable_key_bindings("window-controls")
end
if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then
@@ -2379,6 +2394,7 @@ function tick()
if state.showhide_enabled then
mp.disable_key_bindings("showhide")
+ mp.disable_key_bindings("showhide_wc")
state.showhide_enabled = false
end
@@ -2398,6 +2414,7 @@ function do_enable_keybindings()
if state.enabled then
if not state.showhide_enabled then
mp.enable_key_bindings("showhide", "allow-vo-dragging+allow-hide-cursor")
+ mp.enable_key_bindings("showhide_wc", "allow-vo-dragging+allow-hide-cursor")
end
state.showhide_enabled = true
end
@@ -2411,6 +2428,7 @@ function enable_osc(enable)
hide_osc() -- acts immediately when state.enabled == false
if state.showhide_enabled then
mp.disable_key_bindings("showhide")
+ mp.disable_key_bindings("showhide_wc")
end
state.showhide_enabled = false
end
@@ -2465,6 +2483,10 @@ mp.set_key_bindings({
{"mouse_move", function(e) process_event("mouse_move", nil) end},
{"mouse_leave", mouse_leave},
}, "showhide", "force")
+mp.set_key_bindings({
+ {"mouse_move", function(e) process_event("mouse_move", nil) end},
+ {"mouse_leave", mouse_leave},
+}, "showhide_wc", "force")
do_enable_keybindings()
--mouse input bindings