diff --git a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.css b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.css
index 7fc603f68c940..f12e64ddf2605 100644
--- a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.css
+++ b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.css
@@ -91,6 +91,35 @@
/* user-select is intentionally not disabled, so that you can select and copy the stats */
}
+.valueChangePopup {
+ position: absolute;
+ top: 20px;
+ left: 50%;
+ transform: translateX(-50%);
+ padding: 10px;
+ border-radius: 5px;
+ font-size: 1.1em;
+ background-color: rgb(0 0 0 / 70%);
+ color: #fff;
+ width: 85px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 4px;
+ z-index: 2;
+ pointer-events: none;
+}
+
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity 0.5s ease;
+}
+
+.fade-enter-from,
+.fade-leave-to {
+ opacity: 0;
+}
+
.offlineWrapper {
position: absolute;
top: 20px;
diff --git a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js
index bb9db24ade3ee..b0fe16ca32095 100644
--- a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js
+++ b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js
@@ -1797,7 +1797,8 @@ export default defineComponent({
function changeVolume(step) {
const volumeBar = container.value.querySelector('.shaka-volume-bar')
- const newValue = parseFloat(volumeBar.value) + (step * 100)
+ const oldValue = parseFloat(volumeBar.value)
+ const newValue = oldValue + (step * 100)
if (newValue < 0) {
volumeBar.value = 0
@@ -1808,6 +1809,16 @@ export default defineComponent({
}
volumeBar.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }))
+
+ let messageIcon
+ if (newValue <= 0) {
+ messageIcon = 'volume-mute'
+ } else if (newValue > 0 && newValue < oldValue) {
+ messageIcon = 'volume-low'
+ } else if (newValue > 0 && newValue > oldValue) {
+ messageIcon = 'volume-high'
+ }
+ showValueChange(`${Math.round(video.value.volume * 100)}%`, messageIcon)
}
/**
@@ -1815,13 +1826,16 @@ export default defineComponent({
*/
function changePlayBackRate(step) {
const video_ = video.value
- const newPlaybackRate = parseFloat((video_.playbackRate + step).toFixed(2))
+ const newPlaybackRateString = (video_.playbackRate + step).toFixed(2)
+ const newPlaybackRate = parseFloat(newPlaybackRateString)
// The following error is thrown if you go below 0.07:
// The provided playback rate (0.05) is not in the supported playback range.
if (newPlaybackRate > 0.07 && newPlaybackRate <= maxVideoPlaybackRate.value) {
video_.playbackRate = newPlaybackRate
video_.defaultPlaybackRate = newPlaybackRate
+
+ showValueChange(`${newPlaybackRateString}x`)
}
}
@@ -2047,7 +2061,12 @@ export default defineComponent({
// Toggle mute only if metakey is not pressed
if (!event.metaKey) {
event.preventDefault()
- video_.muted = !video_.muted
+ const isMuted = !video_.muted
+ video_.muted = isMuted
+
+ const messageIcon = isMuted ? 'volume-mute' : 'volume-high'
+ const message = isMuted ? '0%' : `${Math.round(video_.volume * 100)}%`
+ showValueChange(message, messageIcon)
}
break
case KeyboardShortcuts.VIDEO_PLAYER.GENERAL.CAPTIONS:
@@ -2814,6 +2833,25 @@ export default defineComponent({
// #endregion functions used by the watch page
+ const showValueChangePopup = ref(false)
+ const valueChangeMessage = ref('')
+ const valueChangeIcon = ref(null)
+ let valueChangeTimeout = null
+
+ function showValueChange(message, icon = null) {
+ valueChangeMessage.value = message
+ valueChangeIcon.value = icon
+ showValueChangePopup.value = true
+
+ if (valueChangeTimeout) {
+ clearTimeout(valueChangeTimeout)
+ }
+
+ valueChangeTimeout = setTimeout(() => {
+ showValueChangePopup.value = false
+ }, 2000)
+ }
+
return {
container,
video,
@@ -2837,6 +2875,10 @@ export default defineComponent({
handleEnded,
updateVolume,
handleTimeupdate,
+
+ valueChangeMessage,
+ valueChangeIcon,
+ showValueChangePopup
}
}
})
diff --git a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.vue b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.vue
index 6b2762e4e69c4..bdc80bcb0d3cc 100644
--- a/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.vue
+++ b/src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.vue
@@ -66,6 +66,18 @@
{{ $t('Video.Player.Stats.Dropped Frames / Total Frames', stats.frames) }}
+