diff --git a/arc/canvas.md b/arc/canvas.md index 9de1c45ed7206fa5502f03da903cc477c666d908..8034a7146b4d51d3207b105d61f38bdb93b2eac6 100644 --- a/arc/canvas.md +++ b/arc/canvas.md @@ -74,7 +74,12 @@ give placement. The comparators in `tools/canvas` (with the probes `layout-probe` and `page-probe`) keep checking them. Equations draw in two dimensions from the tree `onestore::page::Math` parses. -The linear text stays the editable source. Ink draws stroke by stroke in page +They are edited as OneNote's equation editor edits them: Alt+= starts one, +typing is its linear format (UnicodeMath), and a space builds up what it ends. +Linear and Professional switch an equation between the forms, and OneNote +stores both. Links follow OneNote too: a typed URL links itself when a space or +Enter ends it, the Link dialog stores its address in a hidden field code before +the label, and a click opens a link. Ink draws stroke by stroke in page coordinates. Page templates' background art is recreated as vector art and recognised by the stored picture's hash. OneNote's bitmaps aren't shipped. diff --git a/arc/file-format.md b/arc/file-format.md index 9e7b87162cfc13ccc4230e2b3c2ee4b35ef99a65..f8bfbeefe7d4403dbf534bebc479d450949430bf 100644 --- a/arc/file-format.md +++ b/arc/file-format.md @@ -43,6 +43,10 @@ the file grows): changes and depends on the revision before it. OneNote itself typically appends a small dependent revision for each edit: the changed objects plus the chain of containers above them, whose modification times moved. +- **Contexts** label revisions besides the current one. A page's *versions* are earlier + revisions of its own space kept current under contexts of their own, and its version + history is one more revision, under a fixed context, listing them. Restoring a version + forks the page's chain from it; deleting one only unlists it. - **Objects** have a type (a JCID) and a property set. They reference each other by *ExtendedGUID*: a GUID plus a small integer. Inside a revision these are compressed to compact IDs through a global ID table. diff --git a/arc/platforms.md b/arc/platforms.md index bba663bf2f57731912a1796149de4c3309d4ed9b..aff2ff1b4e35a2be0a9618c7c13b420444375811 100644 --- a/arc/platforms.md +++ b/arc/platforms.md @@ -27,7 +27,10 @@ Accessibility for the page goes through AccessKit's winit adapter on both. ### macOS - The title bar is transparent. The app draws its own around AppKit's traffic - lights, as part of the same frame as the rest of the chrome. + lights, as part of the same frame as the rest of the chrome. Under the whole + window lies AppKit's title bar material, an `NSVisualEffectView`, and the + chrome is drawn transparent over it, so the title bar, toolbar, tab row and + sidebar take the system's desktop tint, appearance and focus state exactly. - AppKit supplies the open and save panels, alerts, the date picker, date formatting for new page titles and conflict labels, the account's full name (used as the author, as OneNote uses Office's user name), and the caret and @@ -45,6 +48,10 @@ Accessibility for the page goes through AccessKit's winit adapter on both. the compositor where it offers server-side decorations and a client-side frame otherwise. The app draws its own window controls only where no frame could be made. +- The toolbar and the rest of the chrome continue the title bar's fill, + focused and not: on KDE the colour scheme's header colours from + `kdeglobals`, as KWin paints its title bars, and on GNOME winit's Adwaita + frame's. A settings portal signal re-reads them when the scheme changes. - zenity or kdialog provide the pickers and alerts. The XDG settings portal provides the colour scheme. Text conventions come from the C library's locale. Fontconfig is loaded at run time, so builds need no headers for it. @@ -58,6 +65,9 @@ Accessibility for the page goes through AccessKit's winit adapter on both. The readme names both as goals. Nothing platform-specific exists for them yet. Keeping `ui` and `draw` free of platform toolkits is what keeps them within reach. +The chrome's fill already has its seam: `platform::install_backdrop` lays a +system material under a transparent surface, as Mica or Aero glass would, +and `platform::titlebar` names opaque fills where the system has those. ## iOS: native around the canvas diff --git a/arc/testing.md b/arc/testing.md index 0f351d96b32fbba420f4df9004d73af7a227728f..b7cf063ccfd2a6a397b444b255082a0f84709ae0 100644 --- a/arc/testing.md +++ b/arc/testing.md @@ -1,4 +1,4 @@ -# Testing, and why the code can be trusted +# Testing — Why the code can be trusted Snowbound writes into other people's notebooks, often while their copy of OneNote is writing to the same file. A bug doesn't just crash an app. It can diff --git a/arc/ui.md b/arc/ui.md index 4332e07a89fe9c143e319f8643ab2b236192beb2..c463fe2756e7788b24be651ca79ac85a65bf9ecc 100644 --- a/arc/ui.md +++ b/arc/ui.md @@ -22,8 +22,10 @@ The motion comes from [File Pilot](https://filepilot.tech): things move quickly and never feel like they're waiting on an animation. Animated values ease exponentially toward their targets with a short half-life. That is frame-rate independent, a retargeted animation continues smoothly from where -it is, and it settles fast. A context menu opens instantly at the pointer. A -drop-down grows out of its anchor. +it is, and it settles fast. Popups open and close on short timed curves, +slow enough to follow: a menu grows out of the pointer or its button as it +fades in, a combo's field widens into its list, and a dialog swings up into +place over a dimmed window, as Windows opens a window. ## Why not native widgets diff --git a/readme.md b/readme.md index 1e74c7ca9d09f0ad5e1b2e525ce0482918b58741..70660c2f8d1bd547ff4108ae5248004e042b0e67 100644 --- a/readme.md +++ b/readme.md @@ -7,8 +7,10 @@ Type and draw notes on any platform, while maintaining ownership of your data. Snowbound does not use a typical markdown or structured note format, but rather uses rich text on a free canvas. Unlike other infinite canvas apps, our canvas feels more like a standard text editor software as textboxes automatically -create and resize as you would expect. In addition, Snowbound (TODO) supports -pen and drawing tools, recording audio and video, revision history, multi-machine +create and resize as you would expect. In addition, Snowbound supports +pen and drawing tools [(WIP)](https://shale.paperclover.net/snowbound/issues/21), recording audio and video +[(WIP)](https://shale.paperclover.net/snowbound/issues/36), revision +history[(WIP)](https://shale.paperclover.net/snowbound/issues/37), multi-machine live collaboration, and much more.