mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Feature : merge layers
Added feature to merge a layer with the layer below Done at #jsconfeu2014 :) New icon in icons : merge-icon.png TODO : reorder the icons folder, it's waaaaaaay too messy !!
This commit is contained in:
@@ -7,4 +7,8 @@
|
|||||||
|
|
||||||
.action-icon.edit-icon {
|
.action-icon.edit-icon {
|
||||||
background-image: url('../img/tools/pen.png');
|
background-image: url('../img/tools/pen.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-icon.merge-icon {
|
||||||
|
background-image: url('../img/merge-icon.png');
|
||||||
}
|
}
|
||||||
@@ -46,22 +46,34 @@
|
|||||||
cursor : pointer;
|
cursor : pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-item .edit-icon {
|
.layer-item .edit-icon, .layer-item .merge-icon {
|
||||||
float: right;
|
float: right;
|
||||||
width: 30px;
|
|
||||||
background-size: 12px;
|
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition : opacity 0.2s;
|
transition : opacity 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-item:hover .edit-icon {
|
.layer-item:hover .edit-icon, .layer-item:hover .merge-icon {
|
||||||
opacity : 0.6;
|
opacity : 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-item:hover .edit-icon:hover {
|
.layer-item:hover .edit-icon:hover, .layer-item:hover .merge-icon:hover {
|
||||||
opacity : 1;
|
opacity : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layer-item .edit-icon {
|
||||||
|
width: 25px;
|
||||||
|
background-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-item .merge-icon {
|
||||||
|
width: 18px;
|
||||||
|
background-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-item:last-child .merge-icon {
|
||||||
|
display : none;
|
||||||
|
}
|
||||||
|
|
||||||
.layer-item:hover {
|
.layer-item:hover {
|
||||||
background : #222;
|
background : #222;
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/img/merge-icon.png
Normal file
BIN
src/img/merge-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 438 B |
@@ -67,6 +67,9 @@
|
|||||||
} else if (el.classList.contains('edit-icon')) {
|
} else if (el.classList.contains('edit-icon')) {
|
||||||
index = el.parentNode.dataset.layerIndex;
|
index = el.parentNode.dataset.layerIndex;
|
||||||
this.renameLayerAt_(index);
|
this.renameLayerAt_(index);
|
||||||
|
} else if (el.classList.contains('merge-icon')) {
|
||||||
|
index = el.parentNode.dataset.layerIndex;
|
||||||
|
this.mergeDownLayerAt_(index);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,6 +82,11 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ns.LayersListController.prototype.mergeDownLayerAt_ = function (index) {
|
||||||
|
this.piskelController.mergeDownLayerAt(index);
|
||||||
|
this.renderLayerList_();
|
||||||
|
};
|
||||||
|
|
||||||
ns.LayersListController.prototype.onButtonClick_ = function (button) {
|
ns.LayersListController.prototype.onButtonClick_ = function (button) {
|
||||||
var action = button.getAttribute('data-action');
|
var action = button.getAttribute('data-action');
|
||||||
if (action == 'up') {
|
if (action == 'up') {
|
||||||
|
|||||||
@@ -205,6 +205,18 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ns.PiskelController.prototype.mergeDownLayerAt = function (index) {
|
||||||
|
var layer = this.getLayerByIndex(index);
|
||||||
|
var downLayer = this.getLayerByIndex(index-1);
|
||||||
|
if (layer && downLayer) {
|
||||||
|
var mergedLayer = pskl.utils.LayerUtils.mergeLayers(layer, downLayer);
|
||||||
|
this.removeLayerAt(index);
|
||||||
|
this.piskel.addLayerAt(mergedLayer, index);
|
||||||
|
this.removeLayerAt(index-1);
|
||||||
|
this.selectLayer(mergedLayer);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
ns.PiskelController.prototype.generateLayerName_ = function () {
|
ns.PiskelController.prototype.generateLayerName_ = function () {
|
||||||
var name = "Layer " + this.layerIdCounter;
|
var name = "Layer " + this.layerIdCounter;
|
||||||
while (this.hasLayerForName_(name)) {
|
while (this.hasLayerForName_(name)) {
|
||||||
|
|||||||
@@ -99,6 +99,12 @@
|
|||||||
$.publish(Events.PISKEL_RESET);
|
$.publish(Events.PISKEL_RESET);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ns.PublicPiskelController.prototype.mergeDownLayerAt = function (index) {
|
||||||
|
this.raiseSaveStateEvent_(this.piskelController.mergeDownLayerAt, [index]);
|
||||||
|
this.piskelController.mergeDownLayerAt(index);
|
||||||
|
$.publish(Events.PISKEL_RESET);
|
||||||
|
};
|
||||||
|
|
||||||
ns.PublicPiskelController.prototype.moveLayerUp = function () {
|
ns.PublicPiskelController.prototype.moveLayerUp = function () {
|
||||||
this.raiseSaveStateEvent_(this.piskelController.moveLayerUp, []);
|
this.raiseSaveStateEvent_(this.piskelController.moveLayerUp, []);
|
||||||
this.piskelController.moveLayerUp();
|
this.piskelController.moveLayerUp();
|
||||||
|
|||||||
@@ -73,6 +73,10 @@
|
|||||||
this.layers.push(layer);
|
this.layers.push(layer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ns.Piskel.prototype.addLayerAt = function (layer, index) {
|
||||||
|
this.layers.splice(index, 0, layer);
|
||||||
|
};
|
||||||
|
|
||||||
ns.Piskel.prototype.moveLayerUp = function (layer) {
|
ns.Piskel.prototype.moveLayerUp = function (layer) {
|
||||||
var index = this.layers.indexOf(layer);
|
var index = this.layers.indexOf(layer);
|
||||||
if (index > -1 && index < this.layers.length-1) {
|
if (index > -1 && index < this.layers.length-1) {
|
||||||
|
|||||||
@@ -25,6 +25,18 @@
|
|||||||
frames.push(frame);
|
frames.push(frame);
|
||||||
}
|
}
|
||||||
return frames;
|
return frames;
|
||||||
|
},
|
||||||
|
|
||||||
|
mergeLayers : function (layerA, layerB) {
|
||||||
|
var framesA = layerA.getFrames();
|
||||||
|
var framesB = layerB.getFrames();
|
||||||
|
var mergedFrames = [];
|
||||||
|
framesA.forEach(function (frame, index) {
|
||||||
|
var otherFrame = framesB[index];
|
||||||
|
mergedFrames.push(pskl.utils.FrameUtils.merge([otherFrame, frame]));
|
||||||
|
});
|
||||||
|
var mergedLayer = pskl.model.Layer.fromFrames(layerA.getName(), mergedFrames);
|
||||||
|
return mergedLayer;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<script type="text/template" id="layer-item-template">
|
<script type="text/template" id="layer-item-template">
|
||||||
<li class="layer-item {{isselected:current-layer-item}}" data-layer-index="{{layerindex}}">{{layername}}
|
<li class="layer-item {{isselected:current-layer-item}}" data-layer-index="{{layerindex}}">{{layername}}
|
||||||
<span class="action-icon edit-icon" title="edit name"> </span>
|
<span class="action-icon edit-icon" title="Edit layer name" rel="tooltip" data-placement="top"> </span>
|
||||||
|
<span class="action-icon merge-icon" title="Merge with layer below" rel="tooltip" data-placement="top"> </span>
|
||||||
</li>
|
</li>
|
||||||
</script>
|
</script>
|
||||||
<ul class="layers-list"></ul>
|
<ul class="layers-list"></ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user