zoom pan and full screen features for sketch, inpaint, inpaint sketch

This commit is contained in:
anapnoe
2023-03-27 16:18:24 +03:00
parent 802fb8a16b
commit a25cab7c89
7 changed files with 358 additions and 128 deletions
+230 -5
View File
@@ -46,16 +46,235 @@ function imageMaskResize() {
onUiUpdate(() => imageMaskResize());
*/
let img2img_tab_index = 0;
let img2img_tab_tool_buttons;
let isPanning;
let parent_container_img;
let spotlight_sketch;
let spotlight_inpaint;
let spotlight_inpaint_sketch;
let spotlight;
let curr_src = [];
let intervalLastUIUpdate;
let sketch_pan;
let inpaint_pan;
let inpaint_sketch_pan;
let curr_pan;
function common_undo_handler(e) {
img2img_tab_tool_buttons[0].click();
}
function common_clear_handler(e){
img2img_tab_tool_buttons[1].click();
}
function common_color_handler(e){
let cb = parent_container_img.querySelector("input[type='color']");
if(!cb){
img2img_tab_tool_buttons[3].click();
e.target.addEventListener("input", function(ev) {
cb = parent_container_img.querySelector("input[type='color']");
cb.value = ev.target.value;
updateInput(cb);
pan_toggle(false, curr_pan);
})
}
}
function common_brush_handler(e){
let cb = parent_container_img.querySelector("input[type='range']");
if(!cb){
img2img_tab_tool_buttons[2].click();
e.target.addEventListener("input", function(ev) {
cb = parent_container_img.querySelector("input[type='range']");
cb.value = ev.target.value;
updateInput(cb);
//pan_toggle(false, curr_pan);
})
}
}
function preventDefault(e) {
e = e || window.event
if (e.preventDefault) {
e.preventDefault()
}
e.returnValue = false
}
function pan_toggle(val, target){
isPanning = val;
target.classList.toggle("on", isPanning);
spotlight.panzoom(val);
if(isPanning){
parent_container_img.classList.add("no-point-events");
parent_container_img.parentElement.classList.add("move");
document.addEventListener('wheel', preventDefault, {passive: false});
}else{
parent_container_img.classList.remove("no-point-events");
parent_container_img.parentElement.classList.remove("move");
document.removeEventListener('wheel', preventDefault, false);
}
}
function common_pan_handler(e){
isPanning = !isPanning;
pan_toggle(isPanning, this);
}
onUiLoaded(function(){
const color_box = '<input type="color">';
const brush_size = '<input type="range" min="0.75" max="110.0">';
spotlight_sketch = new Spotlight();
const spotlight_sketch_parent = gradioApp().querySelector("#img2img_sketch");
spotlight_sketch.init(spotlight_sketch_parent, "-sketch");
spotlight_sketch.addControl("undo", common_undo_handler);
sketch_pan = spotlight_sketch.addControl("pan", common_pan_handler);
spotlight_sketch.addControl("brush", common_brush_handler, brush_size);
spotlight_sketch.addControl("color", common_color_handler, color_box);
spotlight_sketch.addControl("clear",common_clear_handler);
spotlight_inpaint = new Spotlight();
const spotlight_inpaint_parent = gradioApp().querySelector("#img2maskimg");
spotlight_inpaint.init(spotlight_inpaint_parent, "-inpaint");
spotlight_inpaint.addControl("undo", common_undo_handler);
inpaint_pan = spotlight_inpaint.addControl("pan", common_pan_handler);
spotlight_inpaint.addControl("brush", common_brush_handler, brush_size);
spotlight_inpaint.addControl("clear",common_clear_handler);
spotlight_inpaint_sketch = new Spotlight();
const spotlight_inpaint_sketch_parent = gradioApp().querySelector("#inpaint_sketch");
spotlight_inpaint_sketch.init(spotlight_inpaint_sketch_parent, "-inpaint-sketch");
spotlight_inpaint_sketch.addControl("undo", common_undo_handler);
inpaint_sketch_pan = spotlight_inpaint_sketch.addControl("pan", common_pan_handler);
spotlight_inpaint_sketch.addControl("brush", common_brush_handler, brush_size);
spotlight_inpaint_sketch.addControl("color", common_color_handler, color_box);
spotlight_inpaint_sketch.addControl("clear",common_clear_handler);
})
onUiUpdate(function() {
//clearInterval(intervalLastUIUpdate);
const img2img_tab = gradioApp().querySelector('#img2img_img2img_tab');
if(img2img_tab){
if(img2img_tab && selectedTabItemId == "tab_img2img"){
//console.log("UIMASKUPDATE");
const img2img_tab_index = get_img2img_tab_index()[0];
if(img2img_tab_index > 3 || img2img_tab_index == 0) return;
let tabid;
let copytoId;
if(img2img_tab_index == 1){
tabid = "#img2img_img2img_sketch_tab";// #img2img_sketch";
spotlight = spotlight_sketch;
curr_pan = sketch_pan;
}else if(img2img_tab_index == 2){
tabid = "#img2img_inpaint_tab";// #img2maskimg";
spotlight = spotlight_inpaint;
curr_pan = inpaint_pan;
}else if(img2img_tab_index == 3){
tabid = "#img2img_inpaint_sketch_tab";// #inpaint_sketch";
spotlight = spotlight_inpaint_sketch;
curr_pan = inpaint_sketch_pan;
}
const parent_img2img_tab_img = gradioApp().querySelector(tabid);
//const parent_img2img_tab_copy_to = parent_img2img_tab_img.querySelector(copytoId);
const spotlight_parent = parent_img2img_tab_img.querySelector('div[data-testid="image"]');
parent_container_img = parent_img2img_tab_img.querySelector('div[data-testid="image"] > div');
const img2img_tab_img = parent_container_img.querySelector('img');
img2img_tab_tool_buttons = parent_container_img.querySelectorAll('button');
if(img2img_tab_img){
pan_toggle(false, curr_pan);
spotlight.panzoom(false);
}
function getImgSync(image){
let c_src;
if(curr_src[img2img_tab_index] != image.src){
//console.log("NEWIMAGE");
curr_src[img2img_tab_index] = image.src;
let w = image.naturalWidth;
let h = image.naturalHeight;
parent_container_img.style.width = `${w}px`;
parent_container_img.style.height = `${h}px`;
spotlight.show([{
media: "node",
src: spotlight_parent,
autohide: true,
control: ["pan","clear","undo","fullscreen","autofit","zoom-in","zoom-out","close"],
class: "relative",
}],
);
parent_container_img.style.flexGrow = "0";
}
}
const getImage = async (image) => {
if(!image){
if(spotlight.panel){
spotlight.close(false, true);
parent_container_img.style.flexGrow = "1";
curr_src[img2img_tab_index] = "";
spotlight_parent.style = "";
}
}else if (image.complete) {
return getImgSync(image);
}else{
return new Promise(resolve => {
image.onload = () => {
resolve(getImgSync(image));
};
});
}
};
getImage(img2img_tab_img);
}
})
/*
function onLastUIUpdate(){
clearInterval(intervalLastUIUpdate);
const img2img_tab = gradioApp().querySelector('#img2img_img2img_tab');
if(img2img_tab && selectedTabItemId=="tab_img2img"){
const current_img2img_tab_index = get_img2img_tab_index()[0];
//if(img2img_tab_index != current_img2img_tab_index){
//console.log(current_img2img_tab_index);
if(current_img2img_tab_index > 3) return;
console.log(current_img2img_tab_index);
if(current_img2img_tab_index > 3 || current_img2img_tab_index == 0) return;
img2img_tab_index = current_img2img_tab_index;
const parent_img2img_tab_img = gradioApp().querySelector('#mode_img2img > div:nth-child('+(img2img_tab_index+2)+') div[data-testid="image"] > div');
let tabid;
if(img2img_tab_index == 1){
tabid = "#img2img_img2img_sketch_tab";// #img2img_sketch";
}else if(img2img_tab_index == 2){
tabid = "#img2img_inpaint_tab";// #img2maskimg";
}else if(img2img_tab_index == 3){
tabid = "#img2img_inpaint_sketch_tab";// #inpaint_sketch";
}
//const parent_img2img_tab_img = gradioApp().querySelector('#mode_img2img > div:nth-child('+(img2img_tab_index+2)+') div[data-testid="image"] > div');
const parent_img2img_tab_img = gradioApp().querySelector('#mode_img2img '+tabid+' div[data-testid="image"] > div');
const img2img_tab_img = parent_img2img_tab_img.querySelector('img');
if(img2img_tab_img){
parent_img2img_tab_img.style.flexGrow = "0";
@@ -70,4 +289,10 @@ onUiUpdate(function() {
}
//}
}
})
}
*/
/* onUiUpdate(function() {
if(intervalLastUIUpdate != null) clearInterval(intervalLastUIUpdate);
intervalLastUIUpdate = setInterval(onLastUIUpdate, 1000);
}) */