Add play/pause button for reference videos

Fix reference videos not syncing with timeline when taking too long to load
This commit is contained in:
JannisX11 2024-04-18 17:56:21 +02:00
parent 50ec3582d4
commit e72a406832
2 changed files with 22 additions and 7 deletions

View File

@ -672,8 +672,22 @@ class ReferenceImage {
static image_extensions = ['png', 'jpg', 'jpeg', 'bmp', 'tiff', 'tif', 'gif'];
static video_extensions = ['mp4', 'wmv', 'mov'];
}
ReferenceImage.supported_extensions = ['png', 'jpg', 'jpeg', 'webp', 'bmp', 'tiff', 'tif', 'gif'];
ReferenceImage.prototype.menu = new Menu([
new MenuSeparator('media_controls'),
{
id: 'toggle_playback',
name: 'reference_image.toggle_playback',
condition: (ref) => ref.is_video,
icon: (ref) => ref.video.paused ? 'play_arrow' : 'pause',
click(ref) {
if (ref.video.paused) {
ref.video._loading = false;
ref.video.play();
} else {
ref.video.pause();
}
}
},
new MenuSeparator('settings'),
{
id: 'visibility',
@ -830,18 +844,18 @@ SharedActions.add('delete', {
}
})
let reference_image_playback_cooldown;
Blockbench.on('display_animation_frame', () => {
if (reference_image_playback_cooldown) return;
ReferenceImage.active.forEach(ref => {
if (ref.is_video && ref.visibility) {
if (ref.is_video && ref.visibility && !ref.video._loading) {
ref.video._loading = true;
ref.video.ontimeupdate = () => {
ref.video._loading = false;
}
ref.video.currentTime = Timeline.time;
if (!ref.video.paused) ref.video.pause();
}
})
reference_image_playback_cooldown = setTimeout(() => {
reference_image_playback_cooldown = null;
}, 30)
})
const ReferenceImageMode = {

View File

@ -2118,6 +2118,7 @@
"reference_image.scope.project": "Just this project",
"reference_image.scope.global": "All projects",
"reference_image.enabled_modes": "Enabled in Modes",
"reference_image.toggle_playback": "Play/Pause",
"codec.common.encoding": "Encoding",
"codec.common.armature": "Export Groups as Armature",