mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-01 13:57:18 -06:00
* Monitor profile: say which profile is in use and why; apply a late display reading (#569) Color Settings › Monitor Profile used to fall back to sRGB without a word when the display's profile was missing, unreadable, not RGB or unusable as a destination, and dropped a macOS reading that took longer than 2 s. `ColorState::monitor_status` now reports the profile actually applied, its fingerprint, the source (auto / manual / fallback) and the reason for a fallback. `edit.colorSettings` (`monitorStatus`), Help › System Info and the Color Settings dialog show it, and a fallback in auto posts a notice. The macOS reader also names the display it read. On a dual-display Mac it reports the menu-bar display ("Built-in Retina Display") while the canvas is on the external monitor, which is the display-selection bug in #569; following the window's display is the next step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Monitor profile auto: each window uses the profile of the display it is on (#569) The macOS reader now lists every display (id, name, frame, ICC profile and its System Settings name) instead of asking for the "main screen", which from a windowless helper is the menu-bar display. Each window picks the display it overlaps most, as NSWindow.screen does, and its canvas is shown in that display's profile: moving a window to another display switches the profile without a restart, and two windows of one document on different displays each keep their own. The GPU canvas shares the document texture and keeps a display LUT per (document, display); CPU textures are per (document, display). Displays are read again when PhotoCraft comes back to the front (a profile changed in System Settings or by a calibration tool), and when a window is on an unknown display or one whose size changed (connected, removed, rearranged), at most every 5 s. A failed re-read keeps the previous reading. Help › System Info lists each display's profile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Monitor profile auto: act on the r1 review; no periodic re-read (#569) Following the owner's decision on echo round r1: - No periodic discovery: a read costs about 0.2 s of CPU, and a profile reassigned while PhotoCraft stays in front with no window moving practically doesn't happen. It is picked up at the next return to the front, or when Edit › Color Settings opens, which now reads at once. - Every document window, not only the main one, asks for a reading when it is on an unknown display or one whose size changed. - The focus re-read is throttled to one per 30 s; a trigger inside that window is deferred, not dropped. - Starting a reading schedules the frame that applies its result, so an idle window doesn't wait for unrelated input. - The osascript helper is stopped after 10 s (killed and reaped, both pipes drained meanwhile), so a hung reading can't block later ones. - The Color Settings dialog recomputes "Monitor profile in use" as it draws, and the status says when an earlier reading is kept after a failed re-read (detection `retained`). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Monitor profile auto: document windows count for focus and wake the main window (#569) Echo round r2 on #591: - Coming back to PhotoCraft through a document window (macOS reports focus per window, so the main window stays unfocused) now counts as a return to the front and reads the displays again, within the 30 s throttle. - A document window that is on an unknown or resized display, or that brings PhotoCraft back to the front, asks the main window for a frame: the reading starts there, so it no longer waits for unrelated input. One frame per trigger, no continuous repaints. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Monitor profile: pass the notice dismiss preference added on main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>