@codexo/exojs 0.14.0 → 0.15.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.
- package/CHANGELOG.md +183 -0
- package/README.md +2 -4
- package/dist/esm/animation/Tween.d.ts.map +1 -1
- package/dist/esm/animation/Tween.js +0 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +44 -5
- package/dist/esm/animation/TweenManager.d.ts.map +1 -1
- package/dist/esm/animation/TweenManager.js +57 -5
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/TweenSequencer.d.ts +139 -0
- package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
- package/dist/esm/animation/TweenSequencer.js +305 -0
- package/dist/esm/animation/TweenSequencer.js.map +1 -0
- package/dist/esm/animation/index.d.ts +1 -0
- package/dist/esm/animation/index.d.ts.map +1 -1
- package/dist/esm/audio/Playable.d.ts +6 -1
- package/dist/esm/audio/Playable.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.d.ts +34 -20
- package/dist/esm/audio/WorkletEffect.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.js +92 -25
- package/dist/esm/audio/WorkletEffect.js.map +1 -1
- package/dist/esm/core/Application.d.ts +43 -5
- package/dist/esm/core/Application.d.ts.map +1 -1
- package/dist/esm/core/Application.js +83 -9
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/core/Codec.d.ts +41 -0
- package/dist/esm/core/Codec.d.ts.map +1 -0
- package/dist/esm/core/Codec.js +79 -0
- package/dist/esm/core/Codec.js.map +1 -0
- package/dist/esm/core/FixedTimestep.d.ts +28 -0
- package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
- package/dist/esm/core/FixedTimestep.js +62 -0
- package/dist/esm/core/FixedTimestep.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +14 -0
- package/dist/esm/core/Scene.d.ts.map +1 -1
- package/dist/esm/core/Scene.js +18 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +7 -0
- package/dist/esm/core/SceneManager.d.ts.map +1 -1
- package/dist/esm/core/SceneManager.js +20 -4
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +46 -7
- package/dist/esm/core/SceneNode.d.ts.map +1 -1
- package/dist/esm/core/SceneNode.js +73 -12
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Stage.d.ts +7 -0
- package/dist/esm/core/Stage.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.d.ts +5 -0
- package/dist/esm/core/SystemRegistry.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.js +10 -0
- package/dist/esm/core/SystemRegistry.js.map +1 -1
- package/dist/esm/core/index.d.ts +4 -0
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/logging.d.ts +34 -0
- package/dist/esm/core/logging.d.ts.map +1 -0
- package/dist/esm/core/logging.js +59 -0
- package/dist/esm/core/logging.js.map +1 -0
- package/dist/esm/core/serialization/commonFields.d.ts.map +1 -1
- package/dist/esm/core/serialization/commonFields.js +6 -0
- package/dist/esm/core/serialization/commonFields.js.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.js +14 -5
- package/dist/esm/core/serialization/renderingSerializers.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js +2 -1
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.js +4 -4
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +1 -1
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +2 -2
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/index.js +7 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +10 -0
- package/dist/esm/input/Gamepad.d.ts.map +1 -1
- package/dist/esm/input/Gamepad.js +12 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts.map +1 -1
- package/dist/esm/input/InputManager.js +5 -0
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.js +4 -4
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts +4 -3
- package/dist/esm/math/AbstractVector.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.js +5 -4
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +2 -0
- package/dist/esm/math/ObservableVector.d.ts.map +1 -1
- package/dist/esm/math/ObservableVector.js +9 -0
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts.map +1 -1
- package/dist/esm/math/Polygon.js +4 -1
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts.map +1 -1
- package/dist/esm/math/collision-detection.js +14 -14
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +1 -1
- package/dist/esm/math/collision-primitives.d.ts.map +1 -1
- package/dist/esm/math/collision-primitives.js +4 -1
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
- package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.js +16 -11
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/DrawContext.d.ts +48 -0
- package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.d.ts +42 -0
- package/dist/esm/rendering/PassContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.js +48 -0
- package/dist/esm/rendering/PassContext.js.map +1 -0
- package/dist/esm/rendering/RenderBackend.d.ts +14 -0
- package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.js +2 -2
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +47 -16
- package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.js +134 -36
- package/dist/esm/rendering/RenderingContext.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
- package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/TransformBuffer.js +58 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +38 -0
- package/dist/esm/rendering/View.d.ts.map +1 -1
- package/dist/esm/rendering/View.js +37 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +9 -2
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.js +17 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +7 -2
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +5 -2
- package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +23 -5
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
- package/dist/esm/rendering/plan/RenderScope.d.ts +7 -0
- package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +17 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.js +50 -15
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/public.d.ts +5 -5
- package/dist/esm/rendering/public.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +57 -19
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.js +138 -31
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.js +8 -0
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
- package/dist/esm/rendering/text/BitmapText.js +2 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
- package/dist/esm/rendering/text/HTMLText.js +2 -2
- package/dist/esm/rendering/text/HTMLText.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts.map +1 -1
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
- package/dist/esm/rendering/text/TextLayout.js +2 -3
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +37 -13
- package/dist/esm/rendering/types.d.ts.map +1 -1
- package/dist/esm/rendering/types.js +37 -13
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +34 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +108 -60
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +50 -11
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +27 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +157 -60
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -29
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +4 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +3 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +4 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +3 -2
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +29 -5
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +13 -0
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +67 -7
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/coreAssetBindings.d.ts +11 -0
- package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
- package/dist/esm/resources/coreAssetBindings.js +10 -2
- package/dist/esm/resources/coreAssetBindings.js.map +1 -1
- package/dist/esm/ui/ScrollContainer.d.ts +63 -0
- package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
- package/dist/esm/ui/ScrollContainer.js +99 -0
- package/dist/esm/ui/ScrollContainer.js.map +1 -0
- package/dist/esm/ui/Tooltip.d.ts +67 -0
- package/dist/esm/ui/Tooltip.d.ts.map +1 -0
- package/dist/esm/ui/Tooltip.js +133 -0
- package/dist/esm/ui/Tooltip.js.map +1 -0
- package/dist/esm/ui/index.d.ts +4 -0
- package/dist/esm/ui/index.d.ts.map +1 -1
- package/dist/exo.debug.esm.js +1 -1
- package/dist/exo.debug.esm.js.map +1 -1
- package/dist/exo.esm.js +1 -1
- package/dist/exo.esm.js.map +1 -1
- package/dist/exo.iife.js +45273 -0
- package/dist/exo.iife.js.map +1 -0
- package/dist/exo.iife.min.js +2 -0
- package/dist/exo.iife.min.js.map +1 -0
- package/package.json +15 -3
- package/dist/esm/rendering/Camera.d.ts +0 -34
- package/dist/esm/rendering/Camera.d.ts.map +0 -1
- package/dist/esm/rendering/Camera.js +0 -38
- package/dist/esm/rendering/Camera.js.map +0 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Stage } from '#core/Stage';
|
|
2
|
+
import { Container } from '#rendering/Container';
|
|
3
|
+
import { Widget } from './Widget';
|
|
4
|
+
/** Direction(s) in which a {@link ScrollContainer} can scroll. */
|
|
5
|
+
export type ScrollDirection = 'vertical' | 'horizontal' | 'both';
|
|
6
|
+
/** Options for {@link ScrollContainer}. */
|
|
7
|
+
export interface ScrollContainerOptions {
|
|
8
|
+
/** Visible width in pixels. */
|
|
9
|
+
width: number;
|
|
10
|
+
/** Visible height in pixels. */
|
|
11
|
+
height: number;
|
|
12
|
+
/** Scroll axis. Default `'vertical'`. */
|
|
13
|
+
direction?: ScrollDirection;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Clipped container that scrolls its content via the mouse wheel.
|
|
17
|
+
*
|
|
18
|
+
* Add child nodes to {@link ScrollContainer.content} rather than to the
|
|
19
|
+
* `ScrollContainer` itself. The content container is offset as the user scrolls,
|
|
20
|
+
* while the outer widget is clipped to its declared `width` × `height`.
|
|
21
|
+
*
|
|
22
|
+
* Mouse-wheel events from the global {@link InputManager} are consumed only
|
|
23
|
+
* when the pointer is within the widget's bounds. The container subscribes to
|
|
24
|
+
* the app's `onMouseWheel` signal when it enters the scene tree, and
|
|
25
|
+
* unsubscribes on detach.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const scroll = new ScrollContainer({ width: 300, height: 400 });
|
|
30
|
+
* for (let i = 0; i < 20; i++) {
|
|
31
|
+
* scroll.content.addChild(new Label(`Item ${i}`).setPosition(0, i * 30));
|
|
32
|
+
* }
|
|
33
|
+
* scene.ui.addChild(scroll);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class ScrollContainer extends Widget {
|
|
37
|
+
/** Add children here — not to the `ScrollContainer` itself. */
|
|
38
|
+
readonly content: Container;
|
|
39
|
+
private readonly _direction;
|
|
40
|
+
private _scrollX;
|
|
41
|
+
private _scrollY;
|
|
42
|
+
private readonly _onWheel;
|
|
43
|
+
constructor(options: ScrollContainerOptions);
|
|
44
|
+
/** Current horizontal scroll position in pixels. */
|
|
45
|
+
get scrollX(): number;
|
|
46
|
+
/** Current vertical scroll position in pixels. */
|
|
47
|
+
get scrollY(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Scroll by `(dx, dy)` pixels, clamped to the scrollable content range.
|
|
50
|
+
* Positive values scroll right / down; negative values scroll left / up.
|
|
51
|
+
*/
|
|
52
|
+
scrollBy(dx: number, dy: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Scroll to an absolute `(x, y)` position in pixels, clamped to the
|
|
55
|
+
* content range so the content never scrolls past its edges.
|
|
56
|
+
*/
|
|
57
|
+
scrollTo(x: number, y: number): void;
|
|
58
|
+
protected _relayout(): void;
|
|
59
|
+
/** @internal — subscribe to the app's wheel signal when entering the scene tree. */
|
|
60
|
+
_setStage(stage: Stage | null): void;
|
|
61
|
+
destroy(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ScrollContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollContainer.d.ts","sourceRoot":"","sources":["../../../src/ui/ScrollContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEjE,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAgB,SAAQ,MAAM;IACzC,+DAA+D;IAC/D,SAAgB,OAAO,EAAE,SAAS,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAK;IAErB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAcvB;gBAEiB,OAAO,EAAE,sBAAsB;IAYlD,oDAAoD;IACpD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,kDAAkD;IAClD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;;OAGG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7C;;;OAGG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;cAYxB,SAAS,IAAI,IAAI;IAKpC,oFAAoF;IACpE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAYpC,OAAO,IAAI,IAAI;CAIhC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Container } from '../rendering/Container.js';
|
|
2
|
+
import { Widget } from './Widget.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Clipped container that scrolls its content via the mouse wheel.
|
|
6
|
+
*
|
|
7
|
+
* Add child nodes to {@link ScrollContainer.content} rather than to the
|
|
8
|
+
* `ScrollContainer` itself. The content container is offset as the user scrolls,
|
|
9
|
+
* while the outer widget is clipped to its declared `width` × `height`.
|
|
10
|
+
*
|
|
11
|
+
* Mouse-wheel events from the global {@link InputManager} are consumed only
|
|
12
|
+
* when the pointer is within the widget's bounds. The container subscribes to
|
|
13
|
+
* the app's `onMouseWheel` signal when it enters the scene tree, and
|
|
14
|
+
* unsubscribes on detach.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const scroll = new ScrollContainer({ width: 300, height: 400 });
|
|
19
|
+
* for (let i = 0; i < 20; i++) {
|
|
20
|
+
* scroll.content.addChild(new Label(`Item ${i}`).setPosition(0, i * 30));
|
|
21
|
+
* }
|
|
22
|
+
* scene.ui.addChild(scroll);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
class ScrollContainer extends Widget {
|
|
26
|
+
/** Add children here — not to the `ScrollContainer` itself. */
|
|
27
|
+
content;
|
|
28
|
+
_direction;
|
|
29
|
+
_scrollX = 0;
|
|
30
|
+
_scrollY = 0;
|
|
31
|
+
_onWheel = (delta) => {
|
|
32
|
+
const pos = this._stage?.app?.input.getPrimaryPointerPosition();
|
|
33
|
+
if (pos === null || pos === undefined) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const bounds = this.getBounds();
|
|
37
|
+
if (!bounds.contains(pos.x, pos.y)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.scrollBy(this._direction !== 'vertical' ? delta.x : 0, this._direction !== 'horizontal' ? delta.y : 0);
|
|
41
|
+
};
|
|
42
|
+
constructor(options) {
|
|
43
|
+
super();
|
|
44
|
+
this._direction = options.direction ?? 'vertical';
|
|
45
|
+
this.content = new Container();
|
|
46
|
+
this.clip = true;
|
|
47
|
+
this.interactive = true;
|
|
48
|
+
this.addChild(this.content);
|
|
49
|
+
this.setSize(options.width, options.height);
|
|
50
|
+
}
|
|
51
|
+
/** Current horizontal scroll position in pixels. */
|
|
52
|
+
get scrollX() {
|
|
53
|
+
return this._scrollX;
|
|
54
|
+
}
|
|
55
|
+
/** Current vertical scroll position in pixels. */
|
|
56
|
+
get scrollY() {
|
|
57
|
+
return this._scrollY;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Scroll by `(dx, dy)` pixels, clamped to the scrollable content range.
|
|
61
|
+
* Positive values scroll right / down; negative values scroll left / up.
|
|
62
|
+
*/
|
|
63
|
+
scrollBy(dx, dy) {
|
|
64
|
+
this.scrollTo(this._scrollX + dx, this._scrollY + dy);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Scroll to an absolute `(x, y)` position in pixels, clamped to the
|
|
68
|
+
* content range so the content never scrolls past its edges.
|
|
69
|
+
*/
|
|
70
|
+
scrollTo(x, y) {
|
|
71
|
+
const contentBounds = this.content.getBounds();
|
|
72
|
+
const maxX = Math.max(0, contentBounds.width - this._uiWidth);
|
|
73
|
+
const maxY = Math.max(0, contentBounds.height - this._uiHeight);
|
|
74
|
+
this._scrollX = Math.max(0, Math.min(x, maxX));
|
|
75
|
+
this._scrollY = Math.max(0, Math.min(y, maxY));
|
|
76
|
+
this.content.setPosition(-this._scrollX, -this._scrollY);
|
|
77
|
+
}
|
|
78
|
+
_relayout() {
|
|
79
|
+
// Re-clamp scroll in case the widget was resized.
|
|
80
|
+
this.scrollTo(this._scrollX, this._scrollY);
|
|
81
|
+
}
|
|
82
|
+
/** @internal — subscribe to the app's wheel signal when entering the scene tree. */
|
|
83
|
+
_setStage(stage) {
|
|
84
|
+
const prevApp = this._stage?.app;
|
|
85
|
+
const nextApp = stage?.app;
|
|
86
|
+
super._setStage(stage);
|
|
87
|
+
if (prevApp !== nextApp) {
|
|
88
|
+
prevApp?.input.onMouseWheel.remove(this._onWheel);
|
|
89
|
+
nextApp?.input.onMouseWheel.add(this._onWheel);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
destroy() {
|
|
93
|
+
this._stage?.app?.input.onMouseWheel.remove(this._onWheel);
|
|
94
|
+
super.destroy();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { ScrollContainer };
|
|
99
|
+
//# sourceMappingURL=ScrollContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollContainer.js","sources":["../../../../src/ui/ScrollContainer.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAmBA;;;;;;;;;;;;;;;;;;;;AAoBG;AACG,MAAO,eAAgB,SAAQ,MAAM,CAAA;;AAEzB,IAAA,OAAO;AAEN,IAAA,UAAU;IACnB,QAAQ,GAAG,CAAC;IACZ,QAAQ,GAAG,CAAC;AAEH,IAAA,QAAQ,GAAG,CAAC,KAAa,KAAU;AAClD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,yBAAyB,EAAE;QAE/D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAE/B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;YAClC;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,KAAK,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7G,IAAA,CAAC;AAED,IAAA,WAAA,CAAmB,OAA+B,EAAA;AAChD,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU;AACjD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;IAC7C;;AAGA,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;IACtB;;AAGA,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA;;;AAGG;IACI,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvD;AAEA;;;AAGG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAE9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AAE/D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1D;IAEmB,SAAS,GAAA;;QAE1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC7C;;AAGgB,IAAA,SAAS,CAAC,KAAmB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG;AAChC,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG;AAE1B,QAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;AAEtB,QAAA,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjD,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChD;IACF;IAEgB,OAAO,GAAA;AACrB,QAAA,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1D,KAAK,CAAC,OAAO,EAAE;IACjB;AACD;;;;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { RenderNode } from '#rendering/RenderNode';
|
|
2
|
+
/** Options for {@link Tooltip}. */
|
|
3
|
+
export interface TooltipOptions {
|
|
4
|
+
/** Label text to display. */
|
|
5
|
+
text: string;
|
|
6
|
+
/** Horizontal pixel offset from the pointer position. Default `12`. */
|
|
7
|
+
offsetX?: number;
|
|
8
|
+
/** Vertical pixel offset from the pointer position. Default `-28`. */
|
|
9
|
+
offsetY?: number;
|
|
10
|
+
/** Seconds to wait before the tooltip appears. Default `0.3`. */
|
|
11
|
+
delay?: number;
|
|
12
|
+
/** Background fill color as a packed 0xRRGGBB integer. Default `0x222222`. */
|
|
13
|
+
background?: number;
|
|
14
|
+
/** Text color as a packed 0xRRGGBB integer. Default `0xffffff`. */
|
|
15
|
+
textColor?: number;
|
|
16
|
+
/** Inner padding in pixels around the text. Default `6`. */
|
|
17
|
+
padding?: number;
|
|
18
|
+
/** Font size in pixels. Default `12`. */
|
|
19
|
+
fontSize?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Hover tooltip attached to a {@link RenderNode}. Shows a small text label
|
|
23
|
+
* near the pointer after a short delay when the pointer enters `target`, and
|
|
24
|
+
* hides it immediately on pointer-out.
|
|
25
|
+
*
|
|
26
|
+
* The tooltip node is parented to the nearest {@link UIRoot} ancestor of
|
|
27
|
+
* `target`, so it always renders in screen space above other content.
|
|
28
|
+
*
|
|
29
|
+
* The target must have `interactive = true` for the hover signals to fire.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* button.interactive = true;
|
|
34
|
+
* const tip = new Tooltip(button, { text: 'Click me!' });
|
|
35
|
+
* // Later:
|
|
36
|
+
* tip.destroy();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare class Tooltip {
|
|
40
|
+
private readonly _target;
|
|
41
|
+
private readonly _offsetX;
|
|
42
|
+
private readonly _offsetY;
|
|
43
|
+
private readonly _delayMs;
|
|
44
|
+
private readonly _background;
|
|
45
|
+
private readonly _textColor;
|
|
46
|
+
private readonly _padding;
|
|
47
|
+
private readonly _fontSize;
|
|
48
|
+
private readonly _text;
|
|
49
|
+
private _node;
|
|
50
|
+
private _timer;
|
|
51
|
+
private readonly _onPointerOver;
|
|
52
|
+
private readonly _onPointerOut;
|
|
53
|
+
constructor(target: RenderNode, options: TooltipOptions);
|
|
54
|
+
/** Remove the tooltip and clean up all listeners. */
|
|
55
|
+
destroy(): void;
|
|
56
|
+
private _scheduleShow;
|
|
57
|
+
private _show;
|
|
58
|
+
private _hide;
|
|
59
|
+
private _removeNode;
|
|
60
|
+
private _cancelTimer;
|
|
61
|
+
/**
|
|
62
|
+
* Walk up the target's parent chain to find the nearest {@link UIRoot}.
|
|
63
|
+
* Returns `null` when the target is not attached to a UI layer.
|
|
64
|
+
*/
|
|
65
|
+
private _findUIRoot;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/ui/Tooltip.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKxD,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAA8C;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;gBAEiB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc;IAe9D,qDAAqD;IAC9C,OAAO,IAAI,IAAI;IAMtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,KAAK;IAwCb,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;IAOpB;;;OAGG;IAEH,OAAO,CAAC,WAAW;CAapB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Color } from '../core/Color.js';
|
|
2
|
+
import { Container } from '../rendering/Container.js';
|
|
3
|
+
import { Graphics } from '../rendering/primitives/Graphics.js';
|
|
4
|
+
import { Text } from '../rendering/text/Text.js';
|
|
5
|
+
import { UIRoot } from './UIRoot.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Hover tooltip attached to a {@link RenderNode}. Shows a small text label
|
|
9
|
+
* near the pointer after a short delay when the pointer enters `target`, and
|
|
10
|
+
* hides it immediately on pointer-out.
|
|
11
|
+
*
|
|
12
|
+
* The tooltip node is parented to the nearest {@link UIRoot} ancestor of
|
|
13
|
+
* `target`, so it always renders in screen space above other content.
|
|
14
|
+
*
|
|
15
|
+
* The target must have `interactive = true` for the hover signals to fire.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* button.interactive = true;
|
|
20
|
+
* const tip = new Tooltip(button, { text: 'Click me!' });
|
|
21
|
+
* // Later:
|
|
22
|
+
* tip.destroy();
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
class Tooltip {
|
|
26
|
+
_target;
|
|
27
|
+
_offsetX;
|
|
28
|
+
_offsetY;
|
|
29
|
+
_delayMs;
|
|
30
|
+
_background;
|
|
31
|
+
_textColor;
|
|
32
|
+
_padding;
|
|
33
|
+
_fontSize;
|
|
34
|
+
_text;
|
|
35
|
+
_node = null;
|
|
36
|
+
_timer = null;
|
|
37
|
+
_onPointerOver = (event) => {
|
|
38
|
+
this._scheduleShow(event.worldX, event.worldY);
|
|
39
|
+
};
|
|
40
|
+
_onPointerOut = () => {
|
|
41
|
+
this._hide();
|
|
42
|
+
};
|
|
43
|
+
constructor(target, options) {
|
|
44
|
+
this._target = target;
|
|
45
|
+
this._text = options.text;
|
|
46
|
+
this._offsetX = options.offsetX ?? 12;
|
|
47
|
+
this._offsetY = options.offsetY ?? -28;
|
|
48
|
+
this._delayMs = (options.delay ?? 0.3) * 1000;
|
|
49
|
+
this._background = options.background ?? 0x222222;
|
|
50
|
+
this._textColor = options.textColor ?? 0xffffff;
|
|
51
|
+
this._padding = options.padding ?? 6;
|
|
52
|
+
this._fontSize = options.fontSize ?? 12;
|
|
53
|
+
target.onPointerOver.add(this._onPointerOver);
|
|
54
|
+
target.onPointerOut.add(this._onPointerOut);
|
|
55
|
+
}
|
|
56
|
+
/** Remove the tooltip and clean up all listeners. */
|
|
57
|
+
destroy() {
|
|
58
|
+
this._hide();
|
|
59
|
+
this._target.onPointerOver.remove(this._onPointerOver);
|
|
60
|
+
this._target.onPointerOut.remove(this._onPointerOut);
|
|
61
|
+
}
|
|
62
|
+
_scheduleShow(x, y) {
|
|
63
|
+
this._cancelTimer();
|
|
64
|
+
this._timer = setTimeout(() => {
|
|
65
|
+
this._show(x, y);
|
|
66
|
+
}, this._delayMs);
|
|
67
|
+
}
|
|
68
|
+
_show(x, y) {
|
|
69
|
+
// Remove any existing tooltip node first.
|
|
70
|
+
this._removeNode();
|
|
71
|
+
const uiRoot = this._findUIRoot();
|
|
72
|
+
if (uiRoot === null) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const hex = (packed) => {
|
|
76
|
+
return new Color((packed >> 16) & 0xff, (packed >> 8) & 0xff, packed & 0xff, 1);
|
|
77
|
+
};
|
|
78
|
+
const label = new Text(this._text, {
|
|
79
|
+
fillColor: hex(this._textColor),
|
|
80
|
+
fontSize: this._fontSize,
|
|
81
|
+
});
|
|
82
|
+
const labelBounds = label.getLocalBounds();
|
|
83
|
+
const w = labelBounds.width + this._padding * 2;
|
|
84
|
+
const h = labelBounds.height + this._padding * 2;
|
|
85
|
+
const bg = new Graphics();
|
|
86
|
+
bg.fillColor = hex(this._background);
|
|
87
|
+
bg.drawRoundedRectangle(0, 0, w, h, 4);
|
|
88
|
+
label.setPosition(this._padding, this._padding);
|
|
89
|
+
const node = new Container();
|
|
90
|
+
node.addChild(bg);
|
|
91
|
+
node.addChild(label);
|
|
92
|
+
node.setPosition(x + this._offsetX, y + this._offsetY);
|
|
93
|
+
this._node = node;
|
|
94
|
+
uiRoot.addChild(node);
|
|
95
|
+
}
|
|
96
|
+
_hide() {
|
|
97
|
+
this._cancelTimer();
|
|
98
|
+
this._removeNode();
|
|
99
|
+
}
|
|
100
|
+
_removeNode() {
|
|
101
|
+
if (this._node !== null) {
|
|
102
|
+
const p = this._node.parent;
|
|
103
|
+
if (p !== null) {
|
|
104
|
+
p.removeChild(this._node);
|
|
105
|
+
}
|
|
106
|
+
this._node = null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
_cancelTimer() {
|
|
110
|
+
if (this._timer !== null) {
|
|
111
|
+
clearTimeout(this._timer);
|
|
112
|
+
this._timer = null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Walk up the target's parent chain to find the nearest {@link UIRoot}.
|
|
117
|
+
* Returns `null` when the target is not attached to a UI layer.
|
|
118
|
+
*/
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention -- UI is an acronym (cf. HTMLText)
|
|
120
|
+
_findUIRoot() {
|
|
121
|
+
let current = this._target.parent;
|
|
122
|
+
while (current !== null) {
|
|
123
|
+
if (current instanceof UIRoot) {
|
|
124
|
+
return current;
|
|
125
|
+
}
|
|
126
|
+
current = current.parent;
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export { Tooltip };
|
|
133
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../../../src/ui/Tooltip.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/esm/ui/index.d.ts
CHANGED
|
@@ -5,8 +5,12 @@ export type { PanelOptions } from './Panel';
|
|
|
5
5
|
export { Panel } from './Panel';
|
|
6
6
|
export type { ProgressBarOptions } from './ProgressBar';
|
|
7
7
|
export { ProgressBar } from './ProgressBar';
|
|
8
|
+
export type { ScrollContainerOptions, ScrollDirection } from './ScrollContainer';
|
|
9
|
+
export { ScrollContainer } from './ScrollContainer';
|
|
8
10
|
export type { StackDirection, StackOptions } from './Stack';
|
|
9
11
|
export { Stack } from './Stack';
|
|
12
|
+
export type { TooltipOptions } from './Tooltip';
|
|
13
|
+
export { Tooltip } from './Tooltip';
|
|
10
14
|
export { UIRoot } from './UIRoot';
|
|
11
15
|
export type { WidgetAnchor } from './Widget';
|
|
12
16
|
export { Widget } from './Widget';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/exo.debug.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Color as e}from"@codexo/exojs";import{Graphics as t}from"@codexo/exojs";import{Keyboard as s}from"@codexo/exojs";import{View as i}from"@codexo/exojs";import{Container as n}from"@codexo/exojs";import{Text as o}from"@codexo/exojs";import{RenderPipeline as r}from"@codexo/exojs";class l{_app;visible=!1;constructor(e){this._app=e}get viewMode(){return"screen"}destroy(){}}class h extends l{_graphics=null;constructor(e){super(e)}get viewMode(){return"world"}update(e){}render(e){const s=this._app.scene.currentScene?.root;if(!s)return;null===this._graphics&&(this._graphics=new t);const i=this._graphics;i.clear(),i.lineWidth=1,this._walkNode(s,i),i.render(e)}destroy(){null!==this._graphics&&(this._graphics.destroy(),this._graphics=null)}_walkNode(t,s){if(!t.visible)return;const i=t.getBounds();if(i.width>0&&i.height>0){const n=function(t,s,i,n){const o=(1-Math.abs(2*i-1))*s,r=o*(1-Math.abs(t/60%2-1)),l=i-o/2;let h,a,c;return t<60?(h=o,a=r,c=0):t<120?(h=r,a=o,c=0):t<180?(h=0,a=o,c=r):t<240?(h=0,a=r,c=o):t<300?(h=r,a=0,c=o):(h=o,a=0,c=r),new e(h+l,a+l,c+l,n)}((30*t.zIndex%360+360)%360,.7,.5,.7);s.lineColor=n;const o=i.left,r=i.top,l=i.right,h=i.bottom;s.moveTo(o,r),s.lineTo(l,r),s.lineTo(l,h),s.lineTo(o,h),s.lineTo(o,r),n.destroy()}const n=t;if(Array.isArray(n.children))for(const e of n.children)this._walkNode(e,s)}}const a=new e(1,0,1,.6),c=new e(1,1,0,.9),d=new e(0,1,1,.9),_=new e(.5,.5,.5,.3);class p extends l{_graphics=null;constructor(e){super(e)}get viewMode(){return"world"}update(e){}render(e){const s=this._app.scene.currentScene?.root;if(!s)return;null===this._graphics&&(this._graphics=new t);const i=this._graphics;i.clear(),i.lineWidth=1;const n=this._app.interaction,o=n.getHoveredNode(),r=new Set(n.getCapturedNodes());this._walkNode(s,i,o,r);const l=n._getDebugQuadtree();null!==l&&(i.lineColor=_,l._walkBounds(e=>{i.moveTo(e.left,e.top),i.lineTo(e.right,e.top),i.lineTo(e.right,e.bottom),i.lineTo(e.left,e.bottom),i.lineTo(e.left,e.top)})),i.render(e)}destroy(){null!==this._graphics&&(this._graphics.destroy(),this._graphics=null)}_walkNode(e,t,s,i){if(!e.visible)return;if(e.interactive){const n=e.getBounds();n.width>0&&n.height>0&&(i.has(e)?t.lineColor=d:t.lineColor=e===s?c:a,t.moveTo(n.left,n.top),t.lineTo(n.right,n.top),t.lineTo(n.right,n.bottom),t.lineTo(n.left,n.bottom),t.lineTo(n.left,n.top))}const n=e;if(Array.isArray(n.children))for(const e of n.children)this._walkNode(e,t,s,i)}}const u=120,f=new e(0,0,0,.7),w=e.white.clone(),x=new e(0,1,1,1);function m(e){let t=1;const s=e;if(Array.isArray(s.children))for(const e of s.children)t+=m(e);return t}class g extends l{_fpsSamples=new Float32Array(60);_fpsSampleIndex=0;_sparkSamples=new Float32Array(u);_sparkSampleIndex=0;_root=null;_textFps=null;_textFrame=null;_textDraws=null;_textNodes=null;_sparkline=null;constructor(e){super(e)}get viewMode(){return"screen"}update(e){null===this._root&&this._build();const t=e.milliseconds;this._fpsSamples[this._fpsSampleIndex]=t,this._fpsSampleIndex=(this._fpsSampleIndex+1)%60;let s=0,i=0;for(let e=0;e<60;e++){const t=this._fpsSamples[e];void 0!==t&&t>0&&(s+=t,i++)}const n=i>0?s/i:0,o=n>0?1e3/n:0;this._sparkSamples[this._sparkSampleIndex]=t,this._sparkSampleIndex=(this._sparkSampleIndex+1)%u;const r=this._app.backend.stats,l=this._app.scene.currentScene,h=l?m(l.root):0;if(null!==this._textFps&&(this._textFps.text=`FPS: ${o.toFixed(1)}`),null!==this._textFrame&&(this._textFrame.text=`Frame: ${t.toFixed(1)}ms`),null!==this._textDraws&&(this._textDraws.text=`Draws: ${r.drawCalls}`),null!==this._textNodes&&(this._textNodes.text=`Nodes: ${h}`),null!==this._sparkline){this._sparkline.clear(),this._sparkline.lineWidth=1,this._sparkline.lineColor=x;const e=this._sparkSampleIndex,t=164/119;let s=!1;for(let i=0;i<u;i++){const n=(e+i)%u,o=this._sparkSamples[n]??0,r=16+i*t,l=134-58*Math.min(1,o/33);s?this._sparkline.lineTo(r,l):(this._sparkline.moveTo(r,l),s=!0)}}}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._textFps=null,this._textFrame=null,this._textDraws=null,this._textNodes=null,this._sparkline=null}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:w},s=new t;s.fillColor=f,s.drawRectangle(8,8,180,130),this._textFps=new o("FPS: -",e),this._textFrame=new o("Frame: -",e),this._textDraws=new o("Draws: -",e),this._textNodes=new o("Nodes: -",e),this._textFps.x=16,this._textFps.y=16,this._textFrame.x=16,this._textFrame.y=30,this._textDraws.x=16,this._textDraws.y=44,this._textNodes.x=16,this._textNodes.y=58,this._sparkline=new t,this._root=new n,this._root.addChild(s),this._root.addChild(this._textFps),this._root.addChild(this._textFrame),this._root.addChild(this._textDraws),this._root.addChild(this._textNodes),this._root.addChild(this._sparkline)}}const b=new e(0,0,0,.7),v=e.white.clone();class y extends l{_root=null;_bg=null;_lines=[];constructor(e){super(e)}get viewMode(){return"screen"}update(e){null===this._root&&this._build();const t=this._app.canvas.width-260-8;null!==this._root&&(this._root.x=t,this._root.y=8);const s=this._buildLines();for(let e=0;e<this._lines.length;e++){const t=this._lines[e];if(void 0===t)continue;const i=s[e];void 0!==i?(t.text=i,t.visible=!0):(t.text="",t.visible=!1)}}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._bg=null,this._lines=[]}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:v};this._bg=new t,this._bg.fillColor=b,this._bg.drawRectangle(0,0,260,160),this._root=new n,this._root.addChild(this._bg);for(let t=0;t<12;t++){const s=new o("",e);s.x=8,s.y=8+14*t,s.visible=!1,this._root.addChild(s),this._lines.push(s)}}_buildLines(){const e=this._app.input.getPrimaryPointerPosition();if(null===e)return["Pointer: (none)"];const{x:t,y:s}=e,i=t,n=s,o=[];o.push(`Cursor: (${t.toFixed(0)}, ${s.toFixed(0)})`),o.push("Stack (top→bottom):");const r=this._app.scene.currentScene?.root,l=[];r&&(this._collectContaining(r,i,n,l),l.sort((e,t)=>t.zIndex-e.zIndex));const h=l.slice(0,10);for(const e of h){const t=e.constructor.name,s=e.zIndex,i=e.interactive?" — interactive":"";o.push(` ${t} — z=${s}${i}`)}return l.length>10&&o.push(` … +${l.length-10} more`),0===h.length&&o.push(" (none)"),o}_collectContaining(e,t,s,i){if(!e.visible)return;e.contains(t,s)&&i.push(e);const n=e;if(Array.isArray(n.children))for(const e of n.children)this._collectContaining(e,t,s,i)}}class F{visible=!0;layers;_app;_view;_onFrameHandler;_onKeyDownHandler;_onResizeHandler;constructor(e){this._app=e,this._view=new i(e.canvas.width/2,e.canvas.height/2,e.canvas.width,e.canvas.height),this.layers={performance:new g(e),boundingBoxes:new h(e),hitTest:new p(e),pointerStack:new y(e)},this._onFrameHandler=this._onFrame.bind(this),this._onKeyDownHandler=this._onKeyDown.bind(this),this._onResizeHandler=this._onResize.bind(this),e.onFrame.add(this._onFrameHandler),e.input.onKeyDown.add(this._onKeyDownHandler),e.onResize.add(this._onResizeHandler)}destroy(){this._app.onFrame.remove(this._onFrameHandler),this._app.input.onKeyDown.remove(this._onKeyDownHandler),this._app.onResize.remove(this._onResizeHandler);for(const e of Object.values(this.layers))e.destroy();this._view.destroy()}_onResize(e,t){this._view.resize(e,t),this._view.setCenter(e/2,t/2)}_onFrame(e){if(!this.visible)return;const t=Object.values(this.layers).filter(e=>e.visible);if(0===t.length)return;const s=this._app.backend,i=s.view,n=t.filter(e=>"world"===e.viewMode);for(const t of n)t.update(e),t.render(s);const o=t.filter(e=>"screen"===e.viewMode);if(o.length>0){s.setView(this._view);try{for(const t of o)t.update(e),t.render(s)}finally{s.setView(i)}}}_onKeyDown(e){switch(e){case s.F1:this.layers.performance.visible=!this.layers.performance.visible;break;case s.F2:this.layers.boundingBoxes.visible=!this.layers.boundingBoxes.visible;break;case s.F3:this.layers.hitTest.visible=!this.layers.hitTest.visible;break;case s.F4:this.layers.pointerStack.visible=!this.layers.pointerStack.visible}}}const k=new e(0,0,0,.7),C=new e(.6,1,1,1),S=e.white.clone(),$=new e(.7,.7,.7,1);class T extends l{_entries=[];_root=null;_bg=null;_header=null;_lines=[];_pipeline=null;constructor(e){super(e)}static describePipeline(e){const t=[];return T._collectPipelineRows(e,0,t),t}static _collectPipelineRows(e,t,s){for(const i of e)s.push({depth:t,label:i.label,enabled:i.enabled,isPipeline:i instanceof r}),i instanceof r&&T._collectPipelineRows(i,t+1,s)}get viewMode(){return"screen"}update(e){null===this._root&&this._build(),this._entries.length=0;const t=this._app.scene.currentScene?.root;t&&this._collect(t),this._refreshPanel()}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._bg=null,this._header=null,this._lines=[],this._entries.length=0,this._pipeline=null}get entries(){return this._entries}get totalPasses(){let e=0;for(const t of this._entries)e+=t.filters.length,t.hasMask&&e++;return e}setPipeline(e){return this._pipeline=e,this}get pipeline(){return this._pipeline}pipelineRows(){return null!==this._pipeline?T.describePipeline(this._pipeline):[]}_collect(e){if(!e.visible)return;if(e.filters.length>0){const t=e.getBounds();this._entries.push({drawableLabel:e.constructor.name,filters:[...e.filters],width:Math.max(1,Math.ceil(t.width)),height:Math.max(1,Math.ceil(t.height)),hasMask:null!==e.mask,cachedAsBitmap:e.cacheAsBitmap})}const t=e;if(Array.isArray(t.children))for(const e of t.children)this._collect(e)}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:S};this._bg=new t;const s={...e,fillColor:C};this._header=new o("",s),this._header.x=208,this._header.y=16,this._lines=[];for(let t=0;t<24;t++){const s=new o("",e);s.x=208,s.y=29+13*t,this._lines.push(s)}this._root=new n,this._root.addChild(this._bg),this._root.addChild(this._header);for(const e of this._lines)this._root.addChild(e)}_refreshPanel(){if(null===this._header||null===this._bg)return;const e=[];if(0===this._entries.length)e.push({text:"(no active filter chains)",dim:!0});else for(const t of this._entries){const s=[];t.hasMask&&s.push("mask"),t.cachedAsBitmap&&s.push("cached");const i=s.length>0?` [${s.join(",")}]`:"";e.push({text:`${t.drawableLabel} ${t.width}x${t.height}${i}`,dim:!1});for(let s=0;s<t.filters.length;s++){const i=t.filters[s];void 0!==i&&e.push({text:` ${s}. ${i.constructor.name}`,dim:!1})}}const t=this.pipelineRows();if(t.length>0){e.push({text:"Pipeline:",dim:!0});for(const s of t){const t=" ".repeat(s.depth+1);e.push({text:`${t}${s.label}${s.enabled?"":" [off]"}`,dim:!s.enabled})}}this._header.text=`Render Passes: ${this.totalPasses}`;const s=Math.min(e.length,this._lines.length);for(let t=0;t<this._lines.length;t++){const i=this._lines[t];if(void 0===i)continue;const n=t<s?e[t]:void 0;void 0!==n?(i.text=n.text,i.style.fillColor=n.dim?$:S,i.visible=!0):(i.text="",i.visible=!1)}if(e.length>this._lines.length){const t=this._lines[this._lines.length-1],s=e.length-this._lines.length;void 0!==t&&(t.text=`... (+${s} more)`,t.style.fillColor=$,t.visible=!0)}const i=16+13*(1+s);this._bg.clear(),this._bg.fillColor=k,this._bg.drawRectangle(200,8,240,i)}}export{h as BoundingBoxesLayer,l as DebugLayer,F as DebugOverlay,p as HitTestLayer,g as PerformanceLayer,y as PointerStackLayer,T as RenderPassInspectorLayer};
|
|
1
|
+
import{Color as e}from"@codexo/exojs";import{Graphics as t}from"@codexo/exojs";import{Keyboard as s}from"@codexo/exojs";import{View as i}from"@codexo/exojs";import{Container as n}from"@codexo/exojs";import{Text as o}from"@codexo/exojs";import{RenderPipeline as r}from"@codexo/exojs";class l{_app;visible=!1;constructor(e){this._app=e}get viewMode(){return"screen"}destroy(){}}class h extends l{_graphics=null;constructor(e){super(e)}get viewMode(){return"world"}update(e){}render(e){const s=this._app.scene.currentScene?.root;if(!s)return;null===this._graphics&&(this._graphics=new t);const i=this._graphics;i.clear(),i.lineWidth=1,this._walkNode(s,i),i.render(e)}destroy(){null!==this._graphics&&(this._graphics.destroy(),this._graphics=null)}_walkNode(t,s){if(!t.visible)return;const i=t.getBounds();if(i.width>0&&i.height>0){const n=function(t,s,i,n){const o=(1-Math.abs(2*i-1))*s,r=o*(1-Math.abs(t/60%2-1)),l=i-o/2;let h,a,c;return t<60?(h=o,a=r,c=0):t<120?(h=r,a=o,c=0):t<180?(h=0,a=o,c=r):t<240?(h=0,a=r,c=o):t<300?(h=r,a=0,c=o):(h=o,a=0,c=r),new e(255*(h+l),255*(a+l),255*(c+l),n)}((30*t.zIndex%360+360)%360,.7,.5,.7);s.lineColor=n;const o=i.left,r=i.top,l=i.right,h=i.bottom;s.moveTo(o,r),s.lineTo(l,r),s.lineTo(l,h),s.lineTo(o,h),s.lineTo(o,r),n.destroy()}const n=t;if(Array.isArray(n.children))for(const e of n.children)this._walkNode(e,s)}}const a=new e(255,0,255,.6),c=new e(255,255,0,.9),d=new e(0,255,255,.9),_=new e(128,128,128,.3);class p extends l{_graphics=null;constructor(e){super(e)}get viewMode(){return"world"}update(e){}render(e){const s=this._app.scene.currentScene?.root;if(!s)return;null===this._graphics&&(this._graphics=new t);const i=this._graphics;i.clear(),i.lineWidth=1;const n=this._app.interaction,o=n.getHoveredNode(),r=new Set(n.getCapturedNodes());this._walkNode(s,i,o,r);const l=n._getDebugQuadtree();null!==l&&(i.lineColor=_,l._walkBounds(e=>{i.moveTo(e.left,e.top),i.lineTo(e.right,e.top),i.lineTo(e.right,e.bottom),i.lineTo(e.left,e.bottom),i.lineTo(e.left,e.top)})),i.render(e)}destroy(){null!==this._graphics&&(this._graphics.destroy(),this._graphics=null)}_walkNode(e,t,s,i){if(!e.visible)return;if(e.interactive){const n=e.getBounds();n.width>0&&n.height>0&&(i.has(e)?t.lineColor=d:t.lineColor=e===s?c:a,t.moveTo(n.left,n.top),t.lineTo(n.right,n.top),t.lineTo(n.right,n.bottom),t.lineTo(n.left,n.bottom),t.lineTo(n.left,n.top))}const n=e;if(Array.isArray(n.children))for(const e of n.children)this._walkNode(e,t,s,i)}}const u=120,f=new e(0,0,0,.7),w=e.white.clone(),x=new e(0,255,255,1);function m(e){let t=1;const s=e;if(Array.isArray(s.children))for(const e of s.children)t+=m(e);return t}class g extends l{_fpsSamples=new Float32Array(60);_fpsSampleIndex=0;_sparkSamples=new Float32Array(u);_sparkSampleIndex=0;_root=null;_textFps=null;_textFrame=null;_textDraws=null;_textNodes=null;_sparkline=null;constructor(e){super(e)}get viewMode(){return"screen"}update(e){null===this._root&&this._build();const t=e.milliseconds;this._fpsSamples[this._fpsSampleIndex]=t,this._fpsSampleIndex=(this._fpsSampleIndex+1)%60;let s=0,i=0;for(let e=0;e<60;e++){const t=this._fpsSamples[e];void 0!==t&&t>0&&(s+=t,i++)}const n=i>0?s/i:0,o=n>0?1e3/n:0;this._sparkSamples[this._sparkSampleIndex]=t,this._sparkSampleIndex=(this._sparkSampleIndex+1)%u;const r=this._app.backend.stats,l=this._app.scene.currentScene,h=l?m(l.root):0;if(null!==this._textFps&&(this._textFps.text=`FPS: ${o.toFixed(1)}`),null!==this._textFrame&&(this._textFrame.text=`Frame: ${t.toFixed(1)}ms`),null!==this._textDraws&&(this._textDraws.text=`Draws: ${r.drawCalls}`),null!==this._textNodes&&(this._textNodes.text=`Nodes: ${h}`),null!==this._sparkline){this._sparkline.clear(),this._sparkline.lineWidth=1,this._sparkline.lineColor=x;const e=this._sparkSampleIndex,t=164/119;let s=!1;for(let i=0;i<u;i++){const n=(e+i)%u,o=this._sparkSamples[n]??0,r=16+i*t,l=134-58*Math.min(1,o/33);s?this._sparkline.lineTo(r,l):(this._sparkline.moveTo(r,l),s=!0)}}}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._textFps=null,this._textFrame=null,this._textDraws=null,this._textNodes=null,this._sparkline=null}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:w},s=new t;s.fillColor=f,s.drawRectangle(8,8,180,130),this._textFps=new o("FPS: -",e),this._textFrame=new o("Frame: -",e),this._textDraws=new o("Draws: -",e),this._textNodes=new o("Nodes: -",e),this._textFps.x=16,this._textFps.y=16,this._textFrame.x=16,this._textFrame.y=30,this._textDraws.x=16,this._textDraws.y=44,this._textNodes.x=16,this._textNodes.y=58,this._sparkline=new t,this._root=new n,this._root.addChild(s),this._root.addChild(this._textFps),this._root.addChild(this._textFrame),this._root.addChild(this._textDraws),this._root.addChild(this._textNodes),this._root.addChild(this._sparkline)}}const b=new e(0,0,0,.7),v=e.white.clone();class y extends l{_root=null;_bg=null;_lines=[];constructor(e){super(e)}get viewMode(){return"screen"}update(e){null===this._root&&this._build();const t=this._app.canvas.width-260-8;null!==this._root&&(this._root.x=t,this._root.y=8);const s=this._buildLines();for(let e=0;e<this._lines.length;e++){const t=this._lines[e];if(void 0===t)continue;const i=s[e];void 0!==i?(t.text=i,t.visible=!0):(t.text="",t.visible=!1)}}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._bg=null,this._lines=[]}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:v};this._bg=new t,this._bg.fillColor=b,this._bg.drawRectangle(0,0,260,160),this._root=new n,this._root.addChild(this._bg);for(let t=0;t<12;t++){const s=new o("",e);s.x=8,s.y=8+14*t,s.visible=!1,this._root.addChild(s),this._lines.push(s)}}_buildLines(){const e=this._app.input.getPrimaryPointerPosition();if(null===e)return["Pointer: (none)"];const{x:t,y:s}=e,i=t,n=s,o=[];o.push(`Cursor: (${t.toFixed(0)}, ${s.toFixed(0)})`),o.push("Stack (top→bottom):");const r=this._app.scene.currentScene?.root,l=[];r&&(this._collectContaining(r,i,n,l),l.sort((e,t)=>t.zIndex-e.zIndex));const h=l.slice(0,10);for(const e of h){const t=e.constructor.name,s=e.zIndex,i=e.interactive?" — interactive":"";o.push(` ${t} — z=${s}${i}`)}return l.length>10&&o.push(` … +${l.length-10} more`),0===h.length&&o.push(" (none)"),o}_collectContaining(e,t,s,i){if(!e.visible)return;e.contains(t,s)&&i.push(e);const n=e;if(Array.isArray(n.children))for(const e of n.children)this._collectContaining(e,t,s,i)}}class F{visible=!0;layers;_app;_view;_onFrameHandler;_onKeyDownHandler;_onResizeHandler;constructor(e){this._app=e,this._view=new i(e.canvas.width/2,e.canvas.height/2,e.canvas.width,e.canvas.height),this.layers={performance:new g(e),boundingBoxes:new h(e),hitTest:new p(e),pointerStack:new y(e)},this._onFrameHandler=this._onFrame.bind(this),this._onKeyDownHandler=this._onKeyDown.bind(this),this._onResizeHandler=this._onResize.bind(this),e.onFrame.add(this._onFrameHandler),e.input.onKeyDown.add(this._onKeyDownHandler),e.onResize.add(this._onResizeHandler)}destroy(){this._app.onFrame.remove(this._onFrameHandler),this._app.input.onKeyDown.remove(this._onKeyDownHandler),this._app.onResize.remove(this._onResizeHandler);for(const e of Object.values(this.layers))e.destroy();this._view.destroy()}_onResize(e,t){this._view.resize(e,t),this._view.setCenter(e/2,t/2)}_onFrame(e){if(!this.visible)return;const t=Object.values(this.layers).filter(e=>e.visible);if(0===t.length)return;const s=this._app.backend,i=s.view,n=t.filter(e=>"world"===e.viewMode);for(const t of n)t.update(e),t.render(s);const o=t.filter(e=>"screen"===e.viewMode);if(o.length>0){s.setView(this._view);try{for(const t of o)t.update(e),t.render(s)}finally{s.setView(i)}}}_onKeyDown(e){switch(e){case s.F1:this.layers.performance.visible=!this.layers.performance.visible;break;case s.F2:this.layers.boundingBoxes.visible=!this.layers.boundingBoxes.visible;break;case s.F3:this.layers.hitTest.visible=!this.layers.hitTest.visible;break;case s.F4:this.layers.pointerStack.visible=!this.layers.pointerStack.visible}}}const k=new e(0,0,0,.7),C=new e(153,255,255,1),S=e.white.clone(),$=new e(178,178,178,1);class T extends l{_entries=[];_root=null;_bg=null;_header=null;_lines=[];_pipeline=null;constructor(e){super(e)}static describePipeline(e){const t=[];return T._collectPipelineRows(e,0,t),t}static _collectPipelineRows(e,t,s){for(const i of e)s.push({depth:t,label:i.label,enabled:i.enabled,isPipeline:i instanceof r}),i instanceof r&&T._collectPipelineRows(i,t+1,s)}get viewMode(){return"screen"}update(e){null===this._root&&this._build(),this._entries.length=0;const t=this._app.scene.currentScene?.root;t&&this._collect(t),this._refreshPanel()}render(e){this._root?.render(e)}destroy(){null!==this._root&&(this._root.destroy(),this._root=null),this._bg=null,this._header=null,this._lines=[],this._entries.length=0,this._pipeline=null}get entries(){return this._entries}get totalPasses(){let e=0;for(const t of this._entries)e+=t.filters.length,t.hasMask&&e++;return e}setPipeline(e){return this._pipeline=e,this}get pipeline(){return this._pipeline}pipelineRows(){return null!==this._pipeline?T.describePipeline(this._pipeline):[]}_collect(e){if(!e.visible)return;if(e.filters.length>0){const t=e.getBounds();this._entries.push({drawableLabel:e.constructor.name,filters:[...e.filters],width:Math.max(1,Math.ceil(t.width)),height:Math.max(1,Math.ceil(t.height)),hasMask:null!==e.mask,cachedAsBitmap:e.cacheAsBitmap})}const t=e;if(Array.isArray(t.children))for(const e of t.children)this._collect(e)}_build(){const e={fontSize:11,fontFamily:"Arial",fontWeight:"normal",fillColor:S};this._bg=new t;const s={...e,fillColor:C};this._header=new o("",s),this._header.x=208,this._header.y=16,this._lines=[];for(let t=0;t<24;t++){const s=new o("",e);s.x=208,s.y=29+13*t,this._lines.push(s)}this._root=new n,this._root.addChild(this._bg),this._root.addChild(this._header);for(const e of this._lines)this._root.addChild(e)}_refreshPanel(){if(null===this._header||null===this._bg)return;const e=[];if(0===this._entries.length)e.push({text:"(no active filter chains)",dim:!0});else for(const t of this._entries){const s=[];t.hasMask&&s.push("mask"),t.cachedAsBitmap&&s.push("cached");const i=s.length>0?` [${s.join(",")}]`:"";e.push({text:`${t.drawableLabel} ${t.width}x${t.height}${i}`,dim:!1});for(let s=0;s<t.filters.length;s++){const i=t.filters[s];void 0!==i&&e.push({text:` ${s}. ${i.constructor.name}`,dim:!1})}}const t=this.pipelineRows();if(t.length>0){e.push({text:"Pipeline:",dim:!0});for(const s of t){const t=" ".repeat(s.depth+1);e.push({text:`${t}${s.label}${s.enabled?"":" [off]"}`,dim:!s.enabled})}}this._header.text=`Render Passes: ${this.totalPasses}`;const s=Math.min(e.length,this._lines.length);for(let t=0;t<this._lines.length;t++){const i=this._lines[t];if(void 0===i)continue;const n=t<s?e[t]:void 0;void 0!==n?(i.text=n.text,i.style.fillColor=n.dim?$:S,i.visible=!0):(i.text="",i.visible=!1)}if(e.length>this._lines.length){const t=this._lines[this._lines.length-1],s=e.length-this._lines.length;void 0!==t&&(t.text=`... (+${s} more)`,t.style.fillColor=$,t.visible=!0)}const i=16+13*(1+s);this._bg.clear(),this._bg.fillColor=k,this._bg.drawRectangle(200,8,240,i)}}export{h as BoundingBoxesLayer,l as DebugLayer,F as DebugOverlay,p as HitTestLayer,g as PerformanceLayer,y as PointerStackLayer,T as RenderPassInspectorLayer};
|
|
2
2
|
//# sourceMappingURL=exo.debug.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exo.debug.esm.js","sources":["../src/debug/DebugLayer.ts","../src/debug/BoundingBoxesLayer.ts","../src/debug/HitTestLayer.ts","../src/debug/PerformanceLayer.ts","../src/debug/PointerStackLayer.ts","../src/debug/DebugOverlay.ts","../src/debug/RenderPassInspectorLayer.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["DebugLayer","_app","visible","constructor","this","viewMode","destroy","BoundingBoxesLayer","_graphics","app","super","update","_delta","render","backend","root","scene","currentScene","Graphics","gfx","clear","lineWidth","_walkNode","node","bounds","getBounds","width","height","color","h","s","l","alpha","c","Math","abs","x","m","r","g","b","Color","hslToColor","zIndex","lineColor","left","t","top","right","bo","bottom","moveTo","lineTo","container","Array","isArray","children","child","colorIdle","colorHovered","colorCaptured","colorQuadrant","HitTestLayer","interaction","hoveredNode","getHoveredNode","capturedNodes","Set","getCapturedNodes","quadtree","_getDebugQuadtree","_walkBounds","rect","hovered","captured","interactive","has","sparklineSampleCount","bgColor","textColor","white","clone","sparklineColor","countNodes","count","PerformanceLayer","_fpsSamples","Float32Array","_fpsSampleIndex","_sparkSamples","_sparkSampleIndex","_root","_textFps","_textFrame","_textDraws","_textNodes","_sparkline","delta","_build","frameMs","milliseconds","totalMs","validSamples","i","undefined","avgMs","fps","stats","nodeCount","text","toFixed","drawCalls","oldest","stepX","panelW","started","sampleIndex","ms","px","panelX","py","sparklineY","panelH","min","style","fontSize","fontFamily","fontWeight","fillColor","bg","drawRectangle","Text","y","panelY","Container","addChild","PointerStackLayer","_bg","_lines","canvas","lines","_buildLines","length","lineNode","line","maxEntries","push","pos","input","getPrimaryPointerPosition","sx","sy","worldX","worldY","stack","_collectContaining","sort","a","shown","slice","name","z","inter","result","contains","DebugOverlay","layers","_view","_onFrameHandler","_onKeyDownHandler","_onResizeHandler","View","performance","boundingBoxes","hitTest","pointerStack","_onFrame","bind","_onKeyDown","_onResize","onFrame","add","onKeyDown","onResize","remove","layer","Object","values","resize","setCenter","visibleLayers","filter","sceneView","view","worldLayers","screenLayers","setView","channel","Keyboard","F1","F2","F3","F4","headerColor","dimColor","RenderPassInspectorLayer","_entries","_header","_pipeline","describePipeline","pipeline","rows","_collectPipelineRows","depth","pass","label","enabled","isPipeline","RenderPipeline","_collect","_refreshPanel","entries","totalPasses","total","entry","filters","hasMask","setPipeline","pipelineRows","drawableLabel","max","ceil","mask","cachedAsBitmap","cacheAsBitmap","headerStyle","dim","flags","flagsText","join","row","indent","repeat","visibleCount","last","overflow","panelHeight","panelPadding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exo.debug.esm.js","sources":["../src/debug/DebugLayer.ts","../src/debug/BoundingBoxesLayer.ts","../src/debug/HitTestLayer.ts","../src/debug/PerformanceLayer.ts","../src/debug/PointerStackLayer.ts","../src/debug/DebugOverlay.ts","../src/debug/RenderPassInspectorLayer.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["DebugLayer","_app","visible","constructor","this","viewMode","destroy","BoundingBoxesLayer","_graphics","app","super","update","_delta","render","backend","root","scene","currentScene","Graphics","gfx","clear","lineWidth","_walkNode","node","bounds","getBounds","width","height","color","h","s","l","alpha","c","Math","abs","x","m","r","g","b","Color","hslToColor","zIndex","lineColor","left","t","top","right","bo","bottom","moveTo","lineTo","container","Array","isArray","children","child","colorIdle","colorHovered","colorCaptured","colorQuadrant","HitTestLayer","interaction","hoveredNode","getHoveredNode","capturedNodes","Set","getCapturedNodes","quadtree","_getDebugQuadtree","_walkBounds","rect","hovered","captured","interactive","has","sparklineSampleCount","bgColor","textColor","white","clone","sparklineColor","countNodes","count","PerformanceLayer","_fpsSamples","Float32Array","_fpsSampleIndex","_sparkSamples","_sparkSampleIndex","_root","_textFps","_textFrame","_textDraws","_textNodes","_sparkline","delta","_build","frameMs","milliseconds","totalMs","validSamples","i","undefined","avgMs","fps","stats","nodeCount","text","toFixed","drawCalls","oldest","stepX","panelW","started","sampleIndex","ms","px","panelX","py","sparklineY","panelH","min","style","fontSize","fontFamily","fontWeight","fillColor","bg","drawRectangle","Text","y","panelY","Container","addChild","PointerStackLayer","_bg","_lines","canvas","lines","_buildLines","length","lineNode","line","maxEntries","push","pos","input","getPrimaryPointerPosition","sx","sy","worldX","worldY","stack","_collectContaining","sort","a","shown","slice","name","z","inter","result","contains","DebugOverlay","layers","_view","_onFrameHandler","_onKeyDownHandler","_onResizeHandler","View","performance","boundingBoxes","hitTest","pointerStack","_onFrame","bind","_onKeyDown","_onResize","onFrame","add","onKeyDown","onResize","remove","layer","Object","values","resize","setCenter","visibleLayers","filter","sceneView","view","worldLayers","screenLayers","setView","channel","Keyboard","F1","F2","F3","F4","headerColor","dimColor","RenderPassInspectorLayer","_entries","_header","_pipeline","describePipeline","pipeline","rows","_collectPipelineRows","depth","pass","label","enabled","isPipeline","RenderPipeline","_collect","_refreshPanel","entries","totalPasses","total","entry","filters","hasMask","setPipeline","pipelineRows","drawableLabel","max","ceil","mask","cachedAsBitmap","cacheAsBitmap","headerStyle","dim","flags","flagsText","join","row","indent","repeat","visibleCount","last","overflow","panelHeight","panelPadding"],"mappings":"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"}
|