File size: 5,187 Bytes
5193146 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | import { app } from "../../../../scripts/app.js";
import { utilitiesInstance } from "./Utilities.js";
import { setting_VideoPlaybackOptions } from "../common/SettingsManager.js";
import * as VideoControl from './VideoControl.js';
// Mouse tracking
let lastMouseX = 0;
let lastMouseY = 0;
document.addEventListener("mousemove", (event) => {
lastMouseX = event.clientX;
lastMouseY = event.clientY;
});
export function getLastMousePosition() {
return [lastMouseX, lastMouseY];
}
export function isPointerDown() {
return app?.canvas?.pointer_is_down;
}
export function getElementUnderPointer() {
const mousePos = getLastMousePosition();
return document.elementFromPoint(mousePos[0], mousePos[1]);
}
export function simulateMouseClickAtPoint(x, y) {
// Create the synthetic mouse event
const event = new MouseEvent('mousedown', {
view: window,
bubbles: true,
cancelable: true,
clientX: x,
clientY: y
});
document.dispatchEvent(event);
}
// Keyboard events
function isElementAppropriateForVideoEvent(elementUnderPointer) {
return elementUnderPointer && VideoControl.isElementVideo(elementUnderPointer);
}
// Keyboard events
document.addEventListener("keydown", async (event) => {
// Video shortcuts
// note that elementUnderPointer will always be the video element itself, not the container
if (event.key == "l") { // Seek forward
const delta = 1;
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.seekVideo(elementUnderPointer, delta);
}
} else if (event.key == "j") { // See backward
const delta = -1;
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.seekVideo(elementUnderPointer, delta);
}
} else if (event.key == "k") { // Pause/play
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
await VideoControl.toggleVideoPlayback(elementUnderPointer);
}
} else if (event.key == "m") { // Toggle mute
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.toggleVideoMute(elementUnderPointer);
}
} else if (event.key == 'f') { // Toggle fullscreen
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.toggleVideoFullscreen(elementUnderPointer);
}
} else if (event.key == ',') { // Decrease playback rate
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.setVideoPlaybackRate(elementUnderPointer, elementUnderPointer.playbackRate - 0.05);
}
} else if (event.key == '.') { // Increase playback rate
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.setVideoPlaybackRate(elementUnderPointer, elementUnderPointer.playbackRate + 0.05);
}
}
});
// Scroll wheel
document.addEventListener('wheel', (event) => {
if (setting_VideoPlaybackOptions.value.useWheelSeek) {
const elementUnderPointer = getElementUnderPointer();
if (isElementAppropriateForVideoEvent(elementUnderPointer)) {
event.preventDefault();
VideoControl.onScrollVideo(elementUnderPointer, event, setting_VideoPlaybackOptions.value.invertWheelSeek);
}
}
});
document.addEventListener("drop", (event) => {
if (event.target.data == app.canvas) { // Drop in lora node onto canvas
for (const item of event.dataTransfer.items) {
if (item.type != 'text/plain') { continue; }
item.getAsString(function (itemString) {
if (itemString && itemString.includes("loraNodeName=")) {
function addNode(name, coordinates, options) {
options = { select: true, shiftY: 0, ...(options || {}) };
const node = LiteGraph.createNode(name);
app.graph.add(node);
node.pos = [
coordinates[0] - node.size[0] / 2, coordinates[1] + options.shiftY,
];
if (options.select) {
app.canvas.selectNode(node, false);
}
return node;
}
event.preventDefault();
event.stopPropagation();
let node = addNode("LoraLoader", [event.canvasX, event.canvasY]);
for (let widget of node.widgets) {
if (widget.name == "lora_name") {
widget.value = itemString.split("=")[1];
}
}
}
});
}
} else if (event.target.tagName.toLowerCase() === 'textarea') { // Drop a1111 lora text or embedding text onto textarea
for (const item of event.dataTransfer.items) {
item.getAsString(function (itemString) {
if (itemString && itemString.includes("modelInsertText=")) {
event.preventDefault();
event.stopPropagation();
utilitiesInstance.pasteToTextArea(itemString.split("=")[1], event.target, event.target.selectionStart, event.target.selectionEnd);
}
})
}
}
}); |