Mercurial > hg > ugly-duckling
view src/app/visualisations/grid/grid.component.ts @ 488:64ed45a0bad3
Introduce PlayheadRenderer, implement in the waves base. Make VerticallyBounded and VerticalScaleRenderer generic and remove bin equivalents. Forward calls for a PlayheadRenderer from VerticalScaleComponent on to its children. Also update other components accordingly.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Wed, 05 Jul 2017 18:42:12 +0100 |
parents | e3cbf4c53e5e |
children | ab43880f1cd5 |
line wrap: on
line source
/** * Created by lucast on 31/05/2017. */ import { VerticallyBinnedWavesComponent, WavesComponent, PlayheadRenderer, VerticallyBounded, VerticalScaleRenderer } from '../waves-base.component'; import { ChangeDetectionStrategy, Component, Input, } from '@angular/core'; import Waves from 'waves-ui-piper'; import {Grid} from '../FeatureUtilities'; import {iceMapper} from '../../spectrogram/ColourMap'; import {estimatePercentile} from '../../spectrogram/MatrixUtils'; @Component({ selector: 'ugly-grid', templateUrl: '../waves-template.html', styleUrls: ['../waves-template.css'], changeDetection: ChangeDetectionStrategy.OnPush, providers: [ {provide: VerticallyBounded, useExisting: GridComponent }, {provide: VerticalScaleRenderer, useExisting: GridComponent}, {provide: PlayheadRenderer, useExisting: GridComponent }, {provide: WavesComponent, useExisting: GridComponent} ] }) export class GridComponent extends VerticallyBinnedWavesComponent<Grid> { @Input() set grid(grid: Grid) { this.feature = grid; } protected get featureLayers(): Layer[] { const startTime = this.feature.startTime; const stepDuration = this.feature.stepDuration; const matrixData = this.feature.data; if (matrixData.length === 0) { return []; } const targetValue = estimatePercentile(matrixData, 95); const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0); const matrixEntity = new Waves.utils.PrefilledMatrixEntity( matrixData, startTime, stepDuration ); return [ new Waves.helpers.MatrixLayer( matrixEntity, { gain: gain, height: this.height, normalise: 'none', mapper: iceMapper() } ) ]; } get range(): string[] { if (!this.feature.binNames || this.feature.binNames.length === 0) { const binCount = (this.feature.data.length > 0 ? this.feature.data[0].length : 0); for (let i = 0; i < binCount; ++i) { this.feature.binNames.push(`${i + 1}`); } } return this.feature.binNames; } }