File: drawing_canvas.d.ts

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (175 lines) | stat: -rw-r--r-- 5,087 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Definitions for export-safe ink.Canvas wrapper.
 *
 * This file defines types and an interface, drawings.Canvas, that are safe for
 * export and satisfy the usage in the Chrome PDF annotation mode.
 *
 * See
 * https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/resources/pdf/ink/ink_api.js
 * for usage.
 */

declare namespace drawings {
  /**
   * A simple rectangle type.  The coordinate system depends on context.
   */
  export interface Box {
    left: number;
    top: number;
    right: number;
    bottom: number;
  }

  /**
   * A PointerEvent-like record type that can be used to pass PointerEvents or
   * an equivalent object with adjusted fields to the Ink engine.
   *
   * Ink depends on the timestamps of events and offsetX/Y, none of which can be
   * set in the synthetic PointerEvent constructor.
   */
  export interface InputEvent {
    type: string;
    timeStamp: number;
    pointerType: string;
    pointerId: number;
    offsetX: number;
    offsetY: number;
    pressure: number;
    button: number;
    buttons: number;
  }

  /**
   * Tool types supported in the Ink engine.
   *
   * See http://go/ink-tools for details on each tool.
   *
   * Note: These values map to the AnnotationTool definition in Chromium.
   */
  enum ToolType {
    MARKER = 'marker',
    PEN = 'pen',
    HIGHLIGHTER = 'highlighter',
    ERASER = 'eraser',
  }

  export interface UndoState {
    canUndo: boolean;
    canRedo: boolean;
  }

  interface ToolParams {
    tool: ToolType|string;
    color?: string;
    size?: number;
  }

  /**
   * The main interface to Ink.
   *
   * Many of these functions ultimately delegate to C++ compiled to WebAssembly.
   * The WebAssembly module depends on global state, thus it is only safe to
   * have one instance at a time.
   *
   * Use the static execute function to get an instance of the class.
   */
  export interface Canvas {
    /**
     * Notifies the attached listener when the undo/redo state changes.
     */
    addUndoRedoListener(listener: (undoState: UndoState) => void): void;

    /**
     * Sets the PDF to edit in the Ink engine.  This resets any existing
     * annotations, the camera, and any other state in the engine.
     */
    setPDF(buffer: ArrayBuffer|Uint8Array): Promise<void>;

    /**
     * Returns a copy of the currently-edited PDF with the Ink annotations
     * serialized into it.
     */
    getPDF(): Promise<Uint8Array<ArrayBuffer>>;

    /**
     * Returns the currently-edited PDF with the Ink annotations serialized into
     * it.  This destructively moves the PDF out of the Ink engine, and the
     * engine should not be issued any further strokes or functions calls until
     * setPDF is called again.
     */
    getPDFDestructive(): Promise<Uint8Array<ArrayBuffer>>;

    /**
     * Set the camera to the provided box in PDF coordinates.
     */
    setCamera(camera: Box): void;

    /**
     * Set the tool parameters in the Ink engine.
     *
     * See AnnotationTool in Chromium.
     */
    setTool({tool, color, size}: ToolParams): void;

    /**
     * Returns a Promise that is resolved when all previous asynchronous engine
     * operations are completed.  Use this prior to calling getPDF to ensure all
     * Ink strokes are serialized.
     */
    flush(): Promise<void>;

    /**
     * Returns a Promise that is resolved when no new frames will be requested.
     */
    waitForZeroFps(): Promise<void>;

    /**
     * Set the out of bounds color drawn around the PDF and between pages.
     */
    setOutOfBoundsColor(color: string): void;

    /**
     * Set the image used as the page border around each page.  Must be a data
     * or Object URL to a nine-patch PNG image.
     */
    setBorderImage(url: string): void;

    /**
     * Set the page layout to vertical (default) and the given spacing.
     */
    setVerticalPageLayout(spacing: number): void;

    /**
     * Dispatch the given PointerEvent-like to the Ink engine.
     *
     * This will cause the engine to draw a line, erase, etc. depending on the
     * current tool parameters.  Note that the Ink engine depends on the
     * timestamp when processing events, but synthetic PointerEvents have the
     * timestamp set to the creation time and can't be changed.  Instead
     * dispatch an object literal with the same fields with the desired
     * timestamp.
     */
    dispatchInput(event: InputEvent): void;

    /** Undo the most recent operation. */
    undo(): void;

    /** Redo the last undone operation. */
    redo(): void;
  }

  // Workaround for TypeScript's lack of support on static methods on
  // interfaces. https://github.com/microsoft/TypeScript/issues/13462
  export namespace Canvas {
    /**
     * Factory function for the Canvas instance.
     *
     * @param parent Element to render the canvas into.
     */
    function execute(parent: Element): Promise<Canvas>;
  }
}