Numeric values on main VUs.
This commit is contained in:
@@ -94,7 +94,7 @@ const styles = (theme: Theme) => createStyles({
|
|||||||
},
|
},
|
||||||
vuMeterL: {
|
vuMeterL: {
|
||||||
position: "fixed",
|
position: "fixed",
|
||||||
paddingLeft: 12,
|
paddingLeft: 6,
|
||||||
paddingRight: 4,
|
paddingRight: 4,
|
||||||
paddingBottom: 24,
|
paddingBottom: 24,
|
||||||
left: 0,
|
left: 0,
|
||||||
@@ -634,10 +634,10 @@ const PluginControlView =
|
|||||||
return (
|
return (
|
||||||
<div className={classes.frame}>
|
<div className={classes.frame}>
|
||||||
<div className={classes.vuMeterL}>
|
<div className={classes.vuMeterL}>
|
||||||
<VuMeter display="input" instanceId={pedalboardItem.instanceId} />
|
<VuMeter displayText={true} display="input" instanceId={pedalboardItem.instanceId} />
|
||||||
</div>
|
</div>
|
||||||
<div className={vuMeterRClass}>
|
<div className={vuMeterRClass}>
|
||||||
<VuMeter display="output" instanceId={pedalboardItem.instanceId} />
|
<VuMeter displayText={true} display="output" instanceId={pedalboardItem.instanceId} />
|
||||||
</div>
|
</div>
|
||||||
<div className={gridClass} >
|
<div className={gridClass} >
|
||||||
{
|
{
|
||||||
|
|||||||
+84
-5
@@ -20,8 +20,7 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Theme } from '@mui/material/styles';
|
import { Theme } from '@mui/material/styles';
|
||||||
import { WithStyles } from '@mui/styles';
|
import { WithStyles } from '@mui/styles';
|
||||||
import createStyles from '@mui/styles/createStyles';
|
import {createStyles,withStyles} from '@mui/styles';
|
||||||
import withStyles from '@mui/styles/withStyles';
|
|
||||||
import { PiPedalModel, State,PiPedalModelFactory, VuUpdateInfo, VuSubscriptionHandle } from './PiPedalModel';
|
import { PiPedalModel, State,PiPedalModelFactory, VuUpdateInfo, VuSubscriptionHandle } from './PiPedalModel';
|
||||||
|
|
||||||
|
|
||||||
@@ -55,13 +54,15 @@ class TelltaleState {
|
|||||||
telltaleDb: number = MIN_DB;
|
telltaleDb: number = MIN_DB;
|
||||||
lastTelltaleTime: number = 0;
|
lastTelltaleTime: number = 0;
|
||||||
telltaleHoldTime: number = 0;
|
telltaleHoldTime: number = 0;
|
||||||
|
telltaleHoldValue: number = MIN_DB;
|
||||||
|
|
||||||
reset() : void {
|
reset() : void {
|
||||||
this.telltaleHoldTime = 0;
|
this.telltaleHoldTime = 0;
|
||||||
this.lastTelltaleTime = 0;
|
this.lastTelltaleTime = 0;
|
||||||
this.telltaleDb = MIN_DB;
|
this.telltaleDb = MIN_DB;
|
||||||
|
this.telltaleHoldValue = MIN_DB;
|
||||||
}
|
}
|
||||||
getValue(currentDb: number): number {
|
getTelltaleHoldValue(currentDb: number): number {
|
||||||
let t = new Date().getTime();
|
let t = new Date().getTime();
|
||||||
|
|
||||||
let holdValue: number;
|
let holdValue: number;
|
||||||
@@ -78,6 +79,7 @@ class TelltaleState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.telltaleHoldValue = holdValue;
|
||||||
|
|
||||||
if (currentDb > holdValue) {
|
if (currentDb > holdValue) {
|
||||||
this.telltaleDb = currentDb;
|
this.telltaleDb = currentDb;
|
||||||
@@ -93,7 +95,7 @@ class TelltaleState {
|
|||||||
const LEFT_X = BORDER_THICKNESS;
|
const LEFT_X = BORDER_THICKNESS;
|
||||||
const RIGHT_X = BORDER_THICKNESS + + CHANNEL_WIDTH + BORDER_THICKNESS;
|
const RIGHT_X = BORDER_THICKNESS + + CHANNEL_WIDTH + BORDER_THICKNESS;
|
||||||
|
|
||||||
const styles = ({ palette }: Theme) => createStyles({
|
const styles = (theme: Theme) => createStyles({
|
||||||
frame: {
|
frame: {
|
||||||
position: "relative",
|
position: "relative",
|
||||||
width: CHANNEL_WIDTH + 2*BORDER_THICKNESS,
|
width: CHANNEL_WIDTH + 2*BORDER_THICKNESS,
|
||||||
@@ -114,6 +116,23 @@ const styles = ({ palette }: Theme) => createStyles({
|
|||||||
background: "black",
|
background: "black",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
},
|
},
|
||||||
|
monoTextFrame: {
|
||||||
|
display: "flex",flexFlow: "column nowrap", alignItems: "center", textAlign: "center"
|
||||||
|
},
|
||||||
|
stereoTextFrame: {
|
||||||
|
display: "flex",flexFlow: "column nowrap", alignItems: "center", textAlign: "center"
|
||||||
|
},
|
||||||
|
vuTextFrame: {
|
||||||
|
color: theme.palette.text.secondary,
|
||||||
|
display: "table-cell",
|
||||||
|
position: "relative",
|
||||||
|
marginTop: 4,
|
||||||
|
textAlign: "center",
|
||||||
|
width: 20, height: 16,
|
||||||
|
fontSize: "11px",
|
||||||
|
justifyContent: "center",
|
||||||
|
alignItems: "center"
|
||||||
|
},
|
||||||
redFrameL: {
|
redFrameL: {
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: "100%",
|
top: "100%",
|
||||||
@@ -189,6 +208,7 @@ interface VuMeterProps extends WithStyles<typeof styles> {
|
|||||||
instanceId: number;
|
instanceId: number;
|
||||||
display: "input" | "output";
|
display: "input" | "output";
|
||||||
theme: Theme;
|
theme: Theme;
|
||||||
|
displayText?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface VuMeterState {
|
interface VuMeterState {
|
||||||
@@ -213,6 +233,7 @@ export const VuMeter =
|
|||||||
class extends Component<VuMeterProps, VuMeterState>
|
class extends Component<VuMeterProps, VuMeterState>
|
||||||
{
|
{
|
||||||
divRef: React.RefObject<HTMLDivElement> = React.createRef();
|
divRef: React.RefObject<HTMLDivElement> = React.createRef();
|
||||||
|
textRef: React.RefObject<HTMLDivElement> = React.createRef();
|
||||||
model: PiPedalModel;
|
model: PiPedalModel;
|
||||||
|
|
||||||
yZero: number;
|
yZero: number;
|
||||||
@@ -240,6 +261,35 @@ export const VuMeter =
|
|||||||
vuInfo?: VuUpdateInfo;
|
vuInfo?: VuUpdateInfo;
|
||||||
requesttedStereoState: boolean = false;
|
requesttedStereoState: boolean = false;
|
||||||
|
|
||||||
|
updateText(telltaleDb: number)
|
||||||
|
{
|
||||||
|
if (this.textRef.current) {
|
||||||
|
let displayValue: string;
|
||||||
|
if (telltaleDb <= MIN_DB)
|
||||||
|
{
|
||||||
|
displayValue = "-";
|
||||||
|
} else {
|
||||||
|
let iDb = Math.round(telltaleDb);
|
||||||
|
if (iDb > 0)
|
||||||
|
{
|
||||||
|
displayValue = "+" + Math.round(telltaleDb).toString() + "\u00A0"
|
||||||
|
} else if (iDb < 0) {
|
||||||
|
displayValue = Math.round(telltaleDb).toString() + "\u00A0";
|
||||||
|
} else {
|
||||||
|
if (telltaleDb === 0) {
|
||||||
|
displayValue = "0";
|
||||||
|
} else if (telltaleDb > 0)
|
||||||
|
{
|
||||||
|
displayValue = "+0\u00A0";
|
||||||
|
} else {
|
||||||
|
displayValue = "-0\u00A0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.textRef.current.innerText = displayValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onVuChanged(vuInfo: VuUpdateInfo): void {
|
onVuChanged(vuInfo: VuUpdateInfo): void {
|
||||||
let value: number;
|
let value: number;
|
||||||
let valueR: number;
|
let valueR: number;
|
||||||
@@ -291,6 +341,15 @@ export const VuMeter =
|
|||||||
};
|
};
|
||||||
this.updateChannel(vuData, this.telltaleStateR);
|
this.updateChannel(vuData, this.telltaleStateR);
|
||||||
}
|
}
|
||||||
|
if (this.props.displayText)
|
||||||
|
{
|
||||||
|
if (this.state.isStereo)
|
||||||
|
{
|
||||||
|
this.updateText(Math.max(this.telltaleStateL.telltaleHoldValue,this.telltaleStateR.telltaleHoldValue));
|
||||||
|
} else {
|
||||||
|
this.updateText(this.telltaleStateL.telltaleHoldValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resetTelltales() {
|
resetTelltales() {
|
||||||
@@ -319,7 +378,7 @@ export const VuMeter =
|
|||||||
vuData.redDiv.style.top = y + "px";
|
vuData.redDiv.style.top = y + "px";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let dbTelltale = telltaleState.getValue(db);
|
let dbTelltale = telltaleState.getTelltaleHoldValue(db);
|
||||||
let yTelltale = dbToY(dbTelltale);
|
let yTelltale = dbToY(dbTelltale);
|
||||||
|
|
||||||
if (yTelltale < this.yZero) {
|
if (yTelltale < this.yZero) {
|
||||||
@@ -381,8 +440,28 @@ export const VuMeter =
|
|||||||
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
let displayText = this.props.displayText??false;
|
||||||
let classes = this.props.classes;
|
let classes = this.props.classes;
|
||||||
|
if (displayText)
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<div className={this.state.isStereo? classes.stereoTextFrame: classes.monoTextFrame}>
|
||||||
|
{
|
||||||
|
this.renderVus()
|
||||||
|
}
|
||||||
|
<div ref={this.textRef} className={classes.vuTextFrame}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return this.renderVus();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
renderVus() {
|
||||||
|
|
||||||
|
let classes = this.props.classes;
|
||||||
if (!this.state.isStereo) {
|
if (!this.state.isStereo) {
|
||||||
return (<div className={classes.frame} ref={this.divRef}
|
return (<div className={classes.frame} ref={this.divRef}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user