diff --git a/Cargo.lock b/Cargo.lock index 359f147..8772f5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,22 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + [[package]] name = "addr2line" version = "0.20.0" @@ -37,6 +53,30 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-activity" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -76,6 +116,18 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "async-trait" version = "0.1.77" @@ -175,6 +227,12 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -184,6 +242,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + [[package]] name = "bork" version = "0.2.1" @@ -261,6 +338,20 @@ dependencies = [ "x11", ] +[[package]] +name = "calloop" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +dependencies = [ + "bitflags 1.3.2", + "log", + "nix 0.25.1", + "slotmap", + "thiserror", + "vec_map", +] + [[package]] name = "cc" version = "1.0.79" @@ -295,6 +386,21 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + [[package]] name = "chrono" version = "0.4.31" @@ -317,6 +423,7 @@ dependencies = [ "async-trait", "cairo-rs", "epoxy", + "euclid", "femtovg", "geo", "geo-macros", @@ -347,6 +454,7 @@ dependencies = [ "relm4-icons", "rstar", "shapefile", + "surfman", "svg", "thiserror", "tokio", @@ -398,6 +506,36 @@ dependencies = [ "cc", ] +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -522,7 +660,7 @@ dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.9.0", "scopeguard", ] @@ -653,6 +791,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "dlib" version = "0.5.2" @@ -662,6 +806,12 @@ dependencies = [ "libloading 0.8.0", ] +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "dwrote" version = "0.11.0" @@ -709,7 +859,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b96028ce3ff03972312fd8243281858e80fc0f9838b1f035676b6c199214d9e" dependencies = [ - "gl_generator", + "gl_generator 0.9.0", "libc", "pkg-config", "shared_library", @@ -721,6 +871,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + [[package]] name = "exr" version = "1.7.0" @@ -773,7 +932,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset", + "memoffset 0.9.0", "rustc_version", ] @@ -786,7 +945,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall 0.2.16", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1205,9 +1364,20 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a795170cbd85b5a7baa58d6d7525cae6a03e486859860c220f7ebbbdd379d0a" dependencies = [ - "khronos_api", + "khronos_api 2.2.0", "log", - "xml-rs", + "xml-rs 0.7.0", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api 3.1.0", + "log", + "xml-rs 0.8.19", ] [[package]] @@ -1423,7 +1593,7 @@ dependencies = [ "byteorder", "flate2", "lazy_static", - "memmap2", + "memmap2 0.7.1", "quick-xml", "safe-transmute", "serde", @@ -1578,6 +1748,30 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-surface" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "861c6093cbc05599e66436aedf380bb0a23cec2180738393d3a340b80dd135ef" +dependencies = [ + "cgl", + "core-foundation", + "leaky-cow", + "libc", +] + [[package]] name = "itertools" version = "0.10.5" @@ -1593,6 +1787,12 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.26" @@ -1626,6 +1826,12 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554" +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + [[package]] name = "lazy_static" version = "1.4.0" @@ -1638,6 +1844,21 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leak" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd100e01f1154f2908dfa7d02219aeab25d0b9c7fa955164192e3245255a0c73" + +[[package]] +name = "leaky-cow" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a8225d44241fd324a8af2806ba635fc7c8a7e9a7de4d5cf3ef54e71f5926fc" +dependencies = [ + "leak", +] + [[package]] name = "lebe" version = "0.5.2" @@ -1700,7 +1921,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1720,6 +1941,17 @@ dependencies = [ "redox_syscall 0.4.1", ] +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.3.3", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "lock_api" version = "0.4.10" @@ -1742,6 +1974,24 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "matrixmultiply" version = "0.3.7" @@ -1758,6 +2008,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.7.1" @@ -1767,6 +2026,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.0" @@ -1776,6 +2044,20 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1792,6 +2074,18 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + [[package]] name = "nanorand" version = "0.7.0" @@ -1815,6 +2109,60 @@ dependencies = [ "rayon", ] +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum 0.5.11", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + [[package]] name = "nom" version = "7.1.3" @@ -1956,6 +2304,113 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.76", + "quote 1.0.35", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.76", + "quote 1.0.35", + "syn 2.0.48", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "object" version = "0.31.1" @@ -1971,6 +2426,24 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox 0.0.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser 0.20.0", +] + [[package]] name = "pango" version = "0.17.10" @@ -2064,6 +2537,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "pest" version = "2.7.0" @@ -2364,6 +2843,12 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + [[package]] name = "rawpointer" version = "0.2.1" @@ -2401,6 +2886,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2417,7 +2911,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "libredox", + "libredox 0.0.1", "thiserror", ] @@ -2572,6 +3066,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scoped_threadpool" version = "0.1.9" @@ -2584,6 +3084,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "sctk-adwaita" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" +dependencies = [ + "ab_glyph", + "log", + "memmap2 0.5.10", + "smithay-client-toolkit", + "tiny-skia", +] + [[package]] name = "semver" version = "1.0.17" @@ -2630,6 +3143,19 @@ dependencies = [ "serde", ] +[[package]] +name = "servo-display-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1060be2a0bbc35e712ec35ae98119b8def1071a5f2edbe392fd4c899bc2a5f4" +dependencies = [ + "foreign-types", + "objc", + "objc-foundation", + "thiserror", + "time-point", +] + [[package]] name = "sha1" version = "0.10.5" @@ -2709,6 +3235,25 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +[[package]] +name = "smithay-client-toolkit" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" +dependencies = [ + "bitflags 1.3.2", + "calloop", + "dlib", + "lazy_static", + "log", + "memmap2 0.5.10", + "nix 0.24.3", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + [[package]] name = "spin" version = "0.9.8" @@ -2730,6 +3275,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + [[package]] name = "strsim" version = "0.7.0" @@ -2748,6 +3299,35 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "surfman" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2e4280229411d6eb8a8f873152dece1904df2682003bdc748adc181e003568" +dependencies = [ + "bitflags 1.3.2", + "cfg_aliases", + "cgl", + "cocoa", + "core-foundation", + "core-graphics", + "euclid", + "gl_generator 0.14.0", + "io-surface", + "lazy_static", + "libc", + "log", + "mach", + "metal", + "objc", + "raw-window-handle", + "servo-display-link", + "wayland-sys 0.30.1", + "winapi", + "winit", + "wio", +] + [[package]] name = "svg" version = "0.13.1" @@ -2882,6 +3462,37 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +[[package]] +name = "time-point" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06535c958d6abe68dc4b4ef9e6845f758fc42fe463d0093d0aca40254f03fb14" + +[[package]] +name = "tiny-skia" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tokio" version = "1.35.1" @@ -3016,6 +3627,12 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + [[package]] name = "typenum" version = "1.16.0" @@ -3170,6 +3787,91 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +[[package]] +name = "wayland-client" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" +dependencies = [ + "bitflags 1.3.2", + "downcast-rs", + "libc", + "nix 0.24.3", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys 0.29.5", +] + +[[package]] +name = "wayland-commons" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" +dependencies = [ + "nix 0.24.3", + "once_cell", + "smallvec", + "wayland-sys 0.29.5", +] + +[[package]] +name = "wayland-cursor" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" +dependencies = [ + "nix 0.24.3", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" +dependencies = [ + "bitflags 1.3.2", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +dependencies = [ + "proc-macro2 1.0.76", + "quote 1.0.35", + "xml-rs 0.7.0", +] + +[[package]] +name = "wayland-sys" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" +dependencies = [ + "dlib", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "wayland-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" +dependencies = [ + "dlib", + "lazy_static", + "log", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.64" @@ -3237,6 +3939,15 @@ dependencies = [ "windows-targets 0.52.0", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -3246,6 +3957,21 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.1" @@ -3276,6 +4002,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.0", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" @@ -3288,6 +4020,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" @@ -3300,6 +4038,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.0" @@ -3312,6 +4056,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.0" @@ -3324,6 +4074,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" @@ -3336,6 +4092,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" @@ -3348,6 +4110,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" @@ -3360,6 +4128,41 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +[[package]] +name = "winit" +version = "0.28.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +dependencies = [ + "android-activity", + "bitflags 1.3.2", + "cfg_aliases", + "core-foundation", + "core-graphics", + "dispatch", + "instant", + "libc", + "log", + "mio", + "ndk", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall 0.3.5", + "sctk-adwaita", + "smithay-client-toolkit", + "wasm-bindgen", + "wayland-client", + "wayland-commons", + "wayland-protocols", + "wayland-scanner", + "web-sys", + "windows-sys 0.45.0", + "x11-dl", +] + [[package]] name = "winnow" version = "0.4.7" @@ -3388,6 +4191,17 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + [[package]] name = "xattr" version = "0.2.3" @@ -3397,6 +4211,12 @@ dependencies = [ "libc", ] +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + [[package]] name = "xml-rs" version = "0.7.0" @@ -3406,6 +4226,12 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + [[package]] name = "yeslogic-fontconfig-sys" version = "3.2.0" diff --git a/Cargo.toml b/Cargo.toml index 6d4c106..ba3da21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,8 @@ async-trait = "0.1.77" lazy_static = "1.4.0" once_cell = "1.19.0" relm4-icons = {version="0.6.0",features=["add-filled","delete-filled","chevron-up-filled","chevron-down-filled"]} +surfman = "0.8.1" +euclid = "0.22.9" # plotters-cairo = "0.5.0" diff --git a/back.txt b/back.txt index 24a753e..cbf3b09 100644 --- a/back.txt +++ b/back.txt @@ -262,4 +262,84 @@ pub enum DownSampleMeth { pub enum CoordType { Polar, LatLon, -} \ No newline at end of file +} + + +// let levels: Vec = vec![0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65]; +// let colors = vec![ +// RGBABuilder::default() +// .red(0 as f32 / 255.0) +// .green(172 as f32 / 255.0) +// .blue(164 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(192 as f32 / 255.0) +// .green(192 as f32 / 255.0) +// .blue(254 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(122 as f32 / 255.0) +// .green(114 as f32 / 255.0) +// .blue(238 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(30 as f32 / 255.0) +// .green(38 as f32 / 255.0) +// .blue(208 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(166 as f32 / 255.0) +// .green(252 as f32 / 255.0) +// .blue(168 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(0 as f32 / 255.0) +// .green(234 as f32 / 255.0) +// .blue(0 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(16 as f32 / 255.0) +// .green(146 as f32 / 255.0) +// .blue(26 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(252 as f32 / 255.0) +// .green(244 as f32 / 255.0) +// .blue(100 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(200 as f32 / 255.0) +// .green(200 as f32 / 255.0) +// .blue(2 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(140 as f32 / 255.0) +// .green(140 as f32 / 255.0) +// .blue(0 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(254 as f32 / 255.0) +// .green(172 as f32 / 255.0) +// .blue(172 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(254 as f32 / 255.0) +// .green(100 as f32 / 255.0) +// .blue(92 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(238 as f32 / 255.0) +// .green(2 as f32 / 255.0) +// .blue(48 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(212 as f32 / 255.0) +// .green(142 as f32 / 255.0) +// .blue(254 as f32 / 255.0) +// .build(), +// RGBABuilder::default() +// .red(170 as f32 / 255.0) +// .green(36 as f32 / 255.0) +// .blue(250 as f32 / 255.0) +// .build(), +// ]; diff --git a/src/dynamic_col/imp.rs b/src/dynamic_col/imp.rs index 315a2e4..841f088 100644 --- a/src/dynamic_col/imp.rs +++ b/src/dynamic_col/imp.rs @@ -1,11 +1,15 @@ use adw::subclass::bin::BinImpl; +use glib::Properties; use gtk::glib::prelude::*; use gtk::prelude::*; use gtk::subclass::prelude::*; use std::cell::{Cell, RefCell}; use std::num::NonZeroU32; +#[derive(Properties)] +#[properties(wrapper_type = super::DynamicCol)] pub struct DynamicCol { + #[property(get, set)] pub(super) child: RefCell>, pub(super) ratio: RefCell>, width: Cell, @@ -33,6 +37,11 @@ impl ObjectSubclass for DynamicCol { } impl ObjectImpl for DynamicCol { + + fn constructed(&self) { + self.parent_constructed(); + } + fn dispose(&self) { if let Some(child) = self.child.borrow_mut().take() { child.unparent(); diff --git a/src/main.rs b/src/main.rs index 4f9af71..77ade78 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,12 @@ mod utils; use gtk::prelude::*; use gtk::{gio, glib, Application, ApplicationWindow}; +use pipeline::offscreen_renderer::OffscreenRenderer; use relm4::menu; use relm4::RelmApp; use std::ptr; use tokio::runtime::Runtime; +use utils::creator; mod chart; mod components; mod coords; @@ -23,14 +25,16 @@ const APP_ID: &str = "org.gtk_rs.HelloWorld2"; static RUNTIME: Lazy = Lazy::new(|| Runtime::new().expect("Setting up tokio runtime needs to succeed.")); +static OFFSCREEN: Lazy = Lazy::new(|| OffscreenRenderer::new().expect("Can't create offscreen renderer.")); + fn main() { // Load GL pointers from epoxy (GL context management library used by GTK). { #[cfg(target_os = "macos")] let library = - unsafe { libloading::os::unix::Library::new("/opt/homebrew/lib/libepoxy.0.dylib") }.or(unsafe{ - libloading::os::unix::Library::new("libepoxy.0.dylib") - }).unwrap(); + unsafe { libloading::os::unix::Library::new("/opt/homebrew/lib/libepoxy.0.dylib") } + .or(unsafe { libloading::os::unix::Library::new("libepoxy.0.dylib") }) + .unwrap(); #[cfg(all(unix, not(target_os = "macos")))] let library = unsafe { libloading::os::unix::Library::new("libepoxy.so.0") }.unwrap(); diff --git a/src/pipeline/mod.rs b/src/pipeline/mod.rs index 5e7ba5e..11de261 100644 --- a/src/pipeline/mod.rs +++ b/src/pipeline/mod.rs @@ -5,6 +5,7 @@ use image::RgbImage; use ndarray::parallel::prelude::*; use ndarray::{Array2, ArrayView2}; use num_traits::{Num, AsPrimitive, FromPrimitive}; +pub mod offscreen_renderer; use crate::{ coords::Mapper, diff --git a/src/pipeline/offscreen_renderer.rs b/src/pipeline/offscreen_renderer.rs new file mode 100644 index 0000000..2e1cdc5 --- /dev/null +++ b/src/pipeline/offscreen_renderer.rs @@ -0,0 +1,79 @@ +use euclid::Size2D; +use femtovg::{renderer::OpenGl, Canvas}; +use std::num::NonZeroU32; +use std::sync::{Mutex, RwLock}; +use std::{cell::RefCell, sync::Arc}; +use surfman::{device, Adapter, Connection, Context, Device, Error}; + +pub struct OffscreenRenderer { + context: Arc>, + device: Device, + // renderer: Arc>, + canvas: Arc>>, +} + +impl OffscreenRenderer { + pub fn new() -> Result { + let connection = Connection::new()?; + let adapter = connection.create_adapter()?; + let mut device = connection.create_device(&adapter)?; + + let api = device.gl_api(); + + let descriptor = device.create_context_descriptor(&surfman::ContextAttributes { + version: surfman::GLVersion::new(3, 3), + flags: surfman::ContextAttributeFlags::empty(), + })?; + + let mut context = device.create_context(&descriptor, None)?; + let mut surface = device.create_surface( + &context, + surfman::SurfaceAccess::GPUOnly, + surfman::SurfaceType::Generic { + size: euclid::Size2D::new(500, 500), + }, + )?; + + let surface_info = device.surface_info(&surface); + device + .bind_surface_to_context(&mut context, surface) + .expect("Failed to bind surface to context"); + device.make_context_current(&context).unwrap(); + + static LOAD_FN: fn(&str) -> *const std::ffi::c_void = + |s| epoxy::get_proc_addr(s) as *const _; + + let (mut renderer, fbo) = unsafe { + let renderer = OpenGl::new_from_function(LOAD_FN).expect("Cannot create renderer"); + let fbo = + glow::NativeFramebuffer(NonZeroU32::new(surface_info.framebuffer_object).unwrap()); + (renderer, fbo) + }; + + renderer.set_screen_target(Some(fbo)); + + let mut canvas = Canvas::new(renderer).expect("Cannot create canvas"); + canvas.set_size(500, 500, 1.0); + + Ok(Self { + context: Arc::new(RwLock::new(context)), + device, + canvas: Arc::new(RwLock::new(canvas)), + }) + } + + pub fn canvas(&self) -> Arc>> { + self.canvas.clone() + } +} + +impl Drop for OffscreenRenderer { + fn drop(&mut self) { + let mut context = self.context.write().unwrap(); + self.device.destroy_context(&mut context).unwrap(); + let _ = self; + } +} + +unsafe impl Send for OffscreenRenderer {} +unsafe impl Sync for OffscreenRenderer {} diff --git a/src/render/cms.rs b/src/render/cms.rs index e73208d..eba7282 100644 --- a/src/render/cms.rs +++ b/src/render/cms.rs @@ -8,6 +8,9 @@ pub struct CMS { bounds: (f64, f64, f64, f64), } +unsafe impl Send for CMS {} +unsafe impl Sync for CMS {} + impl CMS { pub fn new(mapper: Mapper, window_size: (f32, f32)) -> Self { let bounds = mapper.get_bounds(); diff --git a/src/render/interior/layers.rs b/src/render/interior/layers.rs index 18a412d..993e3aa 100644 --- a/src/render/interior/layers.rs +++ b/src/render/interior/layers.rs @@ -1,3 +1,4 @@ +use crate::render::cms::CMS; use crate::{coords::Range, render::Render}; use femtovg::Paint; use femtovg::{renderer::OpenGl, Canvas, ImageId}; @@ -10,8 +11,15 @@ use std::{ sync::{Arc, Mutex}, }; -type PrepareFunc = - Box, Render) -> Pin>> + Sync + Send>; +type PrepareFunc = Box< + dyn FnOnce( + Box, + &mut Canvas, + CMS, + ) -> Pin>> + + Sync + + Send, +>; type DrawFunc = Box; type LayerImplSync = Box; @@ -37,14 +45,14 @@ impl Debug for Layer { } pub trait LayerImpl: Debug { - fn draw(&self, render: Render) -> Option; + fn draw(&self, canvas: &mut Canvas, cms: &CMS) -> Option; } impl Layer { pub fn new< - FU: Future + 'static, + FU: Future + Send + Sync + 'static, F: 'static + Fn(&Self, Render, (f32, f32)) + Send + Sync, - PREPARE: FnOnce(Arc, Render) -> FU + Send + Sync + 'static, + PREPARE: FnOnce(Box, &mut Canvas, CMS) -> FU + Send + Sync + 'static, IMP: LayerImpl + Sync + Send + 'static, >( visiable: bool, diff --git a/src/render/mod.rs b/src/render/mod.rs index ae07117..522aa0d 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -190,4 +190,10 @@ impl Render { pub fn render_range(&self) -> ((f64, f64), (f64, f64)) { self.imp().window_range().unwrap() } + + pub fn create_cms(&self) -> CMS { + let borrowed_mapper = &*self.imp().mapper.borrow(); + let new_mapper = borrowed_mapper.clone(); + CMS::new(new_mapper, (500.0, 500.0)) + } } diff --git a/src/render/predefined/grid_field_renderer.rs b/src/render/predefined/grid_field_renderer.rs index 72f98de..0448c19 100644 --- a/src/render/predefined/grid_field_renderer.rs +++ b/src/render/predefined/grid_field_renderer.rs @@ -1,5 +1,7 @@ use super::color_mapper::{BoundaryNorm, ColorMapper}; -use femtovg::{ImageFlags, Paint, Path, PixelFormat::Rgba8, RenderTarget}; +use femtovg::{ + renderer::OpenGl, Canvas, ImageFlags, Paint, Path, PixelFormat::Rgba8, RenderTarget, +}; use geo_types::LineString; use ndarray::ArrayView2; use num_traits::{Num, NumOps}; @@ -8,7 +10,7 @@ use std::{fmt::Debug, marker::PhantomData}; use super::super::renders::DataRenderer; use crate::{ data::Radar2d, - render::{LayerImpl, Render, Target}, + render::{cms::CMS, LayerImpl, Render, Target}, utils::meshgrid, }; @@ -32,8 +34,8 @@ impl> GridFieldRenderer, + cms: &CMS, data: ArrayView2, - render: &Render, dims: (ArrayView2, ArrayView2), window_size: (f32, f32), fill_value: T, @@ -48,45 +50,43 @@ impl> GridFieldRenderer, { type Data = Radar2d; - fn render(&self, render: Render, data: &Self::Data) -> Target { - let mut canvas = render.get_canvas(); - let canvas = canvas.as_mut().unwrap(); - let new_img = canvas - .create_image_empty(3000, 3000, Rgba8, ImageFlags::empty()) - .expect("Can't Create Image"); - - canvas.save(); - canvas.reset(); - - if let Ok(_) = canvas.image_size(new_img) { - canvas.set_render_target(RenderTarget::Image(new_img)); - let _data = data.data.view(); - let (_dim1, _dim2) = meshgrid(data.dim1.view(), data.dim2.view()); - self.draw_2d( - canvas, - _data, - &render, - (_dim1.view(), _dim2.view()), - (3000.0, 3000.0), - data.fill_value, - ); - } - - canvas.restore(); - canvas.set_render_target(RenderTarget::Screen); - - let d1_start = (data.dim1.view()).first().unwrap().clone(); - let d1_end = (data.dim1.view()).last().unwrap().clone(); - - let d2_start = data.dim2.view().first().unwrap().clone(); - let d2_end = data.dim2.view().last().unwrap().clone(); - - Target::new( - new_img, - 3000f32, - 3000f32, - ((d1_start, d1_end).into(), (d2_start, d2_end).into()), - ) + fn render( + &self, + canvas: &mut Canvas, + cms: &CMS, + data: &Self::Data, + size: (f32, f32), + ) -> Target { + let (w, h) = size; } + + // fn render(&self, canvas: &mut Canvas, cms: &CMS, data: &Self::Data) -> Target { + // let _data = data.data.view(); + // let (_dim1, _dim2) = meshgrid(data.dim1.view(), data.dim2.view()); + // self.draw_2d( + // canvas, + // cms, + // _data, + // (_dim1.view(), _dim2.view()), + // (3000.0, 3000.0), + // data.fill_value, + // ); + + // let d1_start = (data.dim1.view()).first().unwrap().clone(); + // let d1_end = (data.dim1.view()).last().unwrap().clone(); + + // let d2_start = data.dim2.view().first().unwrap().clone(); + // let d2_end = data.dim2.view().last().unwrap().clone(); + + // Target::new( + // new_img, + // 3000f32, + // 3000f32, + // ((d1_start, d1_end).into(), (d2_start, d2_end).into()), + // ) + // } } #[derive(Debug)] @@ -166,7 +161,22 @@ where T: Num + NumOps + PartialOrd + Copy + Clone + Debug + Send + Sync, CMAP: ColorMapper + Debug, { - fn draw(&self, render: Render) -> Option { - Some(self.renderer.render(render, &self.data)) + fn draw( + &self, + canvas: &mut femtovg::Canvas, + cms: &crate::render::cms::CMS, + ) -> Option { + let new_img = canvas + .create_image_empty(3000, 3000, Rgba8, ImageFlags::empty()) + .expect("Can't Create Image"); + + if let Ok(_) = canvas.image_size(new_img) { + canvas.reset(); + canvas.set_render_target(RenderTarget::Image(new_img)); + } + + canvas.set_render_target(RenderTarget::Screen); + + Some(self.renderer.render(Render::new(canvas, cms), &self.data)) } } diff --git a/src/render/predefined/layers.rs b/src/render/predefined/layers.rs index ef6ae7e..cbfb792 100644 --- a/src/render/predefined/layers.rs +++ b/src/render/predefined/layers.rs @@ -1,8 +1,12 @@ use femtovg::{renderer::OpenGl, Canvas, Paint}; use num_traits::{Num, NumOps}; -use std::path::Path; use std::sync::Arc; +use std::thread::spawn; +use std::{os::unix::thread, path::Path}; +use crate::render::cms::CMS; +use crate::render::{LayerImpl, Target}; +use crate::OFFSCREEN; use crate::{ data::{AsyncDataLoader, DataLoader, Radar2d}, render::{Layer, Render}, @@ -33,12 +37,13 @@ impl Layer { path.rect(ox, oy, x, y); c.fill_path(&path, &painter); } - } else { - if let Some(renderer) = s.get_imp().as_ref() { + } + }, + layer_name, + Some( + |s_imp: Box, c: &mut Canvas, cms: CMS| async move { + if let Some(renderer) = s.as_ref() { let img = renderer.draw(render.clone()).unwrap(); - - let mut c = render.get_canvas(); - let c = c.as_mut().unwrap(); if let Ok(_) = c.image_size(img.target) { let (x, y) = img.size(&render); let (ox, oy) = img.origin(&render); @@ -50,14 +55,8 @@ impl Layer { c.fill_path(&path, &painter); } } - } - }, - layer_name, - Some(|s: Arc, render: Render| async move { - if let None = s.render_target() { - if let Some(renderer) = s.get_imp().as_ref() {} - } - }), + }, + ), Some(GridLayerImpl::new(GridFieldRenderer::new(color_map), data)), ) } diff --git a/src/render/renders.rs b/src/render/renders.rs index 2c4c86b..455be2f 100644 --- a/src/render/renders.rs +++ b/src/render/renders.rs @@ -1,8 +1,15 @@ +use super::cms::CMS; use super::Render; use super::Target; use femtovg::{renderer::OpenGl, Canvas}; pub trait DataRenderer { type Data; - fn render(&self, render: Render, data: &Self::Data) -> Target; + fn render( + &self, + canvas: &mut Canvas, + cms: &CMS, + data: &Self::Data, + size: (f32, f32), + ) -> Target; } diff --git a/src/utils.rs b/src/utils.rs index 573ed7a..aeb1c04 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,4 +1,12 @@ +use std::{borrow::BorrowMut, num::NonZeroU32}; + +use euclid::Size2D; +use femtovg::Canvas; use ndarray::{Array2, ArrayView1}; +use surfman::{ + Connection, Context, ContextAttributeFlags, ContextAttributes, ContextDescriptor, + NativeConnection, NativeContext, SurfaceAccess, SurfaceType, Device, GLVersion, +}; pub fn meshgrid(x: ArrayView1, y: ArrayView1) -> (Array2, Array2) where @@ -10,81 +18,42 @@ where let yy = Array2::from_shape_fn(shape, |(i, _)| y[i].clone()); (xx, yy) } -// let levels: Vec = vec![0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65]; -// let colors = vec![ -// RGBABuilder::default() -// .red(0 as f32 / 255.0) -// .green(172 as f32 / 255.0) -// .blue(164 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(192 as f32 / 255.0) -// .green(192 as f32 / 255.0) -// .blue(254 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(122 as f32 / 255.0) -// .green(114 as f32 / 255.0) -// .blue(238 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(30 as f32 / 255.0) -// .green(38 as f32 / 255.0) -// .blue(208 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(166 as f32 / 255.0) -// .green(252 as f32 / 255.0) -// .blue(168 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(0 as f32 / 255.0) -// .green(234 as f32 / 255.0) -// .blue(0 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(16 as f32 / 255.0) -// .green(146 as f32 / 255.0) -// .blue(26 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(252 as f32 / 255.0) -// .green(244 as f32 / 255.0) -// .blue(100 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(200 as f32 / 255.0) -// .green(200 as f32 / 255.0) -// .blue(2 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(140 as f32 / 255.0) -// .green(140 as f32 / 255.0) -// .blue(0 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(254 as f32 / 255.0) -// .green(172 as f32 / 255.0) -// .blue(172 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(254 as f32 / 255.0) -// .green(100 as f32 / 255.0) -// .blue(92 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(238 as f32 / 255.0) -// .green(2 as f32 / 255.0) -// .blue(48 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(212 as f32 / 255.0) -// .green(142 as f32 / 255.0) -// .blue(254 as f32 / 255.0) -// .build(), -// RGBABuilder::default() -// .red(170 as f32 / 255.0) -// .green(36 as f32 / 255.0) -// .blue(250 as f32 / 255.0) -// .build(), -// ]; + +pub fn creator() { + let connection = Connection::new().unwrap(); + let adapter = connection.create_adapter().unwrap(); + let mut device = connection.create_device(&adapter).unwrap(); + let api = device.gl_api(); + let descriptor = device.create_context_descriptor(&ContextAttributes { + version: GLVersion::new(3, 3), + flags: ContextAttributeFlags::empty(), + }).unwrap(); + + let mut context = device.create_context(&descriptor, None).unwrap(); + let mut surface = device + .create_surface( + &context, + SurfaceAccess::GPUOnly, + SurfaceType::Generic { + size: Size2D::new(500, 500), + }, + ) + .unwrap(); + + let surface_info = device.surface_info(&surface); + device + .bind_surface_to_context(&mut context, surface) + .expect("Failed to bind surface to context"); + device.make_context_current(&context).unwrap(); + use femtovg::renderer::OpenGl; + static LOAD_FN: fn(&str) -> *const std::ffi::c_void = |s| epoxy::get_proc_addr(s) as *const _; + let (mut renderer, fbo) = unsafe { + let renderer = OpenGl::new_from_function(LOAD_FN).expect("Cannot create renderer"); + let fbo = + glow::NativeFramebuffer(NonZeroU32::new(surface_info.framebuffer_object).unwrap()); + (renderer, fbo) + }; + + renderer.set_screen_target(Some(fbo)); + device.destroy_context(&mut context); +}