Skip to content

core: one button with a 44-point touch hit area (K-1) - #1006

Closed
fizzy-linux[bot] wants to merge 5 commits into
mainfrom
core/touch-button
Closed

fizzy-linux[bot] wants to merge 5 commits into
mainfrom
core/touch-button

Conversation

@fizzy-linux

@fizzy-linux fizzy-linux Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Part of fizzyedit/work#681

In plain words

Buttons can accept a finger tap slightly beyond their visible edges, making small controls easier to use on a touch screen. Their appearance and placement stay the same, and mouse clicks keep their usual precision.

What you will notice

Core buttons have a centred touch target at least 44 points wide and tall. Existing raw buttons remain budgeted for later migration.

How this serves fizzy

Goal: mobile usability, with easier taps while preserving the app's appearance and desktop behaviour.

Goal

Part of fizzyedit/work#681; plans#115 K-1, option B.

What changed and why

The checkout already contains the dvui ButtonWidget wrapper, compatible button verbs, shared min_hit constant, raw-button lint and existing-site budgets. This pass strengthens its regression tests: the hit target stays centred, scales to 44 points, leaves mouse geometry unchanged and never shrinks larger borders.

How it was verified

See GATES.md for gate summaries and sandbox limitations. All 30 touch-filtered integration tests pass. Using only the border rectangle makes both outside-touch click tests fail; restoring hitRect makes them pass. Tests compare the drawn border across touch and mouse; no visual redesign or window launch is involved.

Not done / follow-ups

Overlapping touch targets still use dvui event processing order; the existing arbitration TODO documents that seam. Bulk migration of raw buttons is outside K-1. The harness handles commits, pushing and the draft PR.

Changes (7 files, +361/-6)
 core/form_factor.zig             |   3 +
 core/sizing_tests.zig            |   1 +
 core/widgets.zig                 |  71 +++++++++++-
 core/widgets/Button.zig          | 227 +++++++++++++++++++++++++++++++++++++++
 scripts/lint-allow.zon           |  31 ++++++
 scripts/lint.zig                 |  32 +++++-
 src/editor/explorer/settings.zig |   2 +-
 7 files changed, 361 insertions(+), 6 deletions(-)
Gates: 6 of 6 passed

scripts/check-fmt.sh (exit 0)

check-fmt: listing tracked files
check-fmt: checking 575 files

scripts/zb build --summary all (exit 0)

