diff --git a/packages/terra-draw-google-maps-adapter/src/terra-draw-google-maps-adapter.ts b/packages/terra-draw-google-maps-adapter/src/terra-draw-google-maps-adapter.ts index 1184ee42..8d0a6e1e 100644 --- a/packages/terra-draw-google-maps-adapter/src/terra-draw-google-maps-adapter.ts +++ b/packages/terra-draw-google-maps-adapter/src/terra-draw-google-maps-adapter.ts @@ -147,9 +147,9 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda const sw = bounds.getSouthWest(); const latLngBounds = new this._lib.LatLngBounds(sw, ne); - // In fullscreen mode, use coordinates relative to the fullscreen element - const mapElement = document.fullscreenElement ?? this._map.getDiv(); - const mapCanvasRect = mapElement.getBoundingClientRect(); + const mapCanvasRect = this.getBoundingMapElement( + this._map, + ).getBoundingClientRect(); const offsetX = event.clientX - mapCanvasRect.left; const offsetY = event.clientY - mapCanvasRect.top; const screenCoord = new this._lib.Point(offsetX, offsetY); @@ -168,6 +168,21 @@ export class TerraDrawGoogleMapsAdapter extends TerraDrawExtend.TerraDrawBaseAda } } + /** + * Returns the containing parent element to do lng/lat calculations from + * + * Defaults here should work well for most use-cases, but in the case of a map loaded by + * a fullscreen parent element (think custom button bar above a full-screen map), + * overrides by a custom adapter become possible + * + * @param map + * @returns + */ + getBoundingMapElement(map: google.maps.Map) { + // In fullscreen mode, use coordinates relative to the fullscreen element + return document.fullscreenElement ?? map.getDiv(); + } + /** * Retrieves the HTML element of the Google Map element that handles interaction events * @returns The HTMLElement representing the map container.