annotate src/app/playhead/waves-ui-play-head.component.ts @ 407:6e14dd416e12

A play-head which attaches itself to WavesComponents.
author Lucas Thompson <dev@lucas.im>
date Sun, 04 Jun 2017 20:17:43 +0100
parents
children 7e6b9b557179
rev   line source
dev@407 1 /**
dev@407 2 * Created by lucas on 03/06/2017.
dev@407 3 */
dev@407 4 import {
dev@407 5 AfterViewInit,
dev@407 6 ChangeDetectionStrategy,
dev@407 7 Component,
dev@407 8 ContentChildren,
dev@407 9 Input, OnDestroy,
dev@407 10 QueryList
dev@407 11 } from '@angular/core';
dev@407 12 import {
dev@407 13 LayerRemover,
dev@407 14 WavesComponent
dev@407 15 } from '../visualisations/waves-base.component';
dev@407 16 import Waves from 'waves-ui-piper';
dev@407 17 import {
dev@407 18 RenderLoopService,
dev@407 19 TaskRemover
dev@407 20 } from '../services/render-loop/render-loop.service';
dev@407 21 import {AudioPlayerService} from '../services/audio-player/audio-player.service';
dev@407 22
dev@407 23 @Component({
dev@407 24 selector: 'ugly-waves-play-head',
dev@407 25 template: '<ng-content></ng-content>',
dev@407 26 changeDetection: ChangeDetectionStrategy.OnPush
dev@407 27 })
dev@407 28 export class WavesPlayHeadComponent implements AfterViewInit, OnDestroy {
dev@407 29
dev@407 30 @ContentChildren(WavesComponent) wavesChildren: QueryList<WavesComponent<any>>;
dev@407 31 @Input() colour: string;
dev@407 32 @Input() set isActive(isActive: boolean) {
dev@407 33 this.mIsActive = isActive;
dev@407 34 this.removeAllActivePlayheads();
dev@407 35 if (isActive) {
dev@407 36 this.setupAnimatedPlayheads();
dev@407 37 }
dev@407 38 }
dev@407 39
dev@407 40 private removers: (TaskRemover | LayerRemover)[];
dev@407 41 private mIsActive: boolean;
dev@407 42
dev@407 43 constructor(private renderLoop: RenderLoopService,
dev@407 44 private player: AudioPlayerService) {
dev@407 45 this.removers = [];
dev@407 46 }
dev@407 47
dev@407 48
dev@407 49 ngAfterViewInit(): void {
dev@407 50 this.removeAllActivePlayheads();
dev@407 51 this.setupAnimatedPlayheads();
dev@407 52 }
dev@407 53
dev@407 54 ngOnDestroy(): void {
dev@407 55 this.removeAllActivePlayheads();
dev@407 56 }
dev@407 57
dev@407 58 private removeAllActivePlayheads(): void {
dev@407 59 this.removers.forEach(remove => remove());
dev@407 60 this.removers = [];
dev@407 61 }
dev@407 62
dev@407 63 private setupAnimatedPlayheads(): void {
dev@407 64 if (this.wavesChildren && this.mIsActive) {
dev@407 65 this.wavesChildren.forEach(component => {
dev@407 66 const cursor = new Waves.helpers.CursorLayer({
dev@407 67 height: component.height,
dev@407 68 color: this.colour,
dev@407 69 });
dev@407 70 cursor.currentPosition = this.player.getCurrentTime();
dev@407 71 this.removers.push(
dev@407 72 component.addLayer(cursor),
dev@407 73 this.renderLoop.addPlayingTask(currentTime => {
dev@407 74 cursor.currentPosition = currentTime;
dev@407 75 cursor.update();
dev@407 76 })
dev@407 77 )
dev@407 78 });
dev@407 79 }
dev@407 80 }
dev@407 81 }