refactor(editor): extract brush element renderer (#11460)

This commit is contained in:
Saul-Mirone
2025-04-04 13:09:45 +00:00
parent 138e7f60de
commit 5a1106fb88
4 changed files with 23 additions and 16 deletions

View File

@@ -5,6 +5,7 @@ import {
} from '@blocksuite/affine-block-frame'; } from '@blocksuite/affine-block-frame';
import { ConnectionOverlay } from '@blocksuite/affine-block-surface'; import { ConnectionOverlay } from '@blocksuite/affine-block-surface';
import { import {
BrushElementRendererExtension,
BrushTool, BrushTool,
EraserTool, EraserTool,
HighlighterTool, HighlighterTool,
@@ -52,6 +53,10 @@ export const EdgelessToolExtension: ExtensionType[] = [
HighlighterTool, HighlighterTool,
]; ];
export const EdgelessElementRendererExtension: ExtensionType[] = [
BrushElementRendererExtension,
];
export const EdgelessEditExtensions: ExtensionType[] = [ export const EdgelessEditExtensions: ExtensionType[] = [
ElementTransformManager, ElementTransformManager,
ConnectorFilter, ConnectorFilter,
@@ -74,4 +79,5 @@ export const EdgelessBuiltInSpecs: ExtensionType[] = [
EdgelessToolExtension, EdgelessToolExtension,
EdgelessBuiltInManager, EdgelessBuiltInManager,
EdgelessEditExtensions, EdgelessEditExtensions,
EdgelessElementRendererExtension,
].flat(); ].flat();

View File

@@ -7,7 +7,6 @@ import type {
import { ElementRendererExtension } from '../../extensions/element-renderer.js'; import { ElementRendererExtension } from '../../extensions/element-renderer.js';
import type { RoughCanvas } from '../../index.js'; import type { RoughCanvas } from '../../index.js';
import type { CanvasRenderer } from '../canvas-renderer.js'; import type { CanvasRenderer } from '../canvas-renderer.js';
import { brush } from './brush/index.js';
import { connector } from './connector/index.js'; import { connector } from './connector/index.js';
import { group } from './group/index.js'; import { group } from './group/index.js';
import { highlighter } from './highlighter/index.js'; import { highlighter } from './highlighter/index.js';
@@ -29,11 +28,6 @@ export type ElementRenderer<
viewportBound: IBound viewportBound: IBound
) => void; ) => void;
export const BrushElementRendererExtension = ElementRendererExtension(
'brush',
brush
);
export const HighlighterElementRendererExtension = ElementRendererExtension( export const HighlighterElementRendererExtension = ElementRendererExtension(
'highlighter', 'highlighter',
highlighter highlighter
@@ -65,7 +59,6 @@ export const MindmapElementRendererExtension = ElementRendererExtension(
); );
export const elementRendererExtensions = [ export const elementRendererExtensions = [
BrushElementRendererExtension,
HighlighterElementRendererExtension, HighlighterElementRendererExtension,
ConnectorElementRendererExtension, ConnectorElementRendererExtension,
GroupElementRendererExtension, GroupElementRendererExtension,

View File

@@ -1,13 +1,15 @@
import {
type ElementRenderer,
ElementRendererExtension,
} from '@blocksuite/affine-block-surface';
import { type BrushElementModel, DefaultTheme } from '@blocksuite/affine-model'; import { type BrushElementModel, DefaultTheme } from '@blocksuite/affine-model';
import type { CanvasRenderer } from '../../canvas-renderer.js'; export const brush: ElementRenderer<BrushElementModel> = (
model,
export function brush( ctx,
model: BrushElementModel, matrix,
ctx: CanvasRenderingContext2D, renderer
matrix: DOMMatrix, ) => {
renderer: CanvasRenderer
) {
const { rotate } = model; const { rotate } = model;
const [, , w, h] = model.deserializedXYWH; const [, , w, h] = model.deserializedXYWH;
const cx = w / 2; const cx = w / 2;
@@ -22,4 +24,9 @@ export function brush(
ctx.fillStyle = color; ctx.fillStyle = color;
ctx.fill(new Path2D(model.commands)); ctx.fill(new Path2D(model.commands));
} };
export const BrushElementRendererExtension = ElementRendererExtension(
'brush',
brush
);

View File

@@ -1,4 +1,5 @@
export * from './brush-tool'; export * from './brush-tool';
export * from './element-renderer';
export * from './eraser-tool'; export * from './eraser-tool';
export * from './highlighter-tool'; export * from './highlighter-tool';
export * from './toolbar/configs'; export * from './toolbar/configs';