@univerjs/engine-render 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,14 @@ export interface IContext2D extends CanvasRenderingContext2D {
27
27
  backingStorePixelRatio: number;
28
28
  }
29
29
  export declare function getDevicePixelRatio(): number;
30
- export declare function drawLineByBorderType(ctx: UniverRenderingContext, type: BORDER_TYPE, position: IPosition): void;
30
+ /**
31
+ *
32
+ * @param ctx canvas context
33
+ * @param type top bottom left right
34
+ * @param lineWidthBuffer Solving the problem of mitered corners in the drawing of borders thicker than 2 pixels, caused by the line segments being centered.
35
+ * @param position border draw position
36
+ */
37
+ export declare function drawLineByBorderType(ctx: UniverRenderingContext, type: BORDER_TYPE, lineWidthBuffer: number, position: IPosition): void;
31
38
  export declare function drawDiagonalLineByBorderType(ctx: UniverRenderingContext, type: BORDER_TYPE, position: IPosition): void;
32
39
  export declare function clearLineByBorderType(ctx: UniverRenderingContext, type: BORDER_TYPE, position: IPosition): void;
33
40
  export declare function setLineType(ctx: UniverRenderingContext, style: BorderStyleTypes): void;
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { type ITextRotation } from '@univerjs/core';
17
17
  export declare const VERTICAL_ROTATE_ANGLE = 90;
