Files
JaredTherriault-ComfyUI-JNodes/web/js/common/EventManager.js
T
JaredTherriault b1a44cf0cc Add playbackRate video option, improve menu widget options
-Add option for playback rate (speed)
-Add hotkeys for changing playback rate ( , and . )
-Add labeled number input widget
-Inherit labeled widget types from base class
-Add option for onchange to above base class
-Clamp numbers when setting numeric values on videos
-Add some helper functions to video elements
-Remove bPropagateOnChange, roll functionality into forEachElement delegate
-Add widgetType parameter to inform the widget type to be created
-Removed unnecessary and incorrect comments
2024-04-18 17:58:33 -07:00

141 lines
4.1 KiB
JavaScript

import { app } from "../../../../scripts/app.js";
import { pasteToTextArea } from "./Utilities.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]);
}
// 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 (elementUnderPointer && elementUnderPointer.seekVideo) {
event.preventDefault();
elementUnderPointer.seekVideo(delta);
}
} else if (event.key == "j") { // See backward
const delta = -1;
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.seekVideo) {
event.preventDefault();
elementUnderPointer.seekVideo(delta);
}
} else if (event.key == "k") { // Pause/play
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.togglePlayback) {
event.preventDefault();
await elementUnderPointer.togglePlayback();
}
} else if (event.key == "m") { // Toggle mute
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.toggleMute) {
event.preventDefault();
elementUnderPointer.toggleMute();
}
} else if (event.key == 'f') { // Toggle fullscreen
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.toggleFullscreen) {
event.preventDefault();
elementUnderPointer.toggleFullscreen();
}
} else if (event.key == ',') { // Decrease playback rate
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.playbackRate && elementUnderPointer.setPlaybackRate) {
event.preventDefault();
elementUnderPointer.setPlaybackRate(elementUnderPointer.playbackRate - 0.05);
}
} else if (event.key == '.') { // Increase playback rate
const elementUnderPointer = getElementUnderPointer();
if (elementUnderPointer && elementUnderPointer.playbackRate && elementUnderPointer.setPlaybackRate) {
event.preventDefault();
elementUnderPointer.setPlaybackRate(elementUnderPointer.playbackRate + 0.05);
}
}
});
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();
pasteToTextArea(itemString.split("=")[1], event.target, event.target.selectionStart, event.target.selectionEnd);
}
})
}
}
});