diff --git a/examples/website/arc/app.tsx b/examples/website/arc/app.tsx index c2f33efe850..795f076f92f 100644 --- a/examples/website/arc/app.tsx +++ b/examples/website/arc/app.tsx @@ -12,6 +12,8 @@ import {scaleQuantile} from 'd3-scale'; import type {Color, PickingInfo, MapViewState} from '@deck.gl/core'; import type {Feature, Polygon, MultiPolygon} from 'geojson'; +import {CompassWidget, ZoomWidget, FullscreenWidget} from '@deck.gl/widgets'; +import '@deck.gl/widgets/stylesheet.css'; // Source data GeoJSON const DATA_URL = @@ -142,6 +144,7 @@ export default function App({ initialViewState={INITIAL_VIEW_STATE} controller={true} getTooltip={getTooltip} + widgets={[new ZoomWidget({}), new CompassWidget({}), new FullscreenWidget({})]} > diff --git a/modules/core/src/lib/deck.ts b/modules/core/src/lib/deck.ts index 4780d545028..8f5d308c471 100644 --- a/modules/core/src/lib/deck.ts +++ b/modules/core/src/lib/deck.ts @@ -1072,7 +1072,9 @@ export default class Deck { timeline.play(); this.animationLoop.attachTimeline(timeline); - this.eventManager = new EventManager(this.props.parent || this.canvas, { + const eventRoot = + this.props.parent?.querySelector('.deck-events-root') || this.canvas; + this.eventManager = new EventManager(eventRoot, { touchAction: this.props.touchAction, recognizers: Object.keys(RECOGNIZERS).map((eventName: string) => { // Resolve recognizer settings @@ -1128,9 +1130,13 @@ export default class Deck { this.deckPicker = new DeckPicker(this.device); + const widgetParent = + this.props.parent?.querySelector('.deck-widgets-root') || + this.canvas?.parentElement; + this.widgetManager = new WidgetManager({ deck: this, - parentElement: this.canvas?.parentElement + parentElement: widgetParent }); this.widgetManager.addDefault(new TooltipWidget()); diff --git a/modules/react/src/deckgl.ts b/modules/react/src/deckgl.ts index c60e1486785..527e96c50b6 100644 --- a/modules/react/src/deckgl.ts +++ b/modules/react/src/deckgl.ts @@ -259,11 +259,26 @@ function DeckGLWithRef( style: canvasStyle }); + const eventRoot = createElement( + 'div', + { + key: 'deck-events-root', + className: 'deck-events-root', + style: {width, height} + }, + [canvas, childrenUnderViews] + ); + + const widgetRoot = createElement('div', { + key: 'deck-widgets-root', + className: 'deck-widgets-root' + }); + // Render deck.gl as the last child thisRef.control = createElement( 'div', {id: `${id || 'deckgl'}-wrapper`, ref: containerRef, style: containerStyle}, - [canvas, childrenUnderViews] + [eventRoot, widgetRoot] ); }