18
- export declare function convertTextRotation(textRotation: ITextRotation): {
18
+ export declare function convertTextRotation(textRotation?: ITextRotation): {
19
19
  centerAngle: number;
20
20
  vertexAngle: number;
21
21
  };
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import type { IDisposable } from '@wendellhu/redi';
16
17
  import { BaseObject } from '../base-object';
17
18
  import type { IViewportBound } from '../basics/vector2';
18
19
  import type { UniverRenderingContext } from '../context';
@@ -20,8 +21,7 @@ import type { ComponentExtension } from './extension';
20
21
  export declare class RenderComponent<T, U, V> extends BaseObject {
21
22
  private _extensions;
22
23
  get extensions(): Map<string, ComponentExtension<T, U, V>>;
23
- register(...extensions: Array<ComponentExtension<T, U, V>>): void;
24
- unRegister(...uKeys: string[]): void;
24
+ register(...extensions: Array<ComponentExtension<T, U, V>>): IDisposable;
25
25
  getExtensionsByOrder(): ComponentExtension<T, U, V>[];
26
26
  getExtensionByKey(uKey: string): ComponentExtension<T, U, V> | undefined;
27
27
  draw(ctx: UniverRenderingContext, bounds?: IViewportBound): void;
@@ -17,12 +17,20 @@ import type { Nullable } from '@univerjs/core';
17
17
  import type { INodePosition } from '../../../basics/interfaces';
18
18
  import type { ISuccinctTextRangeParam, ITextSelectionStyle } from '../../../basics/range';
19
19
  import { RANGE_DIRECTION } from '../../../basics/range';
20
+ import type { IPoint } from '../../../basics/vector2';
20
21
  import type { Scene } from '../../../scene';
21
22
  import { Rect } from '../../../shape/rect';
22
23
  import type { ThinScene } from '../../../thin-scene';
23
24
  import type { DocumentSkeleton } from '../doc-skeleton';
24
25
  import type { Documents } from '../document';
26
+ export declare const TEXT_RANGE_LAYER_INDEX = 1;
25
27
  export declare function cursorConvertToTextRange(scene: Scene, range: ISuccinctTextRangeParam, docSkeleton: DocumentSkeleton, document: Documents): Nullable<TextRange>;
28
+ export declare function getAnchorBounding(pointsGroup: IPoint[][]): {
29
+ left: number;
30
+ top: number;
31
+ width: number;
32
+ height: number;
33
+ };
26
34
  export declare class TextRange {
27
35
  private _scene;
28
36
  private _document;
@@ -34,7 +42,9 @@ export declare class TextRange {
34
42
  private _rangeShape;
35
43
  private _anchorShape;
36
44
  private _cursorList;
45
+ private _anchorBlinkTimer;
37
46
  constructor(_scene: ThinScene, _document: Documents, _docSkeleton: DocumentSkeleton, anchorNodePosition?: Nullable<INodePosition>, focusNodePosition?: Nullable<INodePosition>, style?: ITextSelectionStyle);
47
+ private _anchorBlink;
38
48
  get startOffset(): number | undefined;
39
49
  get endOffset(): number | undefined;
40
50
  get collapsed(): boolean;
@@ -53,7 +63,6 @@ export declare class TextRange {
53
63
  private _isEmpty;
54
64
  private _isCollapsed;
55
65
  private _createOrUpdateRange;
56
- private _getAnchorBounding;
57
66
  private _createOrUpdateAnchor;
58
67
  private _setCursorList;
59
68
  }
@@ -111,9 +111,9 @@ export declare class TextSelectionRenderManager extends RxDisposable implements
111
111
  private _container;
112
112
  private _inputParent;
113
113
  private _input;
114
- private _cursor;
115
- private _moveObserver;
116
- private _upObserver;
114
+ private _moveObservers;
115
+ private _upObservers;
116
+ private _scrollTimers;
117
117
  private _viewportScrollX;
118
118
  private _viewportScrollY;
119
119
  private _rangeList;
@@ -153,7 +153,6 @@ export declare class TextSelectionRenderManager extends RxDisposable implements
153
153
  dispose(): void;
154
154
  private _initDOM;
155
155
  private _initInput;
156
- private _initDOMCursor;
157
156
  private _getNodePosition;
158
157
  private _interactTextRange;
159
158
  private _removeAllTextRanges;
@@ -163,8 +162,7 @@ export declare class TextSelectionRenderManager extends RxDisposable implements
163
162
  private _updateActiveRangeFocusPosition;
164
163
  private _isEmpty;
165
164
  private _getCanvasOffset;
166
- private _scrollToSelection;
167
- private _updateDomCursorPositionAndSize;
165
+ private _updateInputPosition;
168
166
  private _moving;
169
167
  private _attachScrollEvent;
170
168
  private _initInputEvents;
@@ -18,4 +18,5 @@ export * from './docs';
18
18
  export * from './extension';
19
19
  export * from './sheets';
20
20
  export * from './skeleton';
21
+ export { RENDER_RAW_FORMULA_KEY } from './sheets/sheet-skeleton';
21
22
  export * from './slides';
@@ -13,19 +13,23 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import type { IColorStyle, IRange, IScale } from '@univerjs/core';
17
- import { ObjectMatrix } from '@univerjs/core';
16
+ import type { IRange, IScale } from '@univerjs/core';
18
17
  import type { UniverRenderingContext } from '../../../context';
19
18
  import { type SpreadsheetSkeleton } from '../sheet-skeleton';
20
- import type { Spreadsheet } from '../spreadsheet';
21
19
  import { SheetExtension } from './sheet-extension';
20
+ export interface ISheetFontRenderExtension {
21
+ fontRenderExtension?: {
22
+ leftOffset?: number;
23
+ rightOffset?: number;
24
+ topOffset?: number;
25
+ downOffset?: number;
26
+ isSkip?: boolean;
27
+ };
28
+ }
22
29
  export declare class Font extends SheetExtension {
23
30
  uKey: string;
24
31
  Z_INDEX: number;
25
- changeFontColor: ObjectMatrix<IColorStyle>;
26
- get spreadsheet(): Spreadsheet;
27
32
  getDocuments(): any;
28
- setChangeFontColor(r: number, c: number, color: IColorStyle): void;
29
33
  draw(ctx: UniverRenderingContext, parentScale: IScale, spreadsheetSkeleton: SpreadsheetSkeleton, diffRanges?: IRange[]): void;
30
34
  private _renderDocuments;
31
35
  private _clipRectangle;
@@ -26,7 +26,8 @@ export interface BorderCacheItem {
26
26
  }
27
27
  export interface IFontCacheItem {
28
28
  documentSkeleton: DocumentSkeleton;
29
- angle?: number;
29
+ vertexAngle?: number;
30
+ centerAngle?: number;
30
31
  verticalAlign: VerticalAlign;
31
32
  horizontalAlign: HorizontalAlign;
32
33
  wrapStrategy: WrapStrategy;
@@ -13,8 +13,8 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import type { ICellData, IPaddingData, IRange, ISelectionCellWithCoord, ITextRotation, IWorksheetData, LocaleService, Nullable, Styles, Worksheet } from '@univerjs/core';
17
- import { BooleanNumber, DocumentDataModel, HorizontalAlign, ObjectMatrix, VerticalAlign, WrapStrategy } from '@univerjs/core';
16
+ import type { ICellData, IPaddingData, IRange, ISelectionCellWithCoord, ITextRotation, IWorksheetData, Nullable, Styles, Worksheet } from '@univerjs/core';
17
+ import { BooleanNumber, DocumentDataModel, HorizontalAlign, IContextService, LocaleService, ObjectMatrix, VerticalAlign, WrapStrategy } from '@univerjs/core';
18
18
  import type { IBoundRectNoAngle, IViewportBound } from '../../basics/vector2';
19
19
  import { DocumentSkeleton } from '../docs/doc-skeleton';
20
20
  import { Skeleton } from '../skeleton';
@@ -48,14 +48,16 @@ export interface IDocumentLayoutObject {
48
48
  paddingData: IPaddingData;
49
49
  fill?: Nullable<string>;
50
50
  }
51
+ export declare const RENDER_RAW_FORMULA_KEY = "RENDER_RAW_FORMULA";
51
52
  export declare class SpreadsheetSkeleton extends Skeleton {
52
53
  private _worksheet;
53
54
  private _config;
54
55
  private _cellData;
55
56
  private _styles;
57
+ private readonly _contextService;
56
58
  private _rowHeightAccumulation;
57
- private _rowTotalHeight;
58
59
  private _columnWidthAccumulation;
60
+ private _rowTotalHeight;
59
61
  private _columnTotalWidth;
60
62
  private _rowHeaderWidth;
61
63
  private _columnHeaderHeight;
@@ -63,11 +65,13 @@ export declare class SpreadsheetSkeleton extends Skeleton {
63
65
  private _dataMergeCache;
64
66
  private _overflowCache;
65
67
  private _stylesCache;
68
+ /** A matrix to store if a (row, column) position has render cache. */
66
69
  private _renderedCellCache;
67
70
  private _showGridlines;
68
71
  private _marginTop;
69
72
  private _marginLeft;
70
- constructor(_worksheet: Worksheet | undefined, _config: IWorksheetData, _cellData: ObjectMatrix<Nullable<ICellData>>, _styles: Styles, _localeService: LocaleService);
73
+ private _renderRawFormula;
74
+ constructor(_worksheet: Worksheet | undefined, _config: IWorksheetData, _cellData: ObjectMatrix<Nullable<ICellData>>, _styles: Styles, _localeService: LocaleService, _contextService: IContextService);
71
75
  get rowHeightAccumulation(): number[];
72
76
  get rowTotalHeight(): number;
73
77
  get columnWidthAccumulation(): number[];
@@ -82,14 +86,11 @@ export declare class SpreadsheetSkeleton extends Skeleton {
82
86
  get mergeData(): IRange[];
83
87
  get rowHeaderWidthAndMarginLeft(): number;
84
88
  get columnHeaderHeightAndMarginTop(): number;
89
+ get worksheet(): Worksheet | undefined;
85
90
  /**
86
91
  * @deprecated
87
92
  */
88
- static create(worksheet: Worksheet | undefined, config: IWorksheetData, cellData: ObjectMatrix<Nullable<ICellData>>, styles: Styles, LocaleService: LocaleService): SpreadsheetSkeleton;
89
- /**
90
- * @deprecated should never expose a property that is provided by another module!
91
- */
92
- getWorksheetConfig(): IWorksheetData;
93
+ static create(worksheet: Worksheet | undefined, config: IWorksheetData, cellData: ObjectMatrix<Nullable<ICellData>>, styles: Styles, localeService: LocaleService, contextService: IContextService): SpreadsheetSkeleton;
93
94
  /**
94
95
  * @deprecated should never expose a property that is provided by another module!
95
96
  */
@@ -98,6 +99,7 @@ export declare class SpreadsheetSkeleton extends Skeleton {
98
99
  * @deprecated should never expose a property that is provided by another module!
99
100
  */
100
101
  getsStyles(): Styles;
102
+ private _initContextListener;
101
103
  setOverflowCache(value: ObjectMatrix<IRange>): void;
102
104
  setMarginLeft(left: number): void;
103
105
  setMarginTop(top: number): void;
@@ -106,13 +108,19 @@ export declare class SpreadsheetSkeleton extends Skeleton {
106
108
  calculate(bounds?: IViewportBound): this;
107
109
  calculateAutoHeightInRange(ranges: Nullable<IRange[]>): IRowAutoHeightInfo[];
108
110
  private _calculateRowAutoHeight;
109
- updateLayout(): this | undefined;
111
+ private _updateLayout;
112
+ private _dynamicallyUpdateRowHeaderWidth;
110
113
  getRowColumnSegment(bounds?: IViewportBound): {
111
114
  startRow: number;
112
115
  endRow: number;
113
116
  startColumn: number;
114
117
  endColumn: number;
115
118
  };
119
+ /**
120
+ * @deprecated should never expose a property that is provided by another module!
121
+ * @returns
122
+ */
123
+ getWorksheetConfig(): IWorksheetData;
116
124
  getRowColumnSegmentByViewBound(bound?: IBoundRectNoAngle): {
117
125
  startRow: number;
118
126
  endRow: number;
@@ -294,6 +302,11 @@ export declare class SpreadsheetSkeleton extends Skeleton {
294
302
  private _setCellCache;
295
303
  private _updateConfigAndGetDocumentModel;
296
304
  private _getDocumentDataByStyle;
305
+ /**
306
+ * pro/issues/344
307
+ * In Excel, for the border rendering of merged cells to take effect, the outermost cells need to have the same border style.
308
+ */
309
+ private _setMergeBorderProps;
297
310
  private _setBorderProps;
298
311
  private _getFontFormat;
299
312
  private _getOtherStyle;
@@ -39,7 +39,7 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
39
39
  set lineJoin(val: CanvasLineJoin);
40
40
  get lineWidth(): number;
41
41
  set lineWidth(val: number);
42
- setLineWidthNative(val: number): void;
42
+ setLineWidthByPrecision(val: number): void;
43
43
  get miterLimit(): number;
44
44
  set miterLimit(val: number);
45
45
  get shadowBlur(): number;
@@ -56,16 +56,31 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
56
56
  set font(val: string);
57
57
  get fontKerning(): CanvasFontKerning;
58
58
  set fontKerning(val: CanvasFontKerning);
59
+ get fontStretch(): CanvasFontStretch;
60
+ set fontStretch(val: CanvasFontStretch);
61
+ get fontVariantCaps(): CanvasFontVariantCaps;
62
+ set fontVariantCaps(val: CanvasFontVariantCaps);
63
+ get letterSpacing(): string;
64
+ set letterSpacing(val: string);
65
+ get textRendering(): CanvasTextRendering;
66
+ set textRendering(val: CanvasTextRendering);
67
+ get wordSpacing(): string;
68
+ set wordSpacing(val: string);
59
69
  get textAlign(): CanvasTextAlign;
60
70
  set textAlign(val: CanvasTextAlign);
61
71
  get textBaseline(): CanvasTextBaseline;
62
72
  set textBaseline(val: CanvasTextBaseline);
63
73
  private _getScale;
74
+ getScale(): {
75
+ scaleX: number;
76
+ scaleY: number;
77
+ };
64
78
  getContextAttributes(): CanvasRenderingContext2DSettings;
65
79
  isPointInStroke(x: number, y: number): boolean;
66
80
  isPointInStroke(path: Path2D, x: number, y: number): boolean;
67
81
  createConicGradient(startAngle: number, x: number, y: number): CanvasGradient;
68
82
  roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | Array<number | DOMPointInit>): void;
83
+ roundRectByPrecision(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | Array<number | DOMPointInit>): void;
69
84
  getTransform(): DOMMatrix;
70
85
  resetTransform(): void;
71
86
  drawFocusIfNeeded(element: Element): void;
@@ -80,12 +95,23 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
80
95
  * @method
81
96
  */
82
97
  arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterClockwise?: boolean): void;
98
+ /**
99
+ * arc function.
100
+ * @method
101
+ */
102
+ arcByPrecision(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterClockwise?: boolean): void;
83
103
  /**
84
104
  * arcTo function.
85
105
  * @method
86
106
  *
87
107
  */
88
108
  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
109
+ /**
110
+ * arcTo function.
111
+ * @method
112
+ *
113
+ */
114
+ arcToByPrecision(x1: number, y1: number, x2: number, y2: number, radius: number): void;
89
115
  /**
90
116
  * beginPath function.
91
117
  * @method
@@ -96,11 +122,21 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
96
122
  * @method
97
123
  */
98
124
  bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
125
+ /**
126
+ * bezierCurveTo function precision.
127
+ * @method
128
+ */
129
+ bezierCurveToByPrecision(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
99
130
  /**
100
131
  * clearRect function.
101
132
  * @method
102
133
  */
103
134
  clearRect(x: number, y: number, width: number, height: number): void;
135
+ /**
136
+ * clearRect function.
137
+ * @method
138
+ */
139
+ clearRectByPrecision(x: number, y: number, width: number, height: number): void;
104
140
  /**
105
141
  * clip function.
106
142
  * @method
@@ -162,11 +198,21 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
162
198
  * @method
163
199
  */
164
200
  fillRect(x: number, y: number, width: number, height: number): void;
201
+ /**
202
+ * fillRect function precision.
203
+ * @method
204
+ */
205
+ fillRectByPrecision(x: number, y: number, width: number, height: number): void;
165
206
  /**
166
207
  * strokeRect function.
167
208
  * @method
168
209
  */
169
210
  strokeRect(x: number, y: number, width: number, height: number): void;
211
+ /**
212
+ * strokeRect function precision.
213
+ * @method
214
+ */
215
+ strokeRectPrecision(x: number, y: number, width: number, height: number): void;
170
216
  /**
171
217
  * fillText function.
172
218
  * @method
@@ -192,16 +238,31 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
192
238
  * @method
193
239
  */
194
240
  lineTo(x: number, y: number): void;
241
+ /**
242
+ * lineTo function precision.
243
+ * @method
244
+ */
245
+ lineToByPrecision(x: number, y: number): void;
195
246
  /**
196
247
  * moveTo function.
197
248
  * @method
198
249
  */
199
250
  moveTo(x: number, y: number): void;
251
+ /**
252
+ * moveTo function precision.
253
+ * @method
254
+ */
255
+ moveToByPrecision(x: number, y: number): void;
200
256
  /**
201
257
  * rect function.
202
258
  * @method
203
259
  */
204
260
  rect(x: number, y: number, width: number, height: number): void;
261
+ /**
262
+ * rect function.
263
+ * @method
264
+ */
265
+ rectByPrecision(x: number, y: number, width: number, height: number): void;
205
266
  /**
206
267
  * putImageData function.
207
268
  * @method
@@ -258,6 +319,11 @@ export declare class UniverRenderingContext2D implements CanvasRenderingContext2
258
319
  * @method
259
320
  */
260
321
  strokeText(text: string, x: number, y: number, maxWidth?: number): void;
322
+ /**
323
+ * strokeText function precision.
324
+ * @method
325
+ */
326
+ strokeTextByPrecision(text: string, x: number, y: number, maxWidth?: number): void;
261
327
  /**
262
328
  * transform function.
263
329
  * @method
@@ -21,8 +21,8 @@ import type { ISceneTransformState } from './basics/interfaces';
21
21
  import { Vector2 } from './basics/vector2';
22
22
  import type { UniverRenderingContext } from './context';
23
23
  import { Layer } from './layer';
24
- import type { ITransformerConfig } from './scene.-transformer';
25
- import { Transformer } from './scene.-transformer';
24
+ import type { ITransformerConfig } from './scene.transformer';
25
+ import { Transformer } from './scene.transformer';
26
26
  import type { SceneViewer } from './scene-viewer';
27
27
  import type { ThinEngine } from './thin-engine';
28
28
  import { ThinScene } from './thin-scene';