Skip to content

Commit 7251ec7

Browse files
caetano-devabsidue
andauthored
Feat: Display player overlay controls on keyboard interaction (#7757)
* Shows video progress indicator when interacting * call showOverlayControls under showValueChange calls * call showOverlayControls in showValueChange * Show overlay on more shortcuts * Show overlay on more shortcuts * Move function implementation and code spacing * Remove overlay control from fullscreen * use nextTick to show overlay controls * Change import order Co-authored-by: absidue <[email protected]> * Create named function for eventListeners --------- Co-authored-by: absidue <[email protected]>
1 parent 9d8e3d8 commit 7251ec7

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { computed, defineComponent, onBeforeUnmount, onMounted, reactive, ref, shallowRef, watch } from 'vue'
1+
import { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, reactive, ref, shallowRef, watch } from 'vue'
22
import shaka from 'shaka-player'
33
import { useI18n } from '../../composables/use-i18n-polyfill'
44

@@ -1977,6 +1977,8 @@ export default defineComponent({
19771977
const formattedSeconds = Math.abs(seconds)
19781978
showValueChange(`${formattedSeconds}s`, popUpLayout.icon, popUpLayout.invertContentOrder)
19791979
}
1980+
1981+
showOverlayControls()
19801982
}
19811983

19821984
// #endregion mouse and keyboard helpers
@@ -2224,6 +2226,7 @@ export default defineComponent({
22242226

22252227
const currentlyVisible = player.isTextTrackVisible()
22262228
player.setTextTrackVisibility(!currentlyVisible)
2229+
showOverlayControls()
22272230
}
22282231
break
22292232
case KeyboardShortcuts.VIDEO_PLAYER.GENERAL.VOLUME_UP:
@@ -2241,6 +2244,7 @@ export default defineComponent({
22412244
if (canChapterJump(event, 'previous')) {
22422245
// Jump to the previous chapter
22432246
video_.currentTime = props.chapters[props.currentChapterIndex - 1].startSeconds
2247+
showOverlayControls()
22442248
} else {
22452249
// Rewind by the time-skip interval (in seconds)
22462250
seekBySeconds(-defaultSkipInterval.value * player.getPlaybackRate(), false, true)
@@ -2251,6 +2255,7 @@ export default defineComponent({
22512255
if (canChapterJump(event, 'next')) {
22522256
// Jump to the next chapter
22532257
video_.currentTime = (props.chapters[props.currentChapterIndex + 1].startSeconds)
2258+
showOverlayControls()
22542259
} else {
22552260
// Fast-Forward by the time-skip interval (in seconds)
22562261
seekBySeconds(defaultSkipInterval.value * player.getPlaybackRate(), false, true)
@@ -2286,6 +2291,7 @@ export default defineComponent({
22862291
const percentage = parseInt(event.key) / 10
22872292

22882293
video_.currentTime = seekRange.start + (length * percentage)
2294+
showOverlayControls()
22892295
}
22902296
break
22912297
}
@@ -2317,6 +2323,7 @@ export default defineComponent({
23172323
// use seek range instead of duration so that it works for live streams too
23182324
const seekRange = player.seekRange()
23192325
video_.currentTime = seekRange.start
2326+
showOverlayControls()
23202327
}
23212328
break
23222329
case KeyboardShortcuts.VIDEO_PLAYER.PLAYBACK.END:
@@ -2326,6 +2333,7 @@ export default defineComponent({
23262333
// use seek range instead of duration so that it works for live streams too
23272334
const seekRange = player.seekRange()
23282335
video_.currentTime = seekRange.end
2336+
showOverlayControls()
23292337
}
23302338
break
23312339
case 'escape':
@@ -2487,6 +2495,10 @@ export default defineComponent({
24872495
isOffline.value = true
24882496
}
24892497

2498+
function fullscreenChangeHandler() {
2499+
nextTick(showOverlayControls)
2500+
}
2501+
24902502
window.addEventListener('online', onlineHandler)
24912503
window.addEventListener('offline', offlineHandler)
24922504

@@ -2585,6 +2597,7 @@ export default defineComponent({
25852597

25862598
document.removeEventListener('keydown', keyboardShortcutHandler)
25872599
document.addEventListener('keydown', keyboardShortcutHandler)
2600+
document.addEventListener('fullscreenchange', fullscreenChangeHandler)
25882601

25892602
player.addEventListener('loading', () => {
25902603
hasLoaded.value = false
@@ -2925,6 +2938,7 @@ export default defineComponent({
29252938
document.body.classList.remove('playerFullWindow')
29262939

29272940
document.removeEventListener('keydown', keyboardShortcutHandler)
2941+
document.removeEventListener('fullscreenchange', fullscreenChangeHandler)
29282942

29292943
if (resizeObserver) {
29302944
resizeObserver.disconnect()
@@ -3032,6 +3046,10 @@ export default defineComponent({
30323046
const invertValueChangeContentOrder = ref(false)
30333047
let valueChangeTimeout = null
30343048

3049+
function showOverlayControls() {
3050+
ui.getControls().showUI()
3051+
}
3052+
30353053
/**
30363054
* Shows a popup with a message and an icon on top of the video player.
30373055
* @param {string} message - The message to display.
@@ -3051,6 +3069,8 @@ export default defineComponent({
30513069
valueChangeTimeout = setTimeout(() => {
30523070
showValueChangePopup.value = false
30533071
}, 2000)
3072+
3073+
showOverlayControls()
30543074
}
30553075

30563076
return {

0 commit comments

Comments
 (0)