@zephyr3d/editor 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +143 -0
  2. package/dist/assets/{index-BaUzUcND.js → index-IISR7uQv.js} +1 -1
  3. package/dist/assistant/zephyr-types-index.json +1 -1
  4. package/dist/index.html +2 -2
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_imgui.js +3 -3
  7. package/dist/modules/zephyr3d_imgui.js.map +1 -1
  8. package/dist/modules/zephyr3d_scene.js +1439 -1439
  9. package/dist/modules/zephyr3d_scene.js.map +1 -1
  10. package/dist/vendor/zephyr3d/backend-webgpu/dist/bindgroup_webgpu.js.map +1 -1
  11. package/dist/vendor/zephyr3d/backend-webgpu/dist/buffer_webgpu.js.map +1 -1
  12. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
  13. package/dist/vendor/zephyr3d/backend-webgpu/dist/uploadringbuffer.js.map +1 -1
  14. package/dist/vendor/zephyr3d/imgui/dist/imgui_impl.js.map +1 -1
  15. package/dist/vendor/zephyr3d/imgui/dist/renderer.js +3 -3
  16. package/dist/vendor/zephyr3d/imgui/dist/renderer.js.map +1 -1
  17. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +135 -135
  18. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  19. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/controller.js +146 -146
  20. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/controller.js.map +1 -1
  21. package/dist/vendor/zephyr3d/scene/dist/animation/spring/spring_system.js +75 -75
  22. package/dist/vendor/zephyr3d/scene/dist/animation/spring/spring_system.js.map +1 -1
  23. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +184 -184
  24. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  25. package/dist/vendor/zephyr3d/scene/dist/material/material.js +288 -288
  26. package/dist/vendor/zephyr3d/scene/dist/material/material.js.map +1 -1
  27. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resource_manager.js +93 -93
  28. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  29. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resources.js +3 -3
  30. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resources.js.map +1 -1
  31. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js +22 -22
  32. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
  33. package/dist/vendor/zephyr3d/scene/dist/utility/blueprint/material/ir.js +489 -489
  34. package/dist/vendor/zephyr3d/scene/dist/utility/blueprint/material/ir.js.map +1 -1
  35. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  36. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  37. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js.map +1 -1
  39. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js.map +1 -1
  40. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  41. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js.map +1 -1
  43. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js.map +1 -1
  44. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/scene.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js.map +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/types.js +4 -4
  47. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/types.js.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"imgui_impl.js","sources":["../src/imgui_impl.ts"],"sourcesContent":["import type { AbstractDevice, AtlasInfo, Texture2D } from '@zephyr3d/device';\r\nimport { GlyphManager, Font as DeviceFont } from '@zephyr3d/device';\r\nimport { Renderer } from './renderer';\r\nimport * as ImGui from './imgui';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\nlet clipboard_text = '';\r\nlet renderer: Nullable<Renderer> = null;\r\nlet prev_time = 0;\r\nlet g_FontTexture: Nullable<Texture2D> = null;\r\nlet glyphManager: Nullable<GlyphManager> = null;\r\nlet wantKeyboard = false;\r\nlet fontSizeGlyph = 0;\r\nconst fonts: Record<string, DeviceFont> = {};\r\nconst glyphFonts: Record<string, DeviceFont> = {};\r\n\r\nfunction isPasteShortcut(event: KeyboardEvent) {\r\n const key = event.key?.toLowerCase?.() ?? '';\r\n return (event.ctrlKey || event.metaKey) && !event.altKey && key === 'v';\r\n}\r\n\r\nasync function readClipboardTextPreferSystem() {\r\n if (typeof navigator !== 'undefined' && navigator.clipboard?.readText) {\r\n try {\r\n const text = await navigator.clipboard.readText();\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n } catch {\r\n // Ignore clipboard read failures and fallback to in-memory clipboard.\r\n }\r\n }\r\n return clipboard_text;\r\n}\r\n\r\nexport class Input {\r\n public _dom_input: HTMLInputElement;\r\n private _composing = false;\r\n private _lastCommittedText = '';\r\n private _lastCommittedAt = 0;\r\n constructor(cvs: HTMLCanvasElement) {\r\n this._dom_input = document.createElement('input');\r\n this._dom_input.type = 'text';\r\n this._dom_input.autocomplete = 'off';\r\n this._dom_input.autocapitalize = 'off';\r\n this._dom_input.spellcheck = false;\r\n // This input is only used as an IME/text-entry bridge and should not\r\n // participate in the browser's native Tab focus order.\r\n this._dom_input.tabIndex = -1;\r\n this._dom_input.style.position = 'fixed';\r\n this._dom_input.style.top = -10000 + 'px';\r\n this._dom_input.style.left = -10000 + 'px';\r\n this._dom_input.style.width = '1px';\r\n this._dom_input.style.height = '1px';\r\n this._dom_input.style.opacity = '0';\r\n this._dom_input.style.pointerEvents = 'none';\r\n this._dom_input.addEventListener('keydown', (e) => {\r\n e.stopPropagation();\r\n this.onKeydown(e as KeyboardEvent);\r\n // Only intercept Tab so browser focus navigation does not trigger.\r\n // Keep the default behavior for other keys so text entry still works.\r\n if ((e as KeyboardEvent).key === 'Tab') {\r\n e.preventDefault();\r\n }\r\n });\r\n this._dom_input.addEventListener('keyup', (e) => {\r\n e.stopPropagation();\r\n this.onKeyup(e as KeyboardEvent);\r\n // Same as above: only intercept Tab to avoid interfering with text entry.\r\n if ((e as KeyboardEvent).key === 'Tab') {\r\n e.preventDefault();\r\n }\r\n });\r\n this._dom_input.addEventListener('keypress', (e) => {\r\n e.stopPropagation();\r\n this.onKeypress(e as KeyboardEvent);\r\n });\r\n this._dom_input.addEventListener('compositionstart', (e) => {\r\n this.onCompositionStart(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('compositionupdate', (e) => {\r\n this.onCompositionUpdate(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('compositionend', (e) => {\r\n this.onCompositionEnd(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('input', (e) => {\r\n this.onInput(e as InputEvent);\r\n });\r\n this._dom_input.addEventListener('paste', (e) => {\r\n this.onPaste(e as ClipboardEvent);\r\n });\r\n const parent = cvs.ownerDocument?.body ?? document.body ?? cvs.ownerDocument?.documentElement ?? cvs;\r\n parent.appendChild(this._dom_input);\r\n this.blur();\r\n }\r\n onKeydown(e: KeyboardEvent) {\r\n canvas_on_keydown(e);\r\n }\r\n onKeyup(e: KeyboardEvent) {\r\n canvas_on_keyup(e);\r\n }\r\n onKeypress(e: KeyboardEvent) {\r\n void e;\r\n }\r\n onCompositionStart(_e: CompositionEvent) {\r\n this._composing = true;\r\n }\r\n onCompositionUpdate(_e: CompositionEvent) {}\r\n onCompositionEnd(_e: CompositionEvent) {\r\n const text = typeof _e.data === 'string' ? _e.data : '';\r\n this._composing = false;\r\n if (text) {\r\n this.commitText(text);\r\n }\r\n }\r\n onInput(e: InputEvent) {\r\n e.stopPropagation();\r\n const inputType = typeof e.inputType === 'string' ? e.inputType : '';\r\n if (\r\n this._composing ||\r\n (typeof e.isComposing === 'boolean' && e.isComposing) ||\r\n inputType === 'insertCompositionText'\r\n ) {\r\n return;\r\n }\r\n if (inputType.startsWith('delete')) {\r\n this.clearText();\r\n return;\r\n }\r\n const text = typeof e.data === 'string' && e.data.length > 0 ? e.data : this._dom_input.value;\r\n if (text) {\r\n const now = Date.now();\r\n if (!(text === this._lastCommittedText && now - this._lastCommittedAt < 50)) {\r\n this.commitText(text);\r\n }\r\n }\r\n this.clearText();\r\n }\r\n onPaste(e: ClipboardEvent) {\r\n e.stopPropagation();\r\n const text = e.clipboardData?.getData('text/plain');\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n }\r\n blur() {\r\n if (document.activeElement === this._dom_input) {\r\n this.clearText();\r\n this._dom_input.blur();\r\n }\r\n }\r\n focus() {\r\n if (document.activeElement !== this._dom_input) {\r\n this._dom_input.focus();\r\n }\r\n }\r\n private clearText() {\r\n this._dom_input.value = '';\r\n }\r\n private commitText(text: string) {\r\n const io = ImGui.GetIO();\r\n for (const ch of text) {\r\n io.AddInputCharacter(ch.codePointAt(0)!);\r\n }\r\n this._lastCommittedText = text;\r\n this._lastCommittedAt = Date.now();\r\n this.clearText();\r\n }\r\n}\r\n\r\n/*\r\nfunction document_on_copy(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n event.clipboardData.setData(\"text/plain\", clipboard_text);\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n\r\nfunction document_on_cut(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n event.clipboardData.setData(\"text/plain\", clipboard_text);\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n\r\nfunction document_on_paste(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n clipboard_text = event.clipboardData.getData(\"text/plain\");\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n*/\r\nfunction window_on_resize() {}\r\n\r\nfunction document_on_paste(event: ClipboardEvent) {\r\n const text = event.clipboardData?.getData('text/plain');\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n}\r\n\r\nfunction window_on_gamepadconnected(event: any /* GamepadEvent */) {\r\n console.info(\r\n 'Gamepad connected at index %d: %s. %d buttons, %d axes.',\r\n event.gamepad.index,\r\n event.gamepad.id,\r\n event.gamepad.buttons.length,\r\n event.gamepad.axes.length\r\n );\r\n}\r\n\r\nfunction window_on_gamepaddisconnected(event: any /* GamepadEvent */) {\r\n console.info('Gamepad disconnected at index %d: %s.', event.gamepad.index, event.gamepad.id);\r\n}\r\n\r\nfunction shouldPreserveMouseStateOnCanvasBlur(event: FocusEvent) {\r\n const next = event.relatedTarget;\r\n if (!(next instanceof HTMLElement)) {\r\n return false;\r\n }\r\n const hiddenTextBridge =\r\n (next.tagName === 'INPUT' || next.tagName === 'TEXTAREA') &&\r\n next.tabIndex < 0 &&\r\n next.getAttribute('aria-hidden') === 'true';\r\n return hiddenTextBridge;\r\n}\r\n\r\nfunction canvas_on_blur(_event: FocusEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = false;\r\n io.KeyShift = false;\r\n io.KeyAlt = false;\r\n io.KeySuper = false;\r\n for (let i = 0; i < io.KeysDown.length; ++i) {\r\n io.KeysDown[i] = false;\r\n }\r\n if (!shouldPreserveMouseStateOnCanvasBlur(_event)) {\r\n for (let i = 0; i < io.MouseDown.length; ++i) {\r\n io.MouseDown[i] = false;\r\n }\r\n leftMouseDown = false;\r\n releasePointerLock();\r\n }\r\n}\r\n\r\nconst key_code_to_index: Record<string, number> = {\r\n Tab: 9,\r\n Backspace: 8,\r\n Space: 32,\r\n Insert: 45,\r\n Delete: 46,\r\n Home: 36,\r\n End: 35,\r\n PageUp: 33,\r\n PageDown: 34,\r\n Enter: 13,\r\n Escape: 27,\r\n ArrowLeft: 37,\r\n ArrowUp: 38,\r\n ArrowRight: 39,\r\n ArrowDown: 40,\r\n NumpadEnter: 176,\r\n KeyA: 65,\r\n KeyC: 67,\r\n KeyV: 86,\r\n KeyX: 88,\r\n KeyY: 89,\r\n KeyZ: 90\r\n};\r\n\r\nexport function canvas_on_keydown(event: KeyboardEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = event.ctrlKey;\r\n io.KeyShift = event.shiftKey;\r\n io.KeyAlt = event.altKey;\r\n io.KeySuper = event.metaKey;\r\n if (isPasteShortcut(event)) {\r\n readClipboardTextPreferSystem();\r\n }\r\n const key_index = key_code_to_index[event.code];\r\n if (key_index) {\r\n ImGui.ASSERT(key_index >= 0 && key_index < ImGui.ARRAYSIZE(io.KeysDown));\r\n io.KeysDown[key_index] = true;\r\n // forward to the keypress event\r\n if (key_index == 9 || wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function canvas_on_keyup(event: KeyboardEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = event.ctrlKey;\r\n io.KeyShift = event.shiftKey;\r\n io.KeyAlt = event.altKey;\r\n io.KeySuper = event.metaKey;\r\n const key_index = key_code_to_index[event.code];\r\n if (key_index) {\r\n ImGui.ASSERT(key_index >= 0 && key_index < ImGui.ARRAYSIZE(io.KeysDown));\r\n io.KeysDown[key_index] = false;\r\n if (wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput || key_index == 9) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function canvas_on_keypress(event: KeyboardEvent) {\r\n void event;\r\n const io = ImGui.GetIO();\r\n // Text is committed via the hidden DOM input's `input` event.\r\n // Doing it here duplicates Latin characters and IME composition results.\r\n if (wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_pointermove(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n if (isPointerLocked()) {\r\n io.MousePos.x += event.movementX || 0;\r\n io.MousePos.y += event.movementY || 0;\r\n } else {\r\n io.MousePos.x = event.offsetX;\r\n io.MousePos.y = event.offsetY;\r\n if (\r\n event.pointerType === 'mouse' &&\r\n leftMouseDown &&\r\n (event.buttons & 1) !== 0 &&\r\n io.WantCaptureMouse &&\r\n isDraggingFromMouseDown(event) &&\r\n isPointerNearScreenEdge(event)\r\n ) {\r\n requestPointerLock();\r\n }\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// MouseEvent.button\r\n// A number representing a given button:\r\n// 0: Main button pressed, usually the left button or the un-initialized state\r\n// 1: Auxiliary button pressed, usually the wheel button or the middle button (if present)\r\n// 2: Secondary button pressed, usually the right button\r\n// 3: Fourth button, typically the Browser Back button\r\n// 4: Fifth button, typically the Browser Forward button\r\nconst mouse_button_map: number[] = [\r\n ImGui.MouseButton.Left,\r\n ImGui.MouseButton.Middle,\r\n ImGui.MouseButton.Right,\r\n 3,\r\n 4\r\n];\r\n\r\nexport function any_pointerdown() {\r\n const io = ImGui.GetIO();\r\n for (let i = 0; i < io.MouseDown.length; i++) {\r\n if (io.MouseDown[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isPointerLocked() {\r\n if (typeof document === 'undefined') {\r\n return false;\r\n }\r\n return document.pointerLockElement === renderer?.device.canvas;\r\n}\r\n\r\nfunction requestPointerLock() {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n const canvas = renderer?.device.canvas;\r\n if (!canvas || isPointerLocked() || typeof canvas.requestPointerLock !== 'function') {\r\n return;\r\n }\r\n try {\r\n const ret = canvas.requestPointerLock();\r\n if (ret && typeof (ret as Promise<void>).catch === 'function') {\r\n (ret as Promise<void>).catch(() => {\r\n // Ignore pointer lock denial and keep default behavior.\r\n });\r\n }\r\n } catch {\r\n // Ignore pointer lock denial and keep default behavior.\r\n }\r\n}\r\n\r\nfunction releasePointerLock() {\r\n if (typeof document === 'undefined' || !isPointerLocked()) {\r\n return;\r\n }\r\n if (typeof document.exitPointerLock === 'function') {\r\n document.exitPointerLock();\r\n }\r\n}\r\n\r\nconst DRAG_LOCK_THRESHOLD_PX = 2;\r\nconst EDGE_LOCK_PADDING_PX = 1;\r\nlet leftMouseDown = false;\r\nlet leftMouseDownClientX = 0;\r\nlet leftMouseDownClientY = 0;\r\n\r\nfunction isDraggingFromMouseDown(event: PointerEvent) {\r\n const dx = event.clientX - leftMouseDownClientX;\r\n const dy = event.clientY - leftMouseDownClientY;\r\n return dx * dx + dy * dy >= DRAG_LOCK_THRESHOLD_PX * DRAG_LOCK_THRESHOLD_PX;\r\n}\r\n\r\nfunction isPointerNearScreenEdge(event: PointerEvent) {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n const x = event.clientX;\r\n const y = event.clientY;\r\n return (\r\n x <= EDGE_LOCK_PADDING_PX ||\r\n y <= EDGE_LOCK_PADDING_PX ||\r\n x >= window.innerWidth - EDGE_LOCK_PADDING_PX ||\r\n y >= window.innerHeight - EDGE_LOCK_PADDING_PX\r\n );\r\n}\r\n\r\nfunction canvas_on_pointerdown(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = event.offsetX;\r\n io.MousePos.y = event.offsetY;\r\n io.MouseDown[mouseButtonToImGui(event.button)] = true;\r\n if (event.button === 0 && event.pointerType === 'mouse') {\r\n leftMouseDown = true;\r\n leftMouseDownClientX = event.clientX;\r\n leftMouseDownClientY = event.clientY;\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_contextmenu(_event: Event) {\r\n const io = ImGui.GetIO();\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_pointerup(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n io.MouseDown[mouse_button_map[event.button]] = false;\r\n if (event.button === 0) {\r\n leftMouseDown = false;\r\n }\r\n if (!any_pointerdown()) {\r\n releasePointerLock();\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_wheel(event: WheelEvent) {\r\n const io = ImGui.GetIO();\r\n let scale = 1.0;\r\n switch (event.deltaMode) {\r\n case event.DOM_DELTA_PIXEL:\r\n scale = 0.01;\r\n break;\r\n case event.DOM_DELTA_LINE:\r\n scale = 0.2;\r\n break;\r\n case event.DOM_DELTA_PAGE:\r\n scale = 1.0;\r\n break;\r\n }\r\n io.MouseWheelH = event.deltaX * scale;\r\n io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text.\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nlet touch_count = 0;\r\nlet touch_id: number;\r\nexport class ITouch {\r\n x = 0;\r\n y = 0;\r\n}\r\nexport let multi_touch: { [key: number]: ITouch } = {};\r\n\r\nfunction canvas_on_touchstart(event: TouchEvent) {\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n touch_id = touch.identifier;\r\n multi_touch[touch.identifier] = { x: touch.clientX, y: touch.clientY };\r\n }\r\n const mtouch = multi_touch[touch_id];\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = mtouch.x;\r\n io.MousePos.y = mtouch.y;\r\n io.MouseDown[0] = true;\r\n}\r\nfunction canvas_on_touchmove(event: TouchEvent) {\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n multi_touch[touch.identifier] = { x: touch.clientX, y: touch.clientY };\r\n }\r\n const mtouch = multi_touch[touch_id];\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = mtouch.x;\r\n io.MousePos.y = mtouch.y;\r\n}\r\nfunction canvas_on_touchend(event: TouchEvent) {\r\n const io = ImGui.GetIO();\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n if (touch.identifier == touch_id) {\r\n io.MouseDown[0] = false;\r\n }\r\n delete multi_touch[touch.identifier];\r\n }\r\n touch_count++;\r\n if (touch_count >= 200) {\r\n multi_touch = {};\r\n }\r\n}\r\nfunction canvas_on_touchcancel(event: TouchEvent) {\r\n canvas_on_touchend(event);\r\n}\r\n\r\nexport const is_contextlost = false;\r\n\r\nexport function injectKeyEvent(ev: KeyboardEvent) {\r\n if (ev.type === 'keydown') {\r\n return canvas_on_keydown(ev);\r\n } else if (ev.type === 'keyup') {\r\n return canvas_on_keyup(ev);\r\n } else if (ev.type === 'keypress') {\r\n return canvas_on_keypress(ev);\r\n }\r\n return false;\r\n}\r\n\r\nexport function injectWheelEvent(ev: WheelEvent) {\r\n return canvas_on_wheel(ev);\r\n}\r\n\r\nexport function injectPointerEvent(ev: PointerEvent) {\r\n if (ev.type === 'pointermove') {\r\n return canvas_on_pointermove(ev);\r\n } else if (ev.type === 'pointerdown') {\r\n return canvas_on_pointerdown(ev);\r\n } else if (ev.type === 'pointerup') {\r\n return canvas_on_pointerup(ev);\r\n }\r\n return false;\r\n}\r\n\r\nexport function injectTouchEvent(ev: TouchEvent) {\r\n if (ev.type === 'touchstart') {\r\n canvas_on_touchstart(ev);\r\n } else if (ev.type === 'touchmove') {\r\n canvas_on_touchmove(ev);\r\n } else if (ev.type === 'touchend') {\r\n canvas_on_touchend(ev);\r\n } else if (ev.type === 'touchcancel') {\r\n canvas_on_touchcancel(ev);\r\n }\r\n}\r\n\r\n/*\r\nfunction canvas_on_contextlost(e:Event):void {\r\n e.preventDefault();\r\n console.info(\"canvas_on_contextlost\");\r\n is_contextlost=true;\r\n}\r\n\r\nfunction canvas_on_contextrestored(e:Event):void {\r\n console.info(\"canvas_on_contextrestored\");\r\n is_contextlost=false;\r\n}\r\n*/\r\n\r\nexport function Init(device: AbstractDevice, glyphSize: number) {\r\n const io = ImGui.GetIO();\r\n\r\n if (typeof window !== 'undefined') {\r\n io.BackendPlatformName = 'imgui_impl_browser';\r\n ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem('imgui.ini') || '');\r\n } else {\r\n io.BackendPlatformName = 'imgui_impl_console';\r\n }\r\n\r\n if (typeof navigator !== 'undefined') {\r\n io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null;\r\n }\r\n\r\n if (typeof document !== 'undefined') {\r\n document.body.addEventListener('paste', document_on_paste);\r\n }\r\n\r\n io.SetClipboardTextFn = (user_data: any, text: string) => {\r\n clipboard_text = text;\r\n navigator.clipboard.writeText(clipboard_text);\r\n };\r\n io.GetClipboardTextFn = (_user_data: any) => {\r\n readClipboardTextPreferSystem();\r\n return clipboard_text;\r\n };\r\n io.ClipboardUserData = null;\r\n\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('resize', window_on_resize);\r\n window.addEventListener('gamepadconnected', window_on_gamepadconnected);\r\n window.addEventListener('gamepaddisconnected', window_on_gamepaddisconnected);\r\n }\r\n\r\n fontSizeGlyph = glyphSize;\r\n renderer = new Renderer(device);\r\n glyphManager = new GlyphManager(device, 1024, 1024, 1);\r\n dom_input = new Input(device.canvas);\r\n\r\n window_on_resize();\r\n renderer.device.canvas.style.touchAction = 'none'; // Disable browser handling of all panning and zooming gestures.\r\n renderer.device.canvas.addEventListener('blur', canvas_on_blur);\r\n renderer.device.canvas.addEventListener('contextmenu', canvas_on_contextmenu);\r\n\r\n // Setup back-end capabilities flags\r\n io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional)\r\n io.BackendFlags |= ImGui.BackendFlags.RendererHasVtxOffset;\r\n\r\n // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array.\r\n io.KeyMap[ImGui.Key.Tab] = 9;\r\n io.KeyMap[ImGui.Key.LeftArrow] = 37;\r\n io.KeyMap[ImGui.Key.RightArrow] = 39;\r\n io.KeyMap[ImGui.Key.UpArrow] = 38;\r\n io.KeyMap[ImGui.Key.DownArrow] = 40;\r\n io.KeyMap[ImGui.Key.PageUp] = 33;\r\n io.KeyMap[ImGui.Key.PageDown] = 34;\r\n io.KeyMap[ImGui.Key.Home] = 36;\r\n io.KeyMap[ImGui.Key.End] = 35;\r\n io.KeyMap[ImGui.Key.Insert] = 45;\r\n io.KeyMap[ImGui.Key.Delete] = 46;\r\n io.KeyMap[ImGui.Key.Backspace] = 8;\r\n io.KeyMap[ImGui.Key.Space] = 32;\r\n io.KeyMap[ImGui.Key.Enter] = 13;\r\n io.KeyMap[ImGui.Key.Escape] = 27;\r\n io.KeyMap[ImGui.Key.KeyPadEnter] = key_code_to_index['NumpadEnter'];\r\n io.KeyMap[ImGui.Key.A] = 65;\r\n io.KeyMap[ImGui.Key.C] = 67;\r\n io.KeyMap[ImGui.Key.V] = 86;\r\n io.KeyMap[ImGui.Key.X] = 88;\r\n io.KeyMap[ImGui.Key.Y] = 89;\r\n io.KeyMap[ImGui.Key.Z] = 90;\r\n\r\n CreateDeviceObjects();\r\n}\r\n\r\nexport function NewFrame(time: number) {\r\n const io = ImGui.GetIO();\r\n\r\n if (io.WantSaveIniSettings) {\r\n io.WantSaveIniSettings = false;\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem('imgui.ini', ImGui.SaveIniSettingsToMemory());\r\n }\r\n }\r\n\r\n const viewport = renderer!.device.getViewport();\r\n const canvas = renderer!.device.canvas;\r\n const w: number = viewport.width;\r\n const h: number = viewport.height;\r\n const display_w: number = renderer!.device.screenXToDevice(w);\r\n const display_h: number = renderer!.device.screenYToDevice(h);\r\n io.DisplaySize.x = w;\r\n io.DisplaySize.y = h;\r\n io.DisplayFramebufferScale.x = w > 0 ? display_w / w : 0;\r\n io.DisplayFramebufferScale.y = h > 0 ? display_h / h : 0;\r\n\r\n const dt: number = prev_time === 0 ? 0 : time - prev_time;\r\n prev_time = time;\r\n io.DeltaTime = Math.max(0.001, dt / 1000);\r\n\r\n /*\r\n if (io.WantSetMousePos) {\r\n console.log('TODO: MousePos', io.MousePos.x, io.MousePos.y);\r\n }\r\n */\r\n\r\n if (typeof document !== 'undefined') {\r\n if (io.MouseDrawCursor) {\r\n document.body.style.cursor = 'none';\r\n } else {\r\n switch (ImGui.GetMouseCursor()) {\r\n case ImGui.MouseCursor.None:\r\n canvas.style.cursor = 'none';\r\n break;\r\n case ImGui.MouseCursor.Arrow:\r\n canvas.style.cursor = 'default';\r\n break;\r\n case ImGui.MouseCursor.TextInput:\r\n canvas.style.cursor = 'text';\r\n break; // When hovering over InputText, etc.\r\n case ImGui.MouseCursor.ResizeAll:\r\n canvas.style.cursor = 'all-scroll';\r\n break; // Unused\r\n case ImGui.MouseCursor.ResizeNS:\r\n canvas.style.cursor = 'ns-resize';\r\n break; // When hovering over an horizontal border\r\n case ImGui.MouseCursor.ResizeEW:\r\n canvas.style.cursor = 'ew-resize';\r\n break; // When hovering over a vertical border or a column\r\n case ImGui.MouseCursor.ResizeNESW:\r\n canvas.style.cursor = 'nesw-resize';\r\n break; // When hovering over the bottom-left corner of a window\r\n case ImGui.MouseCursor.ResizeNWSE:\r\n canvas.style.cursor = 'nwse-resize';\r\n break; // When hovering over the bottom-right corner of a window\r\n case ImGui.MouseCursor.Hand:\r\n canvas.style.cursor = 'pointer';\r\n break;\r\n case ImGui.MouseCursor.NotAllowed:\r\n canvas.style.cursor = 'not-allowed';\r\n break;\r\n default:\r\n canvas.style.cursor = 'default';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Gamepad navigation mapping [BETA]\r\n for (let i = 0; i < io.NavInputs.length; ++i) {\r\n // TODO: This is currently causing an issue and I have no gamepad to test with.\r\n // The error is: ''set' on proxy: trap returned falsish for property '21'\r\n // I think that the NavInputs are zeroed out by ImGui at the start of each frame anyway\r\n // so I am not sure if the following is even necessary.\r\n //io.NavInputs[i] = 0.0;\r\n }\r\n if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) {\r\n // Update gamepad inputs\r\n const gamepads: (Gamepad | null)[] =\r\n typeof navigator !== 'undefined' && typeof navigator.getGamepads === 'function'\r\n ? navigator.getGamepads()\r\n : [];\r\n for (let i = 0; i < gamepads.length; ++i) {\r\n const gamepad: Gamepad | null = gamepads[i];\r\n if (!gamepad) {\r\n continue;\r\n }\r\n io.BackendFlags |= ImGui.BackendFlags.HasGamepad;\r\n const buttons_count: number = gamepad.buttons.length;\r\n const axes_count: number = gamepad.axes.length;\r\n\r\n const MAP_BUTTON = function MAP_BUTTON(NAV_NO: number, BUTTON_NO: number) {\r\n if (!gamepad) {\r\n return;\r\n }\r\n if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) {\r\n io.NavInputs[NAV_NO] = 1.0;\r\n }\r\n };\r\n const MAP_ANALOG = function MAP_ANALOG(NAV_NO: number, AXIS_NO: number, V0: number, V1: number) {\r\n if (!gamepad) {\r\n return;\r\n }\r\n let v: number = axes_count > AXIS_NO ? gamepad.axes[AXIS_NO] : V0;\r\n v = (v - V0) / (V1 - V0);\r\n if (v > 1.0) {\r\n v = 1.0;\r\n }\r\n if (io.NavInputs[NAV_NO] < v) {\r\n io.NavInputs[NAV_NO] = v;\r\n }\r\n };\r\n // TODO: map input based on vendor and product id\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id\r\n const match: RegExpMatchArray | null = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/);\r\n const match_chrome: RegExpMatchArray | null = gamepad.id.match(\r\n /^.*\\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\\).*$/\r\n );\r\n const vendor: string = (match && match[1]) || (match_chrome && match_chrome[1]) || '0000';\r\n const product: string = (match && match[2]) || (match_chrome && match_chrome[2]) || '0000';\r\n switch (vendor + product) {\r\n case '046dc216': // Logitech Logitech Dual Action (Vendor: 046d Product: c216)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left\r\n MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right\r\n MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up\r\n MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n case '046dc21d': // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left\r\n MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right\r\n MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up\r\n MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT\r\n MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n case '2dc86001': // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001)\r\n case '2dc86101': // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left\r\n MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right\r\n MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up\r\n MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n default: // standard gamepad: https://w3c.github.io/gamepad/#remapping\r\n MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left\r\n MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right\r\n MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up\r\n MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/*\r\nfunction toRgba(col:number):string\r\n{\r\n const r=(col>>>24);\r\n const g=(col>>16)&0xFF;\r\n const b=(col>>8)&0xFF;\r\n const a=(col&0xFF);\r\n return 'rgba('+r+','+g+','+b+','+a+')';\r\n}\r\n*/\r\n\r\nlet charCodeMap: Record<number, string> = {};\r\n\r\nconst glyphFontMap: Record<number, DeviceFont> = {};\r\n\r\n/** @internal */\r\nexport function addCustomGlyph(charCode: number, font: DeviceFont) {\r\n glyphFontMap[charCode] = font;\r\n}\r\n\r\n/** @internal */\r\nexport function calcTextSize(text: string, out?: ImGui.ImVec2) {\r\n const font = ImGui.GetFont();\r\n const fontName = font.FontSize + 'px ' + font.FontName;\r\n let deviceFont = fonts[fontName];\r\n if (!deviceFont) {\r\n deviceFont = new DeviceFont(fontName, 1);\r\n fonts[fontName] = deviceFont;\r\n }\r\n let x = 0;\r\n let y = 0;\r\n if (text) {\r\n for (const ch of text) {\r\n const glyphSize = glyphManager!.getGlyphSize(ch, deviceFont) ?? [0, 0];\r\n x += glyphSize[0];\r\n y = Math.max(glyphSize[1]);\r\n }\r\n }\r\n out = out ?? new ImGui.ImVec2();\r\n out.x = x;\r\n out.y = y;\r\n return out;\r\n}\r\n\r\n/** @internal */\r\nexport function font_update(io: ImGui.IO) {\r\n io.Fonts.Fonts.forEach((font) => {\r\n const fontName = fontSizeGlyph + 'px ' + font.FontName;\r\n const scale = font.FontSize / fontSizeGlyph;\r\n let deviceFont = glyphFonts[fontName];\r\n if (!deviceFont) {\r\n deviceFont = new DeviceFont(fontName, 1);\r\n glyphFonts[fontName] = deviceFont;\r\n }\r\n let glyph = font.GlyphToCreate;\r\n while (glyph) {\r\n const charCode = charCodeMap?.[glyph.Char] ?? glyph.Char;\r\n let char: string;\r\n let glyphInfo: AtlasInfo;\r\n let f: Nullable<DeviceFont> = null;\r\n if (typeof charCode === 'number') {\r\n f = glyphFontMap[charCode];\r\n char = String.fromCodePoint(charCode);\r\n } else {\r\n char = charCode;\r\n }\r\n if (f) {\r\n glyphInfo = glyphManager!.getGlyphInfo(char, f)!;\r\n } else {\r\n glyphInfo = glyphManager!.getGlyphInfo(char, deviceFont)!;\r\n }\r\n glyph.X0 = 0;\r\n glyph.X1 = Math.ceil(glyphInfo.width * scale);\r\n glyph.Y0 = 0;\r\n glyph.Y1 = Math.ceil(glyphInfo.height * scale);\r\n glyph.AdvanceX = Math.ceil(glyphInfo.width * scale);\r\n glyph.U0 = glyphInfo.uMin;\r\n glyph.U1 = glyphInfo.uMax;\r\n glyph.V0 = glyphInfo.vMin;\r\n glyph.V1 = glyphInfo.vMax;\r\n glyph.TextureID = glyphManager!.getAtlasTexture(glyphInfo.atlasIndex) ?? null;\r\n font.GlyphCreated(glyph);\r\n glyph = font.GlyphToCreate;\r\n }\r\n });\r\n}\r\n\r\nlet current_window_id: ImGui.ImGuiID = 0;\r\nexport const scroll_acc: ImGui.ImVec2 = new ImGui.ImVec2(0, 0);\r\nlet mouse_first_down = false;\r\n\r\nfunction scroll_update(io: ImGui.IO) {\r\n const hoveredWin = ImGui.GetHoveredWindow();\r\n const hoveredId = ImGui.GetHoveredId();\r\n if (hoveredWin && hoveredId == 0) {\r\n if (current_window_id != hoveredWin.ID) {\r\n current_window_id = hoveredWin.ID;\r\n scroll_acc.Set(0, 0);\r\n mouse_first_down = true;\r\n }\r\n\r\n if (hoveredWin.Flags & ImGui.ImGuiWindowFlags.NoMove) {\r\n let first_down = false;\r\n if (io.MouseDown[0]) {\r\n first_down = mouse_first_down;\r\n mouse_first_down = false;\r\n } else {\r\n mouse_first_down = true;\r\n }\r\n\r\n const scroll = new ImGui.ImVec2(hoveredWin.Scroll.x, hoveredWin.Scroll.y);\r\n if (hoveredWin.ScrollbarY) {\r\n if (io.MouseDown[0] && !first_down) {\r\n scroll.y -= io.MouseDelta.y;\r\n scroll_acc.y = io.MouseDelta.y;\r\n } else if (Math.abs(scroll_acc.y) > 1) {\r\n scroll.y -= scroll_acc.y;\r\n scroll_acc.y *= 0.8;\r\n }\r\n if (scroll.y < 0) {\r\n scroll.y = 0;\r\n } else if (scroll.y > hoveredWin.ScrollMax.y) {\r\n scroll.y = hoveredWin.ScrollMax.y;\r\n }\r\n hoveredWin.Scroll = scroll;\r\n }\r\n if (hoveredWin.ScrollbarX) {\r\n if (io.MouseDown[0]) {\r\n scroll.x -= io.MouseDelta.x;\r\n scroll_acc.x = io.MouseDelta.x;\r\n }\r\n if (scroll.x < 0) {\r\n scroll.x = 0;\r\n } else if (scroll.x > hoveredWin.ScrollMax.x) {\r\n scroll.x = hoveredWin.ScrollMax.x;\r\n }\r\n hoveredWin.Scroll = scroll;\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet dom_input: Input;\r\nfunction input_text_update(_io: ImGui.IO) {\r\n const activeId = ImGui.GetActiveId();\r\n const inpId = ImGui.GetInputTextId();\r\n if (!activeId || activeId != inpId) {\r\n dom_input?.blur();\r\n } else {\r\n dom_input.focus();\r\n }\r\n}\r\n\r\nexport function ClearBuffer(color: ImGui.ImVec4) {\r\n renderer!.device.clearFrameBuffer(new Vector4(color.x, color.y, color.z, color.w), 1, 0);\r\n}\r\n\r\nexport function RenderDrawData(draw_data: ImGui.DrawData | null = ImGui.GetDrawData()) {\r\n const io = ImGui.GetIO();\r\n\r\n font_update(io);\r\n scroll_update(io);\r\n input_text_update(io);\r\n\r\n if (draw_data === null) {\r\n throw new Error();\r\n }\r\n\r\n // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)\r\n const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x;\r\n const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y;\r\n if (fb_width === 0 || fb_height === 0) {\r\n return;\r\n }\r\n draw_data.ScaleClipRects(io.DisplayFramebufferScale);\r\n\r\n // Draw\r\n const pos = draw_data.DisplayPos;\r\n const scissorOld = renderer!.device.getScissor();\r\n renderer!.beginRender();\r\n draw_data.IterateDrawLists((draw_list: ImGui.DrawList) => {\n const vx = draw_list.VtxBuffer;\n const ix = draw_list.IdxBuffer;\n const ixU16 = new Uint16Array(ix.buffer, ix.byteOffset, ix.byteLength / Uint16Array.BYTES_PER_ELEMENT);\n draw_list.IterateDrawCmds((draw_cmd: ImGui.DrawCmd) => {\n if (draw_cmd.UserCallback !== null) {\n // User callback (registered via ImDrawList::AddCallback)\n renderer!.flush();\n draw_cmd.UserCallback(draw_list, draw_cmd);\n } else {\n const clip_rect = new ImGui.Vec4(\r\n draw_cmd.ClipRect.x - pos.x,\r\n draw_cmd.ClipRect.y - pos.y,\r\n draw_cmd.ClipRect.z - pos.x,\r\n draw_cmd.ClipRect.w - pos.y\r\n );\r\n if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) {\r\n // Apply scissor/clipping rectangle\r\n // renderer.device.setScissor([clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y]);\r\n const scissorX = renderer!.device.deviceXToScreen(clip_rect.x);\r\n const scissorY = renderer!.device.deviceYToScreen(fb_height - clip_rect.w);\r\n const scissorW = renderer!.device.deviceXToScreen(clip_rect.z - clip_rect.x);\r\n const scissorH = renderer!.device.deviceYToScreen(clip_rect.w - clip_rect.y);\r\n renderer!.stream(\r\n vx,\r\n ixU16,\r\n draw_cmd.VtxOffset,\r\n draw_cmd.IdxOffset,\r\n draw_cmd.ElemCount,\r\n draw_cmd.TextureId,\r\n [scissorX, scissorY, scissorW, scissorH]\r\n );\r\n }\r\n }\n });\n });\n renderer!.endRender();\n renderer!.device.setScissor(scissorOld);\n}\n\r\nexport function CreateFontsTexture() {\r\n const io = ImGui.GetIO();\r\n\r\n // Backup GL state\r\n // const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D);\r\n\r\n // Build texture atlas\r\n // const width: number = 256;\r\n // const height: number = 256;\r\n // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff);\r\n\r\n //const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.\r\n const { width, height, pixels } = io.Fonts.GetTexDataAsAlpha8();\r\n if (width && height && pixels) {\r\n const rgba8 = new Uint8Array(width * height * 4);\r\n let i = 0;\r\n pixels.forEach((p) => {\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = p;\r\n });\r\n // Upload texture to graphics system\r\n g_FontTexture = renderer!.device.createTexture2D('rgba8unorm', width, height, {\r\n mipmapping: false\r\n });\r\n g_FontTexture!.update(rgba8, 0, 0, width, height);\r\n //gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n\r\n // Store our identifier\r\n io.Fonts.TexID = g_FontTexture || null;\r\n // console.log(\"font texture id\", g_FontTexture);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getCharCodeMap() {\r\n return charCodeMap ?? {};\r\n}\r\n\r\n/** @internal */\r\nexport function setCharCodeMap(map: Record<number, string>) {\r\n charCodeMap = map;\r\n}\r\n\r\nexport function DestroyFontsTexture() {\r\n const io = ImGui.GetIO();\r\n io.Fonts.TexID?.dispose();\r\n io.Fonts.TexID = null;\r\n}\r\n\r\nexport function CreateDeviceObjects() {\r\n CreateFontsTexture();\r\n}\r\n\r\nexport function DestroyDeviceObjects() {\r\n DestroyFontsTexture();\r\n}\r\n\r\nexport function captureKeyboard(capture: boolean) {\r\n wantKeyboard = !!capture;\r\n}\r\n\r\nexport function mouseButtonToImGui(button: number) {\r\n return mouse_button_map[button] ?? -1;\r\n}\r\n\r\nexport function mouseButtonFromImGui(button: ImGui.MouseButton) {\r\n return mouse_button_map.indexOf(button);\r\n}\r\nexport interface ITextureParam {\r\n internalFormat?: number;\r\n srcFormat?: number;\r\n srcType?: number;\r\n width?: number;\r\n height?: number;\r\n level?: number;\r\n}\r\n\r\nexport class Texture {\r\n public _texture: Nullable<Texture2D> = null;\r\n public _width = 1;\r\n public _height = 1;\r\n\r\n constructor(_param?: ITextureParam) {}\r\n public Destroy() {\r\n if (this._texture) {\r\n this._texture.dispose();\r\n this._texture = null;\r\n }\r\n }\r\n public Update(\r\n src: ImageBitmap | ImageData | HTMLCanvasElement | Uint8Array<ArrayBuffer> | Uint16Array<ArrayBuffer>\r\n ) {\r\n let w: number, h: number;\r\n if (!src) {\r\n return;\r\n } else if (src instanceof HTMLVideoElement) {\r\n const srcVideo = src as HTMLVideoElement;\r\n if (srcVideo) {\r\n w = srcVideo.videoWidth;\r\n h = srcVideo.videoHeight;\r\n } else {\r\n return;\r\n }\r\n } else if (src instanceof Uint8Array || src instanceof Uint16Array) {\r\n w = this._width;\r\n h = this._height;\r\n } else {\r\n w = src.width;\r\n h = src.height;\r\n }\r\n if (!this._texture || this._texture.width !== w || this._texture.height !== h) {\r\n this._texture?.dispose();\r\n this._texture = renderer!.device.createTexture2D('rgba8unorm', w, h, {\r\n mipmapping: false\r\n });\r\n this._width = w;\r\n this._height = h;\r\n }\r\n if (src instanceof Uint8Array || src instanceof Uint16Array) {\r\n this._texture!.update(src, 0, 0, w, h);\r\n } else if (src instanceof ImageData) {\r\n this._texture!.update(src.data, 0, 0, w, h);\r\n } else {\r\n this._texture!.updateFromElement(src, 0, 0, 0, 0, w, h);\r\n }\r\n }\r\n}\r\n\r\nexport class TextureCache {\r\n public constructor() {}\r\n\r\n public Destroy() {\r\n Object.entries(this.cache).forEach(([_key, value]) => {\r\n value.Destroy();\r\n });\r\n this.cache = {};\r\n }\r\n\r\n public async Load(name: string, src: string) {\r\n const image = new Image();\r\n image.crossOrigin = 'anonymous';\r\n image.src = src;\r\n await image.decode();\r\n const bitmap = await createImageBitmap(image, { premultiplyAlpha: 'none' });\r\n const tex = new Texture();\r\n tex.Update(bitmap);\r\n this.cache[name] = tex;\r\n return tex;\r\n }\r\n\r\n public cache: { [key: string]: Texture } = {};\r\n}\r\n"],"names":["clipboard_text","renderer","prev_time","g_FontTexture","glyphManager","wantKeyboard","fontSizeGlyph","fonts","glyphFonts","isPasteShortcut","event","key","toLowerCase","ctrlKey","metaKey","altKey","readClipboardTextPreferSystem","navigator","clipboard","readText","text","Input","_dom_input","_composing","_lastCommittedText","_lastCommittedAt","cvs","document","createElement","type","autocomplete","autocapitalize","spellcheck","tabIndex","style","position","top","left","width","height","opacity","pointerEvents","addEventListener","e","stopPropagation","onKeydown","preventDefault","onKeyup","onKeypress","onCompositionStart","onCompositionUpdate","onCompositionEnd","onInput","onPaste","parent","ownerDocument","body","documentElement","appendChild","blur","canvas_on_keydown","canvas_on_keyup","_e","data","commitText","inputType","isComposing","startsWith","clearText","length","value","now","Date","clipboardData","getData","activeElement","focus","io","ImGui","ch","AddInputCharacter","codePointAt","window_on_resize","document_on_paste","window_on_gamepadconnected","console","info","gamepad","index","id","buttons","axes","window_on_gamepaddisconnected","shouldPreserveMouseStateOnCanvasBlur","next","relatedTarget","HTMLElement","hiddenTextBridge","tagName","getAttribute","canvas_on_blur","_event","KeyCtrl","KeyShift","KeyAlt","KeySuper","i","KeysDown","MouseDown","leftMouseDown","releasePointerLock","key_code_to_index","Tab","Backspace","Space","Insert","Delete","Home","End","PageUp","PageDown","Enter","Escape","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","NumpadEnter","KeyA","KeyC","KeyV","KeyX","KeyY","KeyZ","shiftKey","key_index","code","WantCaptureKeyboard","WantTextInput","canvas_on_keypress","canvas_on_pointermove","isPointerLocked","MousePos","x","movementX","y","movementY","offsetX","offsetY","pointerType","WantCaptureMouse","isDraggingFromMouseDown","isPointerNearScreenEdge","requestPointerLock","mouse_button_map","Left","Middle","Right","any_pointerdown","pointerLockElement","device","canvas","ret","catch","exitPointerLock","DRAG_LOCK_THRESHOLD_PX","EDGE_LOCK_PADDING_PX","leftMouseDownClientX","leftMouseDownClientY","dx","clientX","dy","clientY","window","innerWidth","innerHeight","canvas_on_pointerdown","mouseButtonToImGui","button","canvas_on_contextmenu","canvas_on_pointerup","canvas_on_wheel","scale","deltaMode","DOM_DELTA_PIXEL","DOM_DELTA_LINE","DOM_DELTA_PAGE","MouseWheelH","deltaX","MouseWheel","deltaY","injectKeyEvent","ev","injectWheelEvent","injectPointerEvent","Init","glyphSize","BackendPlatformName","localStorage","getItem","ConfigMacOSXBehaviors","platform","match","SetClipboardTextFn","user_data","writeText","GetClipboardTextFn","_user_data","ClipboardUserData","Renderer","GlyphManager","dom_input","touchAction","BackendFlags","HasMouseCursors","RendererHasVtxOffset","KeyMap","LeftArrow","RightArrow","UpArrow","DownArrow","KeyPadEnter","A","C","V","X","Y","Z","CreateDeviceObjects","NewFrame","time","WantSaveIniSettings","setItem","viewport","getViewport","w","h","display_w","screenXToDevice","display_h","screenYToDevice","DisplaySize","DisplayFramebufferScale","dt","DeltaTime","Math","max","MouseDrawCursor","cursor","None","Arrow","TextInput","ResizeAll","ResizeNS","ResizeEW","ResizeNESW","ResizeNWSE","Hand","NotAllowed","NavInputs","ConfigFlags","NavEnableGamepad","gamepads","getGamepads","HasGamepad","buttons_count","axes_count","MAP_BUTTON","NAV_NO","BUTTON_NO","pressed","MAP_ANALOG","AXIS_NO","V0","V1","v","match_chrome","vendor","product","Activate","Cancel","Menu","DpadLeft","DpadRight","DpadUp","DpadDown","FocusPrev","FocusNext","TweakSlow","TweakFast","LStickLeft","LStickRight","LStickUp","LStickDown","charCodeMap","glyphFontMap","addCustomGlyph","charCode","font","calcTextSize","out","fontName","FontSize","FontName","deviceFont","DeviceFont","getGlyphSize","font_update","Fonts","forEach","glyph","GlyphToCreate","Char","char","glyphInfo","f","String","fromCodePoint","getGlyphInfo","X0","X1","ceil","Y0","Y1","AdvanceX","U0","uMin","U1","uMax","vMin","vMax","TextureID","getAtlasTexture","atlasIndex","GlyphCreated","current_window_id","scroll_acc","mouse_first_down","scroll_update","hoveredWin","hoveredId","ID","Set","Flags","NoMove","first_down","scroll","Scroll","ScrollbarY","MouseDelta","abs","ScrollMax","ScrollbarX","input_text_update","_io","activeId","inpId","RenderDrawData","draw_data","Error","fb_width","fb_height","ScaleClipRects","pos","DisplayPos","scissorOld","getScissor","beginRender","IterateDrawLists","draw_list","vx","VtxBuffer","ix","IdxBuffer","ixU16","Uint16Array","buffer","byteOffset","byteLength","BYTES_PER_ELEMENT","IterateDrawCmds","draw_cmd","UserCallback","flush","clip_rect","ClipRect","z","scissorX","deviceXToScreen","scissorY","deviceYToScreen","scissorW","scissorH","stream","VtxOffset","IdxOffset","ElemCount","TextureId","endRender","setScissor","CreateFontsTexture","pixels","GetTexDataAsAlpha8","rgba8","Uint8Array","p","createTexture2D","mipmapping","update","TexID","getCharCodeMap","setCharCodeMap","map","captureKeyboard","capture"],"mappings":";;;;;AAOA,IAAIA,cAAiB,GAAA,EAAA;AACrB,IAAIC,QAA+B,GAAA,IAAA;AACnC,IAAIC,SAAY,GAAA,CAAA;AAChB,IAAIC,aAAqC,GAAA,IAAA;AACzC,IAAIC,YAAuC,GAAA,IAAA;AAC3C,IAAIC,YAAe,GAAA,KAAA;AACnB,IAAIC,aAAgB,GAAA,CAAA;AACpB,MAAMC,QAAoC,EAAC;AAC3C,MAAMC,aAAyC,EAAC;AAEhD,SAASC,gBAAgBC,KAAoB,EAAA;AAC3C,IAAA,MAAMC,GAAMD,GAAAA,KAAAA,CAAMC,GAAG,EAAEC,WAAmB,IAAA,IAAA,EAAA;AAC1C,IAAA,OAAO,CAACF,KAAMG,CAAAA,OAAO,IAAIH,KAAAA,CAAMI,OAAM,KAAM,CAACJ,KAAMK,CAAAA,MAAM,IAAIJ,GAAQ,KAAA,GAAA;AACtE;AAEA,eAAeK,6BAAAA,GAAAA;AACb,IAAA,IAAI,OAAOC,SAAc,KAAA,WAAA,IAAeA,SAAUC,CAAAA,SAAS,EAAEC,QAAU,EAAA;QACrE,IAAI;AACF,YAAA,MAAMC,IAAO,GAAA,MAAMH,SAAUC,CAAAA,SAAS,CAACC,QAAQ,EAAA;YAC/C,IAAI,OAAOC,SAAS,QAAU,EAAA;gBAC5BpB,cAAiBoB,GAAAA,IAAAA;AACnB;AACF,SAAA,CAAE,OAAM;;AAER;AACF;IACA,OAAOpB,cAAAA;AACT;AAEO,MAAMqB,KAAAA,CAAAA;IACJC,UAA6B;AAC5BC,IAAAA,UAAAA,GAAa,KAAM;AACnBC,IAAAA,kBAAAA,GAAqB,EAAG;AACxBC,IAAAA,gBAAAA,GAAmB,CAAE;AAC7B,IAAA,WAAA,CAAYC,GAAsB,CAAE;AAClC,QAAA,IAAI,CAACJ,UAAU,GAAGK,QAAAA,CAASC,aAAa,CAAC,OAAA,CAAA;AACzC,QAAA,IAAI,CAACN,UAAU,CAACO,IAAI,GAAG,MAAA;AACvB,QAAA,IAAI,CAACP,UAAU,CAACQ,YAAY,GAAG,KAAA;AAC/B,QAAA,IAAI,CAACR,UAAU,CAACS,cAAc,GAAG,KAAA;AACjC,QAAA,IAAI,CAACT,UAAU,CAACU,UAAU,GAAG,KAAA;;;AAG7B,QAAA,IAAI,CAACV,UAAU,CAACW,QAAQ,GAAG,EAAC;AAC5B,QAAA,IAAI,CAACX,UAAU,CAACY,KAAK,CAACC,QAAQ,GAAG,OAAA;QACjC,IAAI,CAACb,UAAU,CAACY,KAAK,CAACE,GAAG,GAAG,IAAS,GAAA,IAAA;QACrC,IAAI,CAACd,UAAU,CAACY,KAAK,CAACG,IAAI,GAAG,IAAS,GAAA,IAAA;AACtC,QAAA,IAAI,CAACf,UAAU,CAACY,KAAK,CAACI,KAAK,GAAG,KAAA;AAC9B,QAAA,IAAI,CAAChB,UAAU,CAACY,KAAK,CAACK,MAAM,GAAG,KAAA;AAC/B,QAAA,IAAI,CAACjB,UAAU,CAACY,KAAK,CAACM,OAAO,GAAG,GAAA;AAChC,QAAA,IAAI,CAAClB,UAAU,CAACY,KAAK,CAACO,aAAa,GAAG,MAAA;AACtC,QAAA,IAAI,CAACnB,UAAU,CAACoB,gBAAgB,CAAC,WAAW,CAACC,CAAAA,GAAAA;AAC3CA,YAAAA,CAAAA,CAAEC,eAAe,EAAA;YACjB,IAAI,CAACC,SAAS,CAACF,CAAAA,CAAAA;;;AAGf,YAAA,IAAI,CAACA,CAAoBhC,GAAG,KAAK,KAAO,EAAA;AACtCgC,gBAAAA,CAAAA,CAAEG,cAAc,EAAA;AAClB;AACF,SAAA,CAAA;AACA,QAAA,IAAI,CAACxB,UAAU,CAACoB,gBAAgB,CAAC,SAAS,CAACC,CAAAA,GAAAA;AACzCA,YAAAA,CAAAA,CAAEC,eAAe,EAAA;YACjB,IAAI,CAACG,OAAO,CAACJ,CAAAA,CAAAA;;AAEb,YAAA,IAAI,CAACA,CAAoBhC,GAAG,KAAK,KAAO,EAAA;AACtCgC,gBAAAA,CAAAA,CAAEG,cAAc,EAAA;AAClB;AACF,SAAA,CAAA;AACA,QAAA,IAAI,CAACxB,UAAU,CAACoB,gBAAgB,CAAC,YAAY,CAACC,CAAAA,GAAAA;AAC5CA,YAAAA,CAAAA,CAAEC,eAAe,EAAA;YACjB,IAAI,CAACI,UAAU,CAACL,CAAAA,CAAAA;AAClB,SAAA,CAAA;AACA,QAAA,IAAI,CAACrB,UAAU,CAACoB,gBAAgB,CAAC,oBAAoB,CAACC,CAAAA,GAAAA;YACpD,IAAI,CAACM,kBAAkB,CAACN,CAAAA,CAAAA;AAC1B,SAAA,CAAA;AACA,QAAA,IAAI,CAACrB,UAAU,CAACoB,gBAAgB,CAAC,qBAAqB,CAACC,CAAAA,GAAAA;YACrD,IAAI,CAACO,mBAAmB,CAACP,CAAAA,CAAAA;AAC3B,SAAA,CAAA;AACA,QAAA,IAAI,CAACrB,UAAU,CAACoB,gBAAgB,CAAC,kBAAkB,CAACC,CAAAA,GAAAA;YAClD,IAAI,CAACQ,gBAAgB,CAACR,CAAAA,CAAAA;AACxB,SAAA,CAAA;AACA,QAAA,IAAI,CAACrB,UAAU,CAACoB,gBAAgB,CAAC,SAAS,CAACC,CAAAA,GAAAA;YACzC,IAAI,CAACS,OAAO,CAACT,CAAAA,CAAAA;AACf,SAAA,CAAA;AACA,QAAA,IAAI,CAACrB,UAAU,CAACoB,gBAAgB,CAAC,SAAS,CAACC,CAAAA,GAAAA;YACzC,IAAI,CAACU,OAAO,CAACV,CAAAA,CAAAA;AACf,SAAA,CAAA;QACA,MAAMW,MAAAA,GAAS5B,GAAI6B,CAAAA,aAAa,EAAEC,IAAAA,IAAQ7B,QAAS6B,CAAAA,IAAI,IAAI9B,GAAAA,CAAI6B,aAAa,EAAEE,eAAmB/B,IAAAA,GAAAA;AACjG4B,QAAAA,MAAAA,CAAOI,WAAW,CAAC,IAAI,CAACpC,UAAU,CAAA;AAClC,QAAA,IAAI,CAACqC,IAAI,EAAA;AACX;AACAd,IAAAA,SAAAA,CAAUF,CAAgB,EAAE;QAC1BiB,iBAAkBjB,CAAAA,CAAAA,CAAAA;AACpB;AACAI,IAAAA,OAAAA,CAAQJ,CAAgB,EAAE;QACxBkB,eAAgBlB,CAAAA,CAAAA,CAAAA;AAClB;AACAK,IAAAA,UAAAA,CAAWL,CAAgB,EAAE;AAE7B;AACAM,IAAAA,kBAAAA,CAAmBa,EAAoB,EAAE;QACvC,IAAI,CAACvC,UAAU,GAAG,IAAA;AACpB;IACA2B,mBAAoBY,CAAAA,EAAoB,EAAE;AAC1CX,IAAAA,gBAAAA,CAAiBW,EAAoB,EAAE;QACrC,MAAM1C,IAAAA,GAAO,OAAO0C,EAAGC,CAAAA,IAAI,KAAK,QAAWD,GAAAA,EAAAA,CAAGC,IAAI,GAAG,EAAA;QACrD,IAAI,CAACxC,UAAU,GAAG,KAAA;AAClB,QAAA,IAAIH,IAAM,EAAA;YACR,IAAI,CAAC4C,UAAU,CAAC5C,IAAAA,CAAAA;AAClB;AACF;AACAgC,IAAAA,OAAAA,CAAQT,CAAa,EAAE;AACrBA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,MAAMqB,SAAAA,GAAY,OAAOtB,CAAEsB,CAAAA,SAAS,KAAK,QAAWtB,GAAAA,CAAAA,CAAEsB,SAAS,GAAG,EAAA;AAClE,QAAA,IACE,IAAI,CAAC1C,UAAU,IACd,OAAOoB,CAAAA,CAAEuB,WAAW,KAAK,SAAavB,IAAAA,CAAAA,CAAEuB,WAAW,IACpDD,cAAc,uBACd,EAAA;AACA,YAAA;AACF;QACA,IAAIA,SAAAA,CAAUE,UAAU,CAAC,QAAW,CAAA,EAAA;AAClC,YAAA,IAAI,CAACC,SAAS,EAAA;AACd,YAAA;AACF;AACA,QAAA,MAAMhD,OAAO,OAAOuB,CAAAA,CAAEoB,IAAI,KAAK,QAAA,IAAYpB,EAAEoB,IAAI,CAACM,MAAM,GAAG,CAAA,GAAI1B,EAAEoB,IAAI,GAAG,IAAI,CAACzC,UAAU,CAACgD,KAAK;AAC7F,QAAA,IAAIlD,IAAM,EAAA;YACR,MAAMmD,GAAAA,GAAMC,KAAKD,GAAG,EAAA;AACpB,YAAA,IAAI,EAAEnD,IAAS,KAAA,IAAI,CAACI,kBAAkB,IAAI+C,GAAAA,GAAM,IAAI,CAAC9C,gBAAgB,GAAG,EAAC,CAAI,EAAA;gBAC3E,IAAI,CAACuC,UAAU,CAAC5C,IAAAA,CAAAA;AAClB;AACF;AACA,QAAA,IAAI,CAACgD,SAAS,EAAA;AAChB;AACAf,IAAAA,OAAAA,CAAQV,CAAiB,EAAE;AACzBA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;AACjB,QAAA,MAAMxB,IAAOuB,GAAAA,CAAAA,CAAE8B,aAAa,EAAEC,OAAQ,CAAA,YAAA,CAAA;QACtC,IAAI,OAAOtD,SAAS,QAAU,EAAA;YAC5BpB,cAAiBoB,GAAAA,IAAAA;AACnB;AACF;IACAuC,IAAO,GAAA;AACL,QAAA,IAAIhC,SAASgD,aAAa,KAAK,IAAI,CAACrD,UAAU,EAAE;AAC9C,YAAA,IAAI,CAAC8C,SAAS,EAAA;YACd,IAAI,CAAC9C,UAAU,CAACqC,IAAI,EAAA;AACtB;AACF;IACAiB,KAAQ,GAAA;AACN,QAAA,IAAIjD,SAASgD,aAAa,KAAK,IAAI,CAACrD,UAAU,EAAE;YAC9C,IAAI,CAACA,UAAU,CAACsD,KAAK,EAAA;AACvB;AACF;IACQR,SAAY,GAAA;AAClB,QAAA,IAAI,CAAC9C,UAAU,CAACgD,KAAK,GAAG,EAAA;AAC1B;AACQN,IAAAA,UAAAA,CAAW5C,IAAY,EAAE;QAC/B,MAAMyD,EAAAA,GAAKC,KAAW,EAAA;QACtB,KAAK,MAAMC,MAAM3D,IAAM,CAAA;AACrByD,YAAAA,EAAAA,CAAGG,iBAAiB,CAACD,EAAGE,CAAAA,WAAW,CAAC,CAAA,CAAA,CAAA;AACtC;QACA,IAAI,CAACzD,kBAAkB,GAAGJ,IAAAA;AAC1B,QAAA,IAAI,CAACK,gBAAgB,GAAG+C,IAAAA,CAAKD,GAAG,EAAA;AAChC,QAAA,IAAI,CAACH,SAAS,EAAA;AAChB;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,GACA,SAASc,gBAAoB,GAAA;AAE7B,SAASC,kBAAkBzE,KAAqB,EAAA;AAC9C,IAAA,MAAMU,IAAOV,GAAAA,KAAAA,CAAM+D,aAAa,EAAEC,OAAQ,CAAA,YAAA,CAAA;IAC1C,IAAI,OAAOtD,SAAS,QAAU,EAAA;QAC5BpB,cAAiBoB,GAAAA,IAAAA;AACnB;AACF;AAEA,SAASgE,0BAAAA,CAA2B1E,KAAW,qBAAgB;IAC7D2E,OAAQC,CAAAA,IAAI,CACV,yDAAA,EACA5E,KAAM6E,CAAAA,OAAO,CAACC,KAAK,EACnB9E,KAAM6E,CAAAA,OAAO,CAACE,EAAE,EAChB/E,KAAM6E,CAAAA,OAAO,CAACG,OAAO,CAACrB,MAAM,EAC5B3D,KAAAA,CAAM6E,OAAO,CAACI,IAAI,CAACtB,MAAM,CAAA;AAE7B;AAEA,SAASuB,6BAAAA,CAA8BlF,KAAW,qBAAgB;IAChE2E,OAAQC,CAAAA,IAAI,CAAC,uCAAA,EAAyC5E,KAAM6E,CAAAA,OAAO,CAACC,KAAK,EAAE9E,KAAAA,CAAM6E,OAAO,CAACE,EAAE,CAAA;AAC7F;AAEA,SAASI,qCAAqCnF,KAAiB,EAAA;IAC7D,MAAMoF,IAAAA,GAAOpF,MAAMqF,aAAa;AAChC,IAAA,IAAI,EAAED,IAAgBE,YAAAA,WAAU,CAAI,EAAA;QAClC,OAAO,KAAA;AACT;AACA,IAAA,MAAMC,mBACJ,CAACH,KAAKI,OAAO,KAAK,WAAWJ,IAAKI,CAAAA,OAAO,KAAK,UAAS,KACvDJ,KAAK7D,QAAQ,GAAG,KAChB6D,IAAKK,CAAAA,YAAY,CAAC,aAAmB,CAAA,KAAA,MAAA;IACvC,OAAOF,gBAAAA;AACT;AAEA,SAASG,eAAeC,MAAkB,EAAA;IACxC,MAAMxB,EAAAA,GAAKC,KAAW,EAAA;AACtBD,IAAAA,EAAAA,CAAGyB,OAAO,GAAG,KAAA;AACbzB,IAAAA,EAAAA,CAAG0B,QAAQ,GAAG,KAAA;AACd1B,IAAAA,EAAAA,CAAG2B,MAAM,GAAG,KAAA;AACZ3B,IAAAA,EAAAA,CAAG4B,QAAQ,GAAG,KAAA;IACd,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI7B,GAAAA,EAAAA,CAAG8B,QAAQ,CAACtC,MAAM,EAAE,EAAEqC,CAAG,CAAA;QAC3C7B,EAAG8B,CAAAA,QAAQ,CAACD,CAAAA,CAAE,GAAG,KAAA;AACnB;IACA,IAAI,CAACb,qCAAqCQ,MAAS,CAAA,EAAA;QACjD,IAAK,IAAIK,CAAI,GAAA,CAAA,EAAGA,CAAI7B,GAAAA,EAAAA,CAAG+B,SAAS,CAACvC,MAAM,EAAE,EAAEqC,CAAG,CAAA;YAC5C7B,EAAG+B,CAAAA,SAAS,CAACF,CAAAA,CAAE,GAAG,KAAA;AACpB;QACAG,aAAgB,GAAA,KAAA;AAChBC,QAAAA,kBAAAA,EAAAA;AACF;AACF;AAEA,MAAMC,iBAA4C,GAAA;IAChDC,GAAK,EAAA,CAAA;IACLC,SAAW,EAAA,CAAA;IACXC,KAAO,EAAA,EAAA;IACPC,MAAQ,EAAA,EAAA;IACRC,MAAQ,EAAA,EAAA;IACRC,IAAM,EAAA,EAAA;IACNC,GAAK,EAAA,EAAA;IACLC,MAAQ,EAAA,EAAA;IACRC,QAAU,EAAA,EAAA;IACVC,KAAO,EAAA,EAAA;IACPC,MAAQ,EAAA,EAAA;IACRC,SAAW,EAAA,EAAA;IACXC,OAAS,EAAA,EAAA;IACTC,UAAY,EAAA,EAAA;IACZC,SAAW,EAAA,EAAA;IACXC,WAAa,EAAA,GAAA;IACbC,IAAM,EAAA,EAAA;IACNC,IAAM,EAAA,EAAA;IACNC,IAAM,EAAA,EAAA;IACNC,IAAM,EAAA,EAAA;IACNC,IAAM,EAAA,EAAA;IACNC,IAAM,EAAA;AACR,CAAA;AAEO,SAASzE,kBAAkBlD,KAAoB,EAAA;IACpD,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;IACtBD,EAAGyB,CAAAA,OAAO,GAAG5F,KAAAA,CAAMG,OAAO;IAC1BgE,EAAG0B,CAAAA,QAAQ,GAAG7F,KAAAA,CAAM4H,QAAQ;IAC5BzD,EAAG2B,CAAAA,MAAM,GAAG9F,KAAAA,CAAMK,MAAM;IACxB8D,EAAG4B,CAAAA,QAAQ,GAAG/F,KAAAA,CAAMI,OAAO;AAC3B,IAAA,IAAIL,gBAAgBC,KAAQ,CAAA,EAAA;AAC1BM,QAAAA,6BAAAA,EAAAA;AACF;AACA,IAAA,MAAMuH,SAAYxB,GAAAA,iBAAiB,CAACrG,KAAAA,CAAM8H,IAAI,CAAC;AAC/C,IAAA,IAAID,SAAW,EAAA;QACbzD,MAAY,CAACyD,SAAa,IAAA,CAAA,IAAKA,YAAYzD,YAAe,CAACD,EAAAA,CAAG8B,QAAQ,CAAA,CAAA;QACtE9B,EAAG8B,CAAAA,QAAQ,CAAC4B,SAAAA,CAAU,GAAG,IAAA;;QAEzB,IAAIA,SAAAA,IAAa,KAAKlI,YAAgBwE,IAAAA,EAAAA,CAAG4D,mBAAmB,IAAI5D,EAAAA,CAAG6D,aAAa,EAAE;YAChF,OAAO,IAAA;AACT;AACF;IACA,OAAO,KAAA;AACT;AAEO,SAAS7E,gBAAgBnD,KAAoB,EAAA;IAClD,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;IACtBD,EAAGyB,CAAAA,OAAO,GAAG5F,KAAAA,CAAMG,OAAO;IAC1BgE,EAAG0B,CAAAA,QAAQ,GAAG7F,KAAAA,CAAM4H,QAAQ;IAC5BzD,EAAG2B,CAAAA,MAAM,GAAG9F,KAAAA,CAAMK,MAAM;IACxB8D,EAAG4B,CAAAA,QAAQ,GAAG/F,KAAAA,CAAMI,OAAO;AAC3B,IAAA,MAAMyH,SAAYxB,GAAAA,iBAAiB,CAACrG,KAAAA,CAAM8H,IAAI,CAAC;AAC/C,IAAA,IAAID,SAAW,EAAA;QACbzD,MAAY,CAACyD,SAAa,IAAA,CAAA,IAAKA,YAAYzD,YAAe,CAACD,EAAAA,CAAG8B,QAAQ,CAAA,CAAA;QACtE9B,EAAG8B,CAAAA,QAAQ,CAAC4B,SAAAA,CAAU,GAAG,KAAA;QACzB,IAAIlI,YAAAA,IAAgBwE,GAAG4D,mBAAmB,IAAI5D,GAAG6D,aAAa,IAAIH,aAAa,CAAG,EAAA;YAChF,OAAO,IAAA;AACT;AACF;IACA,OAAO,KAAA;AACT;AAEO,SAASI,mBAAmBjI,KAAoB,EAAA;IAErD,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;;;AAGtB,IAAA,IAAIzE,gBAAgBwE,EAAG4D,CAAAA,mBAAmB,IAAI5D,EAAAA,CAAG6D,aAAa,EAAE;QAC9D,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAEA,SAASE,sBAAsBlI,KAAmB,EAAA;IAChD,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;AACtB,IAAA,IAAI+D,eAAmB,EAAA,EAAA;AACrBhE,QAAAA,EAAAA,CAAGiE,QAAQ,CAACC,CAAC,IAAIrI,KAAAA,CAAMsI,SAAS,IAAI,CAAA;AACpCnE,QAAAA,EAAAA,CAAGiE,QAAQ,CAACG,CAAC,IAAIvI,KAAAA,CAAMwI,SAAS,IAAI,CAAA;KAC/B,MAAA;AACLrE,QAAAA,EAAAA,CAAGiE,QAAQ,CAACC,CAAC,GAAGrI,MAAMyI,OAAO;AAC7BtE,QAAAA,EAAAA,CAAGiE,QAAQ,CAACG,CAAC,GAAGvI,MAAM0I,OAAO;AAC7B,QAAA,IACE1I,MAAM2I,WAAW,KAAK,WACtBxC,aACA,IAACnG,CAAAA,KAAMgF,CAAAA,OAAO,GAAG,CAAA,MAAO,KACxBb,EAAGyE,CAAAA,gBAAgB,IACnBC,uBAAwB7I,CAAAA,KAAAA,CAAAA,IACxB8I,wBAAwB9I,KACxB,CAAA,EAAA;AACA+I,YAAAA,kBAAAA,EAAAA;AACF;AACF;IACA,IAAI5E,EAAAA,CAAGyE,gBAAgB,EAAE;QACvB,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,gBAA6B,GAAA;IACjC5E,gBAAiB,CAAC6E,IAAI;IACtB7E,gBAAiB,CAAC8E,MAAM;IACxB9E,gBAAiB,CAAC+E,KAAK;AACvB,IAAA,CAAA;AACA,IAAA;AACD,CAAA;AAEM,SAASC,eAAAA,GAAAA;IACd,MAAMjF,EAAAA,GAAKC,KAAW,EAAA;IACtB,IAAK,IAAI4B,IAAI,CAAGA,EAAAA,CAAAA,GAAI7B,GAAG+B,SAAS,CAACvC,MAAM,EAAEqC,CAAK,EAAA,CAAA;AAC5C,QAAA,IAAI7B,EAAG+B,CAAAA,SAAS,CAACF,CAAAA,CAAE,EAAE;YACnB,OAAO,IAAA;AACT;AACF;IACA,OAAO,KAAA;AACT;AAEA,SAASmC,eAAAA,GAAAA;IACP,IAAI,OAAOlH,aAAa,WAAa,EAAA;QACnC,OAAO,KAAA;AACT;AACA,IAAA,OAAOA,QAASoI,CAAAA,kBAAkB,KAAK9J,QAAAA,EAAU+J,MAAOC,CAAAA,MAAAA;AAC1D;AAEA,SAASR,kBAAAA,GAAAA;IACP,IAAI,OAAO9H,aAAa,WAAa,EAAA;AACnC,QAAA;AACF;IACA,MAAMsI,MAAAA,GAAShK,UAAU+J,MAAOC,CAAAA,MAAAA;AAChC,IAAA,IAAI,CAACA,MAAUpB,IAAAA,eAAAA,EAAAA,IAAqB,OAAOoB,MAAOR,CAAAA,kBAAkB,KAAK,UAAY,EAAA;AACnF,QAAA;AACF;IACA,IAAI;QACF,MAAMS,GAAAA,GAAMD,OAAOR,kBAAkB,EAAA;AACrC,QAAA,IAAIS,OAAO,OAAQA,GAAsBC,CAAAA,KAAK,KAAK,UAAY,EAAA;AAC5DD,YAAAA,GAAAA,CAAsBC,KAAK,CAAC,IAAA;;AAE7B,aAAA,CAAA;AACF;AACF,KAAA,CAAE,OAAM;;AAER;AACF;AAEA,SAASrD,kBAAAA,GAAAA;AACP,IAAA,IAAI,OAAOnF,QAAAA,KAAa,WAAe,IAAA,CAACkH,eAAmB,EAAA,EAAA;AACzD,QAAA;AACF;AACA,IAAA,IAAI,OAAOlH,QAAAA,CAASyI,eAAe,KAAK,UAAY,EAAA;AAClDzI,QAAAA,QAAAA,CAASyI,eAAe,EAAA;AAC1B;AACF;AAEA,MAAMC,sBAAyB,GAAA,CAAA;AAC/B,MAAMC,oBAAuB,GAAA,CAAA;AAC7B,IAAIzD,aAAgB,GAAA,KAAA;AACpB,IAAI0D,oBAAuB,GAAA,CAAA;AAC3B,IAAIC,oBAAuB,GAAA,CAAA;AAE3B,SAASjB,wBAAwB7I,KAAmB,EAAA;IAClD,MAAM+J,EAAAA,GAAK/J,KAAMgK,CAAAA,OAAO,GAAGH,oBAAAA;IAC3B,MAAMI,EAAAA,GAAKjK,KAAMkK,CAAAA,OAAO,GAAGJ,oBAAAA;AAC3B,IAAA,OAAOC,EAAKA,GAAAA,EAAAA,GAAKE,EAAKA,GAAAA,EAAAA,IAAMN,sBAAyBA,GAAAA,sBAAAA;AACvD;AAEA,SAASb,wBAAwB9I,KAAmB,EAAA;IAClD,IAAI,OAAOmK,WAAW,WAAa,EAAA;QACjC,OAAO,KAAA;AACT;IACA,MAAM9B,CAAAA,GAAIrI,MAAMgK,OAAO;IACvB,MAAMzB,CAAAA,GAAIvI,MAAMkK,OAAO;AACvB,IAAA,OACE7B,CAAKuB,IAAAA,oBAAAA,IACLrB,CAAKqB,IAAAA,oBAAAA,IACLvB,CAAK8B,IAAAA,MAAAA,CAAOC,UAAU,GAAGR,oBACzBrB,IAAAA,CAAAA,IAAK4B,MAAOE,CAAAA,WAAW,GAAGT,oBAAAA;AAE9B;AAEA,SAASU,sBAAsBtK,KAAmB,EAAA;IAChD,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;AACtBD,IAAAA,EAAAA,CAAGiE,QAAQ,CAACC,CAAC,GAAGrI,MAAMyI,OAAO;AAC7BtE,IAAAA,EAAAA,CAAGiE,QAAQ,CAACG,CAAC,GAAGvI,MAAM0I,OAAO;AAC7BvE,IAAAA,EAAAA,CAAG+B,SAAS,CAACqE,kBAAAA,CAAmBvK,KAAMwK,CAAAA,MAAM,EAAE,GAAG,IAAA;AACjD,IAAA,IAAIxK,MAAMwK,MAAM,KAAK,KAAKxK,KAAM2I,CAAAA,WAAW,KAAK,OAAS,EAAA;QACvDxC,aAAgB,GAAA,IAAA;AAChB0D,QAAAA,oBAAAA,GAAuB7J,MAAMgK,OAAO;AACpCF,QAAAA,oBAAAA,GAAuB9J,MAAMkK,OAAO;AACtC;IACA,IAAI/F,EAAAA,CAAGyE,gBAAgB,EAAE;QACvB,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAEA,SAAS6B,sBAAsB9E,MAAa,EAAA;IAC1C,MAAMxB,EAAAA,GAAKC,KAAW,EAAA;IACtB,IAAID,EAAAA,CAAGyE,gBAAgB,EAAE;QACvB,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAEA,SAAS8B,oBAAoB1K,KAAmB,EAAA;IAC9C,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;IACtBD,EAAG+B,CAAAA,SAAS,CAAC8C,gBAAgB,CAAChJ,MAAMwK,MAAM,CAAC,CAAC,GAAG,KAAA;IAC/C,IAAIxK,KAAAA,CAAMwK,MAAM,KAAK,CAAG,EAAA;QACtBrE,aAAgB,GAAA,KAAA;AAClB;AACA,IAAA,IAAI,CAACiD,eAAmB,EAAA,EAAA;AACtBhD,QAAAA,kBAAAA,EAAAA;AACF;IACA,IAAIjC,EAAAA,CAAGyE,gBAAgB,EAAE;QACvB,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAEA,SAAS+B,gBAAgB3K,KAAiB,EAAA;IACxC,MAAMmE,EAAAA,GAAKC,KAAW,EAAA;AACtB,IAAA,IAAIwG,KAAQ,GAAA,GAAA;AACZ,IAAA,OAAQ5K,MAAM6K,SAAS;AACrB,QAAA,KAAK7K,MAAM8K,eAAe;YACxBF,KAAQ,GAAA,IAAA;AACR,YAAA;AACF,QAAA,KAAK5K,MAAM+K,cAAc;YACvBH,KAAQ,GAAA,GAAA;AACR,YAAA;AACF,QAAA,KAAK5K,MAAMgL,cAAc;YACvBJ,KAAQ,GAAA,GAAA;AACR,YAAA;AACJ;AACAzG,IAAAA,EAAAA,CAAG8G,WAAW,GAAGjL,KAAMkL,CAAAA,MAAM,GAAGN,KAAAA;AAChCzG,IAAAA,EAAAA,CAAGgH,UAAU,GAAG,CAACnL,MAAMoL,MAAM,GAAGR;IAChC,IAAIzG,EAAAA,CAAGyE,gBAAgB,EAAE;QACvB,OAAO,IAAA;AACT;IACA,OAAO,KAAA;AACT;AAoDO,SAASyC,eAAeC,EAAiB,EAAA;IAC9C,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,SAAW,EAAA;AACzB,QAAA,OAAO+B,iBAAkBoI,CAAAA,EAAAA,CAAAA;AAC3B,KAAA,MAAO,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,OAAS,EAAA;AAC9B,QAAA,OAAOgC,eAAgBmI,CAAAA,EAAAA,CAAAA;AACzB,KAAA,MAAO,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,UAAY,EAAA;AACjC,QAAA,OAAO8G,kBAAmBqD,CAAAA,CAAAA;AAC5B;IACA,OAAO,KAAA;AACT;AAEO,SAASC,iBAAiBD,EAAc,EAAA;AAC7C,IAAA,OAAOX,eAAgBW,CAAAA,EAAAA,CAAAA;AACzB;AAEO,SAASE,mBAAmBF,EAAgB,EAAA;IACjD,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,aAAe,EAAA;AAC7B,QAAA,OAAO+G,qBAAsBoD,CAAAA,EAAAA,CAAAA;AAC/B,KAAA,MAAO,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,aAAe,EAAA;AACpC,QAAA,OAAOmJ,qBAAsBgB,CAAAA,EAAAA,CAAAA;AAC/B,KAAA,MAAO,IAAIA,EAAAA,CAAGnK,IAAI,KAAK,WAAa,EAAA;AAClC,QAAA,OAAOuJ,mBAAoBY,CAAAA,EAAAA,CAAAA;AAC7B;IACA,OAAO,KAAA;AACT;AAcA;;;;;;;;;;;AAWA,GAEO,SAASG,IAAKnC,CAAAA,MAAsB,EAAEoC,SAAiB,EAAA;IAC5D,MAAMvH,EAAAA,GAAKC,KAAW,EAAA;IAEtB,IAAI,OAAO+F,WAAW,WAAa,EAAA;AACjChG,QAAAA,EAAAA,CAAGwH,mBAAmB,GAAG,oBAAA;AACzBvH,QAAAA,yBAA+B,CAAC+F,MAAAA,CAAOyB,YAAY,CAACC,OAAO,CAAC,WAAgB,CAAA,IAAA,EAAA,CAAA;KACvE,MAAA;AACL1H,QAAAA,EAAAA,CAAGwH,mBAAmB,GAAG,oBAAA;AAC3B;IAEA,IAAI,OAAOpL,cAAc,WAAa,EAAA;AACpC4D,QAAAA,EAAAA,CAAG2H,qBAAqB,GAAGvL,SAAAA,CAAUwL,QAAQ,CAACC,KAAK,CAAC,KAAW,CAAA,KAAA,IAAA;AACjE;IAEA,IAAI,OAAO/K,aAAa,WAAa,EAAA;AACnCA,QAAAA,QAAAA,CAAS6B,IAAI,CAACd,gBAAgB,CAAC,OAASyC,EAAAA,iBAAAA,CAAAA;AAC1C;IAEAN,EAAG8H,CAAAA,kBAAkB,GAAG,CAACC,SAAgBxL,EAAAA,IAAAA,GAAAA;QACvCpB,cAAiBoB,GAAAA,IAAAA;QACjBH,SAAUC,CAAAA,SAAS,CAAC2L,SAAS,CAAC7M,cAAAA,CAAAA;AAChC,KAAA;IACA6E,EAAGiI,CAAAA,kBAAkB,GAAG,CAACC,UAAAA,GAAAA;AACvB/L,QAAAA,6BAAAA,EAAAA;QACA,OAAOhB,cAAAA;AACT,KAAA;AACA6E,IAAAA,EAAAA,CAAGmI,iBAAiB,GAAG,IAAA;IAEvB,IAAI,OAAOnC,WAAW,WAAa,EAAA;QACjCA,MAAOnI,CAAAA,gBAAgB,CAAC,QAAUwC,EAAAA,gBAAAA,CAAAA;QAClC2F,MAAOnI,CAAAA,gBAAgB,CAAC,kBAAoB0C,EAAAA,0BAAAA,CAAAA;QAC5CyF,MAAOnI,CAAAA,gBAAgB,CAAC,qBAAuBkD,EAAAA,6BAAAA,CAAAA;AACjD;IAEAtF,aAAgB8L,GAAAA,SAAAA;AAChBnM,IAAAA,QAAAA,GAAW,IAAIgN,QAASjD,CAAAA,MAAAA,CAAAA;AACxB5J,IAAAA,YAAAA,GAAe,IAAI8M,YAAAA,CAAalD,MAAQ,EAAA,IAAA,EAAM,IAAM,EAAA,CAAA,CAAA;IACpDmD,SAAY,GAAA,IAAI9L,KAAM2I,CAAAA,MAAAA,CAAOC,MAAM,CAAA;IAGnChK,QAAS+J,CAAAA,MAAM,CAACC,MAAM,CAAC/H,KAAK,CAACkL,WAAW,GAAG,MAAA,CAAA;AAC3CnN,IAAAA,QAAAA,CAAS+J,MAAM,CAACC,MAAM,CAACvH,gBAAgB,CAAC,MAAQ0D,EAAAA,cAAAA,CAAAA;AAChDnG,IAAAA,QAAAA,CAAS+J,MAAM,CAACC,MAAM,CAACvH,gBAAgB,CAAC,aAAeyI,EAAAA,qBAAAA,CAAAA;;AAGvDtG,IAAAA,EAAAA,CAAGwI,YAAY,IAAIvI,iBAAkB,CAACwI,eAAe;AACrDzI,IAAAA,EAAAA,CAAGwI,YAAY,IAAIvI,iBAAkB,CAACyI,oBAAoB;;AAG1D1I,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACkC,GAAG,CAAC,GAAG,CAAA;AAC3BnC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC2I,SAAS,CAAC,GAAG,EAAA;AACjC5I,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC4I,UAAU,CAAC,GAAG,EAAA;AAClC7I,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC6I,OAAO,CAAC,GAAG,EAAA;AAC/B9I,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC8I,SAAS,CAAC,GAAG,EAAA;AACjC/I,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACyC,MAAM,CAAC,GAAG,EAAA;AAC9B1C,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC0C,QAAQ,CAAC,GAAG,EAAA;AAChC3C,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACuC,IAAI,CAAC,GAAG,EAAA;AAC5BxC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACwC,GAAG,CAAC,GAAG,EAAA;AAC3BzC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACqC,MAAM,CAAC,GAAG,EAAA;AAC9BtC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACsC,MAAM,CAAC,GAAG,EAAA;AAC9BvC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACmC,SAAS,CAAC,GAAG,CAAA;AACjCpC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACoC,KAAK,CAAC,GAAG,EAAA;AAC7BrC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC2C,KAAK,CAAC,GAAG,EAAA;AAC7B5C,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAAC4C,MAAM,CAAC,GAAG,EAAA;IAC9B7C,EAAG2I,CAAAA,MAAM,CAAC1I,QAAS,CAAC+I,WAAW,CAAC,GAAG9G,iBAAiB,CAAC,aAAc,CAAA;AACnElC,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACgJ,CAAC,CAAC,GAAG,EAAA;AACzBjJ,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACiJ,CAAC,CAAC,GAAG,EAAA;AACzBlJ,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACkJ,CAAC,CAAC,GAAG,EAAA;AACzBnJ,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACmJ,CAAC,CAAC,GAAG,EAAA;AACzBpJ,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACoJ,CAAC,CAAC,GAAG,EAAA;AACzBrJ,IAAAA,EAAAA,CAAG2I,MAAM,CAAC1I,QAAS,CAACqJ,CAAC,CAAC,GAAG,EAAA;AAEzBC,IAAAA,mBAAAA,EAAAA;AACF;AAEO,SAASC,SAASC,IAAY,EAAA;IACnC,MAAMzJ,EAAAA,GAAKC,KAAW,EAAA;IAEtB,IAAID,EAAAA,CAAG0J,mBAAmB,EAAE;AAC1B1J,QAAAA,EAAAA,CAAG0J,mBAAmB,GAAG,KAAA;QACzB,IAAI,OAAO1D,WAAW,WAAa,EAAA;AACjCA,YAAAA,MAAAA,CAAOyB,YAAY,CAACkC,OAAO,CAAC,WAAA,EAAa1J,uBAA6B,EAAA,CAAA;AACxE;AACF;AAEA,IAAA,MAAM2J,QAAWxO,GAAAA,QAAAA,CAAU+J,MAAM,CAAC0E,WAAW,EAAA;AAC7C,IAAA,MAAMzE,MAAShK,GAAAA,QAAAA,CAAU+J,MAAM,CAACC,MAAM;IACtC,MAAM0E,CAAAA,GAAYF,SAASnM,KAAK;IAChC,MAAMsM,CAAAA,GAAYH,SAASlM,MAAM;AACjC,IAAA,MAAMsM,SAAoB5O,GAAAA,QAAAA,CAAU+J,MAAM,CAAC8E,eAAe,CAACH,CAAAA,CAAAA;AAC3D,IAAA,MAAMI,SAAoB9O,GAAAA,QAAAA,CAAU+J,MAAM,CAACgF,eAAe,CAACJ,CAAAA,CAAAA;IAC3D/J,EAAGoK,CAAAA,WAAW,CAAClG,CAAC,GAAG4F,CAAAA;IACnB9J,EAAGoK,CAAAA,WAAW,CAAChG,CAAC,GAAG2F,CAAAA;AACnB/J,IAAAA,EAAAA,CAAGqK,uBAAuB,CAACnG,CAAC,GAAG4F,CAAI,GAAA,CAAA,GAAIE,YAAYF,CAAI,GAAA,CAAA;AACvD9J,IAAAA,EAAAA,CAAGqK,uBAAuB,CAACjG,CAAC,GAAG2F,CAAI,GAAA,CAAA,GAAIG,YAAYH,CAAI,GAAA,CAAA;AAEvD,IAAA,MAAMO,EAAajP,GAAAA,SAAAA,KAAc,CAAI,GAAA,CAAA,GAAIoO,IAAOpO,GAAAA,SAAAA;IAChDA,SAAYoO,GAAAA,IAAAA;AACZzJ,IAAAA,EAAAA,CAAGuK,SAAS,GAAGC,IAAAA,CAAKC,GAAG,CAAC,OAAOH,EAAK,GAAA,IAAA,CAAA;AAEpC;;;;KAMA,IAAI,OAAOxN,QAAAA,KAAa,WAAa,EAAA;QACnC,IAAIkD,EAAAA,CAAG0K,eAAe,EAAE;AACtB5N,YAAAA,QAAAA,CAAS6B,IAAI,CAACtB,KAAK,CAACsN,MAAM,GAAG,MAAA;SACxB,MAAA;AACL,YAAA,OAAQ1K,cAAoB,EAAA;gBAC1B,KAAKA,gBAAiB,CAAC2K,IAAI;oBACzBxF,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,MAAA;AACtB,oBAAA;gBACF,KAAK1K,gBAAiB,CAAC4K,KAAK;oBAC1BzF,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,SAAA;AACtB,oBAAA;gBACF,KAAK1K,gBAAiB,CAAC6K,SAAS;oBAC9B1F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,MAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAAC8K,SAAS;oBAC9B3F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,YAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAAC+K,QAAQ;oBAC7B5F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,WAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAACgL,QAAQ;oBAC7B7F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,WAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAACiL,UAAU;oBAC/B9F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,aAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAACkL,UAAU;oBAC/B/F,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,aAAA;AACtB,oBAAA,MAAA;gBACF,KAAK1K,gBAAiB,CAACmL,IAAI;oBACzBhG,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,SAAA;AACtB,oBAAA;gBACF,KAAK1K,gBAAiB,CAACoL,UAAU;oBAC/BjG,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,aAAA;AACtB,oBAAA;AACF,gBAAA;oBACEvF,MAAO/H,CAAAA,KAAK,CAACsN,MAAM,GAAG,SAAA;AACtB,oBAAA;AACJ;AACF;AACF;;IAGA,IAAK,IAAI9I,CAAI,GAAA,CAAA,EAAGA,CAAI7B,GAAAA,EAAAA,CAAGsL,SAAS,CAAC9L,MAAM,EAAE,EAAEqC,CAAG,CAAA;;;;;;AAM9C;AACA,IAAA,IAAI7B,GAAGuL,WAAW,GAAGtL,gBAAiB,CAACuL,gBAAgB,EAAE;;AAEvD,QAAA,MAAMC,QACJ,GAAA,OAAOrP,SAAc,KAAA,WAAA,IAAe,OAAOA,SAAAA,CAAUsP,WAAW,KAAK,UACjEtP,GAAAA,SAAAA,CAAUsP,WAAW,EAAA,GACrB,EAAE;QACR,IAAK,IAAI7J,IAAI,CAAGA,EAAAA,CAAAA,GAAI4J,SAASjM,MAAM,EAAE,EAAEqC,CAAG,CAAA;YACxC,MAAMnB,OAAAA,GAA0B+K,QAAQ,CAAC5J,CAAE,CAAA;AAC3C,YAAA,IAAI,CAACnB,OAAS,EAAA;AACZ,gBAAA;AACF;AACAV,YAAAA,EAAAA,CAAGwI,YAAY,IAAIvI,iBAAkB,CAAC0L,UAAU;AAChD,YAAA,MAAMC,aAAwBlL,GAAAA,OAAAA,CAAQG,OAAO,CAACrB,MAAM;AACpD,YAAA,MAAMqM,UAAqBnL,GAAAA,OAAAA,CAAQI,IAAI,CAACtB,MAAM;AAE9C,YAAA,MAAMsM,UAAa,GAAA,SAASA,UAAWC,CAAAA,MAAc,EAAEC,SAAiB,EAAA;AACtE,gBAAA,IAAI,CAACtL,OAAS,EAAA;AACZ,oBAAA;AACF;gBACA,IAAIkL,aAAAA,GAAgBI,aAAatL,OAAQG,CAAAA,OAAO,CAACmL,SAAU,CAAA,CAACC,OAAO,EAAE;oBACnEjM,EAAGsL,CAAAA,SAAS,CAACS,MAAAA,CAAO,GAAG,GAAA;AACzB;AACF,aAAA;YACA,MAAMG,UAAAA,GAAa,SAASA,UAAWH,CAAAA,MAAc,EAAEI,OAAe,EAAEC,EAAU,EAAEC,EAAU,EAAA;AAC5F,gBAAA,IAAI,CAAC3L,OAAS,EAAA;AACZ,oBAAA;AACF;AACA,gBAAA,IAAI4L,IAAYT,UAAaM,GAAAA,OAAAA,GAAUzL,QAAQI,IAAI,CAACqL,QAAQ,GAAGC,EAAAA;AAC/DE,gBAAAA,CAAAA,GAAI,CAACA,CAAAA,GAAIF,EAAC,KAAMC,KAAKD,EAAC,CAAA;AACtB,gBAAA,IAAIE,IAAI,GAAK,EAAA;oBACXA,CAAI,GAAA,GAAA;AACN;AACA,gBAAA,IAAItM,EAAGsL,CAAAA,SAAS,CAACS,MAAAA,CAAO,GAAGO,CAAG,EAAA;oBAC5BtM,EAAGsL,CAAAA,SAAS,CAACS,MAAAA,CAAO,GAAGO,CAAAA;AACzB;AACF,aAAA;;;AAGA,YAAA,MAAMzE,KAAiCnH,GAAAA,OAAAA,CAAQE,EAAE,CAACiH,KAAK,CAAC,kCAAA,CAAA;AACxD,YAAA,MAAM0E,YAAwC7L,GAAAA,OAAAA,CAAQE,EAAE,CAACiH,KAAK,CAC5D,0DAAA,CAAA;YAEF,MAAM2E,MAAAA,GAAiB,KAAC3E,IAASA,KAAK,CAAC,CAAE,CAAA,IAAM0E,YAAgBA,IAAAA,YAAY,CAAC,CAAA,CAAE,IAAK,MAAA;YACnF,MAAME,OAAAA,GAAkB,KAAC5E,IAASA,KAAK,CAAC,CAAE,CAAA,IAAM0E,YAAgBA,IAAAA,YAAY,CAAC,CAAA,CAAE,IAAK,MAAA;AACpF,YAAA,OAAQC,MAASC,GAAAA,OAAAA;gBACf,KAAK,UAAA;AACHX,oBAAAA,UAAAA,CAAW7L,aAAc,CAACyM,QAAQ,EAAE;AACpCZ,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC0M,MAAM,EAAE;AAClCb,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC2M,IAAI,EAAE;AAChCd,oBAAAA,UAAAA,CAAW7L,aAAc,CAACzD,KAAK,EAAE;oBACjC0P,UAAWjM,CAAAA,aAAc,CAAC4M,QAAQ,EAAE,GAAG,IAAC,EAAK,IAAC,CAAA,CAAA;oBAC9CX,UAAWjM,CAAAA,aAAc,CAAC6M,SAAS,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;oBAC/CZ,UAAWjM,CAAAA,aAAc,CAAC8M,MAAM,EAAE,GAAG,IAAC,EAAK,IAAC,CAAA,CAAA;oBAC5Cb,UAAWjM,CAAAA,aAAc,CAAC+M,QAAQ,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;AAC9ClB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACgN,SAAS,EAAE;AACrCnB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACiN,SAAS,EAAE;AACrCpB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACkN,SAAS,EAAE;AACrCrB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACmN,SAAS,EAAE;oBACrClB,UAAWjM,CAAAA,aAAc,CAACoN,UAAU,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAChDnB,UAAWjM,CAAAA,aAAc,CAACqN,WAAW,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;oBACjDpB,UAAWjM,CAAAA,aAAc,CAACsN,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAC9CrB,UAAWjM,CAAAA,aAAc,CAACuN,UAAU,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;AAChD,oBAAA;gBACF,KAAK,UAAA;AACH1B,oBAAAA,UAAAA,CAAW7L,aAAc,CAACyM,QAAQ,EAAE;AACpCZ,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC0M,MAAM,EAAE;AAClCb,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC2M,IAAI,EAAE;AAChCd,oBAAAA,UAAAA,CAAW7L,aAAc,CAACzD,KAAK,EAAE;AACjCsP,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC4M,QAAQ,EAAE;AACpCf,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC6M,SAAS,EAAE;AACrChB,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC8M,MAAM,EAAE;AAClCjB,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC+M,QAAQ,EAAE;AACpClB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACgN,SAAS,EAAE;AACrCnB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACiN,SAAS,EAAE;oBACrChB,UAAWjM,CAAAA,aAAc,CAACkN,SAAS,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;oBAC/CjB,UAAWjM,CAAAA,aAAc,CAACmN,SAAS,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;oBAC/ClB,UAAWjM,CAAAA,aAAc,CAACoN,UAAU,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAChDnB,UAAWjM,CAAAA,aAAc,CAACqN,WAAW,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;oBACjDpB,UAAWjM,CAAAA,aAAc,CAACsN,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAC9CrB,UAAWjM,CAAAA,aAAc,CAACuN,UAAU,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;AAChD,oBAAA;gBACF,KAAK,UAAA;gBACL,KAAK,UAAA;AACH1B,oBAAAA,UAAAA,CAAW7L,aAAc,CAACyM,QAAQ,EAAE;AACpCZ,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC0M,MAAM,EAAE;AAClCb,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC2M,IAAI,EAAE;AAChCd,oBAAAA,UAAAA,CAAW7L,aAAc,CAACzD,KAAK,EAAE;oBACjC0P,UAAWjM,CAAAA,aAAc,CAAC4M,QAAQ,EAAE,GAAG,IAAC,EAAK,IAAC,CAAA,CAAA;oBAC9CX,UAAWjM,CAAAA,aAAc,CAAC6M,SAAS,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;oBAC/CZ,UAAWjM,CAAAA,aAAc,CAAC8M,MAAM,EAAE,GAAG,IAAC,EAAK,IAAC,CAAA,CAAA;oBAC5Cb,UAAWjM,CAAAA,aAAc,CAAC+M,QAAQ,EAAE,GAAG,GAAC,EAAK,GAAC,CAAA,CAAA;AAC9ClB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACgN,SAAS,EAAE;AACrCnB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACiN,SAAS,EAAE;AACrCpB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACkN,SAAS,EAAE;AACrCrB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACmN,SAAS,EAAE;oBACrClB,UAAWjM,CAAAA,aAAc,CAACoN,UAAU,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAChDnB,UAAWjM,CAAAA,aAAc,CAACqN,WAAW,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;oBACjDpB,UAAWjM,CAAAA,aAAc,CAACsN,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAC9CrB,UAAWjM,CAAAA,aAAc,CAACuN,UAAU,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;AAChD,oBAAA;AACF,gBAAA;AACE1B,oBAAAA,UAAAA,CAAW7L,aAAc,CAACyM,QAAQ,EAAE;AACpCZ,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC0M,MAAM,EAAE;AAClCb,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC2M,IAAI,EAAE;AAChCd,oBAAAA,UAAAA,CAAW7L,aAAc,CAACzD,KAAK,EAAE;AACjCsP,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC4M,QAAQ,EAAE;AACpCf,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC6M,SAAS,EAAE;AACrChB,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC8M,MAAM,EAAE;AAClCjB,oBAAAA,UAAAA,CAAW7L,aAAc,CAAC+M,QAAQ,EAAE;AACpClB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACgN,SAAS,EAAE;AACrCnB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACiN,SAAS,EAAE;AACrCpB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACkN,SAAS,EAAE;AACrCrB,oBAAAA,UAAAA,CAAW7L,aAAc,CAACmN,SAAS,EAAE;oBACrClB,UAAWjM,CAAAA,aAAc,CAACoN,UAAU,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAChDnB,UAAWjM,CAAAA,aAAc,CAACqN,WAAW,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;oBACjDpB,UAAWjM,CAAAA,aAAc,CAACsN,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAC,CAAA;oBAC9CrB,UAAWjM,CAAAA,aAAc,CAACuN,UAAU,EAAE,CAAG,EAAA,KAAM,GAAC,CAAA;AAChD,oBAAA;AACJ;AACF;AACF;AACF;AAEA;;;;;;;;;AASA,GAEA,IAAIC,cAAsC,EAAC;AAE3C,MAAMC,eAA2C,EAAC;AAElD,iBACO,SAASC,cAAeC,CAAAA,QAAgB,EAAEC,IAAgB,EAAA;IAC/DH,YAAY,CAACE,SAAS,GAAGC,IAAAA;AAC3B;AAEA,iBACO,SAASC,YAAavR,CAAAA,IAAY,EAAEwR,GAAkB,EAAA;IAC3D,MAAMF,IAAAA,GAAO5N,OAAa,EAAA;AAC1B,IAAA,MAAM+N,WAAWH,IAAKI,CAAAA,QAAQ,GAAG,KAAA,GAAQJ,KAAKK,QAAQ;IACtD,IAAIC,UAAAA,GAAazS,KAAK,CAACsS,QAAS,CAAA;AAChC,IAAA,IAAI,CAACG,UAAY,EAAA;QACfA,UAAa,GAAA,IAAIC,KAAWJ,QAAU,EAAA,CAAA,CAAA;QACtCtS,KAAK,CAACsS,SAAS,GAAGG,UAAAA;AACpB;AACA,IAAA,IAAIjK,CAAI,GAAA,CAAA;AACR,IAAA,IAAIE,CAAI,GAAA,CAAA;AACR,IAAA,IAAI7H,IAAM,EAAA;QACR,KAAK,MAAM2D,MAAM3D,IAAM,CAAA;AACrB,YAAA,MAAMgL,SAAYhM,GAAAA,YAAAA,CAAc8S,YAAY,CAACnO,IAAIiO,UAAe,CAAA,IAAA;AAAC,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA;YACtEjK,CAAKqD,IAAAA,SAAS,CAAC,CAAE,CAAA;AACjBnD,YAAAA,CAAAA,GAAIoG,IAAKC,CAAAA,GAAG,CAAClD,SAAS,CAAC,CAAE,CAAA,CAAA;AAC3B;AACF;IACAwG,GAAMA,GAAAA,GAAAA,IAAO,IAAI9N,MAAY,EAAA;AAC7B8N,IAAAA,GAAAA,CAAI7J,CAAC,GAAGA,CAAAA;AACR6J,IAAAA,GAAAA,CAAI3J,CAAC,GAAGA,CAAAA;IACR,OAAO2J,GAAAA;AACT;AAEA,iBACO,SAASO,WAAAA,CAAYtO,EAAY,EAAA;AACtCA,IAAAA,EAAAA,CAAGuO,KAAK,CAACA,KAAK,CAACC,OAAO,CAAC,CAACX,IAAAA,GAAAA;AACtB,QAAA,MAAMG,QAAWvS,GAAAA,aAAAA,GAAgB,KAAQoS,GAAAA,IAAAA,CAAKK,QAAQ;QACtD,MAAMzH,KAAAA,GAAQoH,IAAKI,CAAAA,QAAQ,GAAGxS,aAAAA;QAC9B,IAAI0S,UAAAA,GAAaxS,UAAU,CAACqS,QAAS,CAAA;AACrC,QAAA,IAAI,CAACG,UAAY,EAAA;YACfA,UAAa,GAAA,IAAIC,KAAWJ,QAAU,EAAA,CAAA,CAAA;YACtCrS,UAAU,CAACqS,SAAS,GAAGG,UAAAA;AACzB;QACA,IAAIM,KAAAA,GAAQZ,KAAKa,aAAa;AAC9B,QAAA,MAAOD,KAAO,CAAA;YACZ,MAAMb,QAAAA,GAAWH,cAAcgB,KAAAA,CAAME,IAAI,CAAC,IAAIF,MAAME,IAAI;YACxD,IAAIC,IAAAA;YACJ,IAAIC,SAAAA;AACJ,YAAA,IAAIC,CAA0B,GAAA,IAAA;YAC9B,IAAI,OAAOlB,aAAa,QAAU,EAAA;gBAChCkB,CAAIpB,GAAAA,YAAY,CAACE,QAAS,CAAA;gBAC1BgB,IAAOG,GAAAA,MAAAA,CAAOC,aAAa,CAACpB,QAAAA,CAAAA;aACvB,MAAA;gBACLgB,IAAOhB,GAAAA,QAAAA;AACT;AACA,YAAA,IAAIkB,CAAG,EAAA;gBACLD,SAAYtT,GAAAA,YAAAA,CAAc0T,YAAY,CAACL,IAAME,EAAAA,CAAAA,CAAAA;aACxC,MAAA;gBACLD,SAAYtT,GAAAA,YAAAA,CAAc0T,YAAY,CAACL,IAAMT,EAAAA,UAAAA,CAAAA;AAC/C;AACAM,YAAAA,KAAAA,CAAMS,EAAE,GAAG,CAAA;AACXT,YAAAA,KAAAA,CAAMU,EAAE,GAAG3E,IAAAA,CAAK4E,IAAI,CAACP,SAAAA,CAAUpR,KAAK,GAAGgJ,KAAAA,CAAAA;AACvCgI,YAAAA,KAAAA,CAAMY,EAAE,GAAG,CAAA;AACXZ,YAAAA,KAAAA,CAAMa,EAAE,GAAG9E,IAAAA,CAAK4E,IAAI,CAACP,SAAAA,CAAUnR,MAAM,GAAG+I,KAAAA,CAAAA;AACxCgI,YAAAA,KAAAA,CAAMc,QAAQ,GAAG/E,IAAAA,CAAK4E,IAAI,CAACP,SAAAA,CAAUpR,KAAK,GAAGgJ,KAAAA,CAAAA;YAC7CgI,KAAMe,CAAAA,EAAE,GAAGX,SAAAA,CAAUY,IAAI;YACzBhB,KAAMiB,CAAAA,EAAE,GAAGb,SAAAA,CAAUc,IAAI;YACzBlB,KAAMrC,CAAAA,EAAE,GAAGyC,SAAAA,CAAUe,IAAI;YACzBnB,KAAMpC,CAAAA,EAAE,GAAGwC,SAAAA,CAAUgB,IAAI;AACzBpB,YAAAA,KAAAA,CAAMqB,SAAS,GAAGvU,YAAAA,CAAcwU,eAAe,CAAClB,SAAAA,CAAUmB,UAAU,CAAK,IAAA,IAAA;AACzEnC,YAAAA,IAAAA,CAAKoC,YAAY,CAACxB,KAAAA,CAAAA;AAClBA,YAAAA,KAAAA,GAAQZ,KAAKa,aAAa;AAC5B;AACF,KAAA,CAAA;AACF;AAEA,IAAIwB,iBAAmC,GAAA,CAAA;MAC1BC,UAA2B,GAAA,IAAIlQ,MAAY,CAAC,GAAG,CAAG;AAC/D,IAAImQ,gBAAmB,GAAA,KAAA;AAEvB,SAASC,cAAcrQ,EAAY,EAAA;IACjC,MAAMsQ,UAAAA,GAAarQ,gBAAsB,EAAA;IACzC,MAAMsQ,SAAAA,GAAYtQ,YAAkB,EAAA;IACpC,IAAIqQ,UAAAA,IAAcC,aAAa,CAAG,EAAA;QAChC,IAAIL,iBAAAA,IAAqBI,UAAWE,CAAAA,EAAE,EAAE;AACtCN,YAAAA,iBAAAA,GAAoBI,WAAWE,EAAE;YACjCL,UAAWM,CAAAA,GAAG,CAAC,CAAG,EAAA,CAAA,CAAA;YAClBL,gBAAmB,GAAA,IAAA;AACrB;AAEA,QAAA,IAAIE,WAAWI,KAAK,GAAGzQ,gBAAsB,CAAC0Q,MAAM,EAAE;AACpD,YAAA,IAAIC,UAAa,GAAA,KAAA;AACjB,YAAA,IAAI5Q,EAAG+B,CAAAA,SAAS,CAAC,CAAA,CAAE,EAAE;gBACnB6O,UAAaR,GAAAA,gBAAAA;gBACbA,gBAAmB,GAAA,KAAA;aACd,MAAA;gBACLA,gBAAmB,GAAA,IAAA;AACrB;AAEA,YAAA,MAAMS,MAAS,GAAA,IAAI5Q,MAAY,CAACqQ,UAAAA,CAAWQ,MAAM,CAAC5M,CAAC,EAAEoM,UAAWQ,CAAAA,MAAM,CAAC1M,CAAC,CAAA;YACxE,IAAIkM,UAAAA,CAAWS,UAAU,EAAE;AACzB,gBAAA,IAAI/Q,GAAG+B,SAAS,CAAC,CAAE,CAAA,IAAI,CAAC6O,UAAY,EAAA;AAClCC,oBAAAA,MAAAA,CAAOzM,CAAC,IAAIpE,EAAGgR,CAAAA,UAAU,CAAC5M,CAAC;AAC3B+L,oBAAAA,UAAAA,CAAW/L,CAAC,GAAGpE,EAAGgR,CAAAA,UAAU,CAAC5M,CAAC;AAChC,iBAAA,MAAO,IAAIoG,IAAKyG,CAAAA,GAAG,CAACd,UAAW/L,CAAAA,CAAC,IAAI,CAAG,EAAA;oBACrCyM,MAAOzM,CAAAA,CAAC,IAAI+L,UAAAA,CAAW/L,CAAC;AACxB+L,oBAAAA,UAAAA,CAAW/L,CAAC,IAAI,GAAA;AAClB;gBACA,IAAIyM,MAAAA,CAAOzM,CAAC,GAAG,CAAG,EAAA;AAChByM,oBAAAA,MAAAA,CAAOzM,CAAC,GAAG,CAAA;iBACN,MAAA,IAAIyM,OAAOzM,CAAC,GAAGkM,WAAWY,SAAS,CAAC9M,CAAC,EAAE;AAC5CyM,oBAAAA,MAAAA,CAAOzM,CAAC,GAAGkM,UAAWY,CAAAA,SAAS,CAAC9M,CAAC;AACnC;AACAkM,gBAAAA,UAAAA,CAAWQ,MAAM,GAAGD,MAAAA;AACtB;YACA,IAAIP,UAAAA,CAAWa,UAAU,EAAE;AACzB,gBAAA,IAAInR,EAAG+B,CAAAA,SAAS,CAAC,CAAA,CAAE,EAAE;AACnB8O,oBAAAA,MAAAA,CAAO3M,CAAC,IAAIlE,EAAGgR,CAAAA,UAAU,CAAC9M,CAAC;AAC3BiM,oBAAAA,UAAAA,CAAWjM,CAAC,GAAGlE,EAAGgR,CAAAA,UAAU,CAAC9M,CAAC;AAChC;gBACA,IAAI2M,MAAAA,CAAO3M,CAAC,GAAG,CAAG,EAAA;AAChB2M,oBAAAA,MAAAA,CAAO3M,CAAC,GAAG,CAAA;iBACN,MAAA,IAAI2M,OAAO3M,CAAC,GAAGoM,WAAWY,SAAS,CAAChN,CAAC,EAAE;AAC5C2M,oBAAAA,MAAAA,CAAO3M,CAAC,GAAGoM,UAAWY,CAAAA,SAAS,CAAChN,CAAC;AACnC;AACAoM,gBAAAA,UAAAA,CAAWQ,MAAM,GAAGD,MAAAA;AACtB;AACF;AACF;AACF;AAEA,IAAIvI,SAAAA;AACJ,SAAS8I,kBAAkBC,GAAa,EAAA;IACtC,MAAMC,QAAAA,GAAWrR,WAAiB,EAAA;IAClC,MAAMsR,KAAAA,GAAQtR,cAAoB,EAAA;IAClC,IAAI,CAACqR,QAAYA,IAAAA,QAAAA,IAAYC,KAAO,EAAA;QAClCjJ,SAAWxJ,EAAAA,IAAAA,EAAAA;KACN,MAAA;AACLwJ,QAAAA,SAAAA,CAAUvI,KAAK,EAAA;AACjB;AACF;AAMO,SAASyR,cAAAA,CAAeC,SAAmCxR,GAAAA,WAAiB,EAAE,EAAA;IACnF,MAAMD,EAAAA,GAAKC,KAAW,EAAA;IAEtBqO,WAAYtO,CAAAA,EAAAA,CAAAA;IACZqQ,aAAcrQ,CAAAA,EAAAA,CAAAA;IACdoR,iBAAkBpR,CAAAA,CAAAA;AAElB,IAAA,IAAIyR,cAAc,IAAM,EAAA;AACtB,QAAA,MAAM,IAAIC,KAAAA,EAAAA;AACZ;;IAGA,MAAMC,QAAAA,GAAmB3R,GAAGoK,WAAW,CAAClG,CAAC,GAAGlE,EAAAA,CAAGqK,uBAAuB,CAACnG,CAAC;IACxE,MAAM0N,SAAAA,GAAoB5R,GAAGoK,WAAW,CAAChG,CAAC,GAAGpE,EAAAA,CAAGqK,uBAAuB,CAACjG,CAAC;IACzE,IAAIuN,QAAAA,KAAa,CAAKC,IAAAA,SAAAA,KAAc,CAAG,EAAA;AACrC,QAAA;AACF;IACAH,SAAUI,CAAAA,cAAc,CAAC7R,EAAAA,CAAGqK,uBAAuB,CAAA;;IAGnD,MAAMyH,GAAAA,GAAML,UAAUM,UAAU;AAChC,IAAA,MAAMC,UAAa5W,GAAAA,QAAAA,CAAU+J,MAAM,CAAC8M,UAAU,EAAA;AAC9C7W,IAAAA,QAAAA,CAAU8W,WAAW,EAAA;IACrBT,SAAUU,CAAAA,gBAAgB,CAAC,CAACC,SAAAA,GAAAA;QAC1B,MAAMC,EAAAA,GAAKD,UAAUE,SAAS;QAC9B,MAAMC,EAAAA,GAAKH,UAAUI,SAAS;AAC9B,QAAA,MAAMC,KAAQ,GAAA,IAAIC,WAAYH,CAAAA,EAAAA,CAAGI,MAAM,EAAEJ,EAAGK,CAAAA,UAAU,EAAEL,EAAAA,CAAGM,UAAU,GAAGH,YAAYI,iBAAiB,CAAA;QACrGV,SAAUW,CAAAA,eAAe,CAAC,CAACC,QAAAA,GAAAA;YACzB,IAAIA,QAAAA,CAASC,YAAY,KAAK,IAAM,EAAA;;AAElC7X,gBAAAA,QAAAA,CAAU8X,KAAK,EAAA;gBACfF,QAASC,CAAAA,YAAY,CAACb,SAAWY,EAAAA,QAAAA,CAAAA;aAC5B,MAAA;AACL,gBAAA,MAAMG,SAAY,GAAA,IAAIlT,MAAU,CAC9B+S,QAASI,CAAAA,QAAQ,CAAClP,CAAC,GAAG4N,GAAI5N,CAAAA,CAAC,EAC3B8O,QAAAA,CAASI,QAAQ,CAAChP,CAAC,GAAG0N,GAAAA,CAAI1N,CAAC,EAC3B4O,QAAAA,CAASI,QAAQ,CAACC,CAAC,GAAGvB,GAAAA,CAAI5N,CAAC,EAC3B8O,SAASI,QAAQ,CAACtJ,CAAC,GAAGgI,IAAI1N,CAAC,CAAA;AAE7B,gBAAA,IAAI+O,SAAUjP,CAAAA,CAAC,GAAGyN,QAAAA,IAAYwB,UAAU/O,CAAC,GAAGwN,SAAauB,IAAAA,SAAAA,CAAUE,CAAC,IAAI,GAAA,IAAOF,SAAUrJ,CAAAA,CAAC,IAAI,GAAK,EAAA;;;AAGjG,oBAAA,MAAMwJ,WAAWlY,QAAU+J,CAAAA,MAAM,CAACoO,eAAe,CAACJ,UAAUjP,CAAC,CAAA;oBAC7D,MAAMsP,QAAAA,GAAWpY,SAAU+J,MAAM,CAACsO,eAAe,CAAC7B,SAAAA,GAAYuB,UAAUrJ,CAAC,CAAA;oBACzE,MAAM4J,QAAAA,GAAWtY,QAAU+J,CAAAA,MAAM,CAACoO,eAAe,CAACJ,SAAUE,CAAAA,CAAC,GAAGF,SAAAA,CAAUjP,CAAC,CAAA;oBAC3E,MAAMyP,QAAAA,GAAWvY,QAAU+J,CAAAA,MAAM,CAACsO,eAAe,CAACN,SAAUrJ,CAAAA,CAAC,GAAGqJ,SAAAA,CAAU/O,CAAC,CAAA;AAC3EhJ,oBAAAA,QAAAA,CAAUwY,MAAM,CACdvB,EACAI,EAAAA,KAAAA,EACAO,SAASa,SAAS,EAClBb,QAASc,CAAAA,SAAS,EAClBd,QAASe,CAAAA,SAAS,EAClBf,QAAAA,CAASgB,SAAS,EAClB;AAACV,wBAAAA,QAAAA;AAAUE,wBAAAA,QAAAA;AAAUE,wBAAAA,QAAAA;AAAUC,wBAAAA;AAAS,qBAAA,CAAA;AAE5C;AACF;AACF,SAAA,CAAA;AACF,KAAA,CAAA;AACAvY,IAAAA,QAAAA,CAAU6Y,SAAS,EAAA;IACnB7Y,QAAU+J,CAAAA,MAAM,CAAC+O,UAAU,CAAClC,UAAAA,CAAAA;AAC9B;AAEO,SAASmC,kBAAAA,GAAAA;IACd,MAAMnU,EAAAA,GAAKC,KAAW,EAAA;;;;;;;;IAWtB,MAAM,EAAExC,KAAK,EAAEC,MAAM,EAAE0W,MAAM,EAAE,GAAGpU,EAAAA,CAAGuO,KAAK,CAAC8F,kBAAkB,EAAA;IAC7D,IAAI5W,KAAAA,IAASC,UAAU0W,MAAQ,EAAA;AAC7B,QAAA,MAAME,KAAQ,GAAA,IAAIC,UAAW9W,CAAAA,KAAAA,GAAQC,MAAS,GAAA,CAAA,CAAA;AAC9C,QAAA,IAAImE,CAAI,GAAA,CAAA;QACRuS,MAAO5F,CAAAA,OAAO,CAAC,CAACgG,CAAAA,GAAAA;YACdF,KAAK,CAACzS,IAAI,GAAG,IAAA;YACbyS,KAAK,CAACzS,IAAI,GAAG,IAAA;YACbyS,KAAK,CAACzS,IAAI,GAAG,IAAA;YACbyS,KAAK,CAACzS,IAAI,GAAG2S,CAAAA;AACf,SAAA,CAAA;;AAEAlZ,QAAAA,aAAAA,GAAgBF,SAAU+J,MAAM,CAACsP,eAAe,CAAC,YAAA,EAAchX,OAAOC,MAAQ,EAAA;YAC5EgX,UAAY,EAAA;AACd,SAAA,CAAA;AACApZ,QAAAA,aAAAA,CAAeqZ,MAAM,CAACL,KAAO,EAAA,CAAA,EAAG,GAAG7W,KAAOC,EAAAA,MAAAA,CAAAA;;;AAI1CsC,QAAAA,EAAAA,CAAGuO,KAAK,CAACqG,KAAK,GAAGtZ,aAAiB,IAAA,IAAA;;AAEpC;AACF;AAEA,iBACO,SAASuZ,cAAAA,GAAAA;AACd,IAAA,OAAOpH,eAAe,EAAC;AACzB;AAEA,iBACO,SAASqH,cAAAA,CAAeC,GAA2B,EAAA;IACxDtH,WAAcsH,GAAAA,GAAAA;AAChB;AAQO,SAASxL,mBAAAA,GAAAA;AACd4K,IAAAA,kBAAAA,EAAAA;AACF;AAMO,SAASa,gBAAgBC,OAAgB,EAAA;AAC9CzZ,IAAAA,YAAAA,GAAe,CAAC,CAACyZ,OAAAA;AACnB;AAEO,SAAS7O,mBAAmBC,MAAc,EAAA;AAC/C,IAAA,OAAOxB,gBAAgB,CAACwB,MAAO,CAAA,IAAI,EAAC;AACtC;;;;"}
