Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7893864
ボリューム編集用のstore状態とコマンドを追加
romot-co Oct 30, 2025
e140c9f
ボリューム編集のstate machine実装
romot-co Oct 30, 2025
d2485d8
ボリューム編集UIコンポーネントの追加と統合
romot-co Oct 30, 2025
051e4ee
指摘点修正
romot-co Nov 4, 2025
6cffd00
指摘点修正とコメント付与
romot-co Nov 8, 2025
974f1c4
state machineコメント修正
romot-co Nov 9, 2025
8bfa18d
Merge branch 'main' into add/volue-edit_2733-statemachine
romot-co Nov 9, 2025
54ebb07
ログメッセージをpreviewVolumeEditのものに適切に修正
romot-co Nov 12, 2025
816e364
Merge remote-tracking branch 'origin/main' into add/volue-edit_2733-s…
romot-co Nov 26, 2025
c3882cb
ボリューム編集UI側のベース
romot-co Nov 26, 2025
05421e3
オートスクロールが効かなかったのを修正
romot-co Nov 27, 2025
7142b96
再生時にも編集できるようにする
romot-co Nov 27, 2025
1250e74
Merge branch 'main' into add/volue-edit_2733-editor-ui
Hiroshiba Dec 4, 2025
9610f0c
パラメータパネル高さを保存し、200pxをデフォルトにする
romot-co Jan 8, 2026
376c588
-1dBから-25dB幅にする
romot-co Jan 8, 2026
de98a66
テストでの問題修正
romot-co Jan 8, 2026
e0b039e
[update snapshots]
romot-co Jan 8, 2026
b8b7691
Merge upstream/main into add/volue-edit_2733-editor-ui
romot-co Jan 8, 2026
4f02434
スナップショット更新 [update snapshots]
romot-co Jan 8, 2026
edfcba0
スナップショットをLinux環境のハッシュに合わせる
romot-co Jan 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/components/Menu/ContextMenu/Container.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ defineProps<{
menudata: ContextMenuItemData[];
}>();
defineExpose({
show: (event?: MouseEvent) => {
contextMenu.value?.show(event);
},
hide: () => {
contextMenu.value?.hide();
},
Expand Down
45 changes: 37 additions & 8 deletions src/components/Sing/ScoreSequencer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -216,18 +216,20 @@
</div>
</template>
<template #after>
<SequencerParameterPanel v-if="isParameterPanelOpen" />
<SequencerParameterPanel v-if="isParameterPanelOpen" :offsetX="scrollX" />
</template>
</QSplitter>
</template>

<script lang="ts">
import { ComputedRef } from "vue";
import { ComputedRef, Ref } from "vue";
import type { InjectionKey } from "vue";

export const numMeasuresInjectionKey: InjectionKey<{
numMeasures: ComputedRef<number>;
}> = Symbol("sequencerNumMeasures");
export const sequencerBodyInjectionKey: InjectionKey<Ref<HTMLElement | null>> =
Symbol("sequencerBody");
</script>

<script setup lang="ts">
Expand Down Expand Up @@ -271,7 +273,7 @@ import {
PREVIEW_SOUND_DURATION,
SEQUENCER_MIN_NUM_MEASURES,
} from "@/sing/viewHelper";
import { getLast } from "@/sing/utility";
import { clamp, getLast } from "@/sing/utility";
import SequencerGrid from "@/components/Sing/SequencerGrid/Container.vue";
import SequencerRuler from "@/components/Sing/SequencerRuler/Container.vue";
import SequencerKeys from "@/components/Sing/SequencerKeys.vue";
Expand Down Expand Up @@ -443,19 +445,46 @@ const phraseInfosInOtherTracks = computed(() => {
);
});

const parameterPanelHeight = ref(300);
const DEFAULT_PARAMETER_PANEL_HEIGHT = 200;
const MIN_PARAMETER_PANEL_HEIGHT = 100;
const MAX_PARAMETER_PANEL_HEIGHT = 500;

const splitterPosition = computed(() => store.state.splitterPosition);
const parameterPanelHeight = ref(DEFAULT_PARAMETER_PANEL_HEIGHT);
const isParameterPanelOpen = computed(
() => store.state.experimentalSetting.showParameterPanel,
);

const setParameterPanelHeight = (height: number) => {
if (isParameterPanelOpen.value) {
parameterPanelHeight.value = height;
}
watch(
isParameterPanelOpen,
(isOpen) => {
if (isOpen) {
const saved = splitterPosition.value.parameterPanelHeight;
parameterPanelHeight.value = clamp(
saved ?? DEFAULT_PARAMETER_PANEL_HEIGHT,
MIN_PARAMETER_PANEL_HEIGHT,
MAX_PARAMETER_PANEL_HEIGHT,
);
}
},
{ immediate: true },
);

const setParameterPanelHeight = async (height: number) => {
if (!isParameterPanelOpen.value) return;
parameterPanelHeight.value = height;
await store.actions.SET_ROOT_MISC_SETTING({
key: "splitterPosition",
value: {
...splitterPosition.value,
parameterPanelHeight: height,
},
});
};

const scrollBarWidth = ref(12);
const sequencerBody = ref<HTMLElement | null>(null);
provide(sequencerBodyInjectionKey, sequencerBody);

// ステートマシン
const {
Expand Down
14 changes: 4 additions & 10 deletions src/components/Sing/SequencerParameterPanel.vue
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
<template>
<div class="sequencer-parameter-panel">
<SequencerVolumeEditor :playheadTicks :tempos :tpqn :zoomX :zoomY />
<SequencerVolumeEditor :offsetX="props.offsetX" />
</div>
</template>

<script setup lang="ts">
import { computed } from "vue";
import SequencerVolumeEditor from "@/components/Sing/SequencerVolumeEditor.vue";
import { useStore } from "@/store";

const store = useStore();

const playheadTicks = computed(() => store.getters.PLAYHEAD_POSITION);
const tempos = computed(() => store.state.tempos);
const tpqn = computed(() => store.state.tpqn);
const zoomX = computed(() => store.state.sequencerZoomX);
const zoomY = computed(() => store.state.sequencerZoomY);
const props = defineProps<{
offsetX: number;
}>();
</script>

<style scoped lang="scss">
Expand Down
Loading
Loading