catbot
d712218f17
perf(input-field): O(n) cursor hit test via Font::NearestCursorByte ( #56 )
...
InputField_HitTestCursor mapped a click x to a cursor byte offset by
calling Font::GetLineWidth on every prefix value[0..i] for i=1..size.
Each call re-walks from byte 0, so the hit test was O(n^2) glyph-metric
lookups (each an uncached stbtt cmap binary search). It also iterated
raw byte boundaries, so on multibyte UTF-8 input it could return an
offset splitting a codepoint — an invalid position for the byte-based
cursorPos.
Add Font::NearestCursorByte: one left-to-right cumulative-advance pass
(O(n) metrics, scale computed once) over codepoint boundaries, returning
the byte offset of the boundary nearest the target. Cumulative advance is
monotonic, so the scan stops past the closest boundary. The hit test now
delegates to it.
Adds tests/InputFieldHitTest, a pure-CPU regression test (no Vulkan
device/window): a px sweep across ASCII and multibyte strings compared
against an independent brute-force nearest-boundary oracle, plus the
left/right/empty/end-of-text edge cases and a codepoint-boundary invariant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 16:55:03 +00:00
..
Crafter.Graphics-Animation.cppm
cleaned up renderer
2026-03-09 20:10:19 +01:00
Crafter.Graphics-Clipboard.cppm
clipboard
2026-05-19 00:45:22 +02:00
Crafter.Graphics-ComputeShader.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-Decompress.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapVulkan.cppm
fix(device): add preferred mask + required-only fallback to GetMemoryType ( #59 )
2026-06-16 16:03:50 +00:00
Crafter.Graphics-DescriptorHeapWebGPU.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-Device.cppm
fix(device): add preferred mask + required-only fallback to GetMemoryType ( #59 )
2026-06-16 16:03:50 +00:00
Crafter.Graphics-Dom.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-DomEvents.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-Font.cppm
perf(input-field): O(n) cursor hit test via Font::NearestCursorByte ( #56 )
2026-06-16 16:55:03 +00:00
Crafter.Graphics-FontAtlas.cppm
Merge pull request 'perf(text): fold Ensure+Lookup into FontAtlas::EnsureAndGet ( #53 )' ( #84 ) from claude/issue-53 into master
2026-06-16 17:44:20 +02:00
Crafter.Graphics-ForwardDeclarations.cppm
rendertargetvulkan
2026-04-11 18:48:00 +02:00
Crafter.Graphics-Gamepad.cppm
new input system
2026-05-12 00:24:48 +02:00
Crafter.Graphics-GraphicsTypes.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-Image2D.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-ImageVulkan.cppm
fix(image): scope sampled-image upload barriers to the real consumer stage ( #54 )
2026-06-16 16:01:23 +00:00
Crafter.Graphics-Input.cppm
new input system
2026-05-12 00:24:48 +02:00
Crafter.Graphics-InputField.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-Keys.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-Mesh.cppm
feat(rt): BuildProcedural/RefitProcedural from a device AABB buffer ( #37 )
2026-06-16 14:12:04 +00:00
Crafter.Graphics-PipelineRTVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-PipelineRTWebGPU.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-PlainComputeShader.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-RenderingElement3D.cppm
tlas build options
2026-06-16 15:49:17 +02:00
Crafter.Graphics-RenderPass.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-Router.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-RT.cppm
feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API
2026-06-02 22:09:14 +00:00
Crafter.Graphics-RTPass.cppm
feat(webgpu-rt): atomic pixel accumulator + raysPerPixel for >1 ray/pixel/bounce ( #30 )
2026-06-09 22:45:25 +00:00
Crafter.Graphics-SamplerVulkan.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-ShaderBindingTableVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-ShaderBindingTableWebGPU.cppm
feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API
2026-06-02 22:09:14 +00:00
Crafter.Graphics-ShaderVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-Types.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-UI.cppm
perf(text): cache shaped runs in ShapeText ( #52 )
2026-06-16 15:40:52 +00:00
Crafter.Graphics-UIComponents.cppm
perf(text): cache shaped runs in ShapeText ( #52 )
2026-06-16 15:40:52 +00:00
Crafter.Graphics-VulkanBuffer.cppm
fix(device): add preferred mask + required-only fallback to GetMemoryType ( #59 )
2026-06-16 16:03:50 +00:00
Crafter.Graphics-VulkanTransition.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-WebGPU.cppm
feat(rt): BuildProcedural/RefitProcedural from a device AABB buffer ( #37 )
2026-06-16 14:12:04 +00:00
Crafter.Graphics-WebGPUBuffer.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-WebGPUComputeShader.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-Window.cppm
Merge remote-tracking branch 'origin/master' into claude/issue-40
2026-06-16 15:41:59 +00:00
Crafter.Graphics.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00