Home | History | Annotate | Download | only in frontend
      1 // 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.
     14 
     15 // TODO(hjd): Dedupe these.
     16 const SLICE_HEIGHT = 32;
     17 const TRACK_PADDING = 5;
     18 
     19 /**
     20  * Checker board the range [leftPx, rightPx].
     21  */
     22 export function checkerboard(
     23     ctx: CanvasRenderingContext2D, leftPx: number, rightPx: number): void {
     24   const widthPx = rightPx - leftPx;
     25   ctx.font = '12px Google Sans';
     26   ctx.fillStyle = '#eee';
     27   ctx.fillRect(leftPx, TRACK_PADDING, widthPx, SLICE_HEIGHT);
     28   ctx.fillStyle = '#666';
     29   ctx.textBaseline = 'alphabetic';
     30   ctx.fillText(
     31       'loading...',
     32       leftPx + widthPx / 2,
     33       TRACK_PADDING + SLICE_HEIGHT / 2,
     34       widthPx);
     35 }
     36 
     37 /**
     38  * Checker board everything between [startPx, endPx] except [leftPx, rightPx].
     39  */
     40 export function checkerboardExcept(
     41     ctx: CanvasRenderingContext2D,
     42     startPx: number,
     43     endPx: number,
     44     leftPx: number,
     45     rightPx: number): void {
     46   // [leftPx, rightPx] doesn't overlap [startPx, endPx] at all:
     47   if (rightPx <= startPx || leftPx >= endPx) {
     48     checkerboard(ctx, startPx, endPx);
     49     return;
     50   }
     51 
     52   // Checkerboard [startPx, leftPx]:
     53   if (leftPx > startPx) {
     54     checkerboard(ctx, startPx, leftPx);
     55   }
     56 
     57   // Checkerboard [rightPx, endPx]:
     58   if (rightPx < endPx) {
     59     checkerboard(ctx, rightPx, endPx);
     60   }
     61 }
     62