Add layer pasting

Insert new layers above selected layer
Fix screen color picker issue
This commit is contained in:
JannisX11 2023-11-27 22:36:15 +01:00
parent ba67cd1bc5
commit 0953ba696a
4 changed files with 47 additions and 9 deletions

View File

@ -451,7 +451,7 @@ Interface.definePanels(() => {
if (isApp) {
ipcRenderer.on('set-main-color', (event, arg) => {
ColorPanel.set(arg, true);
ColorPanel.set(arg);
})
}

View File

@ -153,12 +153,34 @@ class TextureLayer {
setSize(width, height) {
this.canvas.width = width;
this.canvas.height = height;
return this;
}
toggleVisibility() {
Undo.initEdit({layers: [this]});
this.visible = !this.visible;
this.texture.updateChangesAfterEdit();
Undo.finishEdit('Toggle layer visibility');
return this;
}
scrollTo() {
let el = document.querySelector(`#layers_list > li[layer_id="${this.uuid}"]`);
if (el) {
el.scrollIntoView({behavior: 'smooth', block: 'nearest'});
}
return this;
}
addForEditing() {
let i = this.texture.layers.indexOf(this.texture.selected_layer);
if (i == -1) {
this.texture.layers.push(this);
} else {
this.texture.layers.splice(i+1, 0, this);
}
this.select();
Vue.nextTick(() => {
this.scrollTo();
});
return this;
}
mergeDown(undo = true) {
let down_layer = this.texture.layers[this.texture.layers.indexOf(this) - 1];
@ -369,11 +391,30 @@ SharedActions.add('duplicate', {
copy.name += '-copy';
Undo.initEdit({textures: [texture]});
let layer = new TextureLayer(copy, texture);
texture.layers.push(layer);
layer.select();
layer.addForEditing();
Undo.finishEdit('Duplicate layer');
}
})
SharedActions.add('copy', {
subject: 'layer',
condition: () => Prop.active_panel == 'layers' && TextureLayer.selected,
run() {
let layer = TextureLayer.selected;
let copy = layer.getUndoCopy(true);
Clipbench.layer = copy;
}
})
SharedActions.add('paste', {
subject: 'layer',
condition: () => Prop.active_panel == 'layers' && Texture.selected && Clipbench.layer,
run() {
let texture = Texture.selected;
Undo.initEdit({textures: [texture]});
let layer = new TextureLayer(Clipbench.layer, texture);
layer.addForEditing();
Undo.finishEdit('Paste layer');
}
})
BARS.defineActions(() => {
new Action('create_empty_layer', {
@ -387,8 +428,7 @@ BARS.defineActions(() => {
name: `layer #${texture.layers.length+1}`
}, texture);
layer.setSize(texture.width, texture.height);
texture.layers.push(layer);
layer.select();
layer.addForEditing();
Undo.finishEdit('Create empty layer');
BARS.updateConditions();
}

View File

@ -2099,8 +2099,7 @@ SharedActions.add('duplicate', {
let image_data = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
new_layer.setSize(canvas.width, canvas.height);
new_layer.ctx.putImageData(image_data, 0, 0);
texture.layers.push(new_layer);
new_layer.select();
new_layer.addForEditing();
new_layer.setLimbo();
texture.updateLayerChanges(true);
texture.saved = false;

View File

@ -1358,8 +1358,7 @@ class Texture {
let image_data = this.ctx.getImageData(0, 0, this.width, this.height);
layer.setSize(this.width, this.height);
layer.ctx.putImageData(image_data, 0, 0);
this.layers.push(layer);
layer.select();
layer.addForEditing();
}
if (undo) Undo.finishEdit('Enable layers on texture');
updateInterfacePanels();