feat!: changed peek-{x} commands to toggle-{x}

Previously, all of the `peek-{element}` commands such as `peek-ui` would force the elements' visibility only until pressed again, OR MOUSE MOVED. This was sometimes annoying (small mouse movements would reset it), and limiting, for no really good reason.

With this, the commands are renamed to `toggle-{x}`, and toggle each element's permanent `min_visibility` between `0` and `1`.

ref #48
This commit is contained in:
tomasklaen
2022-09-19 16:25:32 +02:00
parent 08d4dd9e4d
commit 273374f4bd
2 changed files with 20 additions and 24 deletions

View File

@@ -106,11 +106,11 @@ tab script-binding uosc/peek-timeline
Available commands: Available commands:
#### `peek-ui` #### `toggle-ui`
Makes the whole UI visible until you call this command again, or move the cursor. Useful for peeking remaining time and such while watching. Makes the whole UI visible until you call this command again. Useful for peeking remaining time and such while watching.
You can also peek only a specific element with `peek-{element}` command. You can also peek only a specific element with `toggle-{element}` command.
`{element}` can be one of: `timeline`, `controls`, `volume`, `top-bar` `{element}` can be one of: `timeline`, `controls`, `volume`, `top-bar`

View File

@@ -1152,19 +1152,13 @@ function Elements:update_proximities()
for _, element in ipairs(mouse_enter_elements) do element:trigger('mouse_enter') end for _, element in ipairs(mouse_enter_elements) do element:trigger('mouse_enter') end
end end
-- Toggles elements visibility between 0 and 1. -- Toggles passed elements' min visibilities between 0 and 1.
---@param elements string[] IDs of elements to peek. ---@param ids string[] IDs of elements to peek.
function Elements:peek(elements) function Elements:toggle(ids)
local highest_visibility = 0 local elements = itable_filter(self.itable, function(element) return itable_index_of(ids, element.id) ~= nil end)
for _, name in ipairs(elements) do local all_visible = itable_find(elements, function(element) return element.min_visibility ~= 1 end) == nil
local visibility = self[name] and self[name]:get_visibility() or 0 local to = all_visible and 0 or 1
if visibility > highest_visibility then highest_visibility = visibility end for _, element in ipairs(elements) do element:tween_property('min_visibility', element.min_visibility, to) end
end
local to = highest_visibility > 0.5 and 0 or 1
for _, name in ipairs(elements) do
local element = self[name]
if element then element:tween_property('proximity', element.proximity, to) end
end
end end
---@param name string Event name. ---@param name string Event name.
@@ -1351,7 +1345,9 @@ function Element:init(id, props)
self.proximity = 0 self.proximity = 0
-- Raw proximity in pixels. -- Raw proximity in pixels.
self.proximity_raw = infinity self.proximity_raw = infinity
---@type number `0-1` factor to force elements visibility. ---@type number `0-1` factor to force min visibility. Used for toggling element's permanent visibility.
self.min_visibility = 0
---@type number `0-1` factor to force a visibility value. Used for flashing, fading out, and other animations
self.forced_visibility = nil self.forced_visibility = nil
---@type boolean Render this element even when menu is open. ---@type boolean Render this element even when menu is open.
self.ignores_menu = false self.ignores_menu = false
@@ -1413,15 +1409,15 @@ function Element:get_visibility()
or (persist.image and state.is_image) or (persist.image and state.is_image)
) then return 1 end ) then return 1 end
-- Forced proximity -- Forced visibility
if self.forced_visibility then return self.forced_visibility end if self.forced_visibility then return math.max(self.forced_visibility, self.min_visibility) end
-- Anchor inheritance -- Anchor inheritance
-- If anchor returns -1, it means all attached elements should force hide. -- If anchor returns -1, it means all attached elements should force hide.
local anchor = self.anchor_id and Elements[self.anchor_id] local anchor = self.anchor_id and Elements[self.anchor_id]
local anchor_visibility = anchor and anchor:get_visibility() or 0 local anchor_visibility = anchor and anchor:get_visibility() or 0
return self.forced_visibility or (anchor_visibility == -1 and 0 or math.max(self.proximity, anchor_visibility)) return anchor_visibility == -1 and 0 or math.max(self.proximity, anchor_visibility, self.min_visibility)
end end
-- Call method if it exists -- Call method if it exists
@@ -4177,10 +4173,10 @@ mp.observe_property('estimated-display-fps', 'native', update_render_delay)
-- KEY BINDABLE FEATURES -- KEY BINDABLE FEATURES
mp.add_key_binding(nil, 'peek-ui', function() Elements:peek({'timeline', 'controls', 'volume', 'top_bar'}) end) mp.add_key_binding(nil, 'toggle-ui', function() Elements:toggle({'timeline', 'controls', 'volume', 'top_bar'}) end)
mp.add_key_binding(nil, 'peek-timeline', function() Elements:peek({'timeline'}) end) mp.add_key_binding(nil, 'toggle-timeline', function() Elements:toggle({'timeline'}) end)
mp.add_key_binding(nil, 'peek-volume', function() Elements:peek({'volume'}) end) mp.add_key_binding(nil, 'toggle-volume', function() Elements:toggle({'volume'}) end)
mp.add_key_binding(nil, 'peek-top-bar', function() Elements:peek({'top_bar'}) end) mp.add_key_binding(nil, 'toggle-top-bar', function() Elements:toggle({'top_bar'}) end)
mp.add_key_binding(nil, 'toggle-progress', function() mp.add_key_binding(nil, 'toggle-progress', function()
local timeline = Elements.timeline local timeline = Elements.timeline
if timeline.size_min_override then if timeline.size_min_override then