1d5b286611
crosshair: axis badges, clustered cursor labels, and the shared-y horizontal line
main
Martino Ferrari2026-11-05 17:58:49 +01:00
2cb31cbb91
figure: x axes follow the column structure; split rows keep the right gutter on the last cell only
Martino Ferrari2026-11-04 07:00:52 +01:00
69f0083fc0
figure: note same-axis-kind assumption in row y fit
Martino Ferrari2026-11-04 01:13:29 +01:00
f132a5ec92
test(plot): pin the hot-handle re-index on region removal, refresh coverage
Martino Ferrari2026-09-28 22:42:56 +02:00
1f5ce0d4a5
fix(plot,figure): re-index hot region, logical row floor, refuse live on a linked axis
Martino Ferrari2026-09-28 22:36:37 +02:00
2fbd1de7d4
fix(render,input): guard the zoom gain, clip annotation captions, no-throw dump
Martino Ferrari2026-09-28 22:36:34 +02:00
9aff06acee
fix(glfw): route a drag by the row it began in, and drop stale hover state
Martino Ferrari2026-09-28 22:36:30 +02:00
81792dcd05
docs: correct three header comments that had drifted from the code
Martino Ferrari2026-09-28 22:17:55 +02:00
040e40254d
chore: remove a stray fragment committed by a shell redirect
Martino Ferrari2026-09-28 22:13:59 +02:00
ed3a8ce645
licence: MIT LICENSE and SPDX identifiers in every first-party file
Martino Ferrari2026-09-28 22:13:40 +02:00
059227d080
docs: README with build, embedding and verification entry points
Martino Ferrari2026-09-28 22:00:57 +02:00
19c8d4368d
docs(coverage): regenerate the measured table from the command that measures it
Martino Ferrari2026-09-28 22:00:57 +02:00
b7d0f901cc
docs: a user guide covering getting started, architecture, embedding, data, interaction, styling and testing
Martino Ferrari2026-09-28 21:50:19 +02:00
d03f9ce51a
test(gl): cover the loader's extension scanner and the handle and vertex-array failure paths
Martino Ferrari2026-09-28 21:40:37 +02:00
e9985eeeaf
test(coverage): a reproducible coverage preset, report and floor check
Martino Ferrari2026-09-28 21:23:22 +02:00
41b79313a7
docs: plan for the user documentation and a coverage floor
Martino Ferrari2026-09-28 21:11:43 +02:00
2307aa1158
test(input): pin the dragged nearest-tick ruler's snap on drop
Martino Ferrari2026-09-28 20:54:58 +02:00
d2ba67921e
fix(input): cursors follow the pointer while dragging and snap on drop
Martino Ferrari2026-09-28 20:46:14 +02:00
ea70cf4fca
feat(plot): the figure crosshair marks the hovered row, and the stroke is thin, dashed and configurable
Martino Ferrari2026-09-28 20:33:35 +02:00
f8a364e963
feat(plot): the figure crosshair marks the hovered row, and the stroke is thin, dashed and configurable
Martino Ferrari2026-09-28 20:29:09 +02:00
eee7c34dd5
feat(plot): the figure crosshair marks the hovered row, and the stroke is thin, dashed and configurable
Martino Ferrari2026-09-28 20:17:01 +02:00
cae672bc99
fix(plot): a figure gives every row the same y gutter so the axes line up
Martino Ferrari2026-09-28 20:11:17 +02:00
663b57c679
docs: spec and plan for figure y-gutter alignment, crosshair line and style, and cursor dragging
Martino Ferrari2026-09-28 19:57:19 +02:00
a14f333dbe
fix(plot,render,glfw): a hue-neutral crosshair, an em-dash placeholder, one layout per figure event, and a usable readout switch
Martino Ferrari2026-09-28 19:38:30 +02:00
10d5129fbf
refactor(render): share the readout panel and swatch drawing with the legend
Martino Ferrari2026-09-28 19:25:33 +02:00
29824b6919
fix(plot,glfw): layer the crosshair under the handles, sync it across a figure, and harden the lookup
Martino Ferrari2026-09-28 19:22:29 +02:00
8e27e22ebe
test(plot): pin the crosshair's lookup, readout, placement, sync and clip
Martino Ferrari2026-09-28 19:07:22 +02:00
fd0c471430
feat(plot): crosshair with an interpolated per-signal hover readout
Martino Ferrari2026-09-28 18:57:33 +02:00
a153b73ead
fix(input): clamp a dragged ruler on an ordered y range and share the orientation test
Martino Ferrari2026-09-28 17:58:42 +02:00
93ad774281
fix(render): keep a cursor parked on an axis bound inside and visible
Martino Ferrari2026-09-28 17:49:18 +02:00
eb7371d7a5
test(plot): pin the horizontal ruler's paint, edge behaviour and orientation rules
Martino Ferrari2026-09-28 17:34:43 +02:00
2d819c4228
fix(render): clip grid, traces, regions and cursors to the plot area
Martino Ferrari2026-09-28 17:00:02 +02:00
d853db62ae
fix(text): carry a glyph's negative bearing and harden the bake's extents
Martino Ferrari2026-09-28 16:32:18 +02:00
b0f9fbbb35
docs: spec and plan for data clipping, horizontal rulers and the crosshair readout
Martino Ferrari2026-09-28 16:32:18 +02:00
1b153b2ec3
fix(text): refuse an atlas that would overflow its own arithmetic, and clamp the cell before narrowing it
Martino Ferrari2026-09-28 16:13:56 +02:00
daff60e3f0
fix(input,examples): a linked figure's wheel anchor uses the group's live edge, and every demo verdict reaches its exit status
Martino Ferrari2026-09-28 15:52:08 +02:00
a70c381a1e
fix(examples): keep the glfw demo's region off the pan path, and print the multiplot's region geometry
Martino Ferrari2026-09-28 15:36:25 +02:00
942f88c568
feat(examples): a three-row synced Figure demo, on a GLFW host that draws one
Martino Ferrari2026-09-28 15:24:22 +02:00
770da4c2b2
fix(plot): a figure row's strip shows labels and title independently, and the shared axis is the bottom row's strip
Martino Ferrari2026-09-28 15:03:19 +02:00
8f1e60a105
feat(plot): Figure with stacked rows and a synchronised x axis
Martino Ferrari2026-09-28 14:40:50 +02:00
7cc06f07f5
fix(input): refuse non-finite region bounds, keep narrow regions movable, republish hot handles
Martino Ferrari2026-09-28 14:08:11 +02:00
4681d7015b
feat(examples): drive a region through the glfw demo and verify its geometry
Martino Ferrari2026-09-28 13:54:59 +02:00
4e0e0ae0b3
test(plot): region removal re-indexes the ids and the statistics cache
Martino Ferrari2026-09-28 13:53:26 +02:00
5e610bc138
test(input): pin the region snap's once-on-release rule and the live-follow data anchoring
Martino Ferrari2026-09-28 13:50:52 +02:00
354e79eea2
feat(input): draggable cursors, regions and measurement-band edges
Martino Ferrari2026-09-28 13:47:35 +02:00
e4d48cc6c3
wip(plot): region layout, hot handles and draggable handles (build restored)
Martino Ferrari2026-09-28 13:28:51 +02:00
7d2349555d
fix(plot): a degenerate range cannot strand a live axis, and the demo's follow check fails the run
Martino Ferrari2026-09-28 13:14:50 +02:00
77e861f79e
feat(input): live x follow with relative zoom and mouse panning
Martino Ferrari2026-09-28 13:01:48 +02:00
eaae07d8e0
feat(render): independent major and minor grid classes tied to the tick set
Martino Ferrari2026-09-28 12:42:22 +02:00
69495a3799
fix(render): convert Trace::width through the UI scale, and fold the controller's tolerance conversion into Style::device()
Martino Ferrari2026-09-28 12:26:06 +02:00
7500fc90d2
feat(render): logical style metrics with a UI scale, so chrome has a consistent physical size
Martino Ferrari2026-09-28 12:17:53 +02:00
1f03631e98
docs: spec and plan for DPI-consistent sizing, grid classes, and live follow with zoom and panning
Martino Ferrari2026-09-28 11:56:26 +02:00
2d51b978d7
feat(plot): per-trace legend with measured layout and swatches
Martino Ferrari2026-09-28 11:56:06 +02:00