Commit graph

3,002 commits

Author SHA1 Message Date
091712f55a Merge upstream origin/dev c86415ef6 (30 commits) into nigig fork - preserve work content, game crates, nigig protocol, widgets layout 2026-09-27 01:53:53 +03:00
Admin
c86415ef67 map_build: the repacker builds on Windows again -- repack and repack_remote read and wrote at offsets through Unix's FileExt, so makepad-map-build stopped compiling for Windows (the CI's workspace row, red since 6c5c71f92). A ReadExactAt shim gives read_exact_at and write_all_at on every platform: Unix's FileExt, and on Windows the same from seek_read/seek_write; repack_remote is built wherever repack is. Checked: cargo check of makepad-map-tiles' bins for the host and x86_64-pc-windows-gnu, the repack lib tests
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 00:17:25 +02:00
Admin
b7a96ebdf9 widgets: Tab leaves an open menu the keyboard, and Return opens a FloatingAction without shutting it again -- two menus tests red on the CI since the dev merge (c27ee1dcc). NavControl's new wrapping Tab treated a focus that is no stop as "nothing focused" and jumped to the first stop, so an open RadialMenu (which takes itself out of the stops) lost the keyboard; such a focus now keeps it. Button now activates from Return/Space itself, so the set's button pressed after the set's own key_down had opened it and shut it again; the set keeps its activation keys from its button (and Numpad Enter now opens it too, as it presses any button). Checked: makepad-widgets-core, -menus, -extras, -data lib tests all pass
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 23:56:53 +02:00
Admin
6c5c71f92e maps: tiles ship only what the renderer draws, and a frame draws only what is on screen -- one detail contract in mbtile_reader::map_tags (detail_feature_used, micro_icon, the tag allowlist) is shared by the renderer (MvtSink::wants_feature skips rejected osm_* features in the detail pass before any id is allocated), the base bake (non --full drops them and stamps makepad_detail_contract=features-v1) and the repacker (a DATA_POLICY row; the verifier accepts exactly the contract's drops): address-only nodes (85% of detail points), plain road/building lines duplicated by the base and polygon layers, and relation points go; icons, trees, bridge corridors, platforms and detail buildings stay. Hosted city tiles shrink ~24% (Amsterdam z14 608 -> 465 KB). makepad-map-render-check builds each tile from the original and the rewrite at buckets 14-18 in 2D and 3D and requires identical buffers (bitwise digest, NaN-safe) and equal baked-face hits: ~3000 builds over local and hosted world tiles, 0 mismatches. Found on the way: base, detail and overlay polygon ids all started at 1 and the fill pass groups rings by id, so unrelated polygons of one colour fused; they now use disjoint ranges. makepad-map-repack --in-place converts an archive over itself shard by shard (cross-shard blobs stashed first, each partial verified tile by tile against the still-present original, journaled, renamed; root last; resumable), and --remote user@host:/dir runs it from this machine over parallel ssh streams against a sparse local mirror with SHA-256 checks. GPU/memory: only visible tiles are drawn (the prefetch ring, a whole z14 tile wide past z14, was drawn every frame), building outlines, flat-road fringes and roof edges move to the compact 28/16-byte formats, the shadow pass skips unlifted road chunks and off-screen terrain cells are skipped; z16 flat 6.3 -> 3.8 ms GPU, 123 -> 36 draws, 151 -> 94 MB resident; z17.5 7.3 -> 3.6 ms, 158 -> 26 MB; max tilt 5.5 -> 2.8 ms; pixels unchanged. New traces gpu.shaders, map.streams, map.frame
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 23:41:52 +02:00
Admin
c43831fe9c builder: apps build on their own menu row while the menu stays usable, with a queue, cancel and the Experiments list inline -- Return on an app downloads and compiles it in the background: its row spins in Makepad orange and shows the step with a short orange bar ("⠴ compiling ━━━━━─────── 50 / 118 crates"), and it opens by itself when done; nothing else is on the row. Return on another app while one compiles queues it ("◌ queued · next", "· 2 to go"); the next starts when the one before ends. Every build and queue entry carries its own open-when-done flag: Return on that app's row sets it (idle, queued or compiling), Compile all never does (its apps are only compiled: "✓ … is compiled."), and s turns it off or on for the selected compiling or queued row. c cancels the selected build (Cargo, its compilers and the downloads stop -- the Windows job object, curl killed, the shell's process tree; what was downloaded and compiled stays and the row says "stopped · continue") or takes a queued app out; on Compile all it takes out its queued apps. The footer shows "s don't start" / "s start when done" and "c cancel", letters in orange, only where they apply, and the line under the rule says what the selected row does or what happens with the build ("Compiling from source. It opens by itself when it is done.", "Queued behind Makepad Amp; it compiles and opens after it.", "... only compiles; press s or ⏎ to open it when done."). Update checks on its own row the same way, beside a build (one checkout writes a snapshot at a time). Experiments is a tree node in the main menu (▸/▾) with Compile all and every experiment indented under it; license labels are beta, licensed and free, and statuses line up at column 30. Everything above the footer, header included, scrolls with the selection; the rule, status lines and keys stay pinned at the bottom with "↑ n above · ↓ n more" above them, and the gap above the footer is gone. Accents are Makepad orange throughout (the .bat's first screen too). Same screens and keys in the Windows TUI and makepad.sh (background jobs there, a 0.2 s tick, a redraw after a window resize). Checked: cargo check for the host, x86_64-pc-windows-gnu and -msvc, the builder lib tests, and both TUIs driven in a pty (OSC 11 dark and light, 80x24 to 110x40) through real downloads and compiles of the public experiments: inline progress, queue and automatic next, Return and s on the flag, cancel of compiling and queued rows with no compiler left running, Compile all and its cancel, the update check beside a build, quitting while compiling, the Experiments node, scrolling in a short window and the Log in page's mark. Not run on a real Windows console
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 23:41:34 +02:00
Admin
8fd4158601 builder: the email shows on the Account row only, not also at the header's right
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:40:57 +02:00
Admin
79c5c24f0f builder: the Makepad mark is always whole, bars fill in Makepad orange, and the header says Makepad Apps -- the mark was cut off on short screens (log in, sub-pages: the rule followed the rows, leaving it a few lines) and had holes where text or the selection band crossed it. The rule, status, choice and footer now keep to the bottom of the window, and the mark (logo.txt now holds a 44 x 13 and a 30 x 9 version) goes where it fits whole beside every row's text with two columns of air, as near the middle as it can: the large one if it fits anywhere, else the small one, else none. The selected row's "<action> ⏎" does not count, so the mark does not move with the selection; where the hint reaches into it the text wins, and on the band row the dots lie over the band. Progress bars fill in Makepad orange. The header reads "Makepad Apps" and the subtitle "Shipped as source code, so your coding agent can customize everything." (Windows TUI, makepad.sh and the .bat's first screen). Checked in a pty for the Rust TUI and makepad.sh: log-in, menu, the band crossing the mark, dark and light backgrounds
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:39:23 +02:00
Admin
3c3bf7193d builder (windows): compiling the Builder no longer promises "about a minute" -- it often takes longer
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:32:36 +02:00
Admin
2485661407 builder: the menu gets the Makepad mark behind it and a quieter selection -- the selected row sits on a faint grey band with one Makepad-orange ▌ as its only accent, and its action (run ⏎, open list ⏎) is green; orange is never a background, an action or a bar. The Makepad mark (logo.txt: the SVG's triangles as braille dots, 44 x 13) is drawn faintly at the right of the window (up to 100 columns) behind the rows, only right of each line's text with two columns of air and never on the band, and only when the window leaves it room; makepad.sh embeds the same lines. The band and logo greys follow the terminal's background: OSC 11 (macOS, Linux), then COLORFGBG, dark otherwise, which is Windows' case. The CODING AGENTS heading loses its explanation. Checked: cargo check for the host and x86_64-pc-windows-gnu, the lib tests, the Rust TUI and makepad.sh in a pty answering OSC 11 dark and light (band, marker, logo colours and the logo clearing the text)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:30:34 +02:00
Admin
87d6d9063a builder: clearing build data has delete selected -- the person already chose the Disk row to clear it; keep stays one key away
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:07:36 +02:00
Admin
98c425fce4 builder: the menu stays on its row after a build, Update sits at the top, and the GPU notice says why -- keys pressed during a work page, and trackpad scrolls that terminals send as arrow keys, were queued and applied once the build ended, so the cursor jumped (to Shell after Amp compiled); work_end now throws away what is waiting (console::drain on Windows and Unix, drain_keys in makepad.sh). The Update row moves above YOUR APPS, and the menu still opens on the first app (makepad.sh's first_license_row counts rows with awk, which reads all of main_rows). The GPU notice reads "Makepad relies on your GPU to draw its UI and implement AI functionality just like a videogame does. Old hardware and broken drivers can cause your computer to reboot unexpectedly."
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:06:13 +02:00
Admin
6f6981b430 builder: an app's build page says "Your app is compiling from source, it will start when completed."
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 22:02:25 +02:00
Admin
6c8fe91ad3 builder: an app's build page has no subtitle -- a build can take longer than a minute, and the step rows already say what happens
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 21:59:37 +02:00
Admin
45284862d7 builder: an app's build page says "Your app is compiling, it will only take a minute." -- one subtitle for a first build and a rebuild, on Windows and in makepad.sh
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 21:55:42 +02:00
Admin
33f1ae624d builder: the log-in page says it in one line -- "Enter the email address you bought your Makepad product with, or have beta access for. Leave it empty for the free apps.", on Windows and in makepad.sh
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 21:51:26 +02:00
Admin
21cc12d851 builder: the menu starts with your apps and asks about local AI only when it matters -- YOUR APPS comes first (the menu opens on the first one), then MAKEPAD EXPERIMENTS (one row opening the list), CODING AGENTS, and SETUP last with only Account, Graphics, Agreements, Disk and Update. The Build tools, Rust, Xcode tools/System packages and CUDA rows are gone, and nothing is installed at the start: an app sets up what it needs when it is first built, as it already did. Windows has two modes, recorded in selected-compiler and never switched afterwards: no local AI with Rust's GNU toolchain, or local AI with Microsoft's Build Tools, the Windows SDK and CUDA. Only the first build of an app with CUDA features on a PC with an NVIDIA driver asks, on one "› Local AI" page: the NVIDIA, Microsoft Build Tools and Windows SDK agreements (Return opens one in the browser), then "Agree and enable local AI" (selected) and "No local AI"; Escape goes back to the menu without deciding. Without an NVIDIA driver, for other apps and on macOS/Linux nobody is asked. makepad.sh gets the same order; its first_license_row no longer pipes the menu into sed ...q, which with YOUR APPS on the first line closed the pipe under main_rows' printf and stopped the Builder. Checked: cargo check for the host and x86_64-pc-windows-gnu without warnings, the lib tests, and makepad.sh in a pty with a scratch HOME through log-in, folder, the menu and the experiments list
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 21:48:57 +02:00
Admin
8c7a20c5b5 terminal: the shell starts without makepad-agents on macOS -- since 9 September ("no forks") the terminal spawned its shell with posix_spawn through the agents helper, which it looked for beside its own executable; a terminal the Builder built (Terminal.app, builder/terminal.bin) had none and opened no shell. macOS spawns the shell as Linux does again, and as it did before: Command::spawn with setsid and TIOCSCTTY in pre_exec (both async-signal-safe), so the pty is the shell's controlling terminal and the app needs no other binary. makepad-agents keeps its own posix_spawn helper for Director. Checked with a release build alone in a folder: the prompt comes up, tty reports the pty, a background job shows in jobs; makepad-terminal tests pass (336)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:58:37 +02:00
Admin
648b551d51 ci: an app checkout inside the CI's checkout takes its branch tip as it is -- the sync pulled apps/scope and apps/stage with --ff-only, and a build that regenerated Scope's tracked Cargo.lock there made every pull refuse: each run on the mini went red at sync from ecc82e8a2 on (19 runs, nothing built or tested). They are the CI's, so they are fetched and reset hard to their upstream
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:19:03 +02:00
Admin
c27ee1dccb tools, ci, docs, workspace: the Builder ships as source on Windows and is one shell script on macOS and Linux, the CI box, makepad-agents, cargo-makepad, and one workspace for every crate
The Makepad Builder (tools/makepad_builder: the Windows download is makepad-builder.zip with the Builder's source; macOS and Linux run makepad.sh), the CI runner (tools/ci), cargo-makepad, the agents tool, the root workspace and the documents.

Covers work 6f1e44649..2b1a41df4 outside platform, draw, widgets, libs, apps and examples:

- wm: the Android super-app compiles tiles on the phone against the host engine
- cargo-makepad: the super-app APK is packed by `android dyn-pack`, in Rust
- widgets, storybook: the widget catalogue app, some eighty new widgets, a theme store with mixable style sheets, and the rule that a press belongs to
- wm, widgets: the style tween starts with all eight weights, and the new style sheet takes the last number instead of macOS's
- platform: the Android desk swipes at 120 Hz — offscreen render passes and framebuffers cached, SVG meshes kept, font families that complete
- cef: a page's audio can be captured instead of played
- Button: activate from the keyboard when focused (#1241)
- libs/ai: exclude hub_ui and services from the AI workspace (#1242)
- flow: the flow-ui app and the flowgraph canvas return to the workspace, with staged progress in libs/flow
- svg: a stroke that bends tighter than its half width collapses its inner edge to the corner
- the accent a name is written with stops deciding whether search finds it
- macOS: keep the paint clock beating while the window is minimized (#1244)
- Linux: only link libdrm for the direct backend (#1245)
- cargo-makepad: find dependency crate dirs via cargo metadata (#1246)
- app_main!: only ship the fonts an app declares (#1247)
- ai stems: LaneDemixer, VocalsModel and the platform Stage origin/main needs
- platform, widgets, wm: every Vulkan pass renders through a negative-height viewport again, so a Wayland or X11 window stands upright, and no capture
- calendar: its own colour contrast is named explicitly, now that the theme store exports one under the same name through the widgets glob
- widgets: the supersampled resolve and the map's shadow mask sample their textures as stored, like every other render texture
- platform: every OpenGL texture pass stores top-left rows, custom cameras included, and culls with the winding its inverted projection gives
- platform, wm, director: a hosted app's software frame arrives as a top-left texture and the window manager and the director carry no flip term at al
- widgets, platform: the last twelve warnings go
- The Builder compiles itself again from the Makepad tree Scope's release pins and removes the source snapshots nothing is built from any more
- The regex engine accepts \b and \B, reports the earliest match so a scan can resume after it, and can decide word boundaries on ASCII so a code sear
- workspace: Scope's settings carry the code map's tab width and the directories each prepared project hides from its map
- AGENTS.md: a platform change made for one application needs the user's feedback and checks first, and app specifics never leak into the shared layer
- wm: the desktop style menu lists each style once
- cef, video, platform: what Stage's browser needs from the shared layers
- macOS: re-arm the display links when a window leaves the Dock (#1251)
- platform, wm: work builds again on iOS, tvOS and wasm, and the window manager is warning-free on Windows
- ci: tools/ci, a Splash runtime that watches a branch and runs every ci.splash it finds
- stitch: the crate says what the rest of the repository says about its license
- ci: a run is one target dir and one cargo batch per target, and the wall draws
- ci: the wall shows THIS run and is fit for an OLED
- ci: untested is grey and nothing else
- ci: warming fills the cache and blames nobody
- Vulkan: stop printing the loader's startup narration by default (#1252)
- ci: the terminal gets its pty helper, director is a desktop tool, and a refused input is asked again
- platform: no warnings on tvOS and linux_direct, and a missing pty helper says so
- apps: what the CI box found
- ScrollBar: add `show_handle` for a view that scrolls without a grabbable bar (#1254)
- cargo-makepad: keep the android SDK at a stable path (#1253)
- ci: the window is a dashboard
- Remove Flow, asset and VJ applications moved into Stage
- ci: a stop or a restart is not a test result
- ci: a quiet header, a build that visibly moves, and scripts that leave the machine alone
- widgets: children a lookup discovers reach the dump, the snapshot and the flood searches
- tests: the workspace suite, run as a whole for the first time, passes outside the example UI tests
- platform: a hidden window wears no hands-off frame
- examples: the UI tests pass, for the reasons they failed
- ci: a library's warnings turn the workspace block yellow, and a desktop tool is not warmed for the web
- libs: no warnings in the workspace check on any row
- ci: the workspace script gives the wall back after warming
- ci: a judgement is never lost to the way it was phrased, and every "retry" of the bridge is retried
- tests: the last three failures of the CI box's night
- Linux: fix window chrome button hovers and how maximized/fullscreen windows work (#1255)
- ci: the header names the tip being tested
- tools: makepad-screen is makepad-agents, and its binary is `agents`
- gif: the crate's doc examples compile
- ci: the tests are the platform's own, in release, in two minutes
- Tooltip: position anchored tooltips in the same draw (#1256)
- cef: a hosted browser survives its host's exit
- ci: a card is as high as its content
- tests: the three binaries over ten seconds in release come under it
- widgets: let the host install script mods into every Splash isolate
- widgets: a pooled test context forgets the last case's Escape claim
- widgets: the pooled test context's resets replace the globals
- wm: the shell menu says what it did, and the CI waits for that
- platform: the storage module says how much a volume has free
- git: the memory ledger can take what it is asked for
- ci: a driven app takes every key once, and the storage module builds for the browser
- RadioButton: fix its touch hover state and click-off behavior (#1258)
- HtmlLink: fix its hover and pressed states (#1257)
- RadioButton: take key focus on the click, not on the press (#1259)
- script: re-entrant dispatch, thread index validation, Any-based handle downcasts, UTF-8 previews; regex: never_loop fix
- script: port Octoscript WS1 — worklist equality with fuel/deadline/work bail, uncaught-error bail, allow_debug_output
- script: port Octoscript parser/tokenizer/control-flow VM patches (ws2)
- script: port Octoscript heap/string/array/object hardening onto upstream's allocation budget
- script: port orphaned Octoscript VM hardening (execution caps, clear_type_methods, parser diagnostics)
- script: keep silenced streaming evals running past uncaught errors
- script: the Octoscript hardening keeps a Makepad host's semantics and its speed
- fix(text): enable ttf-parser gvar-alloc for many-tuple variable fonts
- feat(text): CoreText outline fallback for hvgl-only fonts (macOS)
- draw text: the CoreText outline fallback is only ever resolved for a face whose outlines live solely in hvgl, and font-family diagnostics are the `f
- mail: the phone layout lines up
- clock: the phone layout fits both orientations
- calendar, reminders, calculator, sheets: the phone layouts fit their space
- platform, widgets, wm: a touch that is taken away is cancelled, never released
- weather, notes, finance, photos, route: the phone layouts tidy up
- files: the phone layout tidies up
- wm: the phone shell's surfaces match the app and the grid
- wm on Android: every app is its own process
- clock: a cancelled release neither opens an alarm nor switches tab
- platform, wm: hosted apps ask the WM for what they cannot do themselves
- wm on Android: apps build on the phone
- wm on Android: app transitions and gestures feel like the phone's
- android: rotated Vulkan windows stop rebuilding their swapchain every frame, and hosted children get touch
- vulkan (android): a window released on suspend is not released again
- android: hosted children hand frames over with GPU fences and draw only when they have work
- wm on Android: gestures and surfaces settle like the phone's
- widgets: touch lists scroll with Android's physics
- wm on Android: the shell follows the Pixel launcher's motion
- wm on Android: Recents shows the apps over a receding home, and the home screen switches looks
- wm on Android: the look switcher stays put, the iOS dock shows its icons, background apps follow a look change
- task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a D
- agents: a user touching an app under test no longer stops the agent
- flowgraph: ordered ports take many wires, sockets can override their icon, and the canvas embeds as a viewport
- cef: captured frames and audio carry callback clocks and a navigation epoch
- git: timings read a portable clock
- ai: the hub's rig-fixture tests find the asset library without the asset client
- ai llm: a Metal main buffer is filled in 32 MB chunks
- diskmap: a scan lists each macOS directory in one getattrlistbulk call and classifies files without allocating or locking
- files: the tile view's three projections are toolbar buttons
- mail: the local view takes a theme-derived palette and line icons, search pages share records
- director: agent lanes form a tree and Grok joins the usage bar
- widgets, draw: skeuomorphic surfaces light each other through an optional relief buffer
- widgets, platform: a texture can light the relief buffer, menus take colour chips, and a style reload recompiles changed shader functions
- widgets: relief surfaces can travel like mechanical keys, and dark surfaces take less neighbour light
- platform, widgets, audio_route, ai: window crossfades and whole-frame presents, caption controls that click, themed menus, a stereo-pair audio tap,
- builder: the Builder TUI matches the new terminal design, Windows executables carry app icons, and every app has one
- platform: Android builds without Vulkan compile again, and the font-selection test counts the hosted entry point
- platform: the pipeline-skip repaint mark exists only on Apple, where Metal reads it
- builder: the terminal scripts delete nothing and read top to bottom, and every Builder delete stays inside its own folder
- files: the Files app deletes nothing and never overwrites
- director: coding agents ask before acting unless you choose otherwise
- sheets, score, git, home: saves cannot cut a file short or overwrite another one, and checkouts cannot write outside the repository
- git: worktree status matches git on real repositories and can be cancelled
- builder: one forward-only bar per setup component, green checks on finished setup rows, a black Builder window and a smaller Windows ZIP
- builder: the GPU notice is remembered
- cuda: builds link only the CUDA toolkit they are given, never a system install
- builder: a refused email opens the editor again with what was typed and says why, and the app section is YOUR APPS
- builder: a refused email says "Email not recognised" and keeps what was typed for fixing
- platform (windows): every window keeps animating with several windows open
- builder previews: long work gets a page of its own (steps as a checklist, the current one carrying its bar, footer working · ctrl+c stops), Account
- builder: long work runs on its own page
- builder: a first build resolves online, the Rust row and bars move when the work does, and the window fits the TUI
- audio_route: one API on macOS, Windows and Linux, monitoring by default and processing only when asked, plus shaders that discard a value compile to
- platform, widgets, ai: a restyle recompiles nothing it already has, shows only complete frames, and a window can own its caption
- builder: Compile shows a real bar
- builder: the compile line is the bar and n / total crates
- builder: apps get the icon their package declares
- builder: no Scope command
- widgets: relief surfaces can swing their light toward a point
- builder: a HEAD request is a HEAD
- builder: the menu waits for a choice
- builder: no menu flash after log-in
- builder: wait out Windows security on fresh Rust
- builder: the menu opens on the first of YOUR APPS
- platform (windows): half-float RGBA textures have four channels
- builder: CUDA whenever the machine has NVIDIA
- audio_route example: print the samples that reached the processor each second
- widgets, builder: the big widget families are features, all on by default, and the Builder takes none of them
- platform (macos): the display link is kept until it is invalidated
- ai hub: a local chat with no model says so once, plainly
- builder: the Windows exe is built for size
- windows: desktop apps open no console window, and still speak through pipes
- ai: Claude Desktop drives any app with the F10 panel
- Constrain Splash external I/O to the host service bridge (#1243)
- PortalList: stop following the end when scrolling to an earlier item (#1261)
- wm: starts on Windows
- ci: a full disk empties the build output before the run, not every row after it
- builder: an incremental compile's bar follows what really compiles
- builder: the compile bar's total is the app's own crates
- builder: menus wrap around
- wm: children open no console windows on Windows
- wm: the whole deck out of a Builder's source, compiled only when the person opens an app
- builder: CUDA crates build in an installation whose path has a space
- ai: Connect hands the .mcpb to Claude Desktop itself
- wm: the clock and calendar know the date on Windows
- platform (windows): a popup opened for the first time draws its rows
- wm: opening an app rebuilds it when its binary is out of date; warm instances never build
- builder: an app edited after its build shows as needing a compile
- civil-time: one local wall clock for every app, and it knows the zone on Windows
- platform + wm: a hosted child redraws at its tile's new size
- platform (windows): a texture pass drawn before its window has a size is skipped, not a crash
- draw: glass of a view that stopped drawing leaves the screen
- calendar: the Calendars sheet is an opaque panel, and the wide layout does not float one over its sidebar
- build: dev keeps line tables only, release is incremental without LTO, the parallel frontend is a documented local opt-in
- cargo-makepad: a binary with several app_main! entry points bundles
- script: #[derive(Script)] emits one helper call per field, and ScriptNew's default methods keep their bodies out of every type
- widgets: the Widget lookup methods and with_script_vm_id are compiled once, not once per widget type
- platform: studio-protocol no longer waits for script, so platform starts ~0.5 s earlier
- ai-speech: makepad-ai-sfx (and with it ai-h3) is built only for IndexTTS
- platform: an app's package dir, icons and bundle name rebuild only that app
- script + wasm_bridge: no build script that reruns on every file
- build: a private app cloned into apps/<name> joins this workspace, Stage first
- build: the AI stack, csg, Scope and Source Library join the one workspace
- builder: every app builds in the one Makepad workspace, one target directory per source snapshot
- ai chat: the chat's backends are the CLI, MCP and cloud providers; the local model is the `localai` feature
- apps: every app that hosts the chat has a `localai` feature for the local model, off unless the app's own job runs one
- builder: time each install component and phase
- builder: Build tools, Windows SDK, Rust and CUDA install side by side, each with its own bar
- builder bootstrap: rustc, rust-std and cargo download and unpack side by side under one Rust bar
- widgets: the library moves to makepad-widgets-core in widgets/core, and makepad-widgets becomes its front crate
- widgets: the Window, widget tree and panel theme reach the tweaker, voice, AI slot and dock through hooks, not through their modules
- widgets: every widget family is a crate of its own under widgets/families, and makepad-widgets links, re-exports and registers the ones its features
- aichat, widgets: the chat reads the design feedback through the tweaker's hook, so linking the chat no longer needs the tweaker
- apps, examples, libs: each crate builds only the widget families it uses, and the design overlay is each app's own default feature
- builder: an app release builds without the app's development defaults, and the catalog names every feature a release ships with
- widgets: the build scripts rerun on their own edits only, and makepad-widgets no longer reads MAKEPAD
- livepipe: takes makepad-widgets without its default families, now that the AI stack is in the one workspace
- builder: the catalog names the new localai defaults of route and ai-hub
- feedback: Send feedback, a caption icon and a small panel that shows exactly what is sent
- builder: an app it launches knows who the person is, for Send feedback
- feedback: the panel's wording reads right and draws in any font
- feedback: takes makepad-widgets without its default families
- builder: clear build data deletes target/ itself and says why when it cannot
- ai chat: a build without local AI starts on the first provider that answers here, not on "No model"
- platform: MAKEPAD=gpusim builds again
- cargo-makepad: a Windows desktop build links the app's icon into its own binary, not into RUSTFLAGS
- thiserror: RUSTC_BOOTSTRAP no longer turns on the unstable generic member access API
- builder: every end-user build uses rustc's parallel frontend, and falls back to one thread when it fails
- builder: the Windows SDK downloads the 25 cabinets its MSIs name instead of all 149, no screen or log shows a \\?\ path, long status messages wrap,
- builder: CUDA kernels compile in any install folder, and when they cannot the app is built without them
- builder: makepad-builder.exe declares itself like a well-formed Windows program and stops a stalled build through a job object instead of taskkill
- platform (macos): a contained panic no longer frees the windows under AppKit or leaves an app that ignores quit
- builder: macOS and Linux run the Builder as one shell script, the same TUI as Windows, and nothing is compiled for it
- builder + ai-cuda: the CUDA kernel progress shows in the Builder's Compile row, not scribbled over its screen
- builder: an app built with CUDA starts on Windows
- builder (windows): the downloaded exe is built large again
- builder (unix): the email check takes real addresses
- repo: no third-party comic archive, generated models or sample asset in the tree
- remove big example media files
- cargo_makepad: no stray KNMI radar frame in the Android Java sources
- widgets: the empty parts of an app's caption bar drag the window again
- ScrollBar: fade out when idle, like macOS overlay scrollers (#1264)
- platform: every app builds the same `windows` crate
- wm: in a Makepad Builder installation apps build through the Builder, however wm was started
- platform, draw: web builds start again
- platform: web text draws again
- widgets: the keyboard reaches boxes and modals
- widgets: a hover tooltip never sits under the mouse cursor
- platform: clipboard_read, reading text or an image from the system clipboard
- feedback: Send clipboard, and the dialog works from the keyboard
- builder: the Windows Builder ships as source, runs in its own console, and apps compile with Rust's GNU toolchain or Microsoft's
- platform: an app also finds its resource map in the builder folder beside it
- win_resource: PNG decode and encode on makepad-fast-inflate instead of zune-png
- builder: one folder layout everywhere, makepad-builder.zip with only the files a Windows build reads, a Rust download over parallel connections, and
- builder (windows): the .bat runs from a folder with spaces and parentheses, and the ZIP always carries it with CRLF
- builder: coding agents start from the macOS/Linux Builder, its compile bar has its end, the app rows say where each app is in a word or two, and Win
- builder (unix): running curl | sh again opens the existing installation with its saved email
- builder: log out from the Account row
- builder: `makepad-builder build APP` compiles an app offline exactly as the Builder does

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:11:31 +02:00
Admin
036fa2fd86 apps, examples: the window manager on Android and Windows, the phone layouts, the task manager, director, mail and the rest; Flow, the asset UI and VJ move to Stage
App and example changes, with the apps that moved to the Stage repository (apps/vj, apps/asset-ui) removed here.

Covers work 6f1e44649..2b1a41df4 for apps examples:

- wm: the Android super-app compiles tiles on the phone against the host engine
- cargo-makepad: the super-app APK is packed by `android dyn-pack`, in Rust
- widgets, storybook: the widget catalogue app, some eighty new widgets, a theme store with mixable style sheets, and the rule that a press belongs to
- wm, widgets: the style tween starts with all eight weights, and the new style sheet takes the last number instead of macOS's
- platform: the Android desk swipes at 120 Hz — offscreen render passes and framebuffers cached, SVG meshes kept, font families that complete
- flow: the flow-ui app and the flowgraph canvas return to the workspace, with staged progress in libs/flow
- app_main!: only ship the fonts an app declares (#1247)
- platform, widgets, wm: every Vulkan pass renders through a negative-height viewport again, so a Wayland or X11 window stands upright, and no capture
- calendar: its own colour contrast is named explicitly, now that the theme store exports one under the same name through the widgets glob
- platform, wm, director: a hosted app's software frame arrives as a top-left texture and the window manager and the director carry no flip term at al
- wm: the desktop style menu lists each style once
- cef, video, platform: what Stage's browser needs from the shared layers
- platform, wm: work builds again on iOS, tvOS and wasm, and the window manager is warning-free on Windows
- ci: tools/ci, a Splash runtime that watches a branch and runs every ci.splash it finds
- ci: the terminal gets its pty helper, director is a desktop tool, and a refused input is asked again
- apps: what the CI box found
- Remove Flow, asset and VJ applications moved into Stage
- ci: a quiet header, a build that visibly moves, and scripts that leave the machine alone
- tests: the workspace suite, run as a whole for the first time, passes outside the example UI tests
- examples: the UI tests pass, for the reasons they failed
- tests: the last three failures of the CI box's night
- tools: makepad-screen is makepad-agents, and its binary is `agents`
- tests: the three binaries over ten seconds in release come under it
- wm: the shell menu says what it did, and the CI waits for that
- mail: the phone layout lines up
- clock: the phone layout fits both orientations
- calendar, reminders, calculator, sheets: the phone layouts fit their space
- platform, widgets, wm: a touch that is taken away is cancelled, never released
- weather, notes, finance, photos, route: the phone layouts tidy up
- files: the phone layout tidies up
- wm: the phone shell's surfaces match the app and the grid
- wm on Android: every app is its own process
- clock: a cancelled release neither opens an alarm nor switches tab
- platform, wm: hosted apps ask the WM for what they cannot do themselves
- wm on Android: apps build on the phone
- wm on Android: app transitions and gestures feel like the phone's
- android: rotated Vulkan windows stop rebuilding their swapchain every frame, and hosted children get touch
- android: hosted children hand frames over with GPU fences and draw only when they have work
- wm on Android: gestures and surfaces settle like the phone's
- widgets: touch lists scroll with Android's physics
- wm on Android: the shell follows the Pixel launcher's motion
- wm on Android: Recents shows the apps over a receding home, and the home screen switches looks
- wm on Android: the look switcher stays put, the iOS dock shows its icons, background apps follow a look change
- task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a D
- files: the tile view's three projections are toolbar buttons
- mail: the local view takes a theme-derived palette and line icons, search pages share records
- director: agent lanes form a tree and Grok joins the usage bar
- widgets, draw: skeuomorphic surfaces light each other through an optional relief buffer
- widgets, platform: a texture can light the relief buffer, menus take colour chips, and a style reload recompiles changed shader functions
- platform, widgets, audio_route, ai: window crossfades and whole-frame presents, caption controls that click, themed menus, a stereo-pair audio tap,
- builder: the Builder TUI matches the new terminal design, Windows executables carry app icons, and every app has one
- files: the Files app deletes nothing and never overwrites
- director: coding agents ask before acting unless you choose otherwise
- sheets, score, git, home: saves cannot cut a file short or overwrite another one, and checkouts cannot write outside the repository
- widgets, builder: the big widget families are features, all on by default, and the Builder takes none of them
- ai: Claude Desktop drives any app with the F10 panel
- wm: starts on Windows
- wm: children open no console windows on Windows
- wm: the whole deck out of a Builder's source, compiled only when the person opens an app
- ai: Connect hands the .mcpb to Claude Desktop itself
- wm: the clock and calendar know the date on Windows
- wm: opening an app rebuilds it when its binary is out of date; warm instances never build
- civil-time: one local wall clock for every app, and it knows the zone on Windows
- platform + wm: a hosted child redraws at its tile's new size
- calendar: the Calendars sheet is an opaque panel, and the wide layout does not float one over its sidebar
- platform: an app's package dir, icons and bundle name rebuild only that app
- build: the AI stack, csg, Scope and Source Library join the one workspace
- ai chat: the chat's backends are the CLI, MCP and cloud providers; the local model is the `localai` feature
- apps: every app that hosts the chat has a `localai` feature for the local model, off unless the app's own job runs one
- widgets: every widget family is a crate of its own under widgets/families, and makepad-widgets links, re-exports and registers the ones its features
- aichat, widgets: the chat reads the design feedback through the tweaker's hook, so linking the chat no longer needs the tweaker
- apps, examples, libs: each crate builds only the widget families it uses, and the design overlay is each app's own default feature
- ai chat: a build without local AI starts on the first provider that answers here, not on "No model"
- repo: no third-party comic archive, generated models or sample asset in the tree
- remove big example media files
- wm: in a Makepad Builder installation apps build through the Builder, however wm was started

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:10:58 +02:00
Admin
f6a99a2721 libs: the AI stack, flowgraph, git, audio_route, win_resource and the other libraries; Flow, the asset library and VJ move to Stage
Library changes outside the platform's own dependencies (those came with the platform commits above). libs/asset and libs/flow move to the Stage repository with the apps that use them.

Covers work 6f1e44649..2b1a41df4 for libs:

- wm: the Android super-app compiles tiles on the phone against the host engine
- cargo-makepad: the super-app APK is packed by `android dyn-pack`, in Rust
- cef: a page's audio can be captured instead of played
- flow: the flow-ui app and the flowgraph canvas return to the workspace, with staged progress in libs/flow
- svg: a stroke that bends tighter than its half width collapses its inner edge to the corner
- the accent a name is written with stops deciding whether search finds it
- ai stems: LaneDemixer, VocalsModel and the platform Stage origin/main needs
- The regex engine accepts \b and \B, reports the earliest match so a scan can resume after it, and can decide word boundaries on ASCII so a code sear
- workspace: Scope's settings carry the code map's tab width and the directories each prepared project hides from its map
- cef, video, platform: what Stage's browser needs from the shared layers
- platform, wm: work builds again on iOS, tvOS and wasm, and the window manager is warning-free on Windows
- ci: tools/ci, a Splash runtime that watches a branch and runs every ci.splash it finds
- stitch: the crate says what the rest of the repository says about its license
- ci: a run is one target dir and one cargo batch per target, and the wall draws
- apps: what the CI box found
- Remove Flow, asset and VJ applications moved into Stage
- tests: the workspace suite, run as a whole for the first time, passes outside the example UI tests
- libs: no warnings in the workspace check on any row
- tests: the last three failures of the CI box's night
- gif: the crate's doc examples compile
- cef: a hosted browser survives its host's exit
- tests: the three binaries over ten seconds in release come under it
- git: the memory ledger can take what it is asked for
- script: re-entrant dispatch, thread index validation, Any-based handle downcasts, UTF-8 previews; regex: never_loop fix
- fix(text): enable ttf-parser gvar-alloc for many-tuple variable fonts
- platform, widgets, wm: a touch that is taken away is cancelled, never released
- platform, wm: hosted apps ask the WM for what they cannot do themselves
- wm on Android: apps build on the phone
- task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a D
- flowgraph: ordered ports take many wires, sockets can override their icon, and the canvas embeds as a viewport
- cef: captured frames and audio carry callback clocks and a navigation epoch
- git: timings read a portable clock
- ai: the hub's rig-fixture tests find the asset library without the asset client
- ai llm: a Metal main buffer is filled in 32 MB chunks
- diskmap: a scan lists each macOS directory in one getattrlistbulk call and classifies files without allocating or locking
- platform, widgets, audio_route, ai: window crossfades and whole-frame presents, caption controls that click, themed menus, a stereo-pair audio tap,
- builder: the Builder TUI matches the new terminal design, Windows executables carry app icons, and every app has one
- sheets, score, git, home: saves cannot cut a file short or overwrite another one, and checkouts cannot write outside the repository
- git: worktree status matches git on real repositories and can be cancelled
- cuda: builds link only the CUDA toolkit they are given, never a system install
- audio_route: one API on macOS, Windows and Linux, monitoring by default and processing only when asked, plus shaders that discard a value compile to
- platform, widgets, ai: a restyle recompiles nothing it already has, shows only complete frames, and a window can own its caption
- audio_route example: print the samples that reached the processor each second
- widgets, builder: the big widget families are features, all on by default, and the Builder takes none of them
- ai hub: a local chat with no model says so once, plainly
- ai: Claude Desktop drives any app with the F10 panel
- wm: children open no console windows on Windows
- ai: Connect hands the .mcpb to Claude Desktop itself
- civil-time: one local wall clock for every app, and it knows the zone on Windows
- ai-speech: makepad-ai-sfx (and with it ai-h3) is built only for IndexTTS
- script + wasm_bridge: no build script that reruns on every file
- build: the AI stack, csg, Scope and Source Library join the one workspace
- ai chat: the chat's backends are the CLI, MCP and cloud providers; the local model is the `localai` feature
- widgets: every widget family is a crate of its own under widgets/families, and makepad-widgets links, re-exports and registers the ones its features
- apps, examples, libs: each crate builds only the widget families it uses, and the design overlay is each app's own default feature
- livepipe: takes makepad-widgets without its default families, now that the AI stack is in the one workspace
- ai chat: a build without local AI starts on the first provider that answers here, not on "No model"
- thiserror: RUSTC_BOOTSTRAP no longer turns on the unstable generic member access API
- builder: makepad-builder.exe declares itself like a well-formed Windows program and stops a stalled build through a job object instead of taskkill
- builder + ai-cuda: the CUDA kernel progress shows in the Builder's Compile row, not scribbled over its screen
- repo: no third-party comic archive, generated models or sample asset in the tree
- builder: the Windows Builder ships as source, runs in its own console, and apps compile with Rust's GNU toolchain or Microsoft's
- win_resource: PNG decode and encode on makepad-fast-inflate instead of zune-png
- builder: one folder layout everywhere, makepad-builder.zip with only the files a Windows build reads, a Rust download over parallel connections, and

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:10:57 +02:00
Admin
e94e15f429 draw, widgets: the library is makepad-widgets-core plus a crate per widget family, eighty new widgets and the storybook, relief-lit skeuomorphic surfaces, the feedback panel, keyboard focus and tooltips clear of the cursor
makepad-widgets becomes a front crate over widgets/core and widgets/families (each family a crate of its own, linked by features, so an app compiles only the families it uses); widgets/feedback is the Send feedback panel. The dev PRs (#1241-#1264) are ported to the new layout, as in the merge of dev into work.

Covers work 6f1e44649..2b1a41df4 for draw widgets xr code_editor:

- widgets, storybook: the widget catalogue app, some eighty new widgets, a theme store with mixable style sheets, and the rule that a press belongs to
- wm, widgets: the style tween starts with all eight weights, and the new style sheet takes the last number instead of macOS's
- platform: the Android desk swipes at 120 Hz — offscreen render passes and framebuffers cached, SVG meshes kept, font families that complete
- Button: activate from the keyboard when focused (#1241)
- app_main!: only ship the fonts an app declares (#1247)
- platform, widgets, wm: every Vulkan pass renders through a negative-height viewport again, so a Wayland or X11 window stands upright, and no capture
- widgets: the supersampled resolve and the map's shadow mask sample their textures as stored, like every other render texture
- widgets, platform: the last twelve warnings go
- cef, video, platform: what Stage's browser needs from the shared layers
- apps: what the CI box found
- ScrollBar: add `show_handle` for a view that scrolls without a grabbable bar (#1254)
- widgets: children a lookup discovers reach the dump, the snapshot and the flood searches
- tests: the workspace suite, run as a whole for the first time, passes outside the example UI tests
- examples: the UI tests pass, for the reasons they failed
- libs: no warnings in the workspace check on any row
- tests: the last three failures of the CI box's night
- Linux: fix window chrome button hovers and how maximized/fullscreen windows work (#1255)
- Tooltip: position anchored tooltips in the same draw (#1256)
- tests: the three binaries over ten seconds in release come under it
- widgets: let the host install script mods into every Splash isolate
- widgets: a pooled test context forgets the last case's Escape claim
- widgets: the pooled test context's resets replace the globals
- RadioButton: fix its touch hover state and click-off behavior (#1258)
- HtmlLink: fix its hover and pressed states (#1257)
- RadioButton: take key focus on the click, not on the press (#1259)
- feat(text): CoreText outline fallback for hvgl-only fonts (macOS)
- draw text: the CoreText outline fallback is only ever resolved for a face whose outlines live solely in hvgl, and font-family diagnostics are the `f
- platform, widgets, wm: a touch that is taken away is cancelled, never released
- wm on Android: every app is its own process
- widgets: touch lists scroll with Android's physics
- task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a D
- widgets, draw: skeuomorphic surfaces light each other through an optional relief buffer
- widgets, platform: a texture can light the relief buffer, menus take colour chips, and a style reload recompiles changed shader functions
- widgets: relief surfaces can travel like mechanical keys, and dark surfaces take less neighbour light
- platform, widgets, audio_route, ai: window crossfades and whole-frame presents, caption controls that click, themed menus, a stereo-pair audio tap,
- platform, widgets, ai: a restyle recompiles nothing it already has, shows only complete frames, and a window can own its caption
- widgets: relief surfaces can swing their light toward a point
- widgets, builder: the big widget families are features, all on by default, and the Builder takes none of them
- ai: Claude Desktop drives any app with the F10 panel
- Constrain Splash external I/O to the host service bridge (#1243)
- PortalList: stop following the end when scrolling to an earlier item (#1261)
- draw: glass of a view that stopped drawing leaves the screen
- widgets: the Widget lookup methods and with_script_vm_id are compiled once, not once per widget type
- widgets: the library moves to makepad-widgets-core in widgets/core, and makepad-widgets becomes its front crate
- widgets: the Window, widget tree and panel theme reach the tweaker, voice, AI slot and dock through hooks, not through their modules
- widgets: every widget family is a crate of its own under widgets/families, and makepad-widgets links, re-exports and registers the ones its features
- aichat, widgets: the chat reads the design feedback through the tweaker's hook, so linking the chat no longer needs the tweaker
- apps, examples, libs: each crate builds only the widget families it uses, and the design overlay is each app's own default feature
- widgets: the build scripts rerun on their own edits only, and makepad-widgets no longer reads MAKEPAD
- feedback: Send feedback, a caption icon and a small panel that shows exactly what is sent
- feedback: the panel's wording reads right and draws in any font
- feedback: takes makepad-widgets without its default families
- widgets: the empty parts of an app's caption bar drag the window again
- ScrollBar: fade out when idle, like macOS overlay scrollers (#1264)
- platform, draw: web builds start again
- widgets: the keyboard reaches boxes and modals
- widgets: a hover tooltip never sits under the mouse cursor
- feedback: Send clipboard, and the dialog works from the keyboard

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:10:50 +02:00
Admin
ea2b2942aa platform: web builds start and draw text again, every app builds the same windows crate, and apps read the clipboard and find their resource map in the Builder's folder
The platform part of work 163af41b7..2b1a41df4, as one step that builds (makepad-platform checks for macOS and wasm32):

- macOS: keep the paint clock beating while the window is minimized (#1244)
- Linux: only link libdrm for the direct backend (#1245)
- app_main!: only ship the fonts an app declares (#1247)
- macOS: re-arm the display links when a window leaves the Dock (#1251)
- Vulkan: stop printing the loader's startup narration by default (#1252)
- Linux: fix window chrome button hovers and how maximized/fullscreen windows work (#1255)
- Constrain Splash external I/O to the host service bridge (#1243)
- ScrollBar: fade out when idle, like macOS overlay scrollers (#1264)
- platform: every app builds the same `windows` crate
- platform, draw: web builds start again
- platform: web text draws again
- platform: clipboard_read, reading text or an image from the system clipboard
- platform: an app also finds its resource map in the builder folder beside it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:10:24 +02:00
Admin
fb84574715 platform: faster builds and sturdier runs -- #[derive(Script)] emits one helper call per field, studio-protocol no longer waits for script, an app's package dir, icons and bundle name rebuild only that app, MAKEPAD=gpusim builds again, and a contained panic on macOS no longer frees the windows under AppKit
The platform part of work 5f9953350..163af41b7, as one step that builds (makepad-platform checks for macOS and wasm32):

- script: #[derive(Script)] emits one helper call per field, and ScriptNew's default methods keep their bodies out of every type
- platform: studio-protocol no longer waits for script, so platform starts ~0.5 s earlier
- platform: an app's package dir, icons and bundle name rebuild only that app
- script + wasm_bridge: no build script that reruns on every file
- widgets: every widget family is a crate of its own under widgets/families, and makepad-widgets links, re-exports and registers the ones its features pick
- feedback: Send feedback, a caption icon and a small panel that shows exactly what is sent
- platform: MAKEPAD=gpusim builds again
- thiserror: RUSTC_BOOTSTRAP no longer turns on the unstable generic member access API
- platform (macos): a contained panic no longer frees the windows under AppKit or leaves an app that ignores quit

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:10:03 +02:00
Admin
588a19aae9 platform: Windows and macOS -- every window keeps animating with several open, half-float RGBA textures have four channels, a first-opened popup draws its rows, a texture pass before its window has a size is skipped, desktop apps open no console window, the macOS display link is kept until invalidated, and a hosted child redraws at its tile's new size
The platform part of work 90b6a0581..5f9953350, as one step that builds (makepad-platform checks for macOS and wasm32):

- sheets, score, git, home: saves cannot cut a file short or overwrite another one, and checkouts cannot write outside the repository
- git: worktree status matches git on real repositories and can be cancelled
- platform (windows): every window keeps animating with several windows open
- audio_route: one API on macOS, Windows and Linux, monitoring by default and processing only when asked, plus shaders that discard a value compile to WGSL
- platform, widgets, ai: a restyle recompiles nothing it already has, shows only complete frames, and a window can own its caption
- platform (windows): half-float RGBA textures have four channels
- platform (macos): the display link is kept until it is invalidated
- windows: desktop apps open no console window, and still speak through pipes
- ai: Claude Desktop drives any app with the F10 panel
- wm: starts on Windows
- platform (windows): a popup opened for the first time draws its rows
- platform + wm: a hosted child redraws at its tile's new size
- platform (windows): a texture pass drawn before its window has a size is skipped, not a crash

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:09:39 +02:00
Admin
d7ae76ae92 platform: hosted apps on Android -- every app its own process under the WM, frames handed over with GPU fences, a touch that is taken away is cancelled, hosted children ask the WM for what they cannot do, window crossfades and whole-frame presents, relief-lit textures
The platform part of work 6941c0e86..90b6a0581, as one step that builds (makepad-platform checks for macOS and wasm32):

- platform, widgets, wm: a touch that is taken away is cancelled, never released
- wm on Android: every app is its own process
- platform, wm: hosted apps ask the WM for what they cannot do themselves
- wm on Android: app transitions and gestures feel like the phone's
- android: rotated Vulkan windows stop rebuilding their swapchain every frame, and hosted children get touch
- vulkan (android): a window released on suspend is not released again
- android: hosted children hand frames over with GPU fences and draw only when they have work
- wm on Android: the shell follows the Pixel launcher's motion
- wm on Android: the look switcher stays put, the iOS dock shows its icons, background apps follow a look change
- task, cargo-makepad, widgets, audio: the task manager chooses its columns, graphs every process' network and disk traffic and installs itself as a Dock app bu
- git: timings read a portable clock
- widgets, platform: a texture can light the relief buffer, menus take colour chips, and a style reload recompiles changed shader functions
- platform, widgets, audio_route, ai: window crossfades and whole-frame presents, caption controls that click, themed menus, a stereo-pair audio tap, and the AI
- platform: Android builds without Vulkan compile again, and the font-selection test counts the hosted entry point
- platform: the pipeline-skip repaint mark exists only on Apple, where Metal reads it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:09:17 +02:00
Admin
01a1c70b76 script: the Octoscript VM hardening -- execution caps, fuel and deadlines, heap/string/array/object limits, parser diagnostics and re-entrant dispatch, keeping a Makepad host's semantics and speed
The platform part of work 76627b6f1..6941c0e86, as one step that builds (makepad-platform checks for macOS and wasm32):

- script: re-entrant dispatch, thread index validation, Any-based handle downcasts, UTF-8 previews; regex: never_loop fix
- script: port Octoscript WS1 — worklist equality with fuel/deadline/work bail, uncaught-error bail, allow_debug_output
- script: port Octoscript parser/tokenizer/control-flow VM patches (ws2)
- script: port Octoscript heap/string/array/object hardening onto upstream's allocation budget
- script: port orphaned Octoscript VM hardening (execution caps, clear_type_methods, parser diagnostics)
- script: keep silenced streaming evals running past uncaught errors
- script: the Octoscript hardening keeps a Makepad host's semantics and its speed

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:08:33 +02:00
Admin
a185b868d1 platform: GPU passes store top-left rows on every backend, hosted apps get software frames as textures, the Android desk renders at 120 Hz, and the platform builds warning-free on every CI target
The platform part of work 6f1e44649..76627b6f1, as one step that builds (makepad-platform checks for macOS and wasm32):

- wm: the Android super-app compiles tiles on the phone against the host engine
- cargo-makepad: the super-app APK is packed by `android dyn-pack`, in Rust
- widgets, storybook: the widget catalogue app, some eighty new widgets, a theme store with mixable style sheets, and the rule that a press belongs to whatever
- platform: the Android desk swipes at 120 Hz — offscreen render passes and framebuffers cached, SVG meshes kept, font families that complete
- ai stems: LaneDemixer, VocalsModel and the platform Stage origin/main needs
- platform, widgets, wm: every Vulkan pass renders through a negative-height viewport again, so a Wayland or X11 window stands upright, and no capture consumer
- platform: every OpenGL texture pass stores top-left rows, custom cameras included, and culls with the winding its inverted projection gives
- platform, wm, director: a hosted app's software frame arrives as a top-left texture and the window manager and the director carry no flip term at all
- The regex engine accepts \b and \B, reports the earliest match so a scan can resume after it, and can decide word boundaries on ASCII so a code search never f
- cef, video, platform: what Stage's browser needs from the shared layers
- platform, wm: work builds again on iOS, tvOS and wasm, and the window manager is warning-free on Windows
- stitch: the crate says what the rest of the repository says about its license
- platform: no warnings on tvOS and linux_direct, and a missing pty helper says so
- tests: the workspace suite, run as a whole for the first time, passes outside the example UI tests
- platform: a hidden window wears no hands-off frame
- libs: no warnings in the workspace check on any row
- tools: makepad-screen is makepad-agents, and its binary is `agents`
- platform: the storage module says how much a volume has free
- git: the memory ledger can take what it is asked for
- ci: a driven app takes every key once, and the storage module builds for the browser

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 20:08:13 +02:00
Kevin Boos
229057962a
ScrollBar: fade out when idle, like macOS overlay scrollers (#1264)
* PortalList: fix the height tree losing old heights when the range grows

`HeightTree::resize` zero-filled the new Fenwick nodes and only added the
new items into them, so a new node whose span reached back into the old
range never received the old items' sums. Growing past a power of two
then dropped every height under that node: 50 to 100 items left the total
unchanged (the scroll handle kept its size after paginating), and other
sizes made the bar wrong or vanish. Fold the nodes tiling the old range
into their new parents before adding the new items, and seed new items
from the tree's own default so `update_default_height` shifts them right.

* ScrollBar: fade out once scrolling stops, like macOS overlay scrollers

A bar now starts hidden and snaps in whenever its scroll position or
viewport moves (wheel, trackpad, touch flick, drag, or a programmatic
scroll), when the pointer enters its strip, or when its handle is grabbed.
It fades out `hide_delay` seconds after the last of those, unless the
pointer is still over it or dragging; `auto_hide: false` keeps the old
always-visible bar. While hidden it takes no presses, so a tap on its
strip reaches the content beneath. A touch release, or a hover-out lost
while the host was hidden, releases the hover hold. ComboBox forwards
timer and frame events to its popup's bar so the fade runs there too.

* CodeEditor: add `pad_right` to keep text clear of an overlaid scroll bar

The editor only had `pad_left_top`, so wrapped text always ran to its
right edge and a host could only keep text clear of the scroll bar by
shrinking the whole editor, which pulled the bar in from the edge too.
`pad_right` narrows the wrap column and the reported width instead, so
the editor can span to its frame and draw its bar in that space.

* ScrollBar, PortalList: simplify a few comments

---------

Co-authored-by: Kevin Boos <kevinaboos@futurewei.com>
2026-09-26 17:23:58 +02:00
Admin
33fbfd6733 remove big example media files
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 13:39:29 +02:00
Admin
014bbc343c remove big example media files
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 13:32:23 +02:00
b580de105b fix(fork): refresh widgets from upstream work + re-apply sibling reexports 2026-09-26 03:20:34 +03:00
e3a1e72e53 fix(fork): refresh ai-hub from upstream work - HttpServerHandle API 2026-09-26 03:14:42 +03:00
82c6ef3ab0 fix(fork): refresh draw from upstream work - font API skew 2026-09-26 03:11:40 +03:00
562dfde5e3 fix(fork): add Touch protocol names to makepad-test studio_msg_name 2026-09-26 03:07:45 +03:00
ba69fc28bf fix(fork): refresh libs/regex from upstream work - ascii_word_boundary 2026-09-26 03:02:48 +03:00
b211a372d9 fix(fork): base platform+test on upstream work 5f99533 + re-apply nigig BeforeStartup, NIGIG_TEST_MODE, touch protocol 2026-09-25 23:19:08 +03:00
4e8c0b5182 fix(fork): refresh libs/regex from upstream dev - add ascii_word_boundary 2026-09-25 23:02:43 +03:00
8eaa075f1f fix(fork): refresh platform from upstream dev fda40f5 + re-apply nigig BeforeStartup, NIGIG_TEST_MODE, touch/long-press/paste/IME protocol 2026-09-25 22:55:32 +03:00
91b6267f84 fix(fork): restore upstream metal.rs - fix merge delimiter artifact 2026-09-25 21:11:01 +03:00
ce45048baf fix(fork): restore upstream blocking_http streaming API + add RemotePinch alongside nigig touch/joystick protocol 2026-09-25 20:47:20 +03:00
afccda5445 fix(fork): restore nigig game-sim/math + workspace members, take upstream finance/route manifests - preserve game crates alongside dev/work split into scene/soft-body 2026-09-25 20:12:03 +03:00
99ca24dbbc Merge upstream origin/work 5f99533 into nigig fork alongside dev 2026-09-25 17:32:26 +03:00
a0f46b7d83 Merge upstream origin/dev fda40f56 into nigig fork - preserve nigig hub/web_server, take upstream dev updates 2026-09-25 17:25:35 +03:00
02d92e5cb9 Merge remote fork gitdab/nigig-makepad-test-android preserving local nigig android commits 2026-09-25 16:35:10 +03:00
cfb2a4b0ba Merge remote fork gitdab/nigig-makepad-test-android (66cc4f1) preserving local 10 nigig android commits 2026-09-25 16:24:43 +03:00
Admin
5f99533505 Merge branch 'wm-fixes' into work 2026-09-25 11:20:28 +02:00
Admin
343de346b7 calendar: the Calendars sheet is an opaque panel, and the wide layout does not float one over its sidebar -- paper (sheets, pages, panels) was the theme's inset tint, 15% black in the desktop dark theme, so every sheet showed the content under it; it is now that tint over the window background, the colour the root already showed. A Calendars sheet or page carried from the phone or landscape layout into the wide one reopened as a 320 pt panel at the phone button's position, its Close floating over the sidebar's own calendar rows; the wide layout closes it, since the sidebar lists the calendars
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 11:14:14 +02:00
Admin
f82a3c2126 draw: glass of a view that stopped drawing leaves the screen -- a glass surface records into the window overlay and stays there while its parent list does not redraw (a cached view); a texture-cached view that went invisible never redraws, so its glass stayed where it last was. The calendar switching from its phone layout to the wide one kept the phone toolbar's glass capsule over the sidebar's mini month. The overlay now also drops a glass whose parent list renders into a pass that is no longer attached (Cx::pass_attachment_is_stale, walked up the texture-pass chain)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 11:14:14 +02:00
Admin
abcb4c3445 platform (windows): a texture pass drawn before its window has a size is skipped, not a crash -- a hosted child can draw before the host's first WindowGeomChange, at dpi 0, so a texture-cached view's pass had a NaN size: the viewport check (< 1) let NaN through, CreateTexture2D failed and the unwrap of the missing render target killed the child (calendar in wm on .100: 'Websocket closed', 3 of 4 launches). setup_pass_render_targets now says whether there is a target to draw into (refuses NaN and a render target the device could not create) and draw_pass_to_texture skips the pass
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 11:14:14 +02:00