screen.html + docs: migrate canvas-sizing + RFB design prose (#713 batch 3)
Expanded the /screen endpoint description in docs/web-ui.md to cover the substantive design rationale that lived in screen.html comments. screen.html shrinks correspondingly. Moved to docs/web-ui.md::Per-agent endpoints (GET /screen): - Deliberate thinness — minimal RFB renderer; noVNC vendoring path called out for production-grade replacement. - Fit-mode flex-item min-width:auto clamp: a flex item's automatic minimum size resolves to the canvas's intrinsic framebuffer resolution and clamps CSS max-* back up, making fit mode a silent no-op. The fix (flex: none + min-width: 0 + min-height: 0 + explicit px sizing via relayoutCanvas()) is now documented. - localStorage persistence for fit-mode (key screen-fit; default on). - Pointer rescale in sendPointer keeps clicks accurate. - ExtendedDesktopSize pseudo-encoding (-308 rect) gates the match-size button. Collapsed in screen.html: 8 #NNN cookies scrubbed across all inline comments. #133 (canvas-sizing fit bug — closed) ×5, #52 (noVNC vendoring — closed) ×1, #14 (relative URL — closed my piece) ×1, plus one CSS-block #133. Each comment shrinks to a brief pointer. screen.html: 8 → 0 #NNN cookies (100% reduction). Net ~26 lines of substantive prose moved into docs/web-ui.md.
This commit is contained in:
parent
b07d74b51b
commit
815f6561b7
2 changed files with 46 additions and 44 deletions
|
|
@ -1055,14 +1055,26 @@ shaped).
|
|||
`wait_for_login` entry.
|
||||
- `GET /events/history` — replay buffer for the terminal.
|
||||
- `GET /screen` — VNC viewer page (minimal RFB-over-WebSocket
|
||||
renderer). Only accessible when `hyperhive.gui.enable = true`
|
||||
in the agent's `agent.nix`; the harness shows a 🖥 screen link
|
||||
in the state row when `gui_vnc_port` is present. Toolbar:
|
||||
`⤢ fit` CSS-downscales the canvas to the window; `⤡ match size`
|
||||
sends an RFB `SetDesktopSize` request so the server (weston)
|
||||
changes its real output resolution to the window dimensions —
|
||||
enabled once the server advertises the `ExtendedDesktopSize`
|
||||
pseudo-encoding (issue #133).
|
||||
renderer — deliberately thin, just enough to display the
|
||||
desktop + forward pointer + keyboard. A production-grade viewer
|
||||
would vendor noVNC; this file ships the minimal in-tree variant).
|
||||
Only accessible when `hyperhive.gui.enable = true` in the agent's
|
||||
`agent.nix`; the harness shows a 🖥 screen link in the state row
|
||||
when `gui_vnc_port` is present. Toolbar: `⤢ fit` CSS-downscales
|
||||
the canvas to the window via `relayoutCanvas()` setting explicit
|
||||
pixel dimensions on the canvas — *not* CSS `max-width/max-height`,
|
||||
because a flex item's automatic minimum size (`min-width: auto`
|
||||
resolves to the canvas's intrinsic framebuffer resolution) silently
|
||||
clamps `max-*` back up, making fit mode a no-op that just centred +
|
||||
clipped the oversized canvas. The fit-mode rules pin the canvas
|
||||
with `flex: none; min-width: 0; min-height: 0` so the JS-set size
|
||||
sticks. `⤡ match size` sends an RFB `SetDesktopSize` request so the
|
||||
server (weston) changes its real output resolution to the window
|
||||
dimensions; enabled once the server advertises the
|
||||
`ExtendedDesktopSize` pseudo-encoding (`-308` rect in the header).
|
||||
Fit-mode state persists in `localStorage` (`screen-fit`); default
|
||||
is on. Pointer coordinates are rescaled in `sendPointer` so clicks
|
||||
land on the right pixel regardless of CSS scale.
|
||||
- `GET /screen/ws` — raw RFB byte relay: proxies WebSocket
|
||||
frames to the weston VNC server at `127.0.0.1:<vnc_port>`.
|
||||
Transparent to any RFB variant. VNC port comes from
|
||||
|
|
|
|||
Loading…
Reference in a new issue