// Copyright Epic Games, Inc. All Rights Reserved. /** * XR icon that can be clicked. */ export class XRIcon { _rootElement: HTMLButtonElement; _xrIcon: SVGElement; _tooltipText: HTMLElement; /** * Get the the button containing the XR icon. */ public get rootElement(): HTMLButtonElement { if (!this._rootElement) { this._rootElement = document.createElement('button'); this._rootElement.type = 'button'; this._rootElement.classList.add('UiTool'); this._rootElement.id = 'xrBtn'; this._rootElement.appendChild(this.xrIcon); this._rootElement.appendChild(this.tooltipText); } return this._rootElement; } public get tooltipText(): HTMLElement { if (!this._tooltipText) { this._tooltipText = document.createElement('span'); this._tooltipText.classList.add('tooltiptext'); this._tooltipText.innerHTML = 'XR'; } return this._tooltipText; } public get xrIcon(): SVGElement { if (!this._xrIcon) { this._xrIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); this._xrIcon.setAttributeNS(null, 'id', 'xrIcon'); this._xrIcon.setAttributeNS(null, 'x', '0px'); this._xrIcon.setAttributeNS(null, 'y', '0px'); this._xrIcon.setAttributeNS(null, 'viewBox', '0 0 100 100'); // create svg group for the paths const svgGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g'); svgGroup.classList.add('svgIcon'); this._xrIcon.appendChild(svgGroup); // create paths for the icon itself, the path of the xr headset const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttributeNS( null, 'd', 'M29 41c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 14c-2.8 0-5-2.2-5-5s2.2-5 5-5 5 2.2 5 5-2.2 5-5 5zm42-14c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 14c-2.8 0-5-2.2-5-5s2.2-5 5-5 5 2.2 5 5-2.2 5-5 5zm12-31H17c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h14.5c3.5 0 6.8-1.5 9-4.1l3.5-4c1.5-1.7 3.7-2.7 6-2.7s4.5 1 6 2.7l3.5 4c2.3 2.6 5.6 4.1 9 4.1H83c6.6 0 12-5.4 12-12V36c0-6.6-5.4-12-12-12zm8 40c0 4.4-3.6 8-8 8H68.5c-2.3 0-4.5-1-6-2.7l-3.5-4c-2.3-2.6-5.6-4.1-9-4.1-3.5 0-6.8 1.5-9 4.1l-3.5 4C36 71 33.8 72 31.5 72H17c-4.4 0-8-3.6-8-8V36c0-4.4 3.6-8 8-8h66c4.4 0 8 3.6 8 8v28z' ); svgGroup.appendChild(path); } return this._xrIcon; } }