blob: 2016ea4c3b1a7527c21c2c5a184714e9abff4967 [file] [log] [blame]
Hector Dearman3d26fdb2018-07-09 13:54:06 +01001// Copyright (C) 2018 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
Micha Schwab01b35682018-06-28 13:56:49 +010014
Deepanjan Roy75b46a92018-07-24 09:11:29 -040015import {TrackState} from '../common/state';
16
Deepanjan Roy424485b2018-07-26 08:37:35 -040017import {TimeScale} from './time_scale';
Michail Schwabbbdd9832018-07-12 12:02:53 -040018import {VirtualCanvasContext} from './virtual_canvas_context';
Micha Schwab01b35682018-06-28 13:56:49 +010019
Deepanjan Roy424485b2018-07-26 08:37:35 -040020/**
21 * This interface forces track implementations to have two static properties:
22 * type and a create function.
23 *
24 * Typescript does not have abstract static members, which is why this needs to
25 * be in a seperate interface. We need the |create| method because the stored
26 * value in the registry is an abstract class, and we cannot call 'new'
27 * on an abstract class.
28 */
29export interface TrackCreator {
30 // Store the type explicitly as a string as opposed to using class.name in
31 // case we ever minify our code.
32 readonly type: string;
Deepanjan Roy75b46a92018-07-24 09:11:29 -040033
Deepanjan Roy424485b2018-07-26 08:37:35 -040034 create(TrackState: TrackState): Track;
35}
Michail Schwabbeb34522018-07-20 08:15:17 -040036
Deepanjan Roy424485b2018-07-26 08:37:35 -040037/**
38 * The abstract class that needs to be implemented by all tracks.
39 */
40export abstract class Track {
41 constructor(protected trackState: TrackState) {}
42 abstract renderCanvas(
43 vCtx: VirtualCanvasContext, width: number, timeScale: TimeScale): void;
44}