diff --git a/common/changes/@visactor/vgrammar-core/feat-mark-overflow_2024-11-04-02-27.json b/common/changes/@visactor/vgrammar-core/feat-mark-overflow_2024-11-04-02-27.json new file mode 100644 index 00000000..8255ab64 --- /dev/null +++ b/common/changes/@visactor/vgrammar-core/feat-mark-overflow_2024-11-04-02-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "feat: support overflow of mark\n\n", + "type": "none", + "packageName": "@visactor/vgrammar-core" + } + ], + "packageName": "@visactor/vgrammar-core", + "email": "dingling112@gmail.com" +} \ No newline at end of file diff --git a/packages/vgrammar-core/src/types/mark.ts b/packages/vgrammar-core/src/types/mark.ts index e9f4940f..336d6dae 100644 --- a/packages/vgrammar-core/src/types/mark.ts +++ b/packages/vgrammar-core/src/types/mark.ts @@ -261,6 +261,7 @@ export interface IMarkConfig { * set graphic name */ graphicName?: string | ((element: IElement) => string); + overflow?: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y'; } /** diff --git a/packages/vgrammar-core/src/view/mark.ts b/packages/vgrammar-core/src/view/mark.ts index 1a0721e5..05927c79 100644 --- a/packages/vgrammar-core/src/view/mark.ts +++ b/packages/vgrammar-core/src/view/mark.ts @@ -497,7 +497,8 @@ export class Mark extends GrammarBase implements IMark { 'skipTheme', 'enableSegments', 'stateSort', - 'graphicName' + 'graphicName', + 'overflow' ]; if (config === null) { keys.forEach(key => { @@ -637,7 +638,8 @@ export class Mark extends GrammarBase implements IMark { if (!this.graphicItem) { const graphicItem = createGraphicItem(this, GrammarMarkType.group, { pickable: false, - zIndex: this.spec.zIndex ?? 0 + zIndex: this.spec.zIndex ?? 0, + overflow: this.spec.overflow }) as IGroup; if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) { graphicItem.setMode('3d'); @@ -651,6 +653,10 @@ export class Mark extends GrammarBase implements IMark { } } else { this.graphicParent = groupGraphicItem; + + this.graphicParent.setAttributes({ + overflow: this.spec.overflow + }); } this.graphicIndex = markIndex; } @@ -684,6 +690,10 @@ export class Mark extends GrammarBase implements IMark { } } + if (!isNil(spec.overflow)) { + this.graphicItem.setAttribute('overflow', spec.overflow); + } + // only update interactive this.elementMap.forEach(element => { element.updateGraphicItem();