mirror of
https://github.com/hanzoai/Hanzo-EasyUse.git
synced 2026-10-30 18:51:27 +00:00
90 lines
3.1 KiB
JavaScript
90 lines
3.1 KiB
JavaScript
import { app } from "../../../../scripts/app.js";
|
|
|
|
const kSampler = ['easy kSampler', 'easy kSamplerTiled', 'easy fullkSampler']
|
|
|
|
function display_preview_images(event) {
|
|
const node = app.graph._nodes_by_id[event.detail.id];
|
|
if (node) {
|
|
node.selected = new Set();
|
|
node.anti_selected = new Set();
|
|
const image = showImages(node, event.detail.urls);
|
|
return {node,image,isKSampler:kSampler.includes(node.type)}
|
|
} else {
|
|
console.log(`Image Chooser Preview - failed to find ${event.detail.id}`)
|
|
}
|
|
}
|
|
|
|
function showImages(node, urls) {
|
|
node.imgs = [];
|
|
urls.forEach((u)=> {
|
|
const img = new Image();
|
|
node.imgs.push(img);
|
|
img.onload = () => { app.graph.setDirtyCanvas(true); };
|
|
img.src = `/view?filename=${encodeURIComponent(u.filename)}&type=temp&subfolder=${app.getPreviewFormatParam()}`
|
|
})
|
|
node.setSizeForImage?.();
|
|
return node.imgs
|
|
}
|
|
|
|
function drawRect(node, s, ctx) {
|
|
const padding = 1;
|
|
var rect;
|
|
if (node.imageRects) {
|
|
rect = node.imageRects[s];
|
|
} else {
|
|
const y = node.imagey;
|
|
rect = [padding,y+padding,node.size[0]-2*padding,node.size[1]-y-2*padding];
|
|
}
|
|
ctx.strokeRect(rect[0]+padding, rect[1]+padding, rect[2]-padding*2, rect[3]-padding*2);
|
|
}
|
|
|
|
function additionalDrawBackground(node, ctx) {
|
|
if (!node.imgs) return;
|
|
if (node.imageRects) {
|
|
for (let i = 0; i < node.imgs.length; i++) {
|
|
// delete underlying image
|
|
ctx.fillStyle = "#000";
|
|
ctx.fillRect(...node.imageRects[i])
|
|
// draw the new one
|
|
const img = node.imgs[i];
|
|
const cellWidth = node.imageRects[i][2];
|
|
const cellHeight = node.imageRects[i][3];
|
|
|
|
let wratio = cellWidth/img.width;
|
|
let hratio = cellHeight/img.height;
|
|
var ratio = Math.min(wratio, hratio);
|
|
|
|
let imgHeight = ratio * img.height;
|
|
let imgWidth = ratio * img.width;
|
|
|
|
const imgX = node.imageRects[i][0] + (cellWidth - imgWidth)/2;
|
|
const imgY = node.imageRects[i][1] + (cellHeight - imgHeight)/2;
|
|
const cell_padding = 2;
|
|
ctx.drawImage(img, imgX+cell_padding, imgY+cell_padding, imgWidth-cell_padding*2, imgHeight-cell_padding*2);
|
|
|
|
}
|
|
}
|
|
ctx.lineWidth = 2;
|
|
ctx.strokeStyle = "green";
|
|
node?.selected?.forEach((s) => { drawRect(node,s, ctx) })
|
|
ctx.strokeStyle = "#F88";
|
|
node?.anti_selected?.forEach((s) => { drawRect(node,s, ctx) })
|
|
}
|
|
|
|
function click_is_in_image(node, pos) {
|
|
if (node.imgs?.length>1) {
|
|
for (var i = 0; i<node.imageRects.length; i++) {
|
|
const dx = pos[0] - node.imageRects[i][0];
|
|
const dy = pos[1] - node.imageRects[i][1];
|
|
if ( dx > 0 && dx < node.imageRects[i][2] &&
|
|
dy > 0 && dy < node.imageRects[i][3] ) {
|
|
return i;
|
|
}
|
|
}
|
|
} else if (node.imgs?.length==1) {
|
|
if (pos[1]>node.imagey) return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
export { display_preview_images, additionalDrawBackground, click_is_in_image } |