diff --git a/crates/snowbound/assets/icons/badge-add.svg b/crates/snowbound/assets/icons/badge-add.svg new file mode 100644 index 0000000000000000000000000000000000000000..6a24fd7b57dbbe1c67d61bcfee83f7d0015cfdda --- /dev/null +++ b/crates/snowbound/assets/icons/badge-add.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-brush.svg b/crates/snowbound/assets/icons/badge-brush.svg new file mode 100644 index 0000000000000000000000000000000000000000..488947e7945335b5a59d0f667165e9fe7d514321 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-brush.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-check.svg b/crates/snowbound/assets/icons/badge-check.svg new file mode 100644 index 0000000000000000000000000000000000000000..be4bb448613d30e0f77ce78ccc0a27ca9fdb76d2 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-check.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-close.svg b/crates/snowbound/assets/icons/badge-close.svg new file mode 100644 index 0000000000000000000000000000000000000000..2ead4c106109576a4143bbd04572986f53cb2465 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-close.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-command.svg b/crates/snowbound/assets/icons/badge-command.svg new file mode 100644 index 0000000000000000000000000000000000000000..450dd8626d03f8a5900f5616c787891717c79627 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-command.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-drop.svg b/crates/snowbound/assets/icons/badge-drop.svg new file mode 100644 index 0000000000000000000000000000000000000000..892deb92b4332ba08122c3b971a44ebc4c43097c --- /dev/null +++ b/crates/snowbound/assets/icons/badge-drop.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-edit.svg b/crates/snowbound/assets/icons/badge-edit.svg new file mode 100644 index 0000000000000000000000000000000000000000..2bc5bae27184923c8c5f9f329750328fee3f8268 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-edit.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-go.svg b/crates/snowbound/assets/icons/badge-go.svg new file mode 100644 index 0000000000000000000000000000000000000000..29e0bb1dda227c2f86bc3653cf8a83f64023c53a --- /dev/null +++ b/crates/snowbound/assets/icons/badge-go.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-history.svg b/crates/snowbound/assets/icons/badge-history.svg new file mode 100644 index 0000000000000000000000000000000000000000..5ea55cc3e28815d98276380702c2e91f24784bf8 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-history.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-link.svg b/crates/snowbound/assets/icons/badge-link.svg new file mode 100644 index 0000000000000000000000000000000000000000..ecd1881e768ad55fa3c101cc1e48849cf1966c83 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-link.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-live.svg b/crates/snowbound/assets/icons/badge-live.svg new file mode 100644 index 0000000000000000000000000000000000000000..8903bae0794d8f1975c7b4ac2db22d6f61de91db --- /dev/null +++ b/crates/snowbound/assets/icons/badge-live.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-lock.svg b/crates/snowbound/assets/icons/badge-lock.svg new file mode 100644 index 0000000000000000000000000000000000000000..133ed9c7a428580a3a0334f8020b4fc52b10c5be --- /dev/null +++ b/crates/snowbound/assets/icons/badge-lock.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-merge.svg b/crates/snowbound/assets/icons/badge-merge.svg new file mode 100644 index 0000000000000000000000000000000000000000..2ec9135836d2faf7b502f4fd74888e8c93c19e73 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-merge.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-picture.svg b/crates/snowbound/assets/icons/badge-picture.svg new file mode 100644 index 0000000000000000000000000000000000000000..204336904187ef3a42f0a2787f1505b2717531c6 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-picture.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-play.svg b/crates/snowbound/assets/icons/badge-play.svg new file mode 100644 index 0000000000000000000000000000000000000000..4c282d86afe0597efcd5adbe6226f3cb642f88ea --- /dev/null +++ b/crates/snowbound/assets/icons/badge-play.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-remove.svg b/crates/snowbound/assets/icons/badge-remove.svg new file mode 100644 index 0000000000000000000000000000000000000000..dd63aa98104e3aadc53d4001a5cd326ac84bbc9e --- /dev/null +++ b/crates/snowbound/assets/icons/badge-remove.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-search.svg b/crates/snowbound/assets/icons/badge-search.svg new file mode 100644 index 0000000000000000000000000000000000000000..8b693e69012fe8032ad0ac004b0514bf9dc53b99 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-search.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-text.svg b/crates/snowbound/assets/icons/badge-text.svg new file mode 100644 index 0000000000000000000000000000000000000000..ff52e8a46222dfa73ff52fb4bea41a4d796d3e28 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-text.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/badge-unread.svg b/crates/snowbound/assets/icons/badge-unread.svg new file mode 100644 index 0000000000000000000000000000000000000000..e57fb3b82ce4d4f7f4cd7a999bb47a7768630c45 --- /dev/null +++ b/crates/snowbound/assets/icons/badge-unread.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/citation.svg b/crates/snowbound/assets/icons/citation.svg new file mode 100644 index 0000000000000000000000000000000000000000..ca47a0a0ccb85a199fc18d9c33d485a300ab8d28 --- /dev/null +++ b/crates/snowbound/assets/icons/citation.svg @@ -0,0 +1,4 @@ + + + + diff --git a/crates/snowbound/assets/icons/code.svg b/crates/snowbound/assets/icons/code.svg new file mode 100644 index 0000000000000000000000000000000000000000..b6cada06a764a762b9e880b416b3da00c750bd4f --- /dev/null +++ b/crates/snowbound/assets/icons/code.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/crates/snowbound/assets/icons/delete.svg b/crates/snowbound/assets/icons/delete.svg new file mode 100644 index 0000000000000000000000000000000000000000..fcb15dd49f9029d32793159828a130214be037e7 --- /dev/null +++ b/crates/snowbound/assets/icons/delete.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/digit-1.svg b/crates/snowbound/assets/icons/digit-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..3adbd06eb828f49e0f27aa23ed27cc0db20fe8a8 --- /dev/null +++ b/crates/snowbound/assets/icons/digit-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/digit-2.svg b/crates/snowbound/assets/icons/digit-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..38db6d9a6f4311428957be6c64e72b0b6998d210 --- /dev/null +++ b/crates/snowbound/assets/icons/digit-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/digit-3.svg b/crates/snowbound/assets/icons/digit-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..7f84c67ade9a631a4c8484427ca36253b3010af0 --- /dev/null +++ b/crates/snowbound/assets/icons/digit-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/digit-4.svg b/crates/snowbound/assets/icons/digit-4.svg new file mode 100644 index 0000000000000000000000000000000000000000..1f20a46cc0eefb4644e76206f29f9f8071ef2386 --- /dev/null +++ b/crates/snowbound/assets/icons/digit-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/digit-5.svg b/crates/snowbound/assets/icons/digit-5.svg new file mode 100644 index 0000000000000000000000000000000000000000..91dab683c7e175b56980ff06e4632e3aaedb09ba --- /dev/null +++ b/crates/snowbound/assets/icons/digit-5.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/digit-6.svg b/crates/snowbound/assets/icons/digit-6.svg new file mode 100644 index 0000000000000000000000000000000000000000..c94448cbc412248dd5025c7a6f40c79ba03eb60f --- /dev/null +++ b/crates/snowbound/assets/icons/digit-6.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/fast-forward.svg b/crates/snowbound/assets/icons/fast-forward.svg new file mode 100644 index 0000000000000000000000000000000000000000..12f27e4f50aeeadfa92f89ff594914017e0a0985 --- /dev/null +++ b/crates/snowbound/assets/icons/fast-forward.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/folder-open.svg b/crates/snowbound/assets/icons/folder-open.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2c396a75326a0704c5e7f070dbe492c304197e3 --- /dev/null +++ b/crates/snowbound/assets/icons/folder-open.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/full-page.svg b/crates/snowbound/assets/icons/full-page.svg new file mode 100644 index 0000000000000000000000000000000000000000..79bc8809c0e2ba7800643084ff2192664f1eef0c --- /dev/null +++ b/crates/snowbound/assets/icons/full-page.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/heading.svg b/crates/snowbound/assets/icons/heading.svg new file mode 100644 index 0000000000000000000000000000000000000000..286e08ba13283981a788d6cc4e05fd760e45c3d6 --- /dev/null +++ b/crates/snowbound/assets/icons/heading.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/snowbound/assets/icons/help.svg b/crates/snowbound/assets/icons/help.svg new file mode 100644 index 0000000000000000000000000000000000000000..fc766d227a68a4ae1108e57fd7249cb87b97e550 --- /dev/null +++ b/crates/snowbound/assets/icons/help.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/lock.svg b/crates/snowbound/assets/icons/lock.svg new file mode 100644 index 0000000000000000000000000000000000000000..87172b29cf4f4592053c81c1c5121ae0385d568c --- /dev/null +++ b/crates/snowbound/assets/icons/lock.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/markdown.svg b/crates/snowbound/assets/icons/markdown.svg new file mode 100644 index 0000000000000000000000000000000000000000..b226a0f7fc0b06e32cea4f49ffe3dc2e17e7769c --- /dev/null +++ b/crates/snowbound/assets/icons/markdown.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/move-down.svg b/crates/snowbound/assets/icons/move-down.svg new file mode 100644 index 0000000000000000000000000000000000000000..8a70447047cfdf6536693ba504595e367b50dcfb --- /dev/null +++ b/crates/snowbound/assets/icons/move-down.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/move-up.svg b/crates/snowbound/assets/icons/move-up.svg new file mode 100644 index 0000000000000000000000000000000000000000..646ea33b380ac30c9f14e646cd2ef076d0522b58 --- /dev/null +++ b/crates/snowbound/assets/icons/move-up.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/normal.svg b/crates/snowbound/assets/icons/normal.svg new file mode 100644 index 0000000000000000000000000000000000000000..de22a34f73774c73b37af7ac7ee6f20045336f57 --- /dev/null +++ b/crates/snowbound/assets/icons/normal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/crates/snowbound/assets/icons/notebook-accent.svg b/crates/snowbound/assets/icons/notebook-accent.svg new file mode 100644 index 0000000000000000000000000000000000000000..2edeb40e090ab520b7ea4946049fad5580cb5a97 --- /dev/null +++ b/crates/snowbound/assets/icons/notebook-accent.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/crates/snowbound/assets/icons/page-list.svg b/crates/snowbound/assets/icons/page-list.svg new file mode 100644 index 0000000000000000000000000000000000000000..60ee976254d0f805c775a8ed344e2b9a850c2bac --- /dev/null +++ b/crates/snowbound/assets/icons/page-list.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/page-title.svg b/crates/snowbound/assets/icons/page-title.svg new file mode 100644 index 0000000000000000000000000000000000000000..245a7029944c6d0dfd7a0f055e6dc1c2ba3281c9 --- /dev/null +++ b/crates/snowbound/assets/icons/page-title.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/crates/snowbound/assets/icons/pages-match-theme.svg b/crates/snowbound/assets/icons/pages-match-theme.svg new file mode 100644 index 0000000000000000000000000000000000000000..97709c3486c46440699e3cb43668b33f309d35d6 --- /dev/null +++ b/crates/snowbound/assets/icons/pages-match-theme.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/palette.svg b/crates/snowbound/assets/icons/palette.svg new file mode 100644 index 0000000000000000000000000000000000000000..00dcdb8396d989e54f146521f13ab5723496b0c4 --- /dev/null +++ b/crates/snowbound/assets/icons/palette.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/pause.svg b/crates/snowbound/assets/icons/pause.svg new file mode 100644 index 0000000000000000000000000000000000000000..52b1f09ea96cce2221ae482e55096c2c210013e2 --- /dev/null +++ b/crates/snowbound/assets/icons/pause.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/pdf.svg b/crates/snowbound/assets/icons/pdf.svg new file mode 100644 index 0000000000000000000000000000000000000000..fc092d4e4af92031b1cf4526d68cc91b2987e3d4 --- /dev/null +++ b/crates/snowbound/assets/icons/pdf.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/print.svg b/crates/snowbound/assets/icons/print.svg new file mode 100644 index 0000000000000000000000000000000000000000..1920fb98beac88ccfa668650f63cb79ad0330954 --- /dev/null +++ b/crates/snowbound/assets/icons/print.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/properties.svg b/crates/snowbound/assets/icons/properties.svg new file mode 100644 index 0000000000000000000000000000000000000000..58577cdacbf19c49c11aefb4e2873c60746015cd --- /dev/null +++ b/crates/snowbound/assets/icons/properties.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/quote.svg b/crates/snowbound/assets/icons/quote.svg new file mode 100644 index 0000000000000000000000000000000000000000..450ab375175d1df562fc0b571189acb864351300 --- /dev/null +++ b/crates/snowbound/assets/icons/quote.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/recycle-bin.svg b/crates/snowbound/assets/icons/recycle-bin.svg new file mode 100644 index 0000000000000000000000000000000000000000..d756cd96c9a7cdc5158e66d82b5c8524d26eb014 --- /dev/null +++ b/crates/snowbound/assets/icons/recycle-bin.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/rename.svg b/crates/snowbound/assets/icons/rename.svg new file mode 100644 index 0000000000000000000000000000000000000000..5db86dc5a1a14ecdfd7b1157a2d994fe69b93dee --- /dev/null +++ b/crates/snowbound/assets/icons/rename.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/rewind.svg b/crates/snowbound/assets/icons/rewind.svg new file mode 100644 index 0000000000000000000000000000000000000000..64fa9fabde130ef93bd9e82558d8c29a9736fdc5 --- /dev/null +++ b/crates/snowbound/assets/icons/rewind.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/save.svg b/crates/snowbound/assets/icons/save.svg new file mode 100644 index 0000000000000000000000000000000000000000..108ababff2a64a2c9160c840521cd6518f0ef9b9 --- /dev/null +++ b/crates/snowbound/assets/icons/save.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/select-all.svg b/crates/snowbound/assets/icons/select-all.svg new file mode 100644 index 0000000000000000000000000000000000000000..b18fd21f9fcc8b43853d522531b98cff0b19ed57 --- /dev/null +++ b/crates/snowbound/assets/icons/select-all.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/snap-to-grid.svg b/crates/snowbound/assets/icons/snap-to-grid.svg new file mode 100644 index 0000000000000000000000000000000000000000..95a16f8c4b6885dcd79dcbc37c1ce5fc46035341 --- /dev/null +++ b/crates/snowbound/assets/icons/snap-to-grid.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/stop.svg b/crates/snowbound/assets/icons/stop.svg new file mode 100644 index 0000000000000000000000000000000000000000..2a46a309938c4f4cdef30fda99c4979bfb26e1c2 --- /dev/null +++ b/crates/snowbound/assets/icons/stop.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/subpage.svg b/crates/snowbound/assets/icons/subpage.svg new file mode 100644 index 0000000000000000000000000000000000000000..7db2928a3b5f1acdc38ba450c3ce802cedcf8791 --- /dev/null +++ b/crates/snowbound/assets/icons/subpage.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/sync-now.svg b/crates/snowbound/assets/icons/sync-now.svg new file mode 100644 index 0000000000000000000000000000000000000000..0fee84561056e421f87e5a5d7d68fa84d9086242 --- /dev/null +++ b/crates/snowbound/assets/icons/sync-now.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/tab.svg b/crates/snowbound/assets/icons/tab.svg new file mode 100644 index 0000000000000000000000000000000000000000..da46ad2b534f6a8c6eb540fc7b86b7f46004c0db --- /dev/null +++ b/crates/snowbound/assets/icons/tab.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/tag.svg b/crates/snowbound/assets/icons/tag.svg new file mode 100644 index 0000000000000000000000000000000000000000..bfe52cb78931674863b544d7d39230175726c311 --- /dev/null +++ b/crates/snowbound/assets/icons/tag.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/crates/snowbound/assets/icons/theme.svg b/crates/snowbound/assets/icons/theme.svg new file mode 100644 index 0000000000000000000000000000000000000000..09ce4ccd58161d1eee5795e9710e3a422e1e9d87 --- /dev/null +++ b/crates/snowbound/assets/icons/theme.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/to-do.svg b/crates/snowbound/assets/icons/to-do.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b4befd4483206e8ca05099481bcab51eb9f67a1 --- /dev/null +++ b/crates/snowbound/assets/icons/to-do.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/crates/snowbound/assets/icons/update.svg b/crates/snowbound/assets/icons/update.svg new file mode 100644 index 0000000000000000000000000000000000000000..b2abf52eec5c88b0867bc56f49ca7e097ef2f69a --- /dev/null +++ b/crates/snowbound/assets/icons/update.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/crates/snowbound/assets/icons/zoom-actual.svg b/crates/snowbound/assets/icons/zoom-actual.svg new file mode 100644 index 0000000000000000000000000000000000000000..053a7e3d92c8e3ec9126b6c2b2b5b4098c42d30d --- /dev/null +++ b/crates/snowbound/assets/icons/zoom-actual.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/crates/snowbound/src/art.rs b/crates/snowbound/src/art.rs index ae7b4fe72debcf94cca1c646f4f7ea02cf8db9da..68988569e7a511920eb7a1a344236255dcdb2063 100644 --- a/crates/snowbound/src/art.rs +++ b/crates/snowbound/src/art.rs @@ -1,8 +1,9 @@ //! Artwork for the window's chrome: tinted interface icons and the toolbar's tag buttons. +/// Artwork of one or more files under `assets/`, painted in order, as a badge over its icon. macro_rules! art { - ($path:literal) => { - &[include_str!(concat!("../assets/", $path, ".svg"))] + ($($path:literal),+) => { + &[$(include_str!(concat!("../assets/", $path, ".svg"))),+] }; } @@ -97,3 +98,104 @@ pub const SHAPE_ARROW: &[&str] = art!("icons/shape-arrow"); pub const SHAPE_LINE: &[&str] = art!("icons/shape-line"); pub const SHAPE_OVAL: &[&str] = art!("icons/shape-oval"); pub const SHAPE_RECTANGLE: &[&str] = art!("icons/shape-rectangle"); + +pub const ADD_TO_DICTIONARY: &[&str] = art!("icons/spelling", "icons/badge-add"); +pub const CITATION: &[&str] = art!("icons/citation"); +pub const CLOSE_NOTEBOOK: &[&str] = art!( + "icons/notebook-back", + "icons/notebook-accent", + "icons/notebook", + "icons/badge-close" +); +pub const CODE: &[&str] = art!("icons/code"); +pub const COMMAND_PALETTE: &[&str] = art!("icons/palette", "icons/badge-command"); +pub const COPY_LINK: &[&str] = art!("icons/page", "icons/badge-link"); +pub const CUSTOMIZE_THEME: &[&str] = art!("icons/theme", "icons/badge-edit"); +pub const CUSTOMIZE_TAGS: &[&str] = art!("icons/tag", "icons/badge-edit"); +pub const DELETE: &[&str] = art!("icons/delete"); +pub const EMPTY_RECYCLE_BIN: &[&str] = art!("icons/recycle-bin", "icons/badge-remove"); +pub const EXPORT_PDF: &[&str] = art!("icons/pdf"); +pub const FAST_FORWARD: &[&str] = art!("icons/fast-forward"); +pub const FIND: &[&str] = art!("icons/page", "icons/badge-search"); +pub const FULL_PAGE: &[&str] = art!("icons/full-page"); +pub const GO_TO: &[&str] = art!("icons/palette", "icons/badge-go"); +/// Heading 1 to 6, in order. +pub const HEADINGS: [&[&str]; 6] = [ + art!("icons/heading", "icons/digit-1"), + art!("icons/heading", "icons/digit-2"), + art!("icons/heading", "icons/digit-3"), + art!("icons/heading", "icons/digit-4"), + art!("icons/heading", "icons/digit-5"), + art!("icons/heading", "icons/digit-6"), +]; +pub const HELP: &[&str] = art!("icons/help"); +pub const KEEP_SOURCE_FORMATTING: &[&str] = art!("icons/paste", "icons/badge-brush"); +pub const KEEP_TEXT_ONLY: &[&str] = art!("icons/paste", "icons/badge-text"); +pub const LIVE_SHARE: &[&str] = art!( + "icons/notebook-back", + "icons/notebook-accent", + "icons/notebook", + "icons/badge-live" +); +pub const LOCK: &[&str] = art!("icons/lock"); +pub const MARKDOWN: &[&str] = art!("icons/markdown"); +pub const MARK_NOTEBOOK_READ: &[&str] = art!( + "icons/notebook-back", + "icons/notebook-accent", + "icons/notebook", + "icons/badge-check" +); +pub const MARK_READ: &[&str] = art!("icons/page", "icons/badge-check"); +pub const MERGE_FORMATTING: &[&str] = art!("icons/paste", "icons/badge-merge"); +pub const MOVE: &[&str] = art!("icons/page", "icons/badge-go"); +pub const MOVE_DOWN: &[&str] = art!("icons/move-down"); +pub const MOVE_UP: &[&str] = art!("icons/move-up"); +pub const NEW_NOTEBOOK: &[&str] = art!( + "icons/notebook-back", + "icons/notebook-accent", + "icons/notebook", + "icons/badge-add" +); +pub const NEW_PAGE: &[&str] = art!("icons/page", "icons/badge-add"); +pub const NEW_SECTION: &[&str] = art!("icons/tab", "icons/badge-add"); +pub const NEW_SECTION_GROUP: &[&str] = art!("icons/section-group", "icons/badge-add"); +pub const NEW_SUBPAGE: &[&str] = art!("icons/subpage", "icons/badge-add"); +pub const NEXT_UNREAD: &[&str] = art!("icons/page", "icons/badge-unread"); +pub const NORMAL: &[&str] = art!("icons/normal"); +pub const OPEN: &[&str] = art!("icons/folder-open"); +pub const OPEN_SHARED: &[&str] = art!("icons/folder-open", "icons/badge-live"); +pub const PAGE_LIST: &[&str] = art!("icons/page-list"); +pub const PAGE_TITLE: &[&str] = art!("icons/page-title"); +pub const PAGE_VERSIONS: &[&str] = art!("icons/page", "icons/badge-history"); +pub const PAGES_MATCH_THEME: &[&str] = art!("icons/pages-match-theme"); +pub const PASSWORD: &[&str] = art!("icons/tab", "icons/badge-lock"); +pub const PASTE_PICTURE: &[&str] = art!("icons/paste", "icons/badge-picture"); +pub const PAUSE: &[&str] = art!("icons/pause"); +pub const PRINT: &[&str] = art!("icons/print"); +pub const PROPERTIES: &[&str] = art!("icons/properties"); +pub const QUOTE: &[&str] = art!("icons/quote"); +pub const RECYCLE_BIN: &[&str] = art!("icons/recycle-bin"); +pub const REMOVE_LINK: &[&str] = art!("icons/link", "icons/badge-remove"); +pub const REMOVE_TAG: &[&str] = art!("icons/tag", "icons/badge-remove"); +pub const RENAME: &[&str] = art!("icons/rename"); +pub const REWIND: &[&str] = art!("icons/rewind"); +pub const SAVE: &[&str] = art!("icons/save"); +pub const SEARCH_RESULTS: &[&str] = art!("icons/page-list", "icons/badge-search"); +pub const SECTION_COLOR: &[&str] = art!("icons/tab", "icons/badge-drop"); +pub const SEE_PLAYBACK: &[&str] = art!("icons/page", "icons/badge-play"); +pub const SEEK: &[&str] = art!("icons/clock", "icons/badge-go"); +pub const SELECT_ALL: &[&str] = art!("icons/select-all"); +pub const SHOW_UNREAD: &[&str] = art!( + "icons/notebook-back", + "icons/notebook-accent", + "icons/notebook", + "icons/badge-unread" +); +pub const SNAP_TO_GRID: &[&str] = art!("icons/snap-to-grid"); +pub const STOP: &[&str] = art!("icons/stop"); +pub const SUBPAGE: &[&str] = art!("icons/subpage"); +pub const SYNC_NOW: &[&str] = art!("icons/sync-now"); +pub const THEME: &[&str] = art!("icons/theme"); +pub const TO_DO: &[&str] = art!("icons/to-do"); +pub const UPDATE: &[&str] = art!("icons/update"); +pub const ZOOM_ACTUAL: &[&str] = art!("icons/zoom-actual"); diff --git a/crates/snowbound/src/history.rs b/crates/snowbound/src/history.rs index d45d5b5ded4c2e3f6b09fc799bd1d0632b234d06..8e7ecdab19069b818739233798a54f83f18f8e10 100644 --- a/crates/snowbound/src/history.rs +++ b/crates/snowbound/src/history.rs @@ -96,25 +96,29 @@ pub fn menu( text, ..Default::default() }; + let drawn = |text, icon| ui::popup::Item { + icon: Some(icon), + ..item(text) + }; let items = [ - item("Restore Version"), - item("Delete Version"), + drawn("Restore Version", art::UNDO), + drawn("Delete Version", art::DELETE), ui::popup::Item { disabled: sections.is_empty(), - ..item("Copy Page To…") + ..drawn("Copy Page To…", art::COPY) }, ui::popup::Item { separated: true, - ..item("Delete All Versions in Section") + ..drawn("Delete All Versions in Section", art::DELETE) }, ui::popup::Item { disabled: !grouped, - ..item("Delete All Versions in Section Group") + ..drawn("Delete All Versions in Section Group", art::DELETE) }, - item("Delete All Versions in Notebook"), + drawn("Delete All Versions in Notebook", art::DELETE), ui::popup::Item { separated: true, - ..item("Hide Page Versions") + ..drawn("Hide Page Versions", art::PAGE_VERSIONS) }, ]; let chosen = match ui::popup::menu(ui, menu, anchor, &items, None) { diff --git a/crates/snowbound/src/link.rs b/crates/snowbound/src/link.rs index 82f86b5059a3e8d201a44a9aacf44e271c512545..b7ccea295901f515bdb4087a7afcb9a93089da8d 100644 --- a/crates/snowbound/src/link.rs +++ b/crates/snowbound/src/link.rs @@ -2,7 +2,7 @@ //! the page's context menu, and following a clicked link, to a page //! of the notebook or with the system's handler. -use crate::{Command, State, commands, page, platform}; +use crate::{Command, State, art, commands, page, platform}; use onestore::ExGuid; use onestore::page::link::{LinkTarget, internal_link}; use std::error::Error; @@ -292,14 +292,18 @@ impl State { text, ..Item::default() }; + let drawn = |text, icon| Item { + icon: Some(icon), + ..item(text) + }; // OneNote 2010 heads the menu on a marked word with its corrections. let mut items = match &context.spelling { Some(correction) if correction.repeated => vec![ - item("Delete Repeated Word"), + drawn("Delete Repeated Word", art::DELETE), item("Ignore"), Item { separated: true, - ..item("Spelling…") + ..drawn("Spelling…", art::SPELLING) }, ], Some(correction) => { @@ -319,10 +323,10 @@ impl State { separated: true, ..item("Ignore") }, - item("Add to Dictionary"), + drawn("Add to Dictionary", art::ADD_TO_DICTIONARY), Item { separated: true, - ..item("Spelling…") + ..drawn("Spelling…", art::SPELLING) }, ]); items @@ -340,45 +344,46 @@ impl State { .collect::>(); items.extend(if context.attachment.is_some() { // OneNote 2010's commands for the file itself; its clipboard holds text alone. - vec![item("Open"), item("Save As…")] + vec![drawn("Open", art::OPEN), drawn("Save As…", art::SAVE)] } else { let mut items = vec![ Item { disabled: !context.selected, separated: corrections > 0, - ..item("Cut") + ..drawn("Cut", art::CUT) }, Item { disabled: !context.selected, - ..item("Copy") + ..drawn("Copy", art::COPY) }, - item("Paste"), + drawn("Paste", art::PASTE), ]; match &context.link { Some(_) => items.extend([ Item { separated: true, - ..item("Edit Link…") + ..drawn("Edit Link…", art::LINK) }, - item("Copy Link to Paragraph"), + drawn("Copy Link to Paragraph", art::COPY_LINK), Item { separated: true, - ..item("Copy Link") + ..drawn("Copy Link", art::COPY_LINK) }, - item("Select Link"), - item("Remove Link"), + drawn("Select Link", art::SELECT), + drawn("Remove Link", art::REMOVE_LINK), ]), None => items.extend([ Item { separated: true, - ..item("Link…") + ..drawn("Link…", art::LINK) }, - item("Copy Link to Paragraph"), + drawn("Copy Link to Paragraph", art::COPY_LINK), ]), } for (at, id) in lists.iter().enumerate() { items.push(Item { separated: at == 0, + icon: crate::artwork(*id), ..item(commands::command(*id).title) }); } @@ -386,9 +391,9 @@ impl State { items.extend([ Item { separated: true, - ..item("Professional") + ..drawn("Professional", art::EQUATION) }, - item("Linear"), + drawn("Linear", art::EQUATION), ]); } items diff --git a/crates/snowbound/src/main.rs b/crates/snowbound/src/main.rs index 1a7143234bb15f86f428031cea8c93d37a3818df..4e47a319333a13ab2638e013a37f3c8873bf2912 100644 --- a/crates/snowbound/src/main.rs +++ b/crates/snowbound/src/main.rs @@ -2227,18 +2227,19 @@ impl State { choice = dropdown(ui, "menu", head, &entries, status_of).or(choice); // Pasting keeps only the text until #25. let options = [ - ("Keep Source Formatting", false), - ("Merge Formatting", false), - ("Keep Text Only", true), - ("Picture", false), + ("Keep Source Formatting", false, art::KEEP_SOURCE_FORMATTING), + ("Merge Formatting", false, art::MERGE_FORMATTING), + ("Keep Text Only", true, art::KEEP_TEXT_ONLY), + ("Picture", false, art::PASTE_PICTURE), ]; let mut items = vec![ui::popup::Item { text: "Paste Options", heading: true, ..Default::default() }]; - items.extend(options.map(|(text, enabled)| ui::popup::Item { + items.extend(options.map(|(text, enabled, icon)| ui::popup::Item { text, + icon: Some(icon), disabled: !enabled, ..Default::default() })); @@ -4710,21 +4711,25 @@ fn conflict_bar(ui: &mut Ui, bar: Bar, sections: &[&str], steps: [bool; 2]) -> O let items = [ ui::popup::Item { text: "Delete Conflict Page", + icon: Some(art::DELETE), ..Default::default() }, ui::popup::Item { text: "Copy Page To…", + icon: Some(art::COPY), disabled: sections.is_empty(), ..Default::default() }, ui::popup::Item { text: "Select Previous Conflicting Change", + icon: Some(art::MOVE_UP), disabled: !steps[0], separated: true, ..Default::default() }, ui::popup::Item { text: "Select Next Conflicting Change", + icon: Some(art::MOVE_DOWN), disabled: !steps[1], ..Default::default() }, @@ -5545,10 +5550,12 @@ fn tag_tool( clicked.then_some(commands::Choice::Command(commands::Id::Tag(place))) } -/// The artwork the toolbar and its menus show for command `id`. +/// The artwork the toolbar, the menus and the palette show for command `id`; none for a +/// tag, which shows its own. fn artwork(id: commands::Id) -> Option<&'static [&'static str]> { use canvas::editor::{Alignment, Toggle}; use commands::Id as Cmd; + use recording::Transport; Some(match id { Cmd::Back => art::BACK, Cmd::Forward => art::FORWARD, @@ -5601,7 +5608,64 @@ fn artwork(id: commands::Id) -> Option<&'static [&'static str]> { Cmd::ZoomIn => art::ZOOM_IN, Cmd::ZoomOut => art::ZOOM_OUT, Cmd::HideSpelling | Cmd::Spelling => art::SPELLING, - _ => return None, + Cmd::Settings => art::OPTIONS, + Cmd::NewNotebook => art::NEW_NOTEBOOK, + Cmd::OpenNotebook => art::OPEN, + Cmd::OpenFromServer => art::SERVER, + Cmd::CloseNotebook => art::CLOSE_NOTEBOOK, + Cmd::NewSection => art::NEW_SECTION, + Cmd::NewSectionGroup => art::NEW_SECTION_GROUP, + Cmd::NewPage => art::NEW_PAGE, + Cmd::NewSubpage => art::NEW_SUBPAGE, + Cmd::PageVersions => art::PAGE_VERSIONS, + Cmd::CopyPageLink => art::COPY_LINK, + Cmd::PasswordProtect => art::PASSWORD, + Cmd::LockAll => art::LOCK, + Cmd::ShowNotebook => art::FOLDER, + Cmd::SaveAs => art::SAVE, + Cmd::RecycleBin => art::RECYCLE_BIN, + Cmd::EmptyRecycleBin => art::EMPTY_RECYCLE_BIN, + Cmd::MarkRead => art::MARK_READ, + Cmd::MarkNotebookRead => art::MARK_NOTEBOOK_READ, + Cmd::ShowUnread => art::SHOW_UNREAD, + Cmd::NextUnread => art::NEXT_UNREAD, + Cmd::ExportPdf => art::EXPORT_PDF, + Cmd::Print => art::PRINT, + Cmd::SelectAll => art::SELECT_ALL, + Cmd::Find => art::FIND, + Cmd::Search => art::SEARCH, + Cmd::SearchResults => art::SEARCH_RESULTS, + Cmd::GoTo => art::GO_TO, + Cmd::CommandPalette => art::COMMAND_PALETTE, + Cmd::ActualSize => art::ZOOM_ACTUAL, + Cmd::Sidebar => art::SIDEBAR_EXPAND, + Cmd::PageList => art::PAGE_LIST, + Cmd::PagesMatchTheme => art::PAGES_MATCH_THEME, + Cmd::FullPageView => art::FULL_PAGE, + Cmd::Transport(Transport::Pause) => art::PAUSE, + Cmd::Transport(Transport::Stop) => art::STOP, + Cmd::Transport(Transport::Skip(seconds)) if seconds < 0 => art::REWIND, + Cmd::Transport(Transport::Skip(_)) => art::FAST_FORWARD, + Cmd::Transport(Transport::SeekTo) => art::SEEK, + Cmd::Transport(Transport::SeePlayback) => art::SEE_PLAYBACK, + Cmd::SnapToGrid => art::SNAP_TO_GRID, + Cmd::Style(level @ 0..6) => art::HEADINGS[level], + Cmd::Style(6) => art::PAGE_TITLE, + Cmd::Style(7) => art::CITATION, + Cmd::Style(8) => art::QUOTE, + Cmd::Style(9) => art::CODE, + Cmd::Style(_) => art::NORMAL, + Cmd::Themes => art::CUSTOMIZE_THEME, + Cmd::OpenShared => art::OPEN_SHARED, + Cmd::LiveShare => art::LIVE_SHARE, + Cmd::MarkdownShortcuts => art::MARKDOWN, + Cmd::CustomizeTags => art::CUSTOMIZE_TAGS, + Cmd::RemoveTags => art::REMOVE_TAG, + Cmd::ToDoList => art::TO_DO, + Cmd::BulletedList => art::BULLETS, + Cmd::Help => art::HELP, + Cmd::CheckForUpdates => art::UPDATE, + Cmd::Tag(_) => return None, }) } diff --git a/crates/snowbound/src/menus.rs b/crates/snowbound/src/menus.rs index 07cc5337978dbfdfa739226fb0c961bfdac599fa..198c6e33aa6bb2e705583bcec740bebd4bd318dd 100644 --- a/crates/snowbound/src/menus.rs +++ b/crates/snowbound/src/menus.rs @@ -127,6 +127,49 @@ pub enum Action { LiveShare, } +impl Action { + /// The artwork its menu item shows; none for a place or colour, which shows its own. + pub(crate) fn art(&self) -> Option<&'static [&'static str]> { + use crate::art; + Some(match self { + Action::Open => art::OPEN, + Action::Rename => art::RENAME, + Action::Delete => art::DELETE, + Action::Move => art::MOVE, + Action::Copy => art::COPY, + Action::SaveAs => art::SAVE, + Action::RecycleBin => art::RECYCLE_BIN, + Action::EmptyRecycleBin => art::EMPTY_RECYCLE_BIN, + Action::MarkNotebookRead => art::MARK_NOTEBOOK_READ, + Action::CopyLink => art::COPY_LINK, + Action::NewPage => art::NEW_PAGE, + Action::NewSubpage => art::NEW_SUBPAGE, + Action::MakeSubpage => art::SUBPAGE, + Action::PromoteSubpage => art::OUTDENT, + Action::Versions(_) => art::PAGE_VERSIONS, + Action::NewSection => art::NEW_SECTION, + Action::NewGroup => art::NEW_SECTION_GROUP, + Action::Reveal => art::FOLDER, + Action::Close => art::CLOSE_NOTEBOOK, + Action::Theme => art::THEME, + Action::Colors => art::SECTION_COLOR, + Action::Sync => art::SYNC_NOW, + Action::NewNotebook => art::NEW_NOTEBOOK, + Action::Raise(true) => art::MOVE_UP, + Action::Raise(false) => art::MOVE_DOWN, + Action::Properties => art::PROPERTIES, + Action::Password => art::PASSWORD, + #[cfg(feature = "live")] + Action::LiveShare => art::LIVE_SHARE, + Action::Run + | Action::MoveTo(_) + | Action::CopyTo(_) + | Action::SyncStatus + | Action::Color(_) => return None, + }) + } +} + /// OneNote 2010's section and notebook colours, COLORREF, with their names in its Section /// Color menu's order (`corpus/section-color/native`). pub(crate) const SECTION_COLORS: [(u32, &str); 16] = [ @@ -281,6 +324,7 @@ impl State { let badge = None; let item = Item { text, + icon: action.art(), disabled, separated, submenu, diff --git a/crates/snowbound/src/palette.rs b/crates/snowbound/src/palette.rs index 4aca480a7d674177eb4441de8f9532b385619866..9102a4b9c519c4f959e5e594fc11260129f163fe 100644 --- a/crates/snowbound/src/palette.rs +++ b/crates/snowbound/src/palette.rs @@ -196,6 +196,7 @@ impl State { Action::Run, Item { text: "Run", + icon: crate::artwork(id), disabled: !self.status(&Choice::Command(id), &format).enabled, ..Item::default() }, @@ -207,6 +208,7 @@ impl State { Action::Open, Item { text: "Open", + icon: Action::Open.art(), ..Item::default() }, ), diff --git a/crates/snowbound/src/themes.rs b/crates/snowbound/src/themes.rs index 8bc8370444b8be2d09c1e5358a93293e8ea67708..76e49440bc97b971925e496ce34d9431ba3e0aa5 100644 --- a/crates/snowbound/src/themes.rs +++ b/crates/snowbound/src/themes.rs @@ -604,6 +604,11 @@ impl State { .enumerate() .map(|(at, (scope, _))| Item { text: scope.name(), + icon: Some(match scope { + Scope::Page => crate::art::PAGE, + Scope::Section => crate::art::SECTION, + Scope::Notebook => crate::art::NOTEBOOK, + }), current: at == 0, ..Item::default() }) diff --git a/crates/ui/src/popup.rs b/crates/ui/src/popup.rs index c68715a0753fbe01ef54978e9ec07e0f32455954..54411e33d5c3bf75bbd766782755f2664bb91cf1 100644 --- a/crates/ui/src/popup.rs +++ b/crates/ui/src/popup.rs @@ -656,19 +656,23 @@ fn menu_row(ui: &mut Ui, style: &Menu, matches: &Matches, owner: Role, row: Row) if matches.icons { let checked = item.checked == Some(true); let tint = match item.tint { - Some([red, green, blue, _]) if !checked => [red, green, blue, color[3]], + Some([red, green, blue, _]) if !checked => [red, green, blue, 1.0], + _ if item.disabled => style.text, _ => color, }; + // Fading the whole icon dims art in its own colours too, as the toolbar does. + let [red, green, blue, alpha] = tint; ui.leaf( "icon", Spec { size: [px(ICON), fill()], icon: if checked { Some(CHECK) } else { item.icon }, - color: Some(if item.disabled { - mix(tint, style.fill, 0.5) - } else { - tint - }), + color: Some([ + red, + green, + blue, + alpha * if item.disabled { 0.4 } else { 1.0 }, + ]), ..Spec::default() }, );