Skip to content

Rebuild native renderer binaries - #739

Merged
SimonCropp merged 1 commit into
viewer-queue-splitterfrom
native-binaries-viewer-queue-splitter
Aug 11, 2026
Merged

Rebuild native renderer binaries#739
SimonCropp merged 1 commit into
viewer-queue-splitterfrom
native-binaries-viewer-queue-splitter

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Rebuilt diffengine_viewer from native/ for the four RIDs that load one.
Windows is not among them: that head renders with WinForms.

Produced by the build-native workflow from dc94e03.

@SimonCropp
SimonCropp merged commit a6f3ff7 into viewer-queue-splitter Aug 11, 2026
1 check passed
@SimonCropp
SimonCropp deleted the native-binaries-viewer-queue-splitter branch August 11, 2026 01:40
SimonCropp added a commit that referenced this pull request Aug 11, 2026
* Make the viewer's queue column draggable and wider

The column holding pending snapshots was a fixed 220 pixels in the WinForms and AppKit heads and
220 points in the ImGui one, which is narrower than most test file names. It is now 34 character
cells, counted in cells so a scaled display gets a column that holds the same number of characters
rather than a narrower one, and the rule beside it can be dragged.

Clamped on every read rather than only when dragged, so shrinking the window narrows the column
instead of leaving the panes with nothing, and a chosen width survives the window growing back.
Only the queue divider moves. The one between received and expected stays put, which on the ImGui
head means NoResize on the received column, since Resizable would otherwise offer both.

Also fixes long queue labels painting over the pane beside them on Windows: the shared StringFormat
is cloned from GenericTypographic, which arrives with NoClip set, so the clipping the Painter
documented never actually happened. LineLimit goes with it, because once clipping is on it turns a
rect a pixel short of the measured line height into nothing drawn rather than a line clipped at the
bottom. The AppKit head had a smaller version of the same bug, clipping one cell past the column
because offsetBy keeps the width.

Nothing had covered a label wider than the column, hence LongQueueLabel in both pixel suites.

The ABI is unchanged, so DEVIEW_VERSION stays at 2 and the committed native binaries keep working
until build-native produces new ones.

* Keep the ImGui queue column deterministic and drag it by hand

ImGuiTableFlags_Resizable would give the drag for free, but it also hands the column width to
ImGui's table state, which initialises once and then auto-fits or restores from saved settings. A
fixed column that is not resizable takes InitStretchWeightOrWidth on every frame instead
(imgui_tables.cpp TableGetColumnWidthAuto), which is what made the old constant 220 reproduce.

The pixel captures share one context and one table id and draw a single frame each, so with
Resizable the width carried between them: in one CI run the same column came out at 34 cells for
InlineSingle and InlineQueue, a content fit for LongQueueLabel, and the old width for
InlineAccepted, which is a baseline that depends on the order the tests ran in.

So the width lives in State, is handed to the table every frame, and the drag is an InvisibleButton
over the border. Submitted after the table so it wins the overlap, and inert during a capture,
which never feeds a mouse button. It moves the width by the distance between the cursor and the
border rather than setting it from the cursor, because a column width is its inner width and the
border sits a padding and a spacing further right.

Also applies the cursor ImGui asks for. Nothing here did, so ResizeEW would have been recorded and
never shown.

The macOS baselines are the ones from the CI run and are final. The Linux ones still have to be
regenerated against a binary built from this.

* Rebuild native renderer binaries

* Enable Accept all on a queue of one

Shift+A has always accepted a queue of one, because the key path never consulted the button. A
button that refuses what the key it names does reads as a bug rather than as a nicety, and there is
nothing about accepting one snapshot through Accept all that does not work.

The WinForms baselines for the two one-item screens needed regenerating by hand rather than
re-accepting: enabled versus greyed is a small part of a 1100 by 700 image, so the captures stayed
inside the 0.98 SSIM threshold and passed while describing a button state the app no longer has.
The macOS pair is deleted for the same reason, so CI regenerates them rather than quietly keeping
the old ones.

* Take the macOS baselines and force the Linux ones to be rebuilt

The Linux captures for InlineSingle, InlineQueue and InlineAccepted passed against baselines that no
longer describe them: the queue column moved by about twenty pixels and Accept all went from greyed
to enabled, and neither moved a 1100 by 700 image past the 0.98 SSIM threshold. Deleted rather than
re-accepted, because a passing snapshot cannot be re-accepted and one that quietly stops describing
the screen is worse than none.

FileDiff is left alone. It has no queue and no Accept all, so neither change reaches it.

The Linux column is barely wider in pixels while being the same 34 characters as the other two
heads, because ImGui renders the embedded font smaller there. Counting cells is the intent: the
column holds a file name of the same length everywhere.

* Take the rebuilt Linux baselines

All four inline captures now put the divider in the same place, which is what the width living on
this side rather than in ImGui's table state was for. Accept all is enabled on the two one-item
screens.

* Render the ImGui head at the same text size as the other two

deview_init's fontSize was an em size to Core Text and a pixel height to ImGui, whose stb_truetype
loader scales with stbtt_ScaleForPixelHeight. JetBrains Mono measures 1020 ascent and 300 descent
over a 1000 unit em, so the same 15 produced an em of 11.36 there: measured against the captures,
6.77 pixels per character on Linux against 8.95 on macOS.

That is why this head's queue column held 34 characters in noticeably fewer pixels than the others.
The column was never the problem; counting cells was doing exactly what it says while the cells
themselves were three quarters the size.

Corrected with ImFontConfig::ExtraSizeScale rather than by passing a larger number, so the ABI
keeps one meaning for fontSize and the correction sits next to the rasteriser that needs it. The
constant is the font's own (ascent - descent) / unitsPerEm, and it is a constant because the only
font that reaches here is the one the managed side embeds.

DEVIEW_VERSION goes to 3 by the rule on it: a field means something different than it did. Both
libraries read that from the shared header, so the macOS one moves with it and NativeTests fails
until build-native has produced both.

Every Linux baseline is deleted rather than re-accepted. All five change, since all of them are
text.

* Drop the Linux baselines for the text size change

* Rebuild native renderer binaries (#739)

Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com>

* Take the Linux baselines at the corrected text size

Measured against the macOS captures of the same screen, both now render the title at 8.95 pixels
per character, where Linux was 6.77 before. The queue column is the same 34 cells it always was and
now the same width on screen as the other two heads.

---------

Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant