| // Copyright (C) 2021 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| export interface SliceLayoutBase { |
| readonly padding: number; // vertical pixel padding between slices and track. |
| readonly rowSpacing: number; // Spacing between rows. |
| |
| // A *guess* at the depth |
| readonly depthGuess?: number; |
| |
| // True iff the track is flat (all slices have the same depth |
| // we have an optimisation for this). |
| readonly isFlat?: boolean; |
| |
| readonly titleSizePx?: number; |
| readonly subtitleSizePx?: number; |
| } |
| |
| export const SLICE_LAYOUT_BASE_DEFAULTS: SliceLayoutBase = Object.freeze({ |
| padding: 3, |
| rowSpacing: 0, |
| }); |
| |
| export interface SliceLayoutFixed extends SliceLayoutBase { |
| readonly heightMode: 'FIXED'; |
| readonly fixedHeight: number; // Outer height of the track. |
| } |
| |
| export const SLICE_LAYOUT_FIXED_DEFAULTS: SliceLayoutFixed = Object.freeze({ |
| ...SLICE_LAYOUT_BASE_DEFAULTS, |
| heightMode: 'FIXED', |
| fixedHeight: 30, |
| }); |
| |
| export interface SliceLayoutFitContent extends SliceLayoutBase { |
| readonly heightMode: 'FIT_CONTENT'; |
| readonly sliceHeight: number; // Only when heightMode = 'FIT_CONTENT'. |
| } |
| |
| export const SLICE_LAYOUT_FIT_CONTENT_DEFAULTS: SliceLayoutFitContent = |
| Object.freeze({ |
| ...SLICE_LAYOUT_BASE_DEFAULTS, |
| heightMode: 'FIT_CONTENT', |
| sliceHeight: 18, |
| }); |
| |
| export interface SliceLayoutFlat extends SliceLayoutBase { |
| readonly heightMode: 'FIXED'; |
| readonly fixedHeight: number; // Outer height of the track. |
| readonly depthGuess: 0; |
| readonly isFlat: true; |
| } |
| |
| export const SLICE_LAYOUT_FLAT_DEFAULTS: SliceLayoutFlat = Object.freeze({ |
| ...SLICE_LAYOUT_BASE_DEFAULTS, |
| depthGuess: 0, |
| isFlat: true, |
| heightMode: 'FIXED', |
| fixedHeight: 18, |
| titleSizePx: 10, |
| padding: 3, |
| }); |
| |
| export type SliceLayout = |
| | SliceLayoutFixed |
| | SliceLayoutFitContent |
| | SliceLayoutFlat; |
| |
| export const DEFAULT_SLICE_LAYOUT: SliceLayout = |
| SLICE_LAYOUT_FIT_CONTENT_DEFAULTS; |