diff --git a/src/assets/eye-fill.svg b/src/assets/eye-fill.svg
new file mode 100644
index 0000000..288d2eb
--- /dev/null
+++ b/src/assets/eye-fill.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/src/assets/eye-slash.svg b/src/assets/eye-slash.svg
new file mode 100644
index 0000000..359c270
--- /dev/null
+++ b/src/assets/eye-slash.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
index 121c2d7..a1f6487 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1308,6 +1308,7 @@ class Layer {
this.visible = !this.visible
updateUI()
updateMenu()
+ updateLayers()
}
}
@@ -3516,6 +3517,22 @@ function updateLayers() {
})
layerName.innerText = layer.name
layerHeader.appendChild(layerName)
+ // Visibility icon element
+ let visibilityIcon = document.createElement("img")
+ visibilityIcon.className = "visibility-icon"
+ visibilityIcon.src = layer.visible ? "assets/eye-fill.svg" : "assets/eye-slash.svg"
+
+ // Toggle visibility on click
+ visibilityIcon.addEventListener("click", (e) => {
+ e.stopPropagation() // Prevent click from bubbling to the layerHeader click listener
+ layer.visible = !layer.visible
+ // visibilityIcon.src = layer.visible ? "assets/eye-fill.svg" : "assets/eye-slash.svg"
+ updateUI()
+ updateMenu()
+ updateLayers()
+ })
+
+ layerHeader.appendChild(visibilityIcon)
layerHeader.addEventListener("click", (e) => {
context.activeObject.currentLayer = context.activeObject.layers.indexOf(layer)
updateLayers()
@@ -3523,6 +3540,9 @@ function updateLayers() {
})
let layerTrack = document.createElement("div")
layerTrack.className = "layer-track"
+ if (!layer.visible) {
+ layerTrack.classList.add("invisible")
+ }
framescontainer.appendChild(layerTrack)
layerTrack.addEventListener("click", (e) => {
let mouse = getMousePos(layerTrack, e)
diff --git a/src/styles.css b/src/styles.css
index 2232207..3a160cf 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -339,6 +339,10 @@ button {
border-top: 1px solid #ddd;
border-bottom: 1px solid #999;
flex-shrink: 0;
+
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
cursor: pointer;
}
.layer-header.active {
@@ -359,6 +363,13 @@ button {
.layer-header.active > .layer-name {
color: #000;
}
+/* Visibility icon positioning */
+.visibility-icon {
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ margin-right: 10px;
+}
.layer-track {
min-width: 100%;
height: calc( 2 * var(--lineheight));
@@ -377,6 +388,9 @@ button {
border-bottom: 1px solid #ccc;
flex-shrink: 0;
}
+.layer-track.invisible {
+ opacity: 0.3;
+}
.frame {
width: 25px;
height: 100%;
@@ -632,4 +646,7 @@ button {
.audioWaveform {
filter: invert(1);
}
+ .visibility-icon {
+ filter: invert(1);
+ }
}