... (earlier output omitted)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c dvui-c cached
|     |  +- compile exe translate-c debug native (+21 more reused dependencies)
|     +- options cached
|     +- options cached
+- install text success
|  +- compile lib text debug native success 5s MaxRSS:309M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- install markdown success
|  +- compile lib markdown debug native success 5s MaxRSS:375M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c (reused)
+- install image success
   +- compile lib image debug native success 5s MaxRSS:291M
      +- WriteFile plugin_root.zig cached
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- options (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build test --summary all (exit 0)

... (earlier output omitted)
      +- WriteFile freetype cached
      +- compile lib freetype debug native cached 27ms MaxRSS:38M
      +- WriteFile . cached
      +- compile lib tree-sitter debug native cached 16ms MaxRSS:36M
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c cached
      |  +- compile exe translate-c debug native cached 27ms MaxRSS:38M
      |     +- options cached
      |     +- options cached
      |     +- options cached
      |     +- run exe generate-def (aarch64.zig) cached
      |     |  +- compile exe generate-def debug native cached 5ms MaxRSS:38M
      |     +- run exe generate-def (amdgcn.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (arm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (bpf.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (common.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (hexagon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (loongarch.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (mips.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (neon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (nvptx.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (powerpc.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (riscv.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (s390x.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (ve.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (wasm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86_64.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (xcore.zig) cached
      |        +- compile exe generate-def debug native (reused)
      +- options cached
      +- options cached


scripts/zb build test-integration --summary all (exit 0)

... (earlier output omitted)
|     +- options (reused)
+- run test fizzy-plugin-loader-tests 2 pass (2 total) 8ms MaxRSS:11M
|  +- compile test fizzy-plugin-loader-tests debug native success 2s MaxRSS:258M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-text-plugin-tests 101 pass (101 total) 249ms MaxRSS:15M
|  +- compile test fizzy-text-plugin-tests debug native success 5s MaxRSS:354M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-dashboard-plugin-tests 8 pass (8 total) 8ms MaxRSS:11M
|  +- compile test fizzy-dashboard-plugin-tests debug native success 2s MaxRSS:260M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-workbench-plugin-tests 1 pass (1 total) 19ms MaxRSS:11M
   +- compile test fizzy-workbench-plugin-tests debug native success 891ms MaxRSS:184M
      +- options (reused)
      +- options (reused)
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


scripts/zb build check-web --summary all (exit 0)

... (earlier output omitted)
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (arm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (bpf.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (common.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (hexagon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (loongarch.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (mips.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (neon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (nvptx.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (powerpc.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (riscv.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (s390x.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (ve.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (wasm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86_64.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (xcore.zig) cached
|  |        +- compile exe generate-def debug native (reused)
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- translate-c cached 3ms MaxRSS:34M
+- compile obj rehome-fixture-web debug wasm32-freestanding success 73ms MaxRSS:102M
   +- translate-c dvui-c (+1 more reused dependencies)
   +- options (reused)
   +- options (reused)


scripts/zb build test-sdk-version --summary all (exit 0)

... (earlier output omitted)
   +- WriteFile . cached
   +- compile lib tree-sitter debug native cached 11ms MaxRSS:32M
   +- compile lib freetype debug native (reused)
   +- compile lib tree-sitter debug native (reused)
   +- options cached
   +- options cached
   +- translate-c dvui-c cached
   |  +- compile exe translate-c debug native cached 7ms MaxRSS:38M
   |     +- options cached
   |     +- options cached
   |     +- options cached
   |     +- run exe generate-def (aarch64.zig) cached
   |     |  +- compile exe generate-def debug native cached 8ms MaxRSS:36M
   |     +- run exe generate-def (amdgcn.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (arm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (bpf.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (common.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (hexagon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (loongarch.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (mips.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (neon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (nvptx.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (powerpc.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (riscv.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (s390x.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (ve.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (wasm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86_64.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (xcore.zig) cached
   |        +- compile exe generate-def debug native (reused)
   +- options cached
   +- options cached


fizzy-linux Bot added 5 commits October 28, 2026 16:49
Agent-Team: linux

Worker: codex
Agent-Team: linux

Worker: codex
Agent-Team: linux

Worker: codex
Agent-Team: linux

Worker: codex
Agent-Team: linux

Worker: codex
@fizzy-pm

fizzy-pm Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

PM note: how this PR will be handled

What it is for: core: touch-button
Issue #681: core: one button with a 44-point touch hit area (K-1)
Done when (from the issue): draft PR on first push; gates pass; a unit test: with dvui.pointerKind() == .touch a press 6 pt outside a 32 pt button's border clicks it, with .mouse it does not, and the drawn rect is the same in both; lint rule raw-button with today's sites budgeted in lint-allow.zon; PR body says what was run.

Rules that apply: touches the SDK or plugin ABI: the shape fingerprint must be recorded; touches build scripts; changes agent rules or guides.
Reviews needed: 2, from two different kinds.
Needs the maintainer's explicit yes before merge: yes

Things to watch (checked by rule):

  • the body names its work issue (Part of fizzyedit/work#N)
  • size within 800 lines outside tests and docs (4179)
  • a gates section with what was run
  • the body says whether the SDK shape fingerprint moved

What happens next:

  1. Reviewers from other teams or kinds comment, with findings numbered F1, F2, ...
  2. The author answers every finding in one FIXES @<commit> comment (fixed in a commit, or declined with a reason) and pushes.
  3. Reviewers re-review the new commit on their own.
  4. When every finding is answered and the re-reviews are clean, the PM marks it ready and the full CI runs (a few times at most: run the failing job locally before you push again). Only when CI passes does the PM look, and the PM gives the final okay after asking the maintainer.

A living status comment below is kept current. Nothing here is a merge decision.

@fizzy-pm

fizzy-pm Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Where this PR stands

Stage: Author's turn
Next: Author should split the PR or trim it under 800 lines

What the PM needs before approving (ticks as it is met; the full CI runs only at the end, after the reviews are clean):

  • The body names its basis (Part of fizzyedit/work#N or a plan step)
  • Within the size limit: 4179 of 800 lines outside tests and docs
  • The body shows which gates the author ran
  • The body says whether the SDK shape fingerprint moved
  • No open findings at this commit
  • Every earlier finding was answered in a FIXES comment
  • Clean reviews at this commit from 2 different kinds: linux/claude (has 1)
  • Marked ready, which starts the full CI (the PM does this the moment the items above are met)
  • The full CI passes at this commit
  • The maintainer's explicit yes (rules)
  • The PM's final okay (pm-approval)

Rules that apply: touches the SDK or plugin ABI: the shape fingerprint must be recorded; touches build scripts; changes agent rules or guides.

Reviews at the current commit (f0ea3cd):

Reviewer Verdict Findings
linux/claude clean 6

Updated 2026-10-29 14:15 UTC by the PM. This comment is edited in place.

@fizzy-pm fizzy-pm Bot changed the title core: touch-button core: one button with a 44-point touch hit area (K-1) Oct 29, 2026
@fizzy-linux fizzy-linux Bot added reviewing:linux-claude a linux/claude review is running and removed reviewing:linux-claude a linux/claude review is running labels Oct 29, 2026
@fizzy-windows fizzy-windows Bot added reviewing:windows-codex a windows/codex review is running and removed reviewing:windows-codex a windows/codex review is running labels Oct 29, 2026
@fizzy-pm

fizzy-pm Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

TRIAGE: 100 files +3585/-1418 is over the 800 cap. Not reviewing as is. Split by area or close in favour of #1007 (the clean redo of K-1); the author says which in a comment. -- Fizzy PM

@fizzy-pm

fizzy-pm Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Closing: duplicate of #1007 (the clean K-1 PR for work#715); #1007 is the one to review.

@fizzy-pm fizzy-pm Bot closed this Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants