Spaces:
Sleeping
Sleeping
| // @flow | |
| import ZoomHistory from './zoom_history'; | |
| import {isStringInSupportedScript} from '../util/script_detection'; | |
| import {plugin as rtlTextPlugin} from '../source/rtl_text_plugin'; | |
| import type {TransitionSpecification} from '../style-spec/types'; | |
| export type CrossfadeParameters = { | |
| fromScale: number, | |
| toScale: number, | |
| t: number | |
| }; | |
| class EvaluationParameters { | |
| zoom: number; | |
| now: number; | |
| fadeDuration: number; | |
| zoomHistory: ZoomHistory; | |
| transition: TransitionSpecification; | |
| // "options" may also be another EvaluationParameters to copy, see CrossFadedProperty.possiblyEvaluate | |
| constructor(zoom: number, options?: *) { | |
| this.zoom = zoom; | |
| if (options) { | |
| this.now = options.now; | |
| this.fadeDuration = options.fadeDuration; | |
| this.zoomHistory = options.zoomHistory; | |
| this.transition = options.transition; | |
| } else { | |
| this.now = 0; | |
| this.fadeDuration = 0; | |
| this.zoomHistory = new ZoomHistory(); | |
| this.transition = {}; | |
| } | |
| } | |
| isSupportedScript(str: string): boolean { | |
| return isStringInSupportedScript(str, rtlTextPlugin.isLoaded()); | |
| } | |
| crossFadingFactor() { | |
| if (this.fadeDuration === 0) { | |
| return 1; | |
| } else { | |
| return Math.min((this.now - this.zoomHistory.lastIntegerZoomTime) / this.fadeDuration, 1); | |
| } | |
| } | |
| getCrossfadeParameters(): CrossfadeParameters { | |
| const z = this.zoom; | |
| const fraction = z - Math.floor(z); | |
| const t = this.crossFadingFactor(); | |
| return z > this.zoomHistory.lastIntegerZoom ? | |
| {fromScale: 2, toScale: 1, t: fraction + (1 - fraction) * t} : | |
| {fromScale: 0.5, toScale: 1, t: 1 - (1 - t) * fraction}; | |
| } | |
| } | |
| export default EvaluationParameters; | |