1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2018 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerconst LOADING_TEXT = 'Loading...'; 16*6dbdd20aSAndroid Build Coastguard Workerlet LOADING_TEXT_WIDTH = 0; 17*6dbdd20aSAndroid Build Coastguard Worker 18*6dbdd20aSAndroid Build Coastguard Worker// Checker board the range [leftPx, rightPx]. 19*6dbdd20aSAndroid Build Coastguard Workerexport function checkerboard( 20*6dbdd20aSAndroid Build Coastguard Worker ctx: CanvasRenderingContext2D, 21*6dbdd20aSAndroid Build Coastguard Worker heightPx: number, 22*6dbdd20aSAndroid Build Coastguard Worker leftPx: number, 23*6dbdd20aSAndroid Build Coastguard Worker rightPx: number, 24*6dbdd20aSAndroid Build Coastguard Worker): void { 25*6dbdd20aSAndroid Build Coastguard Worker const widthPx = rightPx - leftPx; 26*6dbdd20aSAndroid Build Coastguard Worker ctx.font = '12px Roboto Condensed'; 27*6dbdd20aSAndroid Build Coastguard Worker ctx.fillStyle = '#eee'; 28*6dbdd20aSAndroid Build Coastguard Worker ctx.fillRect(leftPx, 0, widthPx, heightPx); 29*6dbdd20aSAndroid Build Coastguard Worker ctx.fillStyle = '#666'; 30*6dbdd20aSAndroid Build Coastguard Worker const oldBaseline = ctx.textBaseline; 31*6dbdd20aSAndroid Build Coastguard Worker ctx.textBaseline = 'middle'; 32*6dbdd20aSAndroid Build Coastguard Worker if (LOADING_TEXT_WIDTH === 0) { 33*6dbdd20aSAndroid Build Coastguard Worker LOADING_TEXT_WIDTH = ctx.measureText(LOADING_TEXT).width; 34*6dbdd20aSAndroid Build Coastguard Worker } 35*6dbdd20aSAndroid Build Coastguard Worker if (LOADING_TEXT_WIDTH <= widthPx) { 36*6dbdd20aSAndroid Build Coastguard Worker ctx.fillText( 37*6dbdd20aSAndroid Build Coastguard Worker LOADING_TEXT, 38*6dbdd20aSAndroid Build Coastguard Worker leftPx + widthPx / 2 - LOADING_TEXT_WIDTH / 2, 39*6dbdd20aSAndroid Build Coastguard Worker heightPx / 2, 40*6dbdd20aSAndroid Build Coastguard Worker ); 41*6dbdd20aSAndroid Build Coastguard Worker } 42*6dbdd20aSAndroid Build Coastguard Worker ctx.textBaseline = oldBaseline; 43*6dbdd20aSAndroid Build Coastguard Worker} 44*6dbdd20aSAndroid Build Coastguard Worker 45*6dbdd20aSAndroid Build Coastguard Worker// Checker board everything between [startPx, endPx] except [leftPx, rightPx]. 46*6dbdd20aSAndroid Build Coastguard Workerexport function checkerboardExcept( 47*6dbdd20aSAndroid Build Coastguard Worker ctx: CanvasRenderingContext2D, 48*6dbdd20aSAndroid Build Coastguard Worker heightPx: number, 49*6dbdd20aSAndroid Build Coastguard Worker startPx: number, 50*6dbdd20aSAndroid Build Coastguard Worker endPx: number, 51*6dbdd20aSAndroid Build Coastguard Worker leftPx: number, 52*6dbdd20aSAndroid Build Coastguard Worker rightPx: number, 53*6dbdd20aSAndroid Build Coastguard Worker): void { 54*6dbdd20aSAndroid Build Coastguard Worker // [leftPx, rightPx] doesn't overlap [startPx, endPx] at all: 55*6dbdd20aSAndroid Build Coastguard Worker if (rightPx <= startPx || leftPx >= endPx) { 56*6dbdd20aSAndroid Build Coastguard Worker checkerboard(ctx, heightPx, startPx, endPx); 57*6dbdd20aSAndroid Build Coastguard Worker return; 58*6dbdd20aSAndroid Build Coastguard Worker } 59*6dbdd20aSAndroid Build Coastguard Worker 60*6dbdd20aSAndroid Build Coastguard Worker // Checkerboard [startPx, leftPx]: 61*6dbdd20aSAndroid Build Coastguard Worker if (leftPx > startPx) { 62*6dbdd20aSAndroid Build Coastguard Worker checkerboard(ctx, heightPx, startPx, leftPx); 63*6dbdd20aSAndroid Build Coastguard Worker } 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard Worker // Checkerboard [rightPx, endPx]: 66*6dbdd20aSAndroid Build Coastguard Worker if (rightPx < endPx) { 67*6dbdd20aSAndroid Build Coastguard Worker checkerboard(ctx, heightPx, rightPx, endPx); 68*6dbdd20aSAndroid Build Coastguard Worker } 69*6dbdd20aSAndroid Build Coastguard Worker} 70