diff options
author | Philip Langdale <philipl@overt.org> | 2019-11-29 20:35:05 +0800 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2019-11-29 13:56:58 +0100 |
commit | 2b4c8675057cd43c21d4c124381bfb9c9930871c (patch) | |
tree | 4b6d30cdbcd7214fc0ecf27b3652ca0d976bfd24 /player/lua/osc.lua | |
parent | d520258ffbc3a0e4e2c9a04f62af11feb0273754 (diff) | |
download | mpv-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.
Diffstat (limited to 'player/lua/osc.lua')
-rw-r--r-- | player/lua/osc.lua | 34 |
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 |