|
|
|
@@ -1,29 +1,35 @@ |
|
|
|
<template> |
|
|
|
<div class="soundscape"> |
|
|
|
<source-node |
|
|
|
v-for="(source, index) in soundscape.sources" |
|
|
|
:key="index" |
|
|
|
:source="source" |
|
|
|
v-on:delete="deleteSource(source)" |
|
|
|
> |
|
|
|
</source-node> |
|
|
|
<source-node |
|
|
|
v-on:drop="dropSource" |
|
|
|
v-on:dragover="dragSource" |
|
|
|
:dummy="true" |
|
|
|
></source-node> |
|
|
|
<filter-node |
|
|
|
v-for="(filter, index) in soundscape.filters" |
|
|
|
:key="index" |
|
|
|
:filter="filter" |
|
|
|
v-on:delete="deleteFilter(filter)" |
|
|
|
> |
|
|
|
</filter-node> |
|
|
|
<filter-node |
|
|
|
v-on:drop="dropFilter" |
|
|
|
v-on:dragover="dragFilter" |
|
|
|
:dummy="true" |
|
|
|
></filter-node> |
|
|
|
<div class="soundscape-section"> |
|
|
|
<source-node |
|
|
|
v-for="(source, index) in soundscape.sources" |
|
|
|
:key="index" |
|
|
|
:source="source" |
|
|
|
v-on:delete="deleteSource(source)" |
|
|
|
> |
|
|
|
</source-node> |
|
|
|
<source-node |
|
|
|
v-on:drop="dropSource" |
|
|
|
v-on:dragenter="dragEnter" |
|
|
|
v-on:dragover="dragSource" |
|
|
|
:dummy="true" |
|
|
|
></source-node> |
|
|
|
</div> |
|
|
|
<div class="soundscape-section"> |
|
|
|
<filter-node |
|
|
|
v-for="(filter, index) in soundscape.filters" |
|
|
|
:key="index" |
|
|
|
:filter="filter" |
|
|
|
v-on:delete="deleteFilter(filter)" |
|
|
|
> |
|
|
|
</filter-node> |
|
|
|
<filter-node |
|
|
|
v-on:drop="dropFilter" |
|
|
|
v-on:dragenter="dragEnter" |
|
|
|
v-on:dragover="dragFilter" |
|
|
|
:dummy="true" |
|
|
|
></filter-node> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div></div> |
|
|
|
</template> |
|
|
|
@@ -51,6 +57,9 @@ export default class SoundscapeComp extends Vue { |
|
|
|
started = false; |
|
|
|
context!: AudioContext; |
|
|
|
|
|
|
|
dragEnter(event: DragEvent): void { |
|
|
|
event.preventDefault(); |
|
|
|
} |
|
|
|
dragSource(event: DragEvent): void { |
|
|
|
if (event.dataTransfer) { |
|
|
|
if (event.dataTransfer.types.includes("source")) event.preventDefault(); |
|
|
|
@@ -103,16 +112,19 @@ export default class SoundscapeComp extends Vue { |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
.soundscape { |
|
|
|
width: auto; |
|
|
|
height: max-content; |
|
|
|
margin: auto; |
|
|
|
padding: 20px; |
|
|
|
margin: 20px; |
|
|
|
display: grid; |
|
|
|
grid-template-columns: repeat(auto-fit, minmax(1fr, 400px)); |
|
|
|
grid-auto-rows: auto-fit; |
|
|
|
grid-gap: 20px; |
|
|
|
background: #222; |
|
|
|
border-radius: 30px; |
|
|
|
} |
|
|
|
|
|
|
|
.soundscape-section { |
|
|
|
display: grid; |
|
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); |
|
|
|
grid-auto-rows: max-content; |
|
|
|
grid-gap: 20px; |
|
|
|
margin-top: 10px; |
|
|
|
margin-bottom: 10px; |
|
|
|
} |
|
|
|
</style> |