| author | |
| committer | |
| log | b589fec9d51d404e16bcb68a176f226d5b5fa459 |
| tree | 37e51e60f02f92d0e7aa9ba9da0999abad134872 |
| parent | c1bbd6da524e4caf05b6b87c1559e61bfe7cbb70 |
| signature | Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU |
6 files changed, 37 insertions(+), 9 deletions(-)
arc/canvas.md+6-1| ... | @@ -74,7 +74,12 @@ give placement. The comparators in `tools/canvas` (with the probes | ... | @@ -74,7 +74,12 @@ give placement. The comparators in `tools/canvas` (with the probes |
| 74 | `layout-probe` and `page-probe`) keep checking them. | 74 | `layout-probe` and `page-probe`) keep checking them. |
| 75 | 75 | ||
| 76 | Equations draw in two dimensions from the tree `onestore::page::Math` parses. | 76 | Equations draw in two dimensions from the tree `onestore::page::Math` parses. |
| 77 | The linear text stays the editable source. Ink draws stroke by stroke in page | 77 | They are edited as OneNote's equation editor edits them: Alt+= starts one, |
| 78 | typing is its linear format (UnicodeMath), and a space builds up what it ends. | ||
| 79 | Linear and Professional switch an equation between the forms, and OneNote | ||
| 80 | stores both. Links follow OneNote too: a typed URL links itself when a space or | ||
| 81 | Enter ends it, the Link dialog stores its address in a hidden field code before | ||
| 82 | the label, and a click opens a link. Ink draws stroke by stroke in page | ||
| 78 | coordinates. Page templates' background art is recreated as vector art and | 83 | coordinates. Page templates' background art is recreated as vector art and |
| 79 | recognised by the stored picture's hash. OneNote's bitmaps aren't shipped. | 84 | recognised by the stored picture's hash. OneNote's bitmaps aren't shipped. |
| 80 | 85 |
arc/file-format.md+4| ... | @@ -43,6 +43,10 @@ the file grows): | ... | @@ -43,6 +43,10 @@ the file grows): |
| 43 | changes and depends on the revision before it. OneNote itself typically | 43 | changes and depends on the revision before it. OneNote itself typically |
| 44 | appends a small dependent revision for each edit: the changed objects plus | 44 | appends a small dependent revision for each edit: the changed objects plus |
| 45 | the chain of containers above them, whose modification times moved. | 45 | the chain of containers above them, whose modification times moved. |
| 46 | - **Contexts** label revisions besides the current one. A page's *versions* are earlier | ||
| 47 | revisions of its own space kept current under contexts of their own, and its version | ||
| 48 | history is one more revision, under a fixed context, listing them. Restoring a version | ||
| 49 | forks the page's chain from it; deleting one only unlists it. | ||
| 46 | - **Objects** have a type (a JCID) and a property set. They reference each | 50 | - **Objects** have a type (a JCID) and a property set. They reference each |
| 47 | other by *ExtendedGUID*: a GUID plus a small integer. Inside a revision these | 51 | other by *ExtendedGUID*: a GUID plus a small integer. Inside a revision these |
| 48 | are compressed to compact IDs through a global ID table. | 52 | are compressed to compact IDs through a global ID table. |
arc/platforms.md+11-1| ... | @@ -27,7 +27,10 @@ Accessibility for the page goes through AccessKit's winit adapter on both. | ... | @@ -27,7 +27,10 @@ Accessibility for the page goes through AccessKit's winit adapter on both. |
| 27 | ### macOS | 27 | ### macOS |
| 28 | 28 | ||
| 29 | - The title bar is transparent. The app draws its own around AppKit's traffic | 29 | - The title bar is transparent. The app draws its own around AppKit's traffic |
| 30 | lights, as part of the same frame as the rest of the chrome. | 30 | lights, as part of the same frame as the rest of the chrome. Under the whole |
| 31 | window lies AppKit's title bar material, an `NSVisualEffectView`, and the | ||
| 32 | chrome is drawn transparent over it, so the title bar, toolbar, tab row and | ||
| 33 | sidebar take the system's desktop tint, appearance and focus state exactly. | ||
| 31 | - AppKit supplies the open and save panels, alerts, the date picker, date | 34 | - AppKit supplies the open and save panels, alerts, the date picker, date |
| 32 | formatting for new page titles and conflict labels, the account's full name | 35 | formatting for new page titles and conflict labels, the account's full name |
| 33 | (used as the author, as OneNote uses Office's user name), and the caret and | 36 | (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. | ... | @@ -45,6 +48,10 @@ Accessibility for the page goes through AccessKit's winit adapter on both. |
| 45 | the compositor where it offers server-side decorations and a client-side | 48 | the compositor where it offers server-side decorations and a client-side |
| 46 | frame otherwise. The app draws its own window controls only where no frame | 49 | frame otherwise. The app draws its own window controls only where no frame |
| 47 | could be made. | 50 | could be made. |
| 51 | - The toolbar and the rest of the chrome continue the title bar's fill, | ||
| 52 | focused and not: on KDE the colour scheme's header colours from | ||
| 53 | `kdeglobals`, as KWin paints its title bars, and on GNOME winit's Adwaita | ||
| 54 | frame's. A settings portal signal re-reads them when the scheme changes. | ||
| 48 | - zenity or kdialog provide the pickers and alerts. The XDG settings portal | 55 | - zenity or kdialog provide the pickers and alerts. The XDG settings portal |
| 49 | provides the colour scheme. Text conventions come from the C library's | 56 | provides the colour scheme. Text conventions come from the C library's |
| 50 | locale. Fontconfig is loaded at run time, so builds need no headers for it. | 57 | 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. | ... | @@ -58,6 +65,9 @@ Accessibility for the page goes through AccessKit's winit adapter on both. |
| 58 | The readme names both as goals. Nothing platform-specific exists for them yet. | 65 | The readme names both as goals. Nothing platform-specific exists for them yet. |
| 59 | Keeping `ui` and `draw` free of platform toolkits is what keeps them within | 66 | Keeping `ui` and `draw` free of platform toolkits is what keeps them within |
| 60 | reach. | 67 | reach. |
| 68 | The chrome's fill already has its seam: `platform::install_backdrop` lays a | ||
| 69 | system material under a transparent surface, as Mica or Aero glass would, | ||
| 70 | and `platform::titlebar` names opaque fills where the system has those. | ||
| 61 | 71 | ||
| 62 | ## iOS: native around the canvas | 72 | ## iOS: native around the canvas |
| 63 | 73 |
arc/testing.md+1-1| ... | @@ -1,4 +1,4 @@ | ... | @@ -1,4 +1,4 @@ |
| 1 | # Testing, and why the code can be trusted | 1 | # Testing — Why the code can be trusted |
| 2 | 2 | ||
| 3 | Snowbound writes into other people's notebooks, often while their copy of | 3 | Snowbound writes into other people's notebooks, often while their copy of |
| 4 | OneNote is writing to the same file. A bug doesn't just crash an app. It can | 4 | OneNote is writing to the same file. A bug doesn't just crash an app. It can |
arc/ui.md+4-2| ... | @@ -22,8 +22,10 @@ The motion comes from [File Pilot](https://filepilot.tech): things move | ... | @@ -22,8 +22,10 @@ The motion comes from [File Pilot](https://filepilot.tech): things move |
| 22 | quickly and never feel like they're waiting on an animation. Animated values | 22 | quickly and never feel like they're waiting on an animation. Animated values |
| 23 | ease exponentially toward their targets with a short half-life. That is | 23 | ease exponentially toward their targets with a short half-life. That is |
| 24 | frame-rate independent, a retargeted animation continues smoothly from where | 24 | frame-rate independent, a retargeted animation continues smoothly from where |
| 25 | it is, and it settles fast. A context menu opens instantly at the pointer. A | 25 | it is, and it settles fast. Popups open and close on short timed curves, |
| 26 | drop-down grows out of its anchor. | 26 | slow enough to follow: a menu grows out of the pointer or its button as it |
| 27 | fades in, a combo's field widens into its list, and a dialog swings up into | ||
| 28 | place over a dimmed window, as Windows opens a window. | ||
| 27 | 29 | ||
| 28 | ## Why not native widgets | 30 | ## Why not native widgets |
| 29 | 31 |
readme.md+11-4| ... | @@ -7,8 +7,10 @@ Type and draw notes on any platform, while maintaining ownership of your data. | ... | @@ -7,8 +7,10 @@ Type and draw notes on any platform, while maintaining ownership of your data. |
| 7 | Snowbound does not use a typical markdown or structured note format, but rather | 7 | Snowbound does not use a typical markdown or structured note format, but rather |
| 8 | uses rich text on a free canvas. Unlike other infinite canvas apps, our canvas | 8 | uses rich text on a free canvas. Unlike other infinite canvas apps, our canvas |
| 9 | feels more like a standard text editor software as textboxes automatically | 9 | feels more like a standard text editor software as textboxes automatically |
| 10 | create and resize as you would expect. In addition, Snowbound (TODO) supports | 10 | create and resize as you would expect. In addition, Snowbound supports |
| 11 | pen and drawing tools, recording audio and video, revision history, multi-machine | 11 | pen and drawing tools [(WIP)](https://shale.paperclover.net/snowbound/issues/21), recording audio and video |
| 12 | [(WIP)](https://shale.paperclover.net/snowbound/issues/36), revision | ||
| 13 | history[(WIP)](https://shale.paperclover.net/snowbound/issues/37), multi-machine | ||
| 12 | live collaboration, and much more. | 14 | live collaboration, and much more. |
| 13 | 15 | ||
| 14 | <!-- Regenerate from the sample notebook (edit it freely in OneNote or Snowbound): | 16 | <!-- Regenerate from the sample notebook (edit it freely in OneNote or Snowbound): |
| ... | @@ -20,8 +22,13 @@ python3 tools/canvas/build_macos.py --release && d=$(mktemp -d) && cp -R docs/sa | ... | @@ -20,8 +22,13 @@ python3 tools/canvas/build_macos.py --release && d=$(mktemp -d) && cp -R docs/sa |
| 20 | </picture> | 22 | </picture> |
| 21 | 23 | ||
| 22 | Snowbound implements the file and sync protocol used in 2010 Microsoft OneNote, | 24 | Snowbound implements the file and sync protocol used in 2010 Microsoft OneNote, |
| 23 | so notebooks are fully compatible, including collaboration features. It (TODO) | 25 | so notebooks are fully compatible, including collaboration features. It supports |
| 24 | supports OS X 10.6, all the way to modern macOS, iOS, Linux, and Windows. | 26 | OS X 10.6 Snow Leopard |
| 27 | [(WIP)](https://shale.paperclover.net/snowbound/issues/13), all the way to | ||
| 28 | modern macOS, Linux, Windows | ||
| 29 | [(WIP)](https://shale.paperclover.net/snowbound/issues/11), and fully capable | ||
| 30 | iOS[(WIP)](https://shale.paperclover.net/snowbound/issues/36) and | ||
| 31 | Android[(WIP)](https://shale.paperclover.net/snowbound/issues/24) apps. | ||
| 25 | 32 | ||
| 26 | For my songwriting for *[paper clover](https://paperclover.net)*, I use this app | 33 | For my songwriting for *[paper clover](https://paperclover.net)*, I use this app |
| 27 | alongside OneNote on my Windows 7 laptop. | 34 | alongside OneNote on my Windows 7 laptop. |