chromium/tools/typescript/definitions/system_display.d.ts

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @fileoverview Type definitions for chrome.system.display API. */
// TODO(crbug.com/40179454): Auto-generate this file.

import {ChromeEvent} from './chrome_event.js';

declare global {
  export namespace chrome {
    export namespace system {
      export namespace display {
        /**
         * @see https://developer.chrome.com/extensions/system.display#type-Bounds
         */
        export interface Bounds {
          left: number;
          top: number;
          width: number;
          height: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-Insets
         */
        export interface Insets {
          left: number;
          top: number;
          right: number;
          bottom: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-DisplayMode
         */
        export interface DisplayMode {
          width: number;
          height: number;
          widthInNativePixels: number;
          heightInNativePixels: number;
          uiScale?: number;
          deviceScaleFactor: number;
          refreshRate: number;
          isNative: boolean;
          isSelected: boolean;
          isInterlaced?: boolean;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-LayoutPosition
         */
        export enum LayoutPosition {
          TOP = 'top',
          RIGHT = 'right',
          BOTTOM = 'bottom',
          LEFT = 'left',
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-ActiveState
         */
        export enum ActiveState {
          ACTIVE = 'active',
          INACTIVE = 'inactive',
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-DisplayLayout
         */
        export interface DisplayLayout {
          id: string;
          parentId: string;
          position: LayoutPosition;
          offset: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-Edid
         */
        export interface Edid {
          manufacturerId: string;
          productId: string;
          yearOfManufacture: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-DisplayUnitInfo
         */
        export interface DisplayUnitInfo {
          id: string;
          name: string;
          edid?: Edid;
          mirroringSourceId: string;
          mirroringDestinationIds: string[];
          isPrimary: boolean;
          isInternal: boolean;
          activeState: ActiveState;
          isEnabled: boolean;
          isUnified: boolean;
          isAutoRotationAllowed?: boolean;
          dpiX: number;
          dpiY: number;
          rotation: number;
          bounds: Bounds;
          overscan: Insets;
          workArea: Bounds;
          modes: DisplayMode[];
          hasTouchSupport: boolean;
          hasAccelerometerSupport: boolean;
          availableDisplayZoomFactors: number[];
          displayZoomFactor: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-DisplayProperties
         */
        export interface DisplayProperties {
          isUnified?: boolean;
          mirroringSourceId?: string;
          isPrimary?: boolean;
          overscan?: Insets;
          rotation?: number;
          boundsOriginX?: number;
          boundsOriginY?: number;
          displayMode?: DisplayMode;
          displayZoomFactor?: number;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-GetInfoFlags
         */
        export interface GetInfoFlags {
          singleUnified?: boolean;
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-MirrorMode
         */
        export enum MirrorMode {
          OFF = 'off',
          NORMAL = 'normal',
          MIXED = 'mixed',
        }

        /**
         * @see https://developer.chrome.com/extensions/system.display#type-MirrorModeInfo
         */
        export interface MirrorModeInfo {
          mode: MirrorMode;
          mirroringSourceId?: string;
          mirroringDestinationIds?: string[];
        }

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-getDisplayLayout
         */
        export function getDisplayLayout(): Promise<DisplayLayout[]>;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-getInfo
         */
        export function getInfo(flags?: GetInfoFlags):
            Promise<DisplayUnitInfo[]>;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-overscanCalibrationAdjust
         */
        export function overscanCalibrationAdjust(id: string, delta: Insets):
            void;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-overscanCalibrationComplete
         */
        export function overscanCalibrationComplete(id: string): void;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-overscanCalibrationReset
         */
        export function overscanCalibrationReset(id: string): void;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-overscanCalibrationStart
         */
        export function overscanCalibrationStart(id: string): void;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-setDisplayLayout
         */
        export function setDisplayLayout(layouts: DisplayLayout[]):
            Promise<void>;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-setDisplayProperties
         */
        export function setDisplayProperties(
            id: string, info: DisplayProperties): Promise<void>;

        /**
         * @see https://developer.chrome.com/docs/extensions/reference/system_display/#method-setMirrorMode
         */
        export function setMirrorMode(info: MirrorModeInfo): Promise<void>;

        /**
         * @see https://developer.chrome.com/extensions/system.display#method-showNativeTouchCalibration
         */
        export function showNativeTouchCalibration(id: string):
            Promise<boolean>;

        /**
         * @see https://developer.chrome.com/extensions/system.display#event-onDisplayChanged
         */
        export const onDisplayChanged: ChromeEvent<() => void>;
      }
    }
  }
}