1
+ {"version":3,"file":"imgui_impl.js","sources":["../src/imgui_impl.ts"],"sourcesContent":["import type { AbstractDevice, AtlasInfo, Texture2D } from '@zephyr3d/device';\r\nimport { GlyphManager, Font as DeviceFont } from '@zephyr3d/device';\r\nimport { Renderer } from './renderer';\r\nimport * as ImGui from './imgui';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\n\r\nlet clipboard_text = '';\r\nlet renderer: Nullable<Renderer> = null;\r\nlet prev_time = 0;\r\nlet g_FontTexture: Nullable<Texture2D> = null;\r\nlet glyphManager: Nullable<GlyphManager> = null;\r\nlet wantKeyboard = false;\r\nlet fontSizeGlyph = 0;\r\nconst fonts: Record<string, DeviceFont> = {};\r\nconst glyphFonts: Record<string, DeviceFont> = {};\r\n\r\nfunction isPasteShortcut(event: KeyboardEvent) {\r\n const key = event.key?.toLowerCase?.() ?? '';\r\n return (event.ctrlKey || event.metaKey) && !event.altKey && key === 'v';\r\n}\r\n\r\nasync function readClipboardTextPreferSystem() {\r\n if (typeof navigator !== 'undefined' && navigator.clipboard?.readText) {\r\n try {\r\n const text = await navigator.clipboard.readText();\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n } catch {\r\n // Ignore clipboard read failures and fallback to in-memory clipboard.\r\n }\r\n }\r\n return clipboard_text;\r\n}\r\n\r\nexport class Input {\r\n public _dom_input: HTMLInputElement;\r\n private _composing = false;\r\n private _lastCommittedText = '';\r\n private _lastCommittedAt = 0;\r\n constructor(cvs: HTMLCanvasElement) {\r\n this._dom_input = document.createElement('input');\r\n this._dom_input.type = 'text';\r\n this._dom_input.autocomplete = 'off';\r\n this._dom_input.autocapitalize = 'off';\r\n this._dom_input.spellcheck = false;\r\n // This input is only used as an IME/text-entry bridge and should not\r\n // participate in the browser's native Tab focus order.\r\n this._dom_input.tabIndex = -1;\r\n this._dom_input.style.position = 'fixed';\r\n this._dom_input.style.top = -10000 + 'px';\r\n this._dom_input.style.left = -10000 + 'px';\r\n this._dom_input.style.width = '1px';\r\n this._dom_input.style.height = '1px';\r\n this._dom_input.style.opacity = '0';\r\n this._dom_input.style.pointerEvents = 'none';\r\n this._dom_input.addEventListener('keydown', (e) => {\r\n e.stopPropagation();\r\n this.onKeydown(e as KeyboardEvent);\r\n // Only intercept Tab so browser focus navigation does not trigger.\r\n // Keep the default behavior for other keys so text entry still works.\r\n if ((e as KeyboardEvent).key === 'Tab') {\r\n e.preventDefault();\r\n }\r\n });\r\n this._dom_input.addEventListener('keyup', (e) => {\r\n e.stopPropagation();\r\n this.onKeyup(e as KeyboardEvent);\r\n // Same as above: only intercept Tab to avoid interfering with text entry.\r\n if ((e as KeyboardEvent).key === 'Tab') {\r\n e.preventDefault();\r\n }\r\n });\r\n this._dom_input.addEventListener('keypress', (e) => {\r\n e.stopPropagation();\r\n this.onKeypress(e as KeyboardEvent);\r\n });\r\n this._dom_input.addEventListener('compositionstart', (e) => {\r\n this.onCompositionStart(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('compositionupdate', (e) => {\r\n this.onCompositionUpdate(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('compositionend', (e) => {\r\n this.onCompositionEnd(e as CompositionEvent);\r\n });\r\n this._dom_input.addEventListener('input', (e) => {\r\n this.onInput(e as InputEvent);\r\n });\r\n this._dom_input.addEventListener('paste', (e) => {\r\n this.onPaste(e as ClipboardEvent);\r\n });\r\n const parent = cvs.ownerDocument?.body ?? document.body ?? cvs.ownerDocument?.documentElement ?? cvs;\r\n parent.appendChild(this._dom_input);\r\n this.blur();\r\n }\r\n onKeydown(e: KeyboardEvent) {\r\n canvas_on_keydown(e);\r\n }\r\n onKeyup(e: KeyboardEvent) {\r\n canvas_on_keyup(e);\r\n }\r\n onKeypress(e: KeyboardEvent) {\r\n void e;\r\n }\r\n onCompositionStart(_e: CompositionEvent) {\r\n this._composing = true;\r\n }\r\n onCompositionUpdate(_e: CompositionEvent) {}\r\n onCompositionEnd(_e: CompositionEvent) {\r\n const text = typeof _e.data === 'string' ? _e.data : '';\r\n this._composing = false;\r\n if (text) {\r\n this.commitText(text);\r\n }\r\n }\r\n onInput(e: InputEvent) {\r\n e.stopPropagation();\r\n const inputType = typeof e.inputType === 'string' ? e.inputType : '';\r\n if (\r\n this._composing ||\r\n (typeof e.isComposing === 'boolean' && e.isComposing) ||\r\n inputType === 'insertCompositionText'\r\n ) {\r\n return;\r\n }\r\n if (inputType.startsWith('delete')) {\r\n this.clearText();\r\n return;\r\n }\r\n const text = typeof e.data === 'string' && e.data.length > 0 ? e.data : this._dom_input.value;\r\n if (text) {\r\n const now = Date.now();\r\n if (!(text === this._lastCommittedText && now - this._lastCommittedAt < 50)) {\r\n this.commitText(text);\r\n }\r\n }\r\n this.clearText();\r\n }\r\n onPaste(e: ClipboardEvent) {\r\n e.stopPropagation();\r\n const text = e.clipboardData?.getData('text/plain');\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n }\r\n blur() {\r\n if (document.activeElement === this._dom_input) {\r\n this.clearText();\r\n this._dom_input.blur();\r\n }\r\n }\r\n focus() {\r\n if (document.activeElement !== this._dom_input) {\r\n this._dom_input.focus();\r\n }\r\n }\r\n private clearText() {\r\n this._dom_input.value = '';\r\n }\r\n private commitText(text: string) {\r\n const io = ImGui.GetIO();\r\n for (const ch of text) {\r\n io.AddInputCharacter(ch.codePointAt(0)!);\r\n }\r\n this._lastCommittedText = text;\r\n this._lastCommittedAt = Date.now();\r\n this.clearText();\r\n }\r\n}\r\n\r\n/*\r\nfunction document_on_copy(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n event.clipboardData.setData(\"text/plain\", clipboard_text);\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n\r\nfunction document_on_cut(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n event.clipboardData.setData(\"text/plain\", clipboard_text);\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n\r\nfunction document_on_paste(event: ClipboardEvent) {\r\n if (event.clipboardData) {\r\n clipboard_text = event.clipboardData.getData(\"text/plain\");\r\n }\r\n // console.log(`${event.type}: \"${clipboard_text}\"`);\r\n event.preventDefault();\r\n}\r\n*/\r\nfunction window_on_resize() {}\r\n\r\nfunction document_on_paste(event: ClipboardEvent) {\r\n const text = event.clipboardData?.getData('text/plain');\r\n if (typeof text === 'string') {\r\n clipboard_text = text;\r\n }\r\n}\r\n\r\nfunction window_on_gamepadconnected(event: any /* GamepadEvent */) {\r\n console.info(\r\n 'Gamepad connected at index %d: %s. %d buttons, %d axes.',\r\n event.gamepad.index,\r\n event.gamepad.id,\r\n event.gamepad.buttons.length,\r\n event.gamepad.axes.length\r\n );\r\n}\r\n\r\nfunction window_on_gamepaddisconnected(event: any /* GamepadEvent */) {\r\n console.info('Gamepad disconnected at index %d: %s.', event.gamepad.index, event.gamepad.id);\r\n}\r\n\r\nfunction shouldPreserveMouseStateOnCanvasBlur(event: FocusEvent) {\r\n const next = event.relatedTarget;\r\n if (!(next instanceof HTMLElement)) {\r\n return false;\r\n }\r\n const hiddenTextBridge =\r\n (next.tagName === 'INPUT' || next.tagName === 'TEXTAREA') &&\r\n next.tabIndex < 0 &&\r\n next.getAttribute('aria-hidden') === 'true';\r\n return hiddenTextBridge;\r\n}\r\n\r\nfunction canvas_on_blur(_event: FocusEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = false;\r\n io.KeyShift = false;\r\n io.KeyAlt = false;\r\n io.KeySuper = false;\r\n for (let i = 0; i < io.KeysDown.length; ++i) {\r\n io.KeysDown[i] = false;\r\n }\r\n if (!shouldPreserveMouseStateOnCanvasBlur(_event)) {\r\n for (let i = 0; i < io.MouseDown.length; ++i) {\r\n io.MouseDown[i] = false;\r\n }\r\n leftMouseDown = false;\r\n releasePointerLock();\r\n }\r\n}\r\n\r\nconst key_code_to_index: Record<string, number> = {\r\n Tab: 9,\r\n Backspace: 8,\r\n Space: 32,\r\n Insert: 45,\r\n Delete: 46,\r\n Home: 36,\r\n End: 35,\r\n PageUp: 33,\r\n PageDown: 34,\r\n Enter: 13,\r\n Escape: 27,\r\n ArrowLeft: 37,\r\n ArrowUp: 38,\r\n ArrowRight: 39,\r\n ArrowDown: 40,\r\n NumpadEnter: 176,\r\n KeyA: 65,\r\n KeyC: 67,\r\n KeyV: 86,\r\n KeyX: 88,\r\n KeyY: 89,\r\n KeyZ: 90\r\n};\r\n\r\nexport function canvas_on_keydown(event: KeyboardEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = event.ctrlKey;\r\n io.KeyShift = event.shiftKey;\r\n io.KeyAlt = event.altKey;\r\n io.KeySuper = event.metaKey;\r\n if (isPasteShortcut(event)) {\r\n readClipboardTextPreferSystem();\r\n }\r\n const key_index = key_code_to_index[event.code];\r\n if (key_index) {\r\n ImGui.ASSERT(key_index >= 0 && key_index < ImGui.ARRAYSIZE(io.KeysDown));\r\n io.KeysDown[key_index] = true;\r\n // forward to the keypress event\r\n if (key_index == 9 || wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function canvas_on_keyup(event: KeyboardEvent) {\r\n const io = ImGui.GetIO();\r\n io.KeyCtrl = event.ctrlKey;\r\n io.KeyShift = event.shiftKey;\r\n io.KeyAlt = event.altKey;\r\n io.KeySuper = event.metaKey;\r\n const key_index = key_code_to_index[event.code];\r\n if (key_index) {\r\n ImGui.ASSERT(key_index >= 0 && key_index < ImGui.ARRAYSIZE(io.KeysDown));\r\n io.KeysDown[key_index] = false;\r\n if (wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput || key_index == 9) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function canvas_on_keypress(event: KeyboardEvent) {\r\n void event;\r\n const io = ImGui.GetIO();\r\n // Text is committed via the hidden DOM input's `input` event.\r\n // Doing it here duplicates Latin characters and IME composition results.\r\n if (wantKeyboard || io.WantCaptureKeyboard || io.WantTextInput) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_pointermove(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n if (isPointerLocked()) {\r\n io.MousePos.x += event.movementX || 0;\r\n io.MousePos.y += event.movementY || 0;\r\n } else {\r\n io.MousePos.x = event.offsetX;\r\n io.MousePos.y = event.offsetY;\r\n if (\r\n event.pointerType === 'mouse' &&\r\n leftMouseDown &&\r\n (event.buttons & 1) !== 0 &&\r\n io.WantCaptureMouse &&\r\n isDraggingFromMouseDown(event) &&\r\n isPointerNearScreenEdge(event)\r\n ) {\r\n requestPointerLock();\r\n }\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// MouseEvent.button\r\n// A number representing a given button:\r\n// 0: Main button pressed, usually the left button or the un-initialized state\r\n// 1: Auxiliary button pressed, usually the wheel button or the middle button (if present)\r\n// 2: Secondary button pressed, usually the right button\r\n// 3: Fourth button, typically the Browser Back button\r\n// 4: Fifth button, typically the Browser Forward button\r\nconst mouse_button_map: number[] = [\r\n ImGui.MouseButton.Left,\r\n ImGui.MouseButton.Middle,\r\n ImGui.MouseButton.Right,\r\n 3,\r\n 4\r\n];\r\n\r\nexport function any_pointerdown() {\r\n const io = ImGui.GetIO();\r\n for (let i = 0; i < io.MouseDown.length; i++) {\r\n if (io.MouseDown[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isPointerLocked() {\r\n if (typeof document === 'undefined') {\r\n return false;\r\n }\r\n return document.pointerLockElement === renderer?.device.canvas;\r\n}\r\n\r\nfunction requestPointerLock() {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n const canvas = renderer?.device.canvas;\r\n if (!canvas || isPointerLocked() || typeof canvas.requestPointerLock !== 'function') {\r\n return;\r\n }\r\n try {\r\n const ret = canvas.requestPointerLock();\r\n if (ret && typeof (ret as Promise<void>).catch === 'function') {\r\n (ret as Promise<void>).catch(() => {\r\n // Ignore pointer lock denial and keep default behavior.\r\n });\r\n }\r\n } catch {\r\n // Ignore pointer lock denial and keep default behavior.\r\n }\r\n}\r\n\r\nfunction releasePointerLock() {\r\n if (typeof document === 'undefined' || !isPointerLocked()) {\r\n return;\r\n }\r\n if (typeof document.exitPointerLock === 'function') {\r\n document.exitPointerLock();\r\n }\r\n}\r\n\r\nconst DRAG_LOCK_THRESHOLD_PX = 2;\r\nconst EDGE_LOCK_PADDING_PX = 1;\r\nlet leftMouseDown = false;\r\nlet leftMouseDownClientX = 0;\r\nlet leftMouseDownClientY = 0;\r\n\r\nfunction isDraggingFromMouseDown(event: PointerEvent) {\r\n const dx = event.clientX - leftMouseDownClientX;\r\n const dy = event.clientY - leftMouseDownClientY;\r\n return dx * dx + dy * dy >= DRAG_LOCK_THRESHOLD_PX * DRAG_LOCK_THRESHOLD_PX;\r\n}\r\n\r\nfunction isPointerNearScreenEdge(event: PointerEvent) {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n const x = event.clientX;\r\n const y = event.clientY;\r\n return (\r\n x <= EDGE_LOCK_PADDING_PX ||\r\n y <= EDGE_LOCK_PADDING_PX ||\r\n x >= window.innerWidth - EDGE_LOCK_PADDING_PX ||\r\n y >= window.innerHeight - EDGE_LOCK_PADDING_PX\r\n );\r\n}\r\n\r\nfunction canvas_on_pointerdown(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = event.offsetX;\r\n io.MousePos.y = event.offsetY;\r\n io.MouseDown[mouseButtonToImGui(event.button)] = true;\r\n if (event.button === 0 && event.pointerType === 'mouse') {\r\n leftMouseDown = true;\r\n leftMouseDownClientX = event.clientX;\r\n leftMouseDownClientY = event.clientY;\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_contextmenu(_event: Event) {\r\n const io = ImGui.GetIO();\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_pointerup(event: PointerEvent) {\r\n const io = ImGui.GetIO();\r\n io.MouseDown[mouse_button_map[event.button]] = false;\r\n if (event.button === 0) {\r\n leftMouseDown = false;\r\n }\r\n if (!any_pointerdown()) {\r\n releasePointerLock();\r\n }\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction canvas_on_wheel(event: WheelEvent) {\r\n const io = ImGui.GetIO();\r\n let scale = 1.0;\r\n switch (event.deltaMode) {\r\n case event.DOM_DELTA_PIXEL:\r\n scale = 0.01;\r\n break;\r\n case event.DOM_DELTA_LINE:\r\n scale = 0.2;\r\n break;\r\n case event.DOM_DELTA_PAGE:\r\n scale = 1.0;\r\n break;\r\n }\r\n io.MouseWheelH = event.deltaX * scale;\r\n io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text.\r\n if (io.WantCaptureMouse) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nlet touch_count = 0;\r\nlet touch_id: number;\r\nexport class ITouch {\r\n x = 0;\r\n y = 0;\r\n}\r\nexport let multi_touch: { [key: number]: ITouch } = {};\r\n\r\nfunction canvas_on_touchstart(event: TouchEvent) {\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n touch_id = touch.identifier;\r\n multi_touch[touch.identifier] = { x: touch.clientX, y: touch.clientY };\r\n }\r\n const mtouch = multi_touch[touch_id];\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = mtouch.x;\r\n io.MousePos.y = mtouch.y;\r\n io.MouseDown[0] = true;\r\n}\r\nfunction canvas_on_touchmove(event: TouchEvent) {\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n multi_touch[touch.identifier] = { x: touch.clientX, y: touch.clientY };\r\n }\r\n const mtouch = multi_touch[touch_id];\r\n const io = ImGui.GetIO();\r\n io.MousePos.x = mtouch.x;\r\n io.MousePos.y = mtouch.y;\r\n}\r\nfunction canvas_on_touchend(event: TouchEvent) {\r\n const io = ImGui.GetIO();\r\n for (let i = 0; i < event.changedTouches.length; i++) {\r\n const touch = event.changedTouches[i];\r\n if (touch.identifier == touch_id) {\r\n io.MouseDown[0] = false;\r\n }\r\n delete multi_touch[touch.identifier];\r\n }\r\n touch_count++;\r\n if (touch_count >= 200) {\r\n multi_touch = {};\r\n }\r\n}\r\nfunction canvas_on_touchcancel(event: TouchEvent) {\r\n canvas_on_touchend(event);\r\n}\r\n\r\nexport const is_contextlost = false;\r\n\r\nexport function injectKeyEvent(ev: KeyboardEvent) {\r\n if (ev.type === 'keydown') {\r\n return canvas_on_keydown(ev);\r\n } else if (ev.type === 'keyup') {\r\n return canvas_on_keyup(ev);\r\n } else if (ev.type === 'keypress') {\r\n return canvas_on_keypress(ev);\r\n }\r\n return false;\r\n}\r\n\r\nexport function injectWheelEvent(ev: WheelEvent) {\r\n return canvas_on_wheel(ev);\r\n}\r\n\r\nexport function injectPointerEvent(ev: PointerEvent) {\r\n if (ev.type === 'pointermove') {\r\n return canvas_on_pointermove(ev);\r\n } else if (ev.type === 'pointerdown') {\r\n return canvas_on_pointerdown(ev);\r\n } else if (ev.type === 'pointerup') {\r\n return canvas_on_pointerup(ev);\r\n }\r\n return false;\r\n}\r\n\r\nexport function injectTouchEvent(ev: TouchEvent) {\r\n if (ev.type === 'touchstart') {\r\n canvas_on_touchstart(ev);\r\n } else if (ev.type === 'touchmove') {\r\n canvas_on_touchmove(ev);\r\n } else if (ev.type === 'touchend') {\r\n canvas_on_touchend(ev);\r\n } else if (ev.type === 'touchcancel') {\r\n canvas_on_touchcancel(ev);\r\n }\r\n}\r\n\r\n/*\r\nfunction canvas_on_contextlost(e:Event):void {\r\n e.preventDefault();\r\n console.info(\"canvas_on_contextlost\");\r\n is_contextlost=true;\r\n}\r\n\r\nfunction canvas_on_contextrestored(e:Event):void {\r\n console.info(\"canvas_on_contextrestored\");\r\n is_contextlost=false;\r\n}\r\n*/\r\n\r\nexport function Init(device: AbstractDevice, glyphSize: number) {\r\n const io = ImGui.GetIO();\r\n\r\n if (typeof window !== 'undefined') {\r\n io.BackendPlatformName = 'imgui_impl_browser';\r\n ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem('imgui.ini') || '');\r\n } else {\r\n io.BackendPlatformName = 'imgui_impl_console';\r\n }\r\n\r\n if (typeof navigator !== 'undefined') {\r\n io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null;\r\n }\r\n\r\n if (typeof document !== 'undefined') {\r\n document.body.addEventListener('paste', document_on_paste);\r\n }\r\n\r\n io.SetClipboardTextFn = (user_data: any, text: string) => {\r\n clipboard_text = text;\r\n navigator.clipboard.writeText(clipboard_text);\r\n };\r\n io.GetClipboardTextFn = (_user_data: any) => {\r\n readClipboardTextPreferSystem();\r\n return clipboard_text;\r\n };\r\n io.ClipboardUserData = null;\r\n\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('resize', window_on_resize);\r\n window.addEventListener('gamepadconnected', window_on_gamepadconnected);\r\n window.addEventListener('gamepaddisconnected', window_on_gamepaddisconnected);\r\n }\r\n\r\n fontSizeGlyph = glyphSize;\r\n renderer = new Renderer(device);\r\n glyphManager = new GlyphManager(device, 1024, 1024, 1);\r\n dom_input = new Input(device.canvas);\r\n\r\n window_on_resize();\r\n renderer.device.canvas.style.touchAction = 'none'; // Disable browser handling of all panning and zooming gestures.\r\n renderer.device.canvas.addEventListener('blur', canvas_on_blur);\r\n renderer.device.canvas.addEventListener('contextmenu', canvas_on_contextmenu);\r\n\r\n // Setup back-end capabilities flags\r\n io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional)\r\n io.BackendFlags |= ImGui.BackendFlags.RendererHasVtxOffset;\r\n\r\n // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array.\r\n io.KeyMap[ImGui.Key.Tab] = 9;\r\n io.KeyMap[ImGui.Key.LeftArrow] = 37;\r\n io.KeyMap[ImGui.Key.RightArrow] = 39;\r\n io.KeyMap[ImGui.Key.UpArrow] = 38;\r\n io.KeyMap[ImGui.Key.DownArrow] = 40;\r\n io.KeyMap[ImGui.Key.PageUp] = 33;\r\n io.KeyMap[ImGui.Key.PageDown] = 34;\r\n io.KeyMap[ImGui.Key.Home] = 36;\r\n io.KeyMap[ImGui.Key.End] = 35;\r\n io.KeyMap[ImGui.Key.Insert] = 45;\r\n io.KeyMap[ImGui.Key.Delete] = 46;\r\n io.KeyMap[ImGui.Key.Backspace] = 8;\r\n io.KeyMap[ImGui.Key.Space] = 32;\r\n io.KeyMap[ImGui.Key.Enter] = 13;\r\n io.KeyMap[ImGui.Key.Escape] = 27;\r\n io.KeyMap[ImGui.Key.KeyPadEnter] = key_code_to_index['NumpadEnter'];\r\n io.KeyMap[ImGui.Key.A] = 65;\r\n io.KeyMap[ImGui.Key.C] = 67;\r\n io.KeyMap[ImGui.Key.V] = 86;\r\n io.KeyMap[ImGui.Key.X] = 88;\r\n io.KeyMap[ImGui.Key.Y] = 89;\r\n io.KeyMap[ImGui.Key.Z] = 90;\r\n\r\n CreateDeviceObjects();\r\n}\r\n\r\nexport function NewFrame(time: number) {\r\n const io = ImGui.GetIO();\r\n\r\n if (io.WantSaveIniSettings) {\r\n io.WantSaveIniSettings = false;\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem('imgui.ini', ImGui.SaveIniSettingsToMemory());\r\n }\r\n }\r\n\r\n const viewport = renderer!.device.getViewport();\r\n const canvas = renderer!.device.canvas;\r\n const w: number = viewport.width;\r\n const h: number = viewport.height;\r\n const display_w: number = renderer!.device.screenXToDevice(w);\r\n const display_h: number = renderer!.device.screenYToDevice(h);\r\n io.DisplaySize.x = w;\r\n io.DisplaySize.y = h;\r\n io.DisplayFramebufferScale.x = w > 0 ? display_w / w : 0;\r\n io.DisplayFramebufferScale.y = h > 0 ? display_h / h : 0;\r\n\r\n const dt: number = prev_time === 0 ? 0 : time - prev_time;\r\n prev_time = time;\r\n io.DeltaTime = Math.max(0.001, dt / 1000);\r\n\r\n /*\r\n if (io.WantSetMousePos) {\r\n console.log('TODO: MousePos', io.MousePos.x, io.MousePos.y);\r\n }\r\n */\r\n\r\n if (typeof document !== 'undefined') {\r\n if (io.MouseDrawCursor) {\r\n document.body.style.cursor = 'none';\r\n } else {\r\n switch (ImGui.GetMouseCursor()) {\r\n case ImGui.MouseCursor.None:\r\n canvas.style.cursor = 'none';\r\n break;\r\n case ImGui.MouseCursor.Arrow:\r\n canvas.style.cursor = 'default';\r\n break;\r\n case ImGui.MouseCursor.TextInput:\r\n canvas.style.cursor = 'text';\r\n break; // When hovering over InputText, etc.\r\n case ImGui.MouseCursor.ResizeAll:\r\n canvas.style.cursor = 'all-scroll';\r\n break; // Unused\r\n case ImGui.MouseCursor.ResizeNS:\r\n canvas.style.cursor = 'ns-resize';\r\n break; // When hovering over an horizontal border\r\n case ImGui.MouseCursor.ResizeEW:\r\n canvas.style.cursor = 'ew-resize';\r\n break; // When hovering over a vertical border or a column\r\n case ImGui.MouseCursor.ResizeNESW:\r\n canvas.style.cursor = 'nesw-resize';\r\n break; // When hovering over the bottom-left corner of a window\r\n case ImGui.MouseCursor.ResizeNWSE:\r\n canvas.style.cursor = 'nwse-resize';\r\n break; // When hovering over the bottom-right corner of a window\r\n case ImGui.MouseCursor.Hand:\r\n canvas.style.cursor = 'pointer';\r\n break;\r\n case ImGui.MouseCursor.NotAllowed:\r\n canvas.style.cursor = 'not-allowed';\r\n break;\r\n default:\r\n canvas.style.cursor = 'default';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Gamepad navigation mapping [BETA]\r\n for (let i = 0; i < io.NavInputs.length; ++i) {\r\n // TODO: This is currently causing an issue and I have no gamepad to test with.\r\n // The error is: ''set' on proxy: trap returned falsish for property '21'\r\n // I think that the NavInputs are zeroed out by ImGui at the start of each frame anyway\r\n // so I am not sure if the following is even necessary.\r\n //io.NavInputs[i] = 0.0;\r\n }\r\n if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) {\r\n // Update gamepad inputs\r\n const gamepads: (Gamepad | null)[] =\r\n typeof navigator !== 'undefined' && typeof navigator.getGamepads === 'function'\r\n ? navigator.getGamepads()\r\n : [];\r\n for (let i = 0; i < gamepads.length; ++i) {\r\n const gamepad: Gamepad | null = gamepads[i];\r\n if (!gamepad) {\r\n continue;\r\n }\r\n io.BackendFlags |= ImGui.BackendFlags.HasGamepad;\r\n const buttons_count: number = gamepad.buttons.length;\r\n const axes_count: number = gamepad.axes.length;\r\n\r\n const MAP_BUTTON = function MAP_BUTTON(NAV_NO: number, BUTTON_NO: number) {\r\n if (!gamepad) {\r\n return;\r\n }\r\n if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) {\r\n io.NavInputs[NAV_NO] = 1.0;\r\n }\r\n };\r\n const MAP_ANALOG = function MAP_ANALOG(NAV_NO: number, AXIS_NO: number, V0: number, V1: number) {\r\n if (!gamepad) {\r\n return;\r\n }\r\n let v: number = axes_count > AXIS_NO ? gamepad.axes[AXIS_NO] : V0;\r\n v = (v - V0) / (V1 - V0);\r\n if (v > 1.0) {\r\n v = 1.0;\r\n }\r\n if (io.NavInputs[NAV_NO] < v) {\r\n io.NavInputs[NAV_NO] = v;\r\n }\r\n };\r\n // TODO: map input based on vendor and product id\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id\r\n const match: RegExpMatchArray | null = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/);\r\n const match_chrome: RegExpMatchArray | null = gamepad.id.match(\r\n /^.*\\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\\).*$/\r\n );\r\n const vendor: string = (match && match[1]) || (match_chrome && match_chrome[1]) || '0000';\r\n const product: string = (match && match[2]) || (match_chrome && match_chrome[2]) || '0000';\r\n switch (vendor + product) {\r\n case '046dc216': // Logitech Logitech Dual Action (Vendor: 046d Product: c216)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left\r\n MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right\r\n MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up\r\n MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n case '046dc21d': // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left\r\n MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right\r\n MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up\r\n MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT\r\n MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n case '2dc86001': // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001)\r\n case '2dc86101': // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101)\r\n MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left\r\n MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right\r\n MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up\r\n MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n default: // standard gamepad: https://w3c.github.io/gamepad/#remapping\r\n MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A\r\n MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B\r\n MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X\r\n MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y\r\n MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left\r\n MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right\r\n MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up\r\n MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down\r\n MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB\r\n MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB\r\n MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT\r\n MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT\r\n MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9);\r\n MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/*\r\nfunction toRgba(col:number):string\r\n{\r\n const r=(col>>>24);\r\n const g=(col>>16)&0xFF;\r\n const b=(col>>8)&0xFF;\r\n const a=(col&0xFF);\r\n return 'rgba('+r+','+g+','+b+','+a+')';\r\n}\r\n*/\r\n\r\nlet charCodeMap: Record<number, string> = {};\r\n\r\nconst glyphFontMap: Record<number, DeviceFont> = {};\r\n\r\n/** @internal */\r\nexport function addCustomGlyph(charCode: number, font: DeviceFont) {\r\n glyphFontMap[charCode] = font;\r\n}\r\n\r\n/** @internal */\r\nexport function calcTextSize(text: string, out?: ImGui.ImVec2) {\r\n const font = ImGui.GetFont();\r\n const fontName = font.FontSize + 'px ' + font.FontName;\r\n let deviceFont = fonts[fontName];\r\n if (!deviceFont) {\r\n deviceFont = new DeviceFont(fontName, 1);\r\n fonts[fontName] = deviceFont;\r\n }\r\n let x = 0;\r\n let y = 0;\r\n if (text) {\r\n for (const ch of text) {\r\n const glyphSize = glyphManager!.getGlyphSize(ch, deviceFont) ?? [0, 0];\r\n x += glyphSize[0];\r\n y = Math.max(glyphSize[1]);\r\n }\r\n }\r\n out = out ?? new ImGui.ImVec2();\r\n out.x = x;\r\n out.y = y;\r\n return out;\r\n}\r\n\r\n/** @internal */\r\nexport function font_update(io: ImGui.IO) {\r\n io.Fonts.Fonts.forEach((font) => {\r\n const fontName = fontSizeGlyph + 'px ' + font.FontName;\r\n const scale = font.FontSize / fontSizeGlyph;\r\n let deviceFont = glyphFonts[fontName];\r\n if (!deviceFont) {\r\n deviceFont = new DeviceFont(fontName, 1);\r\n glyphFonts[fontName] = deviceFont;\r\n }\r\n let glyph = font.GlyphToCreate;\r\n while (glyph) {\r\n const charCode = charCodeMap?.[glyph.Char] ?? glyph.Char;\r\n let char: string;\r\n let glyphInfo: AtlasInfo;\r\n let f: Nullable<DeviceFont> = null;\r\n if (typeof charCode === 'number') {\r\n f = glyphFontMap[charCode];\r\n char = String.fromCodePoint(charCode);\r\n } else {\r\n char = charCode;\r\n }\r\n if (f) {\r\n glyphInfo = glyphManager!.getGlyphInfo(char, f)!;\r\n } else {\r\n glyphInfo = glyphManager!.getGlyphInfo(char, deviceFont)!;\r\n }\r\n glyph.X0 = 0;\r\n glyph.X1 = Math.ceil(glyphInfo.width * scale);\r\n glyph.Y0 = 0;\r\n glyph.Y1 = Math.ceil(glyphInfo.height * scale);\r\n glyph.AdvanceX = Math.ceil(glyphInfo.width * scale);\r\n glyph.U0 = glyphInfo.uMin;\r\n glyph.U1 = glyphInfo.uMax;\r\n glyph.V0 = glyphInfo.vMin;\r\n glyph.V1 = glyphInfo.vMax;\r\n glyph.TextureID = glyphManager!.getAtlasTexture(glyphInfo.atlasIndex) ?? null;\r\n font.GlyphCreated(glyph);\r\n glyph = font.GlyphToCreate;\r\n }\r\n });\r\n}\r\n\r\nlet current_window_id: ImGui.ImGuiID = 0;\r\nexport const scroll_acc: ImGui.ImVec2 = new ImGui.ImVec2(0, 0);\r\nlet mouse_first_down = false;\r\n\r\nfunction scroll_update(io: ImGui.IO) {\r\n const hoveredWin = ImGui.GetHoveredWindow();\r\n const hoveredId = ImGui.GetHoveredId();\r\n if (hoveredWin && hoveredId == 0) {\r\n if (current_window_id != hoveredWin.ID) {\r\n current_window_id = hoveredWin.ID;\r\n scroll_acc.Set(0, 0);\r\n mouse_first_down = true;\r\n }\r\n\r\n if (hoveredWin.Flags & ImGui.ImGuiWindowFlags.NoMove) {\r\n let first_down = false;\r\n if (io.MouseDown[0]) {\r\n first_down = mouse_first_down;\r\n mouse_first_down = false;\r\n } else {\r\n mouse_first_down = true;\r\n }\r\n\r\n const scroll = new ImGui.ImVec2(hoveredWin.Scroll.x, hoveredWin.Scroll.y);\r\n if (hoveredWin.ScrollbarY) {\r\n if (io.MouseDown[0] && !first_down) {\r\n scroll.y -= io.MouseDelta.y;\r\n scroll_acc.y = io.MouseDelta.y;\r\n } else if (Math.abs(scroll_acc.y) > 1) {\r\n scroll.y -= scroll_acc.y;\r\n scroll_acc.y *= 0.8;\r\n }\r\n if (scroll.y < 0) {\r\n scroll.y = 0;\r\n } else if (scroll.y > hoveredWin.ScrollMax.y) {\r\n scroll.y = hoveredWin.ScrollMax.y;\r\n }\r\n hoveredWin.Scroll = scroll;\r\n }\r\n if (hoveredWin.ScrollbarX) {\r\n if (io.MouseDown[0]) {\r\n scroll.x -= io.MouseDelta.x;\r\n scroll_acc.x = io.MouseDelta.x;\r\n }\r\n if (scroll.x < 0) {\r\n scroll.x = 0;\r\n } else if (scroll.x > hoveredWin.ScrollMax.x) {\r\n scroll.x = hoveredWin.ScrollMax.x;\r\n }\r\n hoveredWin.Scroll = scroll;\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet dom_input: Input;\r\nfunction input_text_update(_io: ImGui.IO) {\r\n const activeId = ImGui.GetActiveId();\r\n const inpId = ImGui.GetInputTextId();\r\n if (!activeId || activeId != inpId) {\r\n dom_input?.blur();\r\n } else {\r\n dom_input.focus();\r\n }\r\n}\r\n\r\nexport function ClearBuffer(color: ImGui.ImVec4) {\r\n renderer!.device.clearFrameBuffer(new Vector4(color.x, color.y, color.z, color.w), 1, 0);\r\n}\r\n\r\nexport function RenderDrawData(draw_data: ImGui.DrawData | null = ImGui.GetDrawData()) {\r\n const io = ImGui.GetIO();\r\n\r\n font_update(io);\r\n scroll_update(io);\r\n input_text_update(io);\r\n\r\n if (draw_data === null) {\r\n throw new Error();\r\n }\r\n\r\n // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)\r\n const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x;\r\n const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y;\r\n if (fb_width === 0 || fb_height === 0) {\r\n return;\r\n }\r\n draw_data.ScaleClipRects(io.DisplayFramebufferScale);\r\n\r\n // Draw\r\n const pos = draw_data.DisplayPos;\r\n const scissorOld = renderer!.device.getScissor();\r\n renderer!.beginRender();\r\n draw_data.IterateDrawLists((draw_list: ImGui.DrawList) => {\r\n const vx = draw_list.VtxBuffer;\r\n const ix = draw_list.IdxBuffer;\r\n const ixU16 = new Uint16Array(ix.buffer, ix.byteOffset, ix.byteLength / Uint16Array.BYTES_PER_ELEMENT);\r\n draw_list.IterateDrawCmds((draw_cmd: ImGui.DrawCmd) => {\r\n if (draw_cmd.UserCallback !== null) {\r\n // User callback (registered via ImDrawList::AddCallback)\r\n renderer!.flush();\r\n draw_cmd.UserCallback(draw_list, draw_cmd);\r\n } else {\r\n const clip_rect = new ImGui.Vec4(\r\n draw_cmd.ClipRect.x - pos.x,\r\n draw_cmd.ClipRect.y - pos.y,\r\n draw_cmd.ClipRect.z - pos.x,\r\n draw_cmd.ClipRect.w - pos.y\r\n );\r\n if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) {\r\n // Apply scissor/clipping rectangle\r\n // renderer.device.setScissor([clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y]);\r\n const scissorX = renderer!.device.deviceXToScreen(clip_rect.x);\r\n const scissorY = renderer!.device.deviceYToScreen(fb_height - clip_rect.w);\r\n const scissorW = renderer!.device.deviceXToScreen(clip_rect.z - clip_rect.x);\r\n const scissorH = renderer!.device.deviceYToScreen(clip_rect.w - clip_rect.y);\r\n renderer!.stream(\r\n vx,\r\n ixU16,\r\n draw_cmd.VtxOffset,\r\n draw_cmd.IdxOffset,\r\n draw_cmd.ElemCount,\r\n draw_cmd.TextureId,\r\n [scissorX, scissorY, scissorW, scissorH]\r\n );\r\n }\r\n }\r\n });\r\n });\r\n renderer!.endRender();\r\n renderer!.device.setScissor(scissorOld);\r\n}\r\n\r\nexport function CreateFontsTexture() {\r\n const io = ImGui.GetIO();\r\n\r\n // Backup GL state\r\n // const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D);\r\n\r\n // Build texture atlas\r\n // const width: number = 256;\r\n // const height: number = 256;\r\n // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff);\r\n\r\n //const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.\r\n const { width, height, pixels } = io.Fonts.GetTexDataAsAlpha8();\r\n if (width && height && pixels) {\r\n const rgba8 = new Uint8Array(width * height * 4);\r\n let i = 0;\r\n pixels.forEach((p) => {\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = 0xff;\r\n rgba8[i++] = p;\r\n });\r\n // Upload texture to graphics system\r\n g_FontTexture = renderer!.device.createTexture2D('rgba8unorm', width, height, {\r\n mipmapping: false\r\n });\r\n g_FontTexture!.update(rgba8, 0, 0, width, height);\r\n //gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n\r\n // Store our identifier\r\n io.Fonts.TexID = g_FontTexture || null;\r\n // console.log(\"font texture id\", g_FontTexture);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getCharCodeMap() {\r\n return charCodeMap ?? {};\r\n}\r\n\r\n/** @internal */\r\nexport function setCharCodeMap(map: Record<number, string>) {\r\n charCodeMap = map;\r\n}\r\n\r\nexport function DestroyFontsTexture() {\r\n const io = ImGui.GetIO();\r\n io.Fonts.TexID?.dispose();\r\n io.Fonts.TexID = null;\r\n}\r\n\r\nexport function CreateDeviceObjects() {\r\n CreateFontsTexture();\r\n}\r\n\r\nexport function DestroyDeviceObjects() {\r\n DestroyFontsTexture();\r\n}\r\n\r\nexport function captureKeyboard(capture: boolean) {\r\n wantKeyboard = !!capture;\r\n}\r\n\r\nexport function mouseButtonToImGui(button: number) {\r\n return mouse_button_map[button] ?? -1;\r\n}\r\n\r\nexport function mouseButtonFromImGui(button: ImGui.MouseButton) {\r\n return mouse_button_map.indexOf(button);\r\n}\r\nexport interface ITextureParam {\r\n internalFormat?: number;\r\n srcFormat?: number;\r\n srcType?: number;\r\n width?: number;\r\n height?: number;\r\n level?: number;\r\n}\r\n\r\nexport class Texture {\r\n public _texture: Nullable<Texture2D> = null;\r\n public _width = 1;\r\n public _height = 1;\r\n\r\n constructor(_param?: ITextureParam) {}\r\n public Destroy() {\r\n if (this._texture) {\r\n this._texture.dispose();\r\n this._texture = null;\r\n }\r\n }\r\n public Update(\r\n src: ImageBitmap | ImageData | HTMLCanvasElement | Uint8Array<ArrayBuffer> | Uint16Array<ArrayBuffer>\r\n ) {\r\n let w: number, h: number;\r\n if (!src) {\r\n return;\r\n } else if (src instanceof HTMLVideoElement) {\r\n const srcVideo = src as HTMLVideoElement;\r\n if (srcVideo) {\r\n w = srcVideo.videoWidth;\r\n h = srcVideo.videoHeight;\r\n } else {\r\n return;\r\n }\r\n } else if (src instanceof Uint8Array || src instanceof Uint16Array) {\r\n w = this._width;\r\n h = this._height;\r\n } else {\r\n w = src.width;\r\n h = src.height;\r\n }\r\n if (!this._texture || this._texture.width !== w || this._texture.height !== h) {\r\n this._texture?.dispose();\r\n this._texture = renderer!.device.createTexture2D('rgba8unorm', w, h, {\r\n mipmapping: false\r\n });\r\n this._width = w;\r\n this._height = h;\r\n }\r\n if (src instanceof Uint8Array || src instanceof Uint16Array) {\r\n this._texture!.update(src, 0, 0, w, h);\r\n } else if (src instanceof ImageData) {\r\n this._texture!.update(src.data, 0, 0, w, h);\r\n } else {\r\n this._texture!.updateFromElement(src, 0, 0, 0, 0, w, h);\r\n }\r\n }\r\n}\r\n\r\nexport class TextureCache {\r\n public constructor() {}\r\n\r\n public Destroy() {\r\n Object.entries(this.cache).forEach(([_key, value]) => {\r\n value.Destroy();\r\n });\r\n this.cache = {};\r\n }\r\n\r\n public async Load(name: string, src: string) {\r\n const image = new Image();\r\n image.crossOrigin = 'anonymous';\r\n image.src = src;\r\n await image.decode();\r\n const bitmap = await createImageBitmap(image, { premultiplyAlpha: 'none' });\r\n const tex = new Texture();\r\n tex.Update(bitmap);\r\n this.cache[name] = tex;\r\n return tex;\r\n }\r\n\r\n public cache: { [key: string]: Texture } = {};\r\n}\r\n"],"names":["clipboard_text","renderer","prev_time","g_FontTexture","glyphManager","wantKeyboard","fontSizeGlyph","fonts","glyphFonts","isPasteShortcut","event","key","toLowerCase","ctrlKey","metaKey","altKey","readClipboardTextPreferSystem","navigator","clipboard","readText","text","Input","_dom_input","_composing","_lastCommittedText","_lastCommittedAt","cvs","document","createElement","type","autocomplete","autocapitalize","spellcheck","tabIndex","style","position","top","left","width","height","opacity","pointerEvents","addEventListener","e","stopPropagation","onKeydown","preventDefault","onKeyup","onKeypress","onCompositionStart","onCompositionUpdate","onCompositionEnd","onInput","onPaste","parent","ownerDocument","body","documentElement","appendChild","blur","canvas_on_keydown","canvas_on_keyup","_e","data","commitText","inputType","isComposing","startsWith","clearText","length","value","now","Date","clipboardData","getData","activeElement","focus","io","ImGui","ch","AddInputCharacter","codePointAt","window_on_resize","document_on_paste","window_on_gamepadconnected","console","info","gamepad","index","id","buttons","axes","window_on_gamepaddisconnected","shouldPreserveMouseStateOnCanvasBlur","next","relatedTarget","HTMLElement","hiddenTextBridge","tagName","getAttribute","canvas_on_blur","_event","KeyCtrl","KeyShift","KeyAlt","KeySuper","i","KeysDown","MouseDown","leftMouseDown","releasePointerLock","key_code_to_index","Tab","Backspace","Space","Insert","Delete","Home","End","PageUp","PageDown","Enter","Escape","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","NumpadEnter","KeyA","KeyC","KeyV","KeyX","KeyY","KeyZ","shiftKey","key_index","code","WantCaptureKeyboard","WantTextInput","canvas_on_keypress","canvas_on_pointermove","isPointerLocked","MousePos","x","movementX","y","movementY","offsetX","offsetY","pointerType","WantCaptureMouse","isDraggingFromMouseDown","isPointerNearScreenEdge","requestPointerLock","mouse_button_map","Left","Middle","Right","any_pointerdown","pointerLockElement","device","canvas","ret","catch","exitPointerLock","DRAG_LOCK_THRESHOLD_PX","EDGE_LOCK_PADDING_PX","leftMouseDownClientX","leftMouseDownClientY","dx","clientX","dy","clientY","window","innerWidth","innerHeight","canvas_on_pointerdown","mouseButtonToImGui","button","canvas_on_contextmenu","canvas_on_pointerup","canvas_on_wheel","scale","deltaMode","DOM_DELTA_PIXEL","DOM_DELTA_LINE","DOM_DELTA_PAGE","MouseWheelH","deltaX","MouseWheel","deltaY","injectKeyEvent","ev","injectWheelEvent","injectPointerEvent","Init","glyphSize","BackendPlatformName","localStorage","getItem","ConfigMacOSXBehaviors","platform","match","SetClipboardTextFn","user_data","writeText","GetClipboardTextFn","_user_data","ClipboardUserData","Renderer","GlyphManager","dom_input","touchAction","BackendFlags","HasMouseCursors","RendererHasVtxOffset","KeyMap","LeftArrow","RightArrow","UpArrow","DownArrow","KeyPadEnter","A","C","V","X","Y","Z","CreateDeviceObjects","NewFrame","time","WantSaveIniSettings","setItem","viewport","getViewport","w","h","display_w","screenXToDevice","display_h","screenYToDevice","DisplaySize","DisplayFramebufferScale","dt","DeltaTime","Math","max","MouseDrawCursor","cursor","None","Arrow","TextInput","ResizeAll","ResizeNS","ResizeEW","ResizeNESW","ResizeNWSE","Hand","NotAllowed","NavInputs","ConfigFlags","NavEnableGamepad","gamepads","getGamepads","HasGamepad","buttons_count","axes_count","MAP_BUTTON","NAV_NO","BUTTON_NO","pressed","MAP_ANALOG","AXIS_NO","V0","V1","v","match_chrome","vendor","product","Activate","Cancel","Menu","DpadLeft","DpadRight","DpadUp","DpadDown","FocusPrev","FocusNext","TweakSlow","TweakFast","LStickLeft","LStickRight","LStickUp","LStickDown","charCodeMap","glyphFontMap","addCustomGlyph","charCode","font","calcTextSize","out","fontName","FontSize","FontName","deviceFont","DeviceFont","getGlyphSize","font_update","Fonts","forEach","glyph","GlyphToCreate","Char","char","glyphInfo","f","String","fromCodePoint","getGlyphInfo","X0","X1","ceil","Y0","Y1","AdvanceX","U0","uMin","U1","uMax","vMin","vMax","TextureID","getAtlasTexture","atlasIndex","GlyphCreated","current_window_id","scroll_acc","mouse_first_down","scroll_update","hoveredWin","hoveredId","ID","Set","Flags","NoMove","first_down","scroll","Scroll","ScrollbarY","MouseDelta","abs","ScrollMax","ScrollbarX","input_text_update","_io","activeId","inpId","RenderDrawData","draw_data","Error","fb_width","fb_height","ScaleClipRects","pos","DisplayPos","scissorOld","getScissor","beginRender","IterateDrawLists","draw_list","vx","VtxBuffer","ix","IdxBuffer","ixU16","Uint16Array","buffer","byteOffset","byteLength","BYTES_PER_ELEMENT","IterateDrawCmds","draw_cmd","UserCallback","flush","clip_rect","ClipRect","z","scissorX","deviceXToScreen","scissorY","deviceYToScreen","scissorW","scissorH","stream","VtxOffset","IdxOffset","ElemCount","TextureId","endRender","setScissor","CreateFontsTexture","pixels","GetTexDataAsAlpha8","rgba8","Uint8Array","p","createTexture2D","mipmapping","update","TexID","getCharCodeMap","setCharCodeMap","map","captureKeyboard","capture"],"mappings":"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"}
@@ -23,9 +23,9 @@ class Renderer extends Disposable {
23
23
  /** @internal */ _flipMatrix;
24
24
  /** @internal */ _clearBeforeRender;
25
25
  /** @internal */ _pendingDrawCommands;
26
- /**
27
- * Creates a renderer instance
28
- * @param device - The render device
26
+ /**
27
+ * Creates a renderer instance
28
+ * @param device - The render device
29
29
  */ constructor(device){
30
30
  super();
31
31
  this._device = device;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sources":["../src/renderer.ts"],"sourcesContent":["import type { ColorRGBA, Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { ASSERT, Disposable, Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport {\n type BindGroup,\n type RenderStateSet,\n type AbstractDevice,\n type Texture2D,\r\n type GPUProgram,\r\n type TextureSampler,\r\n type VertexLayout,\r\n type VertexLayoutOptions\n} from '@zephyr3d/device';\n\ntype PendingDrawCommand = {\n texture: Nullable<Texture2D>;\n scissor: [number, number, number, number];\n vertexByteOffset: number;\n indexOffset: number;\n indexCount: number;\n};\n\nexport class Renderer extends Disposable {\n /** @internal */\n private static readonly VERTEX_BUFFER_SIZE = 65536;\n /** @internal */\n private static readonly INDEX_BUFFER_SIZE = 65536 * 3;\n /** @internal */\n private static readonly VERTEX_STRIDE = 20;\n /** @internal */\r\n private _device: AbstractDevice;\r\n /** @internal */\r\n private _primitiveBuffer: VertexLayout[];\r\n /** @internal */\r\n private _activeBuffer: number;\r\n /** @internal */\r\n private _drawPosition: number;\r\n /** @internal */\r\n private _indexPosition: number;\r\n /** @internal */\r\n private _mvpMatrix: Matrix4x4;\r\n /** @internal */\r\n private _deviceSize: Vector2;\r\n /** @internal */\r\n private readonly _program: GPUProgram;\r\n /** @internal */\r\n private readonly _textureSampler: TextureSampler;\r\n /** @internal */\r\n private readonly _programTexture: GPUProgram;\r\n /** @internal */\r\n private readonly _bindGroup: BindGroup;\r\n /** @internal */\r\n private readonly _bindGroupTexture: BindGroup;\r\n /** @internal */\r\n private readonly _renderStateSet: RenderStateSet;\r\n /** @internal */\r\n private _vertexCache: Uint8Array<ArrayBuffer>;\r\n /** @internal */\r\n private readonly _indexCache: Uint16Array<ArrayBuffer>;\r\n /** @internal */\r\n private readonly _projectionMatrix: Matrix4x4;\r\n /** @internal */\r\n private _flipMatrix: Matrix4x4;\r\n /** @internal */\r\n private _clearBeforeRender: boolean;\n /** @internal */\n private _pendingDrawCommands: PendingDrawCommand[];\n /**\n * Creates a renderer instance\n * @param device - The render device\n */\n constructor(device: AbstractDevice) {\r\n super();\r\n this._device = device;\r\n this._projectionMatrix = new Matrix4x4();\r\n this._flipMatrix = new Matrix4x4();\r\n this._mvpMatrix = new Matrix4x4();\r\n this._deviceSize = new Vector2();\r\n this._program = this.createProgram(false);\r\n this._programTexture = this.createProgram(true);\r\n this._bindGroup = this._device.createBindGroup(this._program.bindGroupLayouts[0]);\r\n this._bindGroupTexture = this._device.createBindGroup(this._programTexture.bindGroupLayouts[0]);\r\n this._textureSampler = this._device.createSampler({\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n });\r\n this._renderStateSet = this.createStateSet();\r\n this._primitiveBuffer = [];\r\n this._activeBuffer = 0;\r\n this._vertexCache = new Uint8Array(Renderer.VERTEX_BUFFER_SIZE * 20);\r\n this._indexCache = new Uint16Array(Renderer.INDEX_BUFFER_SIZE);\r\n for (let i = 0; i < 2; i++) {\r\n const opt: VertexLayoutOptions = {\r\n vertexBuffers: [\r\n {\r\n buffer: this._device.createInterleavedVertexBuffer(\r\n ['position_f32x2', 'tex0_f32x2', 'diffuse_u8normx4'],\r\n this._vertexCache,\r\n { dynamic: true }\r\n )!\r\n }\r\n ],\r\n indexBuffer: this._device.createIndexBuffer(this._indexCache, { dynamic: true })\r\n };\r\n this._primitiveBuffer.push(this._device.createVertexLayout(opt));\r\n }\r\n this._drawPosition = 0;\n this._indexPosition = 0;\n this._clearBeforeRender = false;\n this._pendingDrawCommands = [];\n }\n /** Gets the render device */\r\n get device() {\r\n return this._device;\r\n }\r\n get clearBeforeRender() {\r\n return this._clearBeforeRender;\r\n }\r\n set clearBeforeRender(val) {\r\n this._clearBeforeRender = val;\r\n }\r\n /** @internal */\r\n getCanvas() {\r\n return this._device.canvas;\r\n }\r\n /** @internal */\r\n createTexture(width: number, height: number, color: ColorRGBA, linear: boolean) {\r\n const tex = this._device.createTexture2D(linear ? 'rgba8unorm' : 'rgba8unorm-srgb', width, height, {\r\n mipmapping: false\r\n })!;\r\n if (color) {\r\n this.clearTexture(tex, color);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n clearTexture(tex: Texture2D, color: ColorRGBA) {\r\n const pixels = new Uint8Array(tex.width * tex.height * 4);\r\n const r = Math.round(color.r * 255);\r\n const g = Math.round(color.g * 255);\r\n const b = Math.round(color.b * 255);\r\n const a = Math.round(color.a * 255);\r\n for (let i = 0; i < tex.width * tex.height; i++) {\r\n pixels[i * 4 + 0] = r;\r\n pixels[i * 4 + 1] = g;\r\n pixels[i * 4 + 2] = b;\r\n pixels[i * 4 + 3] = a;\r\n }\r\n tex.update(pixels, 0, 0, tex.width, tex.height);\r\n }\r\n /** @internal */\r\n updateTextureWithImage(texture: Texture2D, bitmap: ImageData, x: number, y: number) {\r\n const originValues = new Uint8Array(bitmap.data.buffer);\r\n ASSERT(texture.format === 'rgba8unorm');\r\n texture.update(originValues, x, y, bitmap.width, bitmap.height);\r\n }\r\n /** @internal */\r\n updateTextureWithCanvas(\r\n texture: Texture2D,\r\n ctx: CanvasRenderingContext2D,\r\n cvsOffsetX: number,\r\n cvsOffsetY: number,\r\n w: number,\r\n h: number,\r\n x: number,\r\n y: number\r\n ) {\r\n texture.updateFromElement(ctx.canvas, x, y, cvsOffsetX, cvsOffsetY, w, h);\r\n }\r\n /** @internal */\r\n getTextureWidth(texture: Texture2D) {\r\n return texture.width;\r\n }\r\n /** @internal */\r\n getTextureHeight(texture: Texture2D) {\r\n return texture.height;\r\n }\r\n /** @internal */\r\n disposeTexture(texture: Texture2D) {\r\n texture?.dispose();\r\n }\r\n /** @internal */\r\n setCursorStyle(style: string) {\r\n this.getCanvas().style.cursor = style;\r\n }\r\n /** @internal */\r\n getCursorStyle() {\r\n return this.getCanvas().style.cursor;\r\n }\r\n /** @internal */\r\n stream(\n vertexData: Uint8Array<ArrayBuffer>,\n indexData: Uint16Array<ArrayBuffer>,\n vertexOffset: number,\r\n indexOffset: number,\r\n indexCount: number,\r\n texture: Nullable<Texture2D>,\r\n scissor: number[]\r\n ) {\n let tex = texture || null;\n if (tex?.disposed) {\n tex = null;\n }\n let minIndex = Number.POSITIVE_INFINITY;\r\n let maxIndex = -1;\n for (let i = 0; i < indexCount; i++) {\n const index = indexData[indexOffset + i];\n if (index < minIndex) {\r\n minIndex = index;\r\n }\r\n if (index > maxIndex) {\r\n maxIndex = index;\r\n }\r\n }\r\n const vertexStart = Number.isFinite(minIndex) ? Math.min(vertexOffset, minIndex) : vertexOffset;\n const vertexEnd = maxIndex >= vertexStart ? maxIndex + 1 : vertexStart;\n const vertexCount = Math.max(0, vertexEnd - vertexStart);\n const sourceVertexByteOffset = vertexStart * Renderer.VERTEX_STRIDE;\n const vertexByteCount = vertexCount * Renderer.VERTEX_STRIDE;\n const alignedIndexCount = (indexCount + 1) & ~1;\n const overflow =\n this._drawPosition + vertexCount > Renderer.VERTEX_BUFFER_SIZE ||\n this._indexPosition + alignedIndexCount > Renderer.INDEX_BUFFER_SIZE;\n if (overflow) {\n this.flush();\n this._activeBuffer = 1 - this._activeBuffer;\n }\n\n const targetVertexByteOffset = this._drawPosition * Renderer.VERTEX_STRIDE;\n if (vertexByteCount > 0) {\n this._vertexCache.set(\n vertexData.subarray(sourceVertexByteOffset, sourceVertexByteOffset + vertexByteCount),\n targetVertexByteOffset\n );\n }\n for (let i = 0; i < indexCount; i++) {\n this._indexCache[this._indexPosition + i] = indexData[indexOffset + i] - vertexStart;\n }\n if (alignedIndexCount > indexCount) {\n this._indexCache[this._indexPosition + indexCount] = 0;\n }\n this._pendingDrawCommands.push({\n texture: tex,\n scissor: [scissor[0], scissor[1], scissor[2], scissor[3]],\n vertexByteOffset: targetVertexByteOffset,\n indexOffset: this._indexPosition,\n indexCount\n });\n\n this._drawPosition += vertexCount;\n this._indexPosition += alignedIndexCount;\n }\n /** @internal */\n flush() {\n if (this._pendingDrawCommands.length === 0) {\n this._drawPosition = 0;\n this._indexPosition = 0;\n return;\n }\n const vertexLayout = this._primitiveBuffer[this._activeBuffer];\n const vertexBuffer = vertexLayout.getVertexBuffer('position')!;\n const indexBuffer = vertexLayout.getIndexBuffer()!;\n const vertexByteCount = this._drawPosition * Renderer.VERTEX_STRIDE;\n if (vertexByteCount > 0) {\n vertexBuffer.bufferSubData(0, this._vertexCache, 0, vertexByteCount);\n }\n if (this._indexPosition > 0) {\n indexBuffer.bufferSubData(0, this._indexCache, 0, this._indexPosition);\n }\n this._device.setRenderStates(this._renderStateSet);\n this._device.setVertexLayout(vertexLayout);\n let lastTexture: Nullable<Texture2D> | undefined = undefined;\n let lastScissor: [number, number, number, number] | null = null;\n for (const drawCommand of this._pendingDrawCommands) {\n if (drawCommand.texture !== lastTexture) {\n if (drawCommand.texture) {\n this._device.setProgram(this._programTexture);\n this._bindGroupTexture.setTexture('tex', drawCommand.texture, this._textureSampler);\n this._device.setBindGroup(0, this._bindGroupTexture);\n } else {\n this._device.setProgram(this._program);\n this._device.setBindGroup(0, this._bindGroup);\n }\n lastTexture = drawCommand.texture;\n }\n if (\n !lastScissor ||\n lastScissor[0] !== drawCommand.scissor[0] ||\n lastScissor[1] !== drawCommand.scissor[1] ||\n lastScissor[2] !== drawCommand.scissor[2] ||\n lastScissor[3] !== drawCommand.scissor[3]\n ) {\n this._device.setScissor(drawCommand.scissor);\n lastScissor = drawCommand.scissor;\n }\n vertexLayout.setDrawOffset(vertexBuffer, drawCommand.vertexByteOffset);\n vertexLayout.draw('triangle-list', drawCommand.indexOffset, drawCommand.indexCount);\n }\n this._pendingDrawCommands.length = 0;\n this._drawPosition = 0;\n this._indexPosition = 0;\n }\n /** @internal */\n beginRender() {\n ASSERT(this._pendingDrawCommands.length === 0);\n const width = this._device.getDrawingBufferWidth();\n const height = this._device.getDrawingBufferHeight();\n //this._device.setViewport();\r\n //this._device.setScissor();\r\n this._projectionMatrix.ortho(0, width, 0, height, -1, 1);\r\n this._flipMatrix = Matrix4x4.translation(new Vector3(0, height, 0)).scaleRight(new Vector3(1, -1, 1));\r\n Matrix4x4.multiply(this._projectionMatrix, this._flipMatrix, this._mvpMatrix);\r\n this._deviceSize.x = this._device.getScaleX();\r\n this._deviceSize.y = this._device.getScaleY();\r\n this._bindGroup.setValue('mvpMatrix', this._mvpMatrix);\r\n this._bindGroup.setValue('deviceSize', this._deviceSize);\r\n this._bindGroupTexture.setValue('mvpMatrix', this._mvpMatrix);\r\n this._bindGroupTexture.setValue('deviceSize', this._deviceSize);\r\n if (this._clearBeforeRender) {\n this._device.clearFrameBuffer(new Vector4(0, 0, 0, 1), 1, 0);\n }\n }\n /** @internal */\n endRender() {\n this.flush();\n }\n /** Disposes this renderer */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._bindGroup?.dispose();\r\n this._bindGroupTexture?.dispose();\r\n this._primitiveBuffer?.forEach((vertexLayout) => vertexLayout.dispose());\r\n this._program?.dispose();\r\n this._programTexture?.dispose();\r\n this._textureSampler?.dispose();\r\n }\r\n /** @internal */\r\n private createStateSet() {\r\n const rs = this._device.createRenderStateSet();\r\n rs.useBlendingState().enable(true).setBlendFunc('one', 'inv-src-alpha');\r\n rs.useDepthState().enableTest(false).enableWrite(false);\r\n rs.useRasterizerState().setCullMode('none');\r\n return rs;\r\n }\r\n /** @internal */\r\n private createProgram(diffuseMap: boolean) {\r\n const program = this._device.buildRenderProgram({\r\n label: 'UI',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$inputs.uv = pb.vec2().attrib('texCoord0');\r\n this.$inputs.diffuse = pb.vec4().attrib('diffuse');\r\n this.$outputs.outDiffuse = pb.vec4();\r\n if (diffuseMap) {\r\n this.$outputs.outUV = pb.vec2();\r\n }\r\n this.mvpMatrix = pb.mat4().uniform(0);\r\n this.deviceSize = pb.vec2().uniform(0);\r\n pb.main(function () {\r\n this.$l.$builtins.position = pb.mul(\r\n this.mvpMatrix,\r\n pb.vec4(pb.mul(this.$inputs.pos, this.deviceSize), 0, 1)\r\n );\r\n this.$outputs.outDiffuse = this.$inputs.diffuse;\r\n if (diffuseMap) {\r\n this.$outputs.outUV = this.$inputs.uv;\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n if (diffuseMap) {\r\n this.tex = pb.tex2D().uniform(0);\r\n }\r\n pb.main(function () {\r\n if (diffuseMap) {\r\n this.$l.color = pb.mul(pb.textureSample(this.tex, this.$inputs.outUV), this.$inputs.outDiffuse);\r\n } else {\r\n this.$l.color = this.$inputs.outDiffuse;\r\n }\r\n this.$outputs.outColor = pb.vec4(pb.mul(this.color.rgb, this.color.a), this.color.a);\r\n });\r\n }\r\n })!;\r\n program.name = diffuseMap ? '@UI_withDiffuse' : '@UI_noDiffuse';\r\n return program;\r\n }\r\n}\r\n"],"names":["Renderer","Disposable","VERTEX_BUFFER_SIZE","INDEX_BUFFER_SIZE","VERTEX_STRIDE","device","_device","_projectionMatrix","Matrix4x4","_flipMatrix","_mvpMatrix","_deviceSize","Vector2","_program","createProgram","_programTexture","_bindGroup","createBindGroup","bindGroupLayouts","_bindGroupTexture","_textureSampler","createSampler","magFilter","minFilter","mipFilter","_renderStateSet","createStateSet","_primitiveBuffer","_activeBuffer","_vertexCache","Uint8Array","_indexCache","Uint16Array","i","opt","vertexBuffers","buffer","createInterleavedVertexBuffer","dynamic","indexBuffer","createIndexBuffer","push","createVertexLayout","_drawPosition","_indexPosition","_clearBeforeRender","_pendingDrawCommands","clearBeforeRender","val","getCanvas","canvas","createTexture","width","height","color","linear","tex","createTexture2D","mipmapping","clearTexture","pixels","r","Math","round","g","b","a","update","updateTextureWithImage","texture","bitmap","x","y","originValues","data","ASSERT","format","updateTextureWithCanvas","ctx","cvsOffsetX","cvsOffsetY","w","h","updateFromElement","getTextureWidth","getTextureHeight","disposeTexture","dispose","setCursorStyle","style","cursor","getCursorStyle","stream","vertexData","indexData","vertexOffset","indexOffset","indexCount","scissor","disposed","minIndex","Number","POSITIVE_INFINITY","maxIndex","index","vertexStart","isFinite","min","vertexEnd","vertexCount","max","sourceVertexByteOffset","vertexByteCount","alignedIndexCount","overflow","flush","targetVertexByteOffset","set","subarray","vertexByteOffset","length","vertexLayout","vertexBuffer","getVertexBuffer","getIndexBuffer","bufferSubData","setRenderStates","setVertexLayout","lastTexture","undefined","lastScissor","drawCommand","setProgram","setTexture","setBindGroup","setScissor","setDrawOffset","draw","beginRender","getDrawingBufferWidth","getDrawingBufferHeight","ortho","translation","Vector3","scaleRight","multiply","getScaleX","getScaleY","setValue","clearFrameBuffer","Vector4","endRender","onDispose","forEach","rs","createRenderStateSet","useBlendingState","enable","setBlendFunc","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","diffuseMap","program","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","uv","diffuse","vec4","$outputs","outDiffuse","outUV","mvpMatrix","mat4","uniform","deviceSize","main","$l","$builtins","position","mul","fragment","outColor","tex2D","textureSample","rgb","name"],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sources":["../src/renderer.ts"],"sourcesContent":["import type { ColorRGBA, Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { ASSERT, Disposable, Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport {\r\n type BindGroup,\r\n type RenderStateSet,\r\n type AbstractDevice,\r\n type Texture2D,\r\n type GPUProgram,\r\n type TextureSampler,\r\n type VertexLayout,\r\n type VertexLayoutOptions\r\n} from '@zephyr3d/device';\r\n\r\ntype PendingDrawCommand = {\r\n texture: Nullable<Texture2D>;\r\n scissor: [number, number, number, number];\r\n vertexByteOffset: number;\r\n indexOffset: number;\r\n indexCount: number;\r\n};\r\n\r\nexport class Renderer extends Disposable {\r\n /** @internal */\r\n private static readonly VERTEX_BUFFER_SIZE = 65536;\r\n /** @internal */\r\n private static readonly INDEX_BUFFER_SIZE = 65536 * 3;\r\n /** @internal */\r\n private static readonly VERTEX_STRIDE = 20;\r\n /** @internal */\r\n private _device: AbstractDevice;\r\n /** @internal */\r\n private _primitiveBuffer: VertexLayout[];\r\n /** @internal */\r\n private _activeBuffer: number;\r\n /** @internal */\r\n private _drawPosition: number;\r\n /** @internal */\r\n private _indexPosition: number;\r\n /** @internal */\r\n private _mvpMatrix: Matrix4x4;\r\n /** @internal */\r\n private _deviceSize: Vector2;\r\n /** @internal */\r\n private readonly _program: GPUProgram;\r\n /** @internal */\r\n private readonly _textureSampler: TextureSampler;\r\n /** @internal */\r\n private readonly _programTexture: GPUProgram;\r\n /** @internal */\r\n private readonly _bindGroup: BindGroup;\r\n /** @internal */\r\n private readonly _bindGroupTexture: BindGroup;\r\n /** @internal */\r\n private readonly _renderStateSet: RenderStateSet;\r\n /** @internal */\r\n private _vertexCache: Uint8Array<ArrayBuffer>;\r\n /** @internal */\r\n private readonly _indexCache: Uint16Array<ArrayBuffer>;\r\n /** @internal */\r\n private readonly _projectionMatrix: Matrix4x4;\r\n /** @internal */\r\n private _flipMatrix: Matrix4x4;\r\n /** @internal */\r\n private _clearBeforeRender: boolean;\r\n /** @internal */\r\n private _pendingDrawCommands: PendingDrawCommand[];\r\n /**\r\n * Creates a renderer instance\r\n * @param device - The render device\r\n */\r\n constructor(device: AbstractDevice) {\r\n super();\r\n this._device = device;\r\n this._projectionMatrix = new Matrix4x4();\r\n this._flipMatrix = new Matrix4x4();\r\n this._mvpMatrix = new Matrix4x4();\r\n this._deviceSize = new Vector2();\r\n this._program = this.createProgram(false);\r\n this._programTexture = this.createProgram(true);\r\n this._bindGroup = this._device.createBindGroup(this._program.bindGroupLayouts[0]);\r\n this._bindGroupTexture = this._device.createBindGroup(this._programTexture.bindGroupLayouts[0]);\r\n this._textureSampler = this._device.createSampler({\r\n magFilter: 'linear',\r\n minFilter: 'linear',\r\n mipFilter: 'none'\r\n });\r\n this._renderStateSet = this.createStateSet();\r\n this._primitiveBuffer = [];\r\n this._activeBuffer = 0;\r\n this._vertexCache = new Uint8Array(Renderer.VERTEX_BUFFER_SIZE * 20);\r\n this._indexCache = new Uint16Array(Renderer.INDEX_BUFFER_SIZE);\r\n for (let i = 0; i < 2; i++) {\r\n const opt: VertexLayoutOptions = {\r\n vertexBuffers: [\r\n {\r\n buffer: this._device.createInterleavedVertexBuffer(\r\n ['position_f32x2', 'tex0_f32x2', 'diffuse_u8normx4'],\r\n this._vertexCache,\r\n { dynamic: true }\r\n )!\r\n }\r\n ],\r\n indexBuffer: this._device.createIndexBuffer(this._indexCache, { dynamic: true })\r\n };\r\n this._primitiveBuffer.push(this._device.createVertexLayout(opt));\r\n }\r\n this._drawPosition = 0;\r\n this._indexPosition = 0;\r\n this._clearBeforeRender = false;\r\n this._pendingDrawCommands = [];\r\n }\r\n /** Gets the render device */\r\n get device() {\r\n return this._device;\r\n }\r\n get clearBeforeRender() {\r\n return this._clearBeforeRender;\r\n }\r\n set clearBeforeRender(val) {\r\n this._clearBeforeRender = val;\r\n }\r\n /** @internal */\r\n getCanvas() {\r\n return this._device.canvas;\r\n }\r\n /** @internal */\r\n createTexture(width: number, height: number, color: ColorRGBA, linear: boolean) {\r\n const tex = this._device.createTexture2D(linear ? 'rgba8unorm' : 'rgba8unorm-srgb', width, height, {\r\n mipmapping: false\r\n })!;\r\n if (color) {\r\n this.clearTexture(tex, color);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n clearTexture(tex: Texture2D, color: ColorRGBA) {\r\n const pixels = new Uint8Array(tex.width * tex.height * 4);\r\n const r = Math.round(color.r * 255);\r\n const g = Math.round(color.g * 255);\r\n const b = Math.round(color.b * 255);\r\n const a = Math.round(color.a * 255);\r\n for (let i = 0; i < tex.width * tex.height; i++) {\r\n pixels[i * 4 + 0] = r;\r\n pixels[i * 4 + 1] = g;\r\n pixels[i * 4 + 2] = b;\r\n pixels[i * 4 + 3] = a;\r\n }\r\n tex.update(pixels, 0, 0, tex.width, tex.height);\r\n }\r\n /** @internal */\r\n updateTextureWithImage(texture: Texture2D, bitmap: ImageData, x: number, y: number) {\r\n const originValues = new Uint8Array(bitmap.data.buffer);\r\n ASSERT(texture.format === 'rgba8unorm');\r\n texture.update(originValues, x, y, bitmap.width, bitmap.height);\r\n }\r\n /** @internal */\r\n updateTextureWithCanvas(\r\n texture: Texture2D,\r\n ctx: CanvasRenderingContext2D,\r\n cvsOffsetX: number,\r\n cvsOffsetY: number,\r\n w: number,\r\n h: number,\r\n x: number,\r\n y: number\r\n ) {\r\n texture.updateFromElement(ctx.canvas, x, y, cvsOffsetX, cvsOffsetY, w, h);\r\n }\r\n /** @internal */\r\n getTextureWidth(texture: Texture2D) {\r\n return texture.width;\r\n }\r\n /** @internal */\r\n getTextureHeight(texture: Texture2D) {\r\n return texture.height;\r\n }\r\n /** @internal */\r\n disposeTexture(texture: Texture2D) {\r\n texture?.dispose();\r\n }\r\n /** @internal */\r\n setCursorStyle(style: string) {\r\n this.getCanvas().style.cursor = style;\r\n }\r\n /** @internal */\r\n getCursorStyle() {\r\n return this.getCanvas().style.cursor;\r\n }\r\n /** @internal */\r\n stream(\r\n vertexData: Uint8Array<ArrayBuffer>,\r\n indexData: Uint16Array<ArrayBuffer>,\r\n vertexOffset: number,\r\n indexOffset: number,\r\n indexCount: number,\r\n texture: Nullable<Texture2D>,\r\n scissor: number[]\r\n ) {\r\n let tex = texture || null;\r\n if (tex?.disposed) {\r\n tex = null;\r\n }\r\n let minIndex = Number.POSITIVE_INFINITY;\r\n let maxIndex = -1;\r\n for (let i = 0; i < indexCount; i++) {\r\n const index = indexData[indexOffset + i];\r\n if (index < minIndex) {\r\n minIndex = index;\r\n }\r\n if (index > maxIndex) {\r\n maxIndex = index;\r\n }\r\n }\r\n const vertexStart = Number.isFinite(minIndex) ? Math.min(vertexOffset, minIndex) : vertexOffset;\r\n const vertexEnd = maxIndex >= vertexStart ? maxIndex + 1 : vertexStart;\r\n const vertexCount = Math.max(0, vertexEnd - vertexStart);\r\n const sourceVertexByteOffset = vertexStart * Renderer.VERTEX_STRIDE;\r\n const vertexByteCount = vertexCount * Renderer.VERTEX_STRIDE;\r\n const alignedIndexCount = (indexCount + 1) & ~1;\r\n const overflow =\r\n this._drawPosition + vertexCount > Renderer.VERTEX_BUFFER_SIZE ||\r\n this._indexPosition + alignedIndexCount > Renderer.INDEX_BUFFER_SIZE;\r\n if (overflow) {\r\n this.flush();\r\n this._activeBuffer = 1 - this._activeBuffer;\r\n }\r\n\r\n const targetVertexByteOffset = this._drawPosition * Renderer.VERTEX_STRIDE;\r\n if (vertexByteCount > 0) {\r\n this._vertexCache.set(\r\n vertexData.subarray(sourceVertexByteOffset, sourceVertexByteOffset + vertexByteCount),\r\n targetVertexByteOffset\r\n );\r\n }\r\n for (let i = 0; i < indexCount; i++) {\r\n this._indexCache[this._indexPosition + i] = indexData[indexOffset + i] - vertexStart;\r\n }\r\n if (alignedIndexCount > indexCount) {\r\n this._indexCache[this._indexPosition + indexCount] = 0;\r\n }\r\n this._pendingDrawCommands.push({\r\n texture: tex,\r\n scissor: [scissor[0], scissor[1], scissor[2], scissor[3]],\r\n vertexByteOffset: targetVertexByteOffset,\r\n indexOffset: this._indexPosition,\r\n indexCount\r\n });\r\n\r\n this._drawPosition += vertexCount;\r\n this._indexPosition += alignedIndexCount;\r\n }\r\n /** @internal */\r\n flush() {\r\n if (this._pendingDrawCommands.length === 0) {\r\n this._drawPosition = 0;\r\n this._indexPosition = 0;\r\n return;\r\n }\r\n const vertexLayout = this._primitiveBuffer[this._activeBuffer];\r\n const vertexBuffer = vertexLayout.getVertexBuffer('position')!;\r\n const indexBuffer = vertexLayout.getIndexBuffer()!;\r\n const vertexByteCount = this._drawPosition * Renderer.VERTEX_STRIDE;\r\n if (vertexByteCount > 0) {\r\n vertexBuffer.bufferSubData(0, this._vertexCache, 0, vertexByteCount);\r\n }\r\n if (this._indexPosition > 0) {\r\n indexBuffer.bufferSubData(0, this._indexCache, 0, this._indexPosition);\r\n }\r\n this._device.setRenderStates(this._renderStateSet);\r\n this._device.setVertexLayout(vertexLayout);\r\n let lastTexture: Nullable<Texture2D> | undefined = undefined;\r\n let lastScissor: [number, number, number, number] | null = null;\r\n for (const drawCommand of this._pendingDrawCommands) {\r\n if (drawCommand.texture !== lastTexture) {\r\n if (drawCommand.texture) {\r\n this._device.setProgram(this._programTexture);\r\n this._bindGroupTexture.setTexture('tex', drawCommand.texture, this._textureSampler);\r\n this._device.setBindGroup(0, this._bindGroupTexture);\r\n } else {\r\n this._device.setProgram(this._program);\r\n this._device.setBindGroup(0, this._bindGroup);\r\n }\r\n lastTexture = drawCommand.texture;\r\n }\r\n if (\r\n !lastScissor ||\r\n lastScissor[0] !== drawCommand.scissor[0] ||\r\n lastScissor[1] !== drawCommand.scissor[1] ||\r\n lastScissor[2] !== drawCommand.scissor[2] ||\r\n lastScissor[3] !== drawCommand.scissor[3]\r\n ) {\r\n this._device.setScissor(drawCommand.scissor);\r\n lastScissor = drawCommand.scissor;\r\n }\r\n vertexLayout.setDrawOffset(vertexBuffer, drawCommand.vertexByteOffset);\r\n vertexLayout.draw('triangle-list', drawCommand.indexOffset, drawCommand.indexCount);\r\n }\r\n this._pendingDrawCommands.length = 0;\r\n this._drawPosition = 0;\r\n this._indexPosition = 0;\r\n }\r\n /** @internal */\r\n beginRender() {\r\n ASSERT(this._pendingDrawCommands.length === 0);\r\n const width = this._device.getDrawingBufferWidth();\r\n const height = this._device.getDrawingBufferHeight();\r\n //this._device.setViewport();\r\n //this._device.setScissor();\r\n this._projectionMatrix.ortho(0, width, 0, height, -1, 1);\r\n this._flipMatrix = Matrix4x4.translation(new Vector3(0, height, 0)).scaleRight(new Vector3(1, -1, 1));\r\n Matrix4x4.multiply(this._projectionMatrix, this._flipMatrix, this._mvpMatrix);\r\n this._deviceSize.x = this._device.getScaleX();\r\n this._deviceSize.y = this._device.getScaleY();\r\n this._bindGroup.setValue('mvpMatrix', this._mvpMatrix);\r\n this._bindGroup.setValue('deviceSize', this._deviceSize);\r\n this._bindGroupTexture.setValue('mvpMatrix', this._mvpMatrix);\r\n this._bindGroupTexture.setValue('deviceSize', this._deviceSize);\r\n if (this._clearBeforeRender) {\r\n this._device.clearFrameBuffer(new Vector4(0, 0, 0, 1), 1, 0);\r\n }\r\n }\r\n /** @internal */\r\n endRender() {\r\n this.flush();\r\n }\r\n /** Disposes this renderer */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._bindGroup?.dispose();\r\n this._bindGroupTexture?.dispose();\r\n this._primitiveBuffer?.forEach((vertexLayout) => vertexLayout.dispose());\r\n this._program?.dispose();\r\n this._programTexture?.dispose();\r\n this._textureSampler?.dispose();\r\n }\r\n /** @internal */\r\n private createStateSet() {\r\n const rs = this._device.createRenderStateSet();\r\n rs.useBlendingState().enable(true).setBlendFunc('one', 'inv-src-alpha');\r\n rs.useDepthState().enableTest(false).enableWrite(false);\r\n rs.useRasterizerState().setCullMode('none');\r\n return rs;\r\n }\r\n /** @internal */\r\n private createProgram(diffuseMap: boolean) {\r\n const program = this._device.buildRenderProgram({\r\n label: 'UI',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$inputs.uv = pb.vec2().attrib('texCoord0');\r\n this.$inputs.diffuse = pb.vec4().attrib('diffuse');\r\n this.$outputs.outDiffuse = pb.vec4();\r\n if (diffuseMap) {\r\n this.$outputs.outUV = pb.vec2();\r\n }\r\n this.mvpMatrix = pb.mat4().uniform(0);\r\n this.deviceSize = pb.vec2().uniform(0);\r\n pb.main(function () {\r\n this.$l.$builtins.position = pb.mul(\r\n this.mvpMatrix,\r\n pb.vec4(pb.mul(this.$inputs.pos, this.deviceSize), 0, 1)\r\n );\r\n this.$outputs.outDiffuse = this.$inputs.diffuse;\r\n if (diffuseMap) {\r\n this.$outputs.outUV = this.$inputs.uv;\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n if (diffuseMap) {\r\n this.tex = pb.tex2D().uniform(0);\r\n }\r\n pb.main(function () {\r\n if (diffuseMap) {\r\n this.$l.color = pb.mul(pb.textureSample(this.tex, this.$inputs.outUV), this.$inputs.outDiffuse);\r\n } else {\r\n this.$l.color = this.$inputs.outDiffuse;\r\n }\r\n this.$outputs.outColor = pb.vec4(pb.mul(this.color.rgb, this.color.a), this.color.a);\r\n });\r\n }\r\n })!;\r\n program.name = diffuseMap ? '@UI_withDiffuse' : '@UI_noDiffuse';\r\n return program;\r\n }\r\n}\r\n"],"names":["Renderer","Disposable","VERTEX_BUFFER_SIZE","INDEX_BUFFER_SIZE","VERTEX_STRIDE","device","_device","_projectionMatrix","Matrix4x4","_flipMatrix","_mvpMatrix","_deviceSize","Vector2","_program","createProgram","_programTexture","_bindGroup","createBindGroup","bindGroupLayouts","_bindGroupTexture","_textureSampler","createSampler","magFilter","minFilter","mipFilter","_renderStateSet","createStateSet","_primitiveBuffer","_activeBuffer","_vertexCache","Uint8Array","_indexCache","Uint16Array","i","opt","vertexBuffers","buffer","createInterleavedVertexBuffer","dynamic","indexBuffer","createIndexBuffer","push","createVertexLayout","_drawPosition","_indexPosition","_clearBeforeRender","_pendingDrawCommands","clearBeforeRender","val","getCanvas","canvas","createTexture","width","height","color","linear","tex","createTexture2D","mipmapping","clearTexture","pixels","r","Math","round","g","b","a","update","updateTextureWithImage","texture","bitmap","x","y","originValues","data","ASSERT","format","updateTextureWithCanvas","ctx","cvsOffsetX","cvsOffsetY","w","h","updateFromElement","getTextureWidth","getTextureHeight","disposeTexture","dispose","setCursorStyle","style","cursor","getCursorStyle","stream","vertexData","indexData","vertexOffset","indexOffset","indexCount","scissor","disposed","minIndex","Number","POSITIVE_INFINITY","maxIndex","index","vertexStart","isFinite","min","vertexEnd","vertexCount","max","sourceVertexByteOffset","vertexByteCount","alignedIndexCount","overflow","flush","targetVertexByteOffset","set","subarray","vertexByteOffset","length","vertexLayout","vertexBuffer","getVertexBuffer","getIndexBuffer","bufferSubData","setRenderStates","setVertexLayout","lastTexture","undefined","lastScissor","drawCommand","setProgram","setTexture","setBindGroup","setScissor","setDrawOffset","draw","beginRender","getDrawingBufferWidth","getDrawingBufferHeight","ortho","translation","Vector3","scaleRight","multiply","getScaleX","getScaleY","setValue","clearFrameBuffer","Vector4","endRender","onDispose","forEach","rs","createRenderStateSet","useBlendingState","enable","setBlendFunc","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","diffuseMap","program","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","uv","diffuse","vec4","$outputs","outDiffuse","outUV","mvpMatrix","mat4","uniform","deviceSize","main","$l","$builtins","position","mul","fragment","outColor","tex2D","textureSample","rgb","name"],"mappings":"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"}