From bf4696c29e883c7eb8d26f05dac270af0a49528e Mon Sep 17 00:00:00 2001 From: Ben Kirwin Date: Sat, 15 Jan 2022 20:53:26 -0500 Subject: [PATCH] Latest libremarkable, image crate --- Cargo.lock | 525 +++++++++++++++--------------------------------- Cargo.toml | 5 +- src/keyboard.rs | 10 +- src/main.rs | 100 +++++---- 4 files changed, 225 insertions(+), 415 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 77815fe..3804839 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,13 +3,16 @@ version = 3 [[package]] -name = "aabb-quadtree" -version = "0.1.0" +name = "ab_glyph_rasterizer" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e73342dae2885db4bdffbc75ffe3a668153720a95a6e57266a0ee8aacc96ca" -dependencies = [ - "fnv", -] +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "adler32" @@ -44,17 +47,27 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits 0.2.14", +] + [[package]] name = "armrest" version = "0.1.0" dependencies = [ "flo_curves", "hyphenation", + "image", "itertools 0.10.1", "libremarkable", "lyon_geom", "partial_sort", - "rusttype", + "rusttype 0.8.3", "strsim 0.10.0", "textwrap 0.13.4", "tflite", @@ -68,11 +81,11 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "atomic" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" +checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -86,12 +99,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - [[package]] name = "autocfg" version = "1.0.1" @@ -127,7 +134,7 @@ dependencies = [ "cfg-if 0.1.10", "clang-sys", "clap", - "env_logger", + "env_logger 0.7.1", "lazy_static", "lazycell", "log", @@ -148,9 +155,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" -version = "0.21.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "470fbd40e959c961f16841fbf96edbbdcff766ead89a1ae2b53d22852be20998" +checksum = "5237f00a8c86130a0cc317830e558b966dd7850d48a953d998c813f01a41b527" dependencies = [ "funty", "radium", @@ -158,6 +165,12 @@ dependencies = [ "wyz", ] +[[package]] +name = "bytemuck" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" + [[package]] name = "byteorder" version = "1.4.3" @@ -169,9 +182,6 @@ name = "cc" version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" -dependencies = [ - "jobserver", -] [[package]] name = "cexpr" @@ -196,13 +206,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cgmath" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283944cdecc44bf0b8dd010ec9af888d3b4f142844fdbe026c20ef68148d6fe7" +checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" dependencies = [ - "approx", + "approx 0.4.0", "num-traits 0.2.14", - "rand 0.6.5", ] [[package]] @@ -244,15 +253,6 @@ dependencies = [ "vec_map", ] -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -310,6 +310,15 @@ dependencies = [ "syn 1.0.70", ] +[[package]] +name = "crc32fast" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -350,16 +359,16 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" dependencies = [ - "autocfg 1.0.1", + "autocfg", "cfg-if 1.0.0", "lazy_static", ] [[package]] name = "deflate" -version = "0.7.20" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" dependencies = [ "adler32", "byteorder", @@ -380,7 +389,7 @@ dependencies = [ "enum_primitive", "itertools 0.10.1", "lazy_static", - "rand 0.4.2", + "rand", "regex", "serde", "serde_derive", @@ -404,7 +413,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ "atty", - "humantime", + "humantime 1.3.0", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +dependencies = [ + "atty", + "humantime 2.1.0", "log", "regex", "termcolor", @@ -431,9 +453,9 @@ dependencies = [ [[package]] name = "evdev" -version = "0.11.1" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa286e4837bcc689c362ac54f4c036758d625a50b3784b548d946da506d48446" +checksum = "5fd975dc56c85a845d56e5dce9a8eb0b058e7a22441b3fb15fad324e0476e7c4" dependencies = [ "bitvec", "libc", @@ -451,12 +473,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "folly" version = "0.0.1" @@ -467,12 +483,13 @@ dependencies = [ "clap", "encrusted-heart", "enum_primitive", + "image", "itertools 0.10.1", "lazy_static", "libremarkable", - "rand 0.4.2", + "rand", "regex", - "rusttype", + "rusttype 0.8.3", "serde", "serde_derive", "serde_json", @@ -491,12 +508,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d79238883cf0307100b90aba4a755d8051a3182305dfe7f649a1e9dc0517006f" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "fuchsia-zircon" version = "0.3.2" @@ -530,12 +541,12 @@ dependencies = [ [[package]] name = "gif" -version = "0.10.3" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" +checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b" dependencies = [ "color_quant", - "lzw", + "weezl", ] [[package]] @@ -553,16 +564,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hlua" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9db71fff2e55b83d24bbbdd9ad13f0d1ff79bc265f544370f39ee0825d54e4" -dependencies = [ - "libc", - "lua52-sys", -] - [[package]] name = "humantime" version = "1.3.0" @@ -572,6 +573,12 @@ dependencies = [ "quick-error", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyphenation" version = "0.8.0" @@ -603,31 +610,23 @@ checksum = "46dbcb333e86939721589d25a3557e180b52778cb33c7fdfe9e0158ff790d5ec" [[package]] name = "image" -version = "0.21.3" +version = "0.23.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35371e467cd7b0b3d1d6013d619203658467df12d61b0ca43cd67b743b1965eb" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" dependencies = [ + "bytemuck", "byteorder", + "color_quant", "gif", "jpeg-decoder", - "lzw", "num-iter", - "num-rational 0.2.4", + "num-rational", "num-traits 0.2.14", "png", "scoped_threadpool", "tiff", ] -[[package]] -name = "inflate" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" -dependencies = [ - "adler32", -] - [[package]] name = "ioctl-gen" version = "0.1.1" @@ -658,15 +657,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" -[[package]] -name = "jobserver" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd" -dependencies = [ - "libc", -] - [[package]] name = "jpeg-decoder" version = "0.1.22" @@ -708,14 +698,12 @@ dependencies = [ name = "libremarkable" version = "0.5.0" dependencies = [ - "aabb-quadtree", "atomic", "cgmath", - "env_logger", + "env_logger 0.9.0", "epoll", "evdev", "fxhash", - "hlua", "image", "ioctl-gen", "libc", @@ -723,16 +711,14 @@ dependencies = [ "log", "memmap2", "once_cell", - "rusttype", - "stopwatch", - "zstd", + "rusttype 0.9.2", ] [[package]] name = "line_drawing" -version = "0.8.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15cb10f27ad3eac84fdb70f0ea6dfe3bc33f7d6f3aa575f32d1ced3a342049a1" +checksum = "3d1478a313008a3e6c8149995e90a99ee9094034b5c5c3da1eeb81183cb61d1d" dependencies = [ "num-traits 0.2.14", ] @@ -746,17 +732,6 @@ dependencies = [ "cfg-if 1.0.0", ] -[[package]] -name = "lua52-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d451db153c94e455dc817d388f9674f6232425c28db3509e90251c55b8df2f94" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "lyon_geom" version = "0.17.0" @@ -768,12 +743,6 @@ dependencies = [ "num-traits 0.2.14", ] -[[package]] -name = "lzw" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" - [[package]] name = "maybe-owned" version = "0.3.4" @@ -788,9 +757,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] name = "memmap2" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" +checksum = "fe3179b85e1fd8b14447cbebadb75e45a1002f541b925f0bfec366d56a81c56d" dependencies = [ "libc", ] @@ -801,7 +770,26 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ - "autocfg 1.0.1", + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", ] [[package]] @@ -827,60 +815,13 @@ dependencies = [ "version_check", ] -[[package]] -name = "num" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational 0.1.42", - "num-traits 0.2.14", -] - -[[package]] -name = "num-bigint" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" -dependencies = [ - "num-integer", - "num-traits 0.2.14", - "rand 0.4.2", - "rustc-serialize", -] - -[[package]] -name = "num-complex" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" -dependencies = [ - "num-traits 0.2.14", - "rustc-serialize", -] - -[[package]] -name = "num-derive" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" -dependencies = [ - "proc-macro2 0.4.27", - "quote 0.6.11", - "syn 0.15.26", -] - [[package]] name = "num-integer" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-traits 0.2.14", ] @@ -890,30 +831,18 @@ version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" dependencies = [ - "autocfg 1.0.1", - "num-integer", - "num-traits 0.2.14", -] - -[[package]] -name = "num-rational" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" -dependencies = [ - "num-bigint", + "autocfg", "num-integer", "num-traits 0.2.14", - "rustc-serialize", ] [[package]] name = "num-rational" -version = "0.2.4" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-integer", "num-traits 0.2.14", ] @@ -930,7 +859,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -951,9 +880,9 @@ checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" [[package]] name = "once_cell" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" [[package]] name = "ordered-float" @@ -964,6 +893,15 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "owned_ttf_parser" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" +dependencies = [ + "ttf-parser", +] + [[package]] name = "partial_sort" version = "0.1.2" @@ -976,22 +914,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "pkg-config" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" - [[package]] name = "png" -version = "0.14.1" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63daf481fdd0defa2d1d2be15c674fbfa1b0fd71882c303a91f9a79b3252c359" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" dependencies = [ "bitflags", + "crc32fast", "deflate", - "inflate", - "num-iter", + "miniz_oxide 0.3.7", ] [[package]] @@ -1059,119 +991,13 @@ dependencies = [ "winapi", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rayon" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" dependencies = [ - "autocfg 1.0.1", + "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -1190,15 +1016,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.1.32" @@ -1252,23 +1069,27 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-serialize" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" - [[package]] name = "rusttype" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f61411055101f7b60ecf1041d87fb74205fb20b0c7a723f07ef39174cf6b4c0" dependencies = [ - "approx", + "approx 0.3.2", "ordered-float", "stb_truetype", ] +[[package]] +name = "rusttype" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + [[package]] name = "ryu" version = "0.2.7" @@ -1345,15 +1166,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "stopwatch" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d04b5ebc78da44d3a456319d8bc2783e7d8cc7ccbb5cb4dc3f54afbd93bf728" -dependencies = [ - "num", -] - [[package]] name = "strsim" version = "0.7.0" @@ -1470,14 +1282,13 @@ dependencies = [ [[package]] name = "tiff" -version = "0.2.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4834f28a0330cb9f3f2c87d2649dca723cb33802e2bdcf18da32759fbec7ce" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" dependencies = [ - "byteorder", - "lzw", - "num-derive", - "num-traits 0.2.14", + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", ] [[package]] @@ -1491,6 +1302,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "ttf-parser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" + [[package]] name = "unicode-width" version = "0.1.4" @@ -1527,6 +1344,12 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "weezl" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" + [[package]] name = "which" version = "3.1.1" @@ -1569,37 +1392,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - -[[package]] -name = "zstd" -version = "0.5.4+zstd.1.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69996ebdb1ba8b1517f61387a883857818a66c8a295f487b1ffd8fd9d2c82910" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "2.0.6+zstd.1.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98aa931fb69ecee256d44589d19754e61851ae4769bf963b385119b1cc37a49e" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "1.4.18+zstd.1.4.7" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6e8778706838f43f771d80d37787cb2fe06dafe89dd3aebaf6721b9eaec81" +checksum = "129e027ad65ce1453680623c3fb5163cbf7107bfe1aa32257e7d0e63f9ced188" dependencies = [ - "cc", - "glob", - "itertools 0.9.0", - "libc", + "tap", ] diff --git a/Cargo.toml b/Cargo.toml index 148efd5..3bb45b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ description = "A z-machine for the reMarkable tablet" repository = "https://github.com/bkirwi/folly" readme = "README.md" license = "MIT" -edition = "2018" +edition = "2021" [workspace] members = ["encrusted-heart"] @@ -28,6 +28,7 @@ regex = "1.1.0" itertools = "0.10.1" termion = "1.5.6" armrest = { path = "../armrest" } -libremarkable = { version = "0.5.0", path = "../libremarkable" } +libremarkable = { version = "0.5.0", path = "../libremarkable", default-features = false, features = ['framebuffer']} rusttype = "0.8.2" chrono = "0.4.19" +image = "0.23.14" diff --git a/src/keyboard.rs b/src/keyboard.rs index 7a1188e..2c4f915 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -1,8 +1,8 @@ use armrest::geom::Side; -use armrest::ui::{Frame, Handlers, Text, View, Widget}; +use armrest::ui::{Text, View, Widget}; use encrusted_heart::zscii::ZChar; use libremarkable::cgmath::Vector2; -use libremarkable::framebuffer::common::DISPLAYWIDTH; + use rusttype::Font; use std::borrow::Borrow; @@ -33,7 +33,7 @@ impl Keyboard { pub fn new(font: &'static Font<'static>, special: &[char]) -> Keyboard { let mut special_iter = special.iter(); - let mut label = |label: &str| Text::literal(LABEL_HEIGHT, font, label); + let label = |label: &str| Text::literal(LABEL_HEIGHT, font, label); let mut key = |char_slice: &[char]| { let special_ch = special_iter.next(); @@ -218,13 +218,13 @@ impl Widget for Keyboard { fn render(&self, mut view: View) { for (i, row) in self.keys.iter().enumerate() { - let row_height = if (i + 1 == self.keys.len()) { + let row_height = if i + 1 == self.keys.len() { KEY_HEIGHT + KEY_PADDING } else { KEY_HEIGHT }; let mut row_frame = view.split_off(Side::Top, row_height); - for (i, key) in row.iter().enumerate() { + for (_i, key) in row.iter().enumerate() { let mut key_frame = row_frame.split_off(Side::Left, key.width); let shift = if key.special { 0 } else { self.shift }; if let Some((label, press)) = key.chars.get(shift) { diff --git a/src/main.rs b/src/main.rs index e64d860..fff7281 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ extern crate enum_primitive; extern crate lazy_static; use std::borrow::Borrow; -use std::collections::BTreeSet; + use std::{fs, io, mem, thread}; use std::fs::{File, OpenOptions}; @@ -14,14 +14,11 @@ use std::io::{Read, Write}; use std::path::{Path, PathBuf}; use std::sync::{mpsc, Arc}; -use armrest::{ml, ui}; +use armrest::ml; use armrest::ink::Ink; -use armrest::ml::{LanguageModel, Recognizer, Spline}; -use armrest::ui::{ - Action, Canvas, Fragment, Frame, Handlers, Image, Line, Region, Side, Stack, Text, TextBuilder, - View, Void, Widget, -}; +use armrest::ml::{Recognizer, Spline}; +use armrest::ui::{Canvas, Fragment, Image, Line, Side, Stack, Text, View, Void, Widget}; use libremarkable::cgmath::{Point2, Vector2}; @@ -35,15 +32,13 @@ use rusttype::Font; use serde::{Deserialize, Serialize}; use encrusted_heart::options::Options; -use encrusted_heart::traits::{BaseOutput, BaseUI, TextStyle, UI}; +use encrusted_heart::traits::{BaseOutput, BaseUI, TextStyle}; use encrusted_heart::zmachine::{Step, Zmachine}; use encrusted_heart::zscii::ZChar; use regex::Regex; -use std::cell::Cell; -use std::rc::Rc; use armrest::app::{Applet, Component}; -use armrest::geom::Regional; + use folly::dict::*; use folly::keyboard::{KeyPress, Keyboard}; @@ -76,25 +71,25 @@ lazy_static! { Font::from_bytes(include_bytes!("../fonts/Inconsolata-Bold.ttf").as_ref()).unwrap(); static ref LONG_WHITESPACE: Regex = Regex::new("\\s\\s\\s+").unwrap(); static ref PROMPT_ICON: Image = Image::new( - image::load_from_memory_with_format(include_bytes!("chevron.png"), image::ImageFormat::PNG) + image::load_from_memory_with_format(include_bytes!("chevron.png"), image::ImageFormat::Png) .unwrap() .to_rgb() ); static ref KEYBOARD_ICON: Image = Image::new( image::load_from_memory_with_format( include_bytes!("keyboard.png"), - image::ImageFormat::PNG + image::ImageFormat::Png ) .unwrap() .to_rgb() ); static ref GAME_ICON: Image = Image::new( - image::load_from_memory_with_format(include_bytes!("book.png"), image::ImageFormat::PNG) + image::load_from_memory_with_format(include_bytes!("book.png"), image::ImageFormat::Png) .unwrap() .to_rgb() ); static ref SAVE_ICON: Image = Image::new( - image::load_from_memory_with_format(include_bytes!("restore.png"), image::ImageFormat::PNG) + image::load_from_memory_with_format(include_bytes!("restore.png"), image::ImageFormat::Png) .unwrap() .to_rgb() ); @@ -115,7 +110,7 @@ enum Msg { } enum UserInput { - Ink(Ink), + Ink(Vec), String(String), } @@ -214,8 +209,13 @@ impl Widget for Element { Element::Input { active, contents } => { prompt.split_off(Side::Bottom, 8); push_icon(&mut prompt, &*PROMPT_ICON, None); - if *active && contents.is_empty() { - push_icon(&mut prompt, &*KEYBOARD_ICON, Some(Msg::ToggleKeyboard)); + if *active { + let msg = if contents.is_empty() { + Some(Msg::ToggleKeyboard) + } else { + None + }; + push_icon(&mut prompt, &*KEYBOARD_ICON, msg); } } Element::File { icon, message, .. } => { @@ -245,7 +245,9 @@ impl Widget for Element { active, contents, .. } => match contents { UserInput::Ink(ink) => { - view.annotate(ink); + for i in ink { + view.annotate(i); + } if *active { view.handlers() .min_size(Vector2::new(LINE_LENGTH + LINE_HEIGHT, LINE_HEIGHT * 2)) @@ -320,7 +322,7 @@ impl Widget for Header { fn render(&self, mut view: View) { view.split_off(Side::Bottom, LINE_HEIGHT); - for line in &self.lines { + for line in self.lines.iter().rev() { line.render_split(&mut view, Side::Bottom, 0.5) } } @@ -653,7 +655,7 @@ impl Session { line.iter().all(|o| o.content.trim().is_empty()) } - for mut line in lines { + for line in lines { if blank(&line) { self.pages.push_advance_space(); continue; @@ -923,7 +925,7 @@ impl Session { self.pages.push_advance_space(); self.pages.push_element(Element::Input { active: true, - contents: UserInput::Ink(Ink::new()), + contents: UserInput::Ink(vec![]), }); result @@ -1114,18 +1116,18 @@ impl Applet for Game { Msg::Input(ink) => { if let GameState::Playing { session } = &mut self.state { if let Some(Element::Input { - active, + active: _, contents: UserInput::Ink(existing_ink), }) = &mut session.pages.last_mut().body.last_mut() { - existing_ink.append(ink, 0.5); + existing_ink.push(ink); self.awaiting_ink += 1; + let mut merged = Ink::new(); + for i in existing_ink { + merged.append(i.clone(), 0.5); + } self.ink_tx - .send(( - existing_ink.clone(), - session.dict.clone(), - self.awaiting_ink, - )) + .send((merged, session.dict.clone(), self.awaiting_ink)) .unwrap(); } } @@ -1134,19 +1136,20 @@ impl Applet for Game { if let GameState::Playing { session } = &mut self.state { // TODO: should this submit the string contents also? if let Some(Element::Input { - active, + active: _, contents: UserInput::Ink(existing_ink), }) = &mut session.pages.last_mut().body.last_mut() { if existing_ink.len() == 0 { // submit the blank ink! self.awaiting_ink += 1; + + let mut merged = Ink::new(); + for i in existing_ink { + merged.append(i.clone(), 0.5); + } self.ink_tx - .send(( - existing_ink.clone(), - session.dict.clone(), - self.awaiting_ink, - )) + .send((merged, session.dict.clone(), self.awaiting_ink)) .unwrap(); } } @@ -1218,8 +1221,10 @@ impl Applet for Game { } Msg::ReadChar(zch) => { if let GameState::Playing { session } = &mut self.state { - if let Some(Element::Input { active, contents }) = - &mut session.pages.last_mut().body.last_mut() + if let Some(Element::Input { + active: _, + contents, + }) = &mut session.pages.last_mut().body.last_mut() { match zch { ZChar::ESC => {} @@ -1284,19 +1289,21 @@ impl Applet for Game { pages.keyboard.shift = 0; let show_keyboard = pages.show_keyboard; - if let Some(Element::Input { active, contents }) = - &mut pages.last_mut().body.last_mut() + if let Some(Element::Input { + active: _, + contents, + }) = &mut pages.last_mut().body.last_mut() { *contents = if show_keyboard { UserInput::String(String::new()) } else { - UserInput::Ink(Ink::new()) + UserInput::Ink(vec![]) }; } } Msg::Shift(depth) => { let shift = &mut self.pages_mut().keyboard.shift; - *shift = if (*shift == depth) { 0 } else { depth }; + *shift = if *shift == depth { 0 } else { depth }; } } @@ -1311,7 +1318,7 @@ fn main() { let mut app = armrest::app::App::new(); let (ink_tx, ink_rx) = mpsc::channel::<(Ink, Arc, usize)>(); - let mut wakeup = app.wakeup(); + let wakeup = app.wakeup(); let mut ink_log = OpenOptions::new() .append(true) @@ -1326,7 +1333,14 @@ fn main() { let _thread = thread::spawn(move || { let mut recognizer: Recognizer = ml::Recognizer::new().unwrap(); - for (i, dict, n) in ink_rx { + while let Ok(mut msg) = ink_rx.recv() { + // We only care about the last message! + while let Ok(m) = ink_rx.try_recv() { + msg = m; + } + + let (i, dict, n) = msg; + let string = recognizer .recognize( &i,