From 9967de43dd411a59e5144c87e791535d4309eda5 Mon Sep 17 00:00:00 2001 From: Daniel Ledda Date: Sun, 5 Sep 2021 17:42:05 +0200 Subject: [PATCH] feat: better styling, add new track --- public/global.css | 2 +- src/BeatGroup.ts | 14 +++++- src/main.ts | 10 ++--- .../BeatGroup/Beat/BeatUnit/BeatUnitView.ts | 1 - src/ui/BeatGroup/BeatGroup.css | 3 +- src/ui/BeatGroup/BeatGroupView.ts | 14 +++++- .../BeatGroupSettingsView.ts | 16 ++++--- src/ui/BeatSettings/BeatSettingsView.ts | 43 ++++--------------- src/ui/Root/Root.css | 4 ++ src/ui/UINode.ts | 4 +- 10 files changed, 55 insertions(+), 56 deletions(-) diff --git a/public/global.css b/public/global.css index db5c076..3ce2402 100644 --- a/public/global.css +++ b/public/global.css @@ -65,7 +65,7 @@ button:focus { background-color: transparent; } ::-webkit-scrollbar-thumb { - background-color: rgba(0,0,0,0.25); + background-color: rgba(0,0,0); } @font-face { diff --git a/src/BeatGroup.ts b/src/BeatGroup.ts index dc29ecd..79bfff0 100644 --- a/src/BeatGroup.ts +++ b/src/BeatGroup.ts @@ -8,11 +8,11 @@ type BeatGroupInitOptions = { barCount: number; isLooping: boolean; timeSigUp: number; - beats: BeatInitOptions[], + beats?: BeatInitOptions[], loopLength?: number, forceFullBars?: boolean, useAutoBeatLength?: boolean, -} +}; export const enum BeatGroupEvents { BeatOrderChanged="BGE0", @@ -206,6 +206,16 @@ export default class BeatGroup implements IPublisher(publisher: IPublisher, event: "all" | T[] | T): void { + if (event === BeatGroupEvents.BeatListChanged) { + this.redraw(); + } } rebuild(): HTMLDivElement { diff --git a/src/ui/BeatGroupSettings/BeatGroupSettingsView.ts b/src/ui/BeatGroupSettings/BeatGroupSettingsView.ts index 172a18c..2223c0e 100644 --- a/src/ui/BeatGroupSettings/BeatGroupSettingsView.ts +++ b/src/ui/BeatGroupSettings/BeatGroupSettingsView.ts @@ -97,20 +97,24 @@ export default class BeatGroupSettingsView extends UINode implements ISubscriber UINode.make("div", { classes: ["beat-group-settings-options"], subs: [ - UINode.make("div", { - classes: ["beat-group-settings-bar-count", "beat-group-settings-option"], - subs: [ - this.barCountInput.render(), - ], - }), UINode.make("div", { classes: ["beat-group-settings-boxes", "beat-group-settings-option"], subs: [ this.timeSigUpInput.render(), ], }), + UINode.make("div", { + classes: ["beat-group-settings-bar-count", "beat-group-settings-option"], + subs: [ + this.barCountInput.render(), + ], + }), this.loopSettingsView.render(), this.autoBeatOptions, + UINode.make("button", { + innerText: "New Track", + onclick: () => this.beatGroup.addBeat(), + }) ], }), ], diff --git a/src/ui/BeatSettings/BeatSettingsView.ts b/src/ui/BeatSettings/BeatSettingsView.ts index bb5f1bf..8fd6155 100644 --- a/src/ui/BeatSettings/BeatSettingsView.ts +++ b/src/ui/BeatSettings/BeatSettingsView.ts @@ -13,9 +13,7 @@ export type BeatSettingsViewUINodeOptions = UINodeOptions & { export default class BeatSettingsView extends UINode implements ISubscriber { private beat: Beat; private visible = false; - private timeSigUp!: NumberInputView; - private timeSigDown!: NumberInputView; - private barCountInput!: NumberInputView; + private nameInput!: HTMLInputElement; private loopSettingsView!: BeatLikeLoopSettingsView; constructor(options: BeatSettingsViewUINodeOptions) { @@ -29,11 +27,8 @@ export default class BeatSettingsView extends UINode implements ISubscriber { } notify(publisher: IPublisher, event: "all" | T[] | T): void { - if (event === BeatEvents.NewTimeSig) { - this.timeSigUp.setValue(this.beat.getTimeSigUp()); - this.timeSigDown.setValue(this.beat.getTimeSigDown()); - } else if (event === BeatEvents.NewBarCount) { - this.barCountInput.setValue(this.beat.getBarCount()); + if (event === BeatEvents.NewName) { + this.nameInput.value = this.beat.getName(); } } @@ -52,37 +47,15 @@ export default class BeatSettingsView extends UINode implements ISubscriber { rebuild(): HTMLElement { this.loopSettingsView = new BeatLikeLoopSettingsView({beatLike: this.beat}); - this.timeSigUp = new NumberInputView({ - initialValue: this.beat.getTimeSigUp(), - setter: (value: number) => this.beat.setBarCount(value), - getter: () => this.beat.getBarCount(), - }); - this.timeSigDown = new NumberInputView({ - initialValue: this.beat.getTimeSigDown(), - setter: (value: number) => this.beat.setBarCount(value), - getter: () => this.beat.getBarCount(), - }); - this.barCountInput = new NumberInputView({ - label: "Bar Count:", - initialValue: this.beat.getBarCount(), - setter: (value: number) => this.beat.setBarCount(value), - getter: () => this.beat.getBarCount(), + this.nameInput = UINode.make("input", { + value: this.beat.getName(), + type: "text", + oninput: (event: Event) => this.beat.setName((event.target as HTMLInputElement).value), }); this.node = UINode.make("div", { classes: ["beat-settings"], subs: [ - UINode.make("div", { - classes: ["beat-settings-time-sig", "beat-settings-option-group", "beat-settings-option"], - subs: [ - UINode.make("label", {innerText: "Time Signature:"}), - this.timeSigUp.render(), - this.timeSigDown.render(), - ] - }), - UINode.make("div", { - classes: ["beat-settings-bar", "beat-settings-option-group", "beat-settings-option"], - subs: [this.barCountInput.render()], - }), + this.nameInput, this.loopSettingsView.render(), ], }); diff --git a/src/ui/Root/Root.css b/src/ui/Root/Root.css index 0acfe31..c2bca09 100644 --- a/src/ui/Root/Root.css +++ b/src/ui/Root/Root.css @@ -13,6 +13,7 @@ } .root { + overflow: hidden; color: var(--color-p-light); background-color: var(--color-bg-dark); height: 100vh; @@ -36,12 +37,15 @@ .root-beat-stage-container { flex: 1; height: 100%; + width: calc(100vw - 30em); display: flex; justify-content: center; flex-direction: column; } .root-beat-stage { + max-width: calc(100vw - 30em); + overflow: hidden; margin: auto; } diff --git a/src/ui/UINode.ts b/src/ui/UINode.ts index ed70945..3d72619 100644 --- a/src/ui/UINode.ts +++ b/src/ui/UINode.ts @@ -32,13 +32,13 @@ export default abstract class UINode { redraw(): void { const oldNode = this.node; - this.render(); if (!oldNode || !this.node) { return; } const parent = this.node.parentElement; if (parent) { - parent.replaceChild(oldNode, this.node); + this.node = this.rebuild(); + parent.replaceChild(this.node, oldNode); } }