sync
This commit is contained in:
parent
53d5b6a57f
commit
caf8b68926
546
Cargo.lock
generated
546
Cargo.lock
generated
@ -240,6 +240,12 @@ dependencies = [
|
|||||||
"rustc-demangle",
|
"rustc-demangle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "base64"
|
||||||
|
version = "0.21.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64ct"
|
name = "base64ct"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
@ -505,6 +511,7 @@ dependencies = [
|
|||||||
"glue",
|
"glue",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
"image",
|
"image",
|
||||||
|
"imgref",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libadwaita",
|
"libadwaita",
|
||||||
@ -524,10 +531,13 @@ dependencies = [
|
|||||||
"relm4",
|
"relm4",
|
||||||
"relm4-components",
|
"relm4-components",
|
||||||
"relm4-icons",
|
"relm4-icons",
|
||||||
|
"reqwest",
|
||||||
|
"rgb",
|
||||||
"rstar",
|
"rstar",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"shapefile",
|
"shapefile",
|
||||||
|
"slippy-map-tiles",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"sorted-vec",
|
"sorted-vec",
|
||||||
"surfman",
|
"surfman",
|
||||||
@ -976,6 +986,15 @@ version = "1.8.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
|
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "encoding_rs"
|
||||||
|
version = "0.8.33"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.9.3"
|
version = "0.9.3"
|
||||||
@ -1007,6 +1026,16 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
|
checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno"
|
||||||
|
version = "0.3.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "etws_loader"
|
name = "etws_loader"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -1050,6 +1079,12 @@ dependencies = [
|
|||||||
"zune-inflate",
|
"zune-inflate",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fastrand"
|
||||||
|
version = "2.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fdeflate"
|
name = "fdeflate"
|
||||||
version = "0.3.4"
|
version = "0.3.4"
|
||||||
@ -1183,6 +1218,15 @@ version = "0.1.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "form_urlencoded"
|
||||||
|
version = "1.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
|
||||||
|
dependencies = [
|
||||||
|
"percent-encoding",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fragile"
|
name = "fragile"
|
||||||
version = "2.0.0"
|
version = "2.0.0"
|
||||||
@ -1766,6 +1810,25 @@ dependencies = [
|
|||||||
"zvariant",
|
"zvariant",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "h2"
|
||||||
|
version = "0.3.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-util",
|
||||||
|
"http",
|
||||||
|
"indexmap",
|
||||||
|
"slab",
|
||||||
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "half"
|
name = "half"
|
||||||
version = "2.2.1"
|
version = "2.2.1"
|
||||||
@ -1833,12 +1896,83 @@ dependencies = [
|
|||||||
"digest",
|
"digest",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http"
|
||||||
|
version = "0.2.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http-body"
|
||||||
|
version = "0.4.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"http",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httparse"
|
||||||
|
version = "1.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "httpdate"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "humantime"
|
name = "humantime"
|
||||||
version = "2.1.0"
|
version = "2.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper"
|
||||||
|
version = "0.14.28"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-util",
|
||||||
|
"h2",
|
||||||
|
"http",
|
||||||
|
"http-body",
|
||||||
|
"httparse",
|
||||||
|
"httpdate",
|
||||||
|
"itoa",
|
||||||
|
"pin-project-lite",
|
||||||
|
"socket2",
|
||||||
|
"tokio",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
"want",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper-tls"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"hyper",
|
||||||
|
"native-tls",
|
||||||
|
"tokio",
|
||||||
|
"tokio-native-tls",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.59"
|
version = "0.1.59"
|
||||||
@ -1868,6 +2002,16 @@ version = "1.0.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "idna"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-bidi",
|
||||||
|
"unicode-normalization",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "image"
|
name = "image"
|
||||||
version = "0.24.7"
|
version = "0.24.7"
|
||||||
@ -1889,9 +2033,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "imgref"
|
name = "imgref"
|
||||||
version = "1.9.4"
|
version = "1.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
|
checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
@ -1936,6 +2080,12 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ipnet"
|
||||||
|
version = "2.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.10.5"
|
version = "0.10.5"
|
||||||
@ -2064,9 +2214,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.147"
|
version = "0.2.153"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libloading"
|
name = "libloading"
|
||||||
@ -2116,6 +2266,12 @@ dependencies = [
|
|||||||
"redox_syscall 0.4.1",
|
"redox_syscall 0.4.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linux-raw-sys"
|
||||||
|
version = "0.4.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.10"
|
version = "0.4.10"
|
||||||
@ -2222,6 +2378,12 @@ dependencies = [
|
|||||||
"objc",
|
"objc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mime"
|
||||||
|
version = "0.3.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minimal-lexical"
|
name = "minimal-lexical"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
@ -2240,9 +2402,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.8"
|
version = "0.8.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
|
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
@ -2259,6 +2421,24 @@ dependencies = [
|
|||||||
"getrandom",
|
"getrandom",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "native-tls"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"libc",
|
||||||
|
"log",
|
||||||
|
"openssl",
|
||||||
|
"openssl-probe",
|
||||||
|
"openssl-sys",
|
||||||
|
"schannel",
|
||||||
|
"security-framework",
|
||||||
|
"security-framework-sys",
|
||||||
|
"tempfile",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ndarray"
|
name = "ndarray"
|
||||||
version = "0.15.6"
|
version = "0.15.6"
|
||||||
@ -2622,6 +2802,50 @@ version = "1.19.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl"
|
||||||
|
version = "0.10.64"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.3.3",
|
||||||
|
"cfg-if",
|
||||||
|
"foreign-types",
|
||||||
|
"libc",
|
||||||
|
"once_cell",
|
||||||
|
"openssl-macros",
|
||||||
|
"openssl-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl-macros"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.76",
|
||||||
|
"quote 1.0.35",
|
||||||
|
"syn 2.0.48",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl-probe"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl-sys"
|
||||||
|
version = "0.9.101"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"libc",
|
||||||
|
"pkg-config",
|
||||||
|
"vcpkg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "option-ext"
|
name = "option-ext"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@ -3237,10 +3461,50 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rgb"
|
name = "reqwest"
|
||||||
version = "0.8.36"
|
version = "0.11.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
|
checksum = "0eea5a9eb898d3783f17c6407670e3592fd174cb81a10e51d4c37f49450b9946"
|
||||||
|
dependencies = [
|
||||||
|
"base64",
|
||||||
|
"bytes",
|
||||||
|
"encoding_rs",
|
||||||
|
"futures-core",
|
||||||
|
"futures-util",
|
||||||
|
"h2",
|
||||||
|
"http",
|
||||||
|
"http-body",
|
||||||
|
"hyper",
|
||||||
|
"hyper-tls",
|
||||||
|
"ipnet",
|
||||||
|
"js-sys",
|
||||||
|
"log",
|
||||||
|
"mime",
|
||||||
|
"native-tls",
|
||||||
|
"once_cell",
|
||||||
|
"percent-encoding",
|
||||||
|
"pin-project-lite",
|
||||||
|
"rustls-pemfile",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"serde_urlencoded",
|
||||||
|
"sync_wrapper",
|
||||||
|
"system-configuration",
|
||||||
|
"tokio",
|
||||||
|
"tokio-native-tls",
|
||||||
|
"tower-service",
|
||||||
|
"url",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
"winreg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rgb"
|
||||||
|
version = "0.8.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
]
|
]
|
||||||
@ -3283,6 +3547,28 @@ dependencies = [
|
|||||||
"semver",
|
"semver",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustix"
|
||||||
|
version = "0.38.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.3.3",
|
||||||
|
"errno",
|
||||||
|
"libc",
|
||||||
|
"linux-raw-sys",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-pemfile"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
|
||||||
|
dependencies = [
|
||||||
|
"base64",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustversion"
|
name = "rustversion"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
@ -3326,6 +3612,15 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "schannel"
|
||||||
|
version = "0.1.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scoped-tls"
|
name = "scoped-tls"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -3351,6 +3646,29 @@ dependencies = [
|
|||||||
"tiny-skia",
|
"tiny-skia",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "security-framework"
|
||||||
|
version = "2.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 1.3.2",
|
||||||
|
"core-foundation",
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
"security-framework-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "security-framework-sys"
|
||||||
|
version = "2.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "1.0.17"
|
version = "1.0.17"
|
||||||
@ -3397,6 +3715,18 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_urlencoded"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
||||||
|
dependencies = [
|
||||||
|
"form_urlencoded",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo-display-link"
|
name = "servo-display-link"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@ -3468,6 +3798,15 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "signal-hook-registry"
|
||||||
|
version = "1.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "simd-adler32"
|
name = "simd-adler32"
|
||||||
version = "0.3.7"
|
version = "0.3.7"
|
||||||
@ -3483,6 +3822,16 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slippy-map-tiles"
|
||||||
|
version = "0.16.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ca0bb81e6365882ec0e68a114f08c1c126d1fca2faafee1c82d2d95b0f07099"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "slotmap"
|
name = "slotmap"
|
||||||
version = "1.0.6"
|
version = "1.0.6"
|
||||||
@ -3517,6 +3866,16 @@ dependencies = [
|
|||||||
"wayland-protocols",
|
"wayland-protocols",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "socket2"
|
||||||
|
version = "0.5.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sorted-vec"
|
name = "sorted-vec"
|
||||||
version = "0.8.3"
|
version = "0.8.3"
|
||||||
@ -3636,6 +3995,33 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sync_wrapper"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "system-configuration"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "658bc6ee10a9b4fcf576e9b0819d95ec16f4d2c02d39fd83ac1c8789785c4a42"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.3.3",
|
||||||
|
"core-foundation",
|
||||||
|
"system-configuration-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "system-configuration-sys"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "6.1.1"
|
version = "6.1.1"
|
||||||
@ -3666,6 +4052,19 @@ version = "0.12.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
|
checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tempfile"
|
||||||
|
version = "3.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"fastrand",
|
||||||
|
"redox_syscall 0.3.5",
|
||||||
|
"rustix",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
@ -3773,16 +4172,37 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tinyvec"
|
||||||
version = "1.35.1"
|
version = "1.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
|
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
|
||||||
|
dependencies = [
|
||||||
|
"tinyvec_macros",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tinyvec_macros"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio"
|
||||||
|
version = "1.36.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
"libc",
|
||||||
|
"mio",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
|
"parking_lot",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
|
"signal-hook-registry",
|
||||||
|
"socket2",
|
||||||
"tokio-macros",
|
"tokio-macros",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3805,6 +4225,30 @@ dependencies = [
|
|||||||
"syn 2.0.48",
|
"syn 2.0.48",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-native-tls"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
|
||||||
|
dependencies = [
|
||||||
|
"native-tls",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-util"
|
||||||
|
version = "0.7.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.7.5"
|
version = "0.7.5"
|
||||||
@ -3876,6 +4320,12 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-service"
|
||||||
|
version = "0.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing"
|
name = "tracing"
|
||||||
version = "0.1.40"
|
version = "0.1.40"
|
||||||
@ -3953,6 +4403,12 @@ dependencies = [
|
|||||||
"syn 2.0.48",
|
"syn 2.0.48",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "try-lock"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tstr"
|
name = "tstr"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
@ -4034,6 +4490,15 @@ version = "1.0.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
|
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-normalization"
|
||||||
|
version = "0.1.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
|
||||||
|
dependencies = [
|
||||||
|
"tinyvec",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-script"
|
name = "unicode-script"
|
||||||
version = "0.5.5"
|
version = "0.5.5"
|
||||||
@ -4058,12 +4523,29 @@ version = "0.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "url"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
|
||||||
|
dependencies = [
|
||||||
|
"form_urlencoded",
|
||||||
|
"idna",
|
||||||
|
"percent-encoding",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "valuable"
|
name = "valuable"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vcpkg"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vec_map"
|
name = "vec_map"
|
||||||
version = "0.8.2"
|
version = "0.8.2"
|
||||||
@ -4092,6 +4574,15 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "want"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
|
||||||
|
dependencies = [
|
||||||
|
"try-lock",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
@ -4123,6 +4614,18 @@ dependencies = [
|
|||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-futures"
|
||||||
|
version = "0.4.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.87"
|
version = "0.2.87"
|
||||||
@ -4322,6 +4825,15 @@ dependencies = [
|
|||||||
"windows-targets 0.48.1",
|
"windows-targets 0.48.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-targets"
|
name = "windows-targets"
|
||||||
version = "0.42.2"
|
version = "0.42.2"
|
||||||
@ -4546,6 +5058,16 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winreg"
|
||||||
|
version = "0.50.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wio"
|
name = "wio"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
|
|||||||
23
Cargo.toml
23
Cargo.toml
@ -42,15 +42,16 @@ core_extensions = { version = "1.5.2", default_features = false, features = [
|
|||||||
"std",
|
"std",
|
||||||
] }
|
] }
|
||||||
plotters-backend = "0.3.5"
|
plotters-backend = "0.3.5"
|
||||||
tokio = { version = "1.35.1", features = [
|
#tokio = { version = "1.35.1", features = [
|
||||||
"time",
|
# "time",
|
||||||
"fs",
|
# "fs",
|
||||||
"io-std",
|
# "io-std",
|
||||||
"macros",
|
# "macros",
|
||||||
"num_cpus",
|
# "num_cpus",
|
||||||
"bytes",
|
# "bytes",
|
||||||
"io-util",
|
# "io-util",
|
||||||
] }
|
#] }
|
||||||
|
tokio = { version = "1.36.0", features = ["full"] }
|
||||||
async-trait = "0.1.77"
|
async-trait = "0.1.77"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
once_cell = "1.19.0"
|
once_cell = "1.19.0"
|
||||||
@ -87,6 +88,10 @@ tracing = "0.1.40"
|
|||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.18"
|
||||||
indexmap = "2.2.2"
|
indexmap = "2.2.2"
|
||||||
tokio-condvar = "0.1.0"
|
tokio-condvar = "0.1.0"
|
||||||
|
imgref = "1.10.1"
|
||||||
|
rgb = "0.8.37"
|
||||||
|
slippy-map-tiles = "0.16.0"
|
||||||
|
reqwest = "0.11.25"
|
||||||
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|||||||
@ -33,6 +33,8 @@ impl Plugin for ETWSLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn load(&self, path: RStr<'_>) -> RResult<PluginResult, Error> where {
|
fn load(&self, path: RStr<'_>) -> RResult<PluginResult, Error> where {
|
||||||
|
let mut lat_range = [0.0, 0.0];
|
||||||
|
let mut lon_range = [0.0, 0.0];
|
||||||
if let Ok(record) = Record::parse_from_path(path.to_string()) {
|
if let Ok(record) = Record::parse_from_path(path.to_string()) {
|
||||||
let result_blocks = record
|
let result_blocks = record
|
||||||
.blocks
|
.blocks
|
||||||
@ -87,6 +89,11 @@ impl Plugin for ETWSLoader {
|
|||||||
CoordType::Other
|
CoordType::Other
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let lat = b.info.dimension_values.get(0).unwrap();
|
||||||
|
let lon = b.info.dimension_values.get(1).unwrap();
|
||||||
|
lat_range = [lat[0], lat[lat.len() - 1]];
|
||||||
|
lon_range = [lon[0], lon[lon.len() - 1]];
|
||||||
|
|
||||||
let shape = match b.info.dimension_size.len() {
|
let shape = match b.info.dimension_size.len() {
|
||||||
1 => radarg_plugin_interface::DataShape::Vector,
|
1 => radarg_plugin_interface::DataShape::Vector,
|
||||||
2 => radarg_plugin_interface::DataShape::Matrix,
|
2 => radarg_plugin_interface::DataShape::Matrix,
|
||||||
@ -137,8 +144,8 @@ impl Plugin for ETWSLoader {
|
|||||||
let meta = MetaData {
|
let meta = MetaData {
|
||||||
datetime: RSome(record.filetime.timestamp()),
|
datetime: RSome(record.filetime.timestamp()),
|
||||||
site_info: RNone,
|
site_info: RNone,
|
||||||
lon_range: RSome([0.0, 0.0]),
|
lon_range: RSome(lon_range),
|
||||||
lat_range: RSome([1.0, 1.0]),
|
lat_range: RSome(lat_range),
|
||||||
data_format: RSome("Eastone Washon Radar".into()),
|
data_format: RSome("Eastone Washon Radar".into()),
|
||||||
other_info: RNone,
|
other_info: RNone,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{"$message_type":"diagnostic","message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":327,"line_start":13,"line_end":13,"column_start":15,"column_end":19,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":335,"byte_end":340,"line_start":13,"line_end":13,"column_start":27,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":27,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused imports","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":329,"line_start":13,"line_end":13,"column_start":15,"column_end":21,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":21}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"src/parser.rs","byte_start":333,"byte_end":340,"line_start":13,"line_end":13,"column_start":25,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":25,"highlight_end":32}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `Write`, `self`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:13:15\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m13\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::io::{self, Read, Write};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"unused imports: `Write`, `self`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":327,"line_start":13,"line_end":13,"column_start":15,"column_end":19,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":335,"byte_end":340,"line_start":13,"line_end":13,"column_start":27,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":27,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused imports","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":323,"byte_end":329,"line_start":13,"line_end":13,"column_start":15,"column_end":21,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":15,"highlight_end":21}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"src/parser.rs","byte_start":333,"byte_end":340,"line_start":13,"line_end":13,"column_start":25,"column_end":32,"is_primary":true,"text":[{"text":"use std::io::{self, Read, Write};","highlight_start":25,"highlight_end":32}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `Write`, `self`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:13:15\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m13\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::io::{self, Read, Write};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
||||||
{"$message_type":"diagnostic","message":"unused variable: `hlen2`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":"_hlen2","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:198:21\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m198\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (input, hlen2) = Self::_parse_u32(input, order)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"unused variable: `hlen2`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":6651,"byte_end":6656,"line_start":198,"line_end":198,"column_start":21,"column_end":26,"is_primary":true,"text":[{"text":" let (input, hlen2) = Self::_parse_u32(input, order)?;","highlight_start":21,"highlight_end":26}],"label":null,"suggested_replacement":"_hlen2","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:198:21\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m198\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (input, hlen2) = Self::_parse_u32(input, order)?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_hlen2`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_variables)]` on by default\u001b[0m\n\n"}
|
||||||
{"$message_type":"diagnostic","message":"unused variable: `order`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":"_order","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `order`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:279:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m279\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m order: Order,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_order`\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"unused variable: `order`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/parser.rs","byte_start":9035,"byte_end":9040,"line_start":279,"line_end":279,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" order: Order,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":"_order","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `order`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:279:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m279\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m order: Order,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_order`\u001b[0m\n\n"}
|
||||||
{"$message_type":"diagnostic","message":"unused variable: `dimension_len`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":1029,"byte_end":1042,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":1029,"byte_end":1042,"line_start":41,"line_end":41,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":"_dimension_len","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `dimension_len`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:41:26\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m41\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (dimension_len, data) = match b.data {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_dimension_len`\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"unused variable: `dimension_len`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/lib.rs","byte_start":1109,"byte_end":1122,"line_start":43,"line_end":43,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/lib.rs","byte_start":1109,"byte_end":1122,"line_start":43,"line_end":43,"column_start":26,"column_end":39,"is_primary":true,"text":[{"text":" let (dimension_len, data) = match b.data {","highlight_start":26,"highlight_end":39}],"label":null,"suggested_replacement":"_dimension_len","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused variable: `dimension_len`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:43:26\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m43\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let (dimension_len, data) = match b.data {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_dimension_len`\u001b[0m\n\n"}
|
||||||
{"$message_type":"diagnostic","message":"variants `I64` and `U64` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":563,"byte_end":573,"line_start":28,"line_end":28,"column_start":6,"column_end":16,"is_primary":false,"text":[{"text":"enum ValueTypes {","highlight_start":6,"highlight_end":16}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":580,"byte_end":583,"line_start":29,"line_end":29,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" I64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":616,"byte_end":619,"line_start":33,"line_end":33,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" U64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variants `I64` and `U64` are never constructed\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:29:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m28\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0menum ValueTypes {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mvariants in this enum\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m I64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m U64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"variants `I64` and `U64` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/parser.rs","byte_start":563,"byte_end":573,"line_start":28,"line_end":28,"column_start":6,"column_end":16,"is_primary":false,"text":[{"text":"enum ValueTypes {","highlight_start":6,"highlight_end":16}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":580,"byte_end":583,"line_start":29,"line_end":29,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" I64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/parser.rs","byte_start":616,"byte_end":619,"line_start":33,"line_end":33,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" U64,","highlight_start":5,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variants `I64` and `U64` are never constructed\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/parser.rs:29:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m28\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0menum ValueTypes {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----------\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mvariants in this enum\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m29\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m I64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m33\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m U64,\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
|
||||||
{"$message_type":"diagnostic","message":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 warnings emitted\u001b[0m\n\n"}
|
{"$message_type":"diagnostic","message":"5 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 5 warnings emitted\u001b[0m\n\n"}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -222,6 +222,8 @@ impl Component for AppModel {
|
|||||||
*FILE_PATH_ROOT.lock().unwrap() = path.clone();
|
*FILE_PATH_ROOT.lock().unwrap() = path.clone();
|
||||||
let data = Self::open_file_only(path);
|
let data = Self::open_file_only(path);
|
||||||
let meta: MetaInfo = (&data.meta).clone().into();
|
let meta: MetaInfo = (&data.meta).clone().into();
|
||||||
|
let (lat_start, lat_end) = meta.lat_range.unwrap();
|
||||||
|
let (lon_start, lon_end) = meta.lon_range.unwrap();
|
||||||
let element_impl = plugin_result_impl(&data);
|
let element_impl = plugin_result_impl(&data);
|
||||||
let mut renderer = OffscreenRenderer::new(3000, 3000).unwrap();
|
let mut renderer = OffscreenRenderer::new(3000, 3000).unwrap();
|
||||||
let mut canvas = renderer.create_canvas();
|
let mut canvas = renderer.create_canvas();
|
||||||
@ -238,6 +240,9 @@ impl Component for AppModel {
|
|||||||
let layer =
|
let layer =
|
||||||
Layer::new(true, "New Layer".to_string(), AssoElement::Instant(element));
|
Layer::new(true, "New Layer".to_string(), AssoElement::Instant(element));
|
||||||
dialog_render_sender.emit(MonitorInputMsg::AddMetaItem(meta.to_map()));
|
dialog_render_sender.emit(MonitorInputMsg::AddMetaItem(meta.to_map()));
|
||||||
|
dialog_render_sender.emit(MonitorInputMsg::SetRenderRange(
|
||||||
|
lon_start, lon_end, lat_start, lat_end,
|
||||||
|
));
|
||||||
AppMsg::NewLayer(layer)
|
AppMsg::NewLayer(layer)
|
||||||
}
|
}
|
||||||
_ => AppMsg::Close,
|
_ => AppMsg::Close,
|
||||||
|
|||||||
@ -67,11 +67,6 @@ impl SimpleComponent for ControlPanelModel {
|
|||||||
println!("Selected: {}", step_selector.selected());
|
println!("Selected: {}", step_selector.selected());
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
// gtk::Label{
|
|
||||||
// set_label: "Subheader",
|
|
||||||
// add_css_class:"h3",
|
|
||||||
// set_halign: gtk::Align::Start,
|
|
||||||
// }
|
|
||||||
},
|
},
|
||||||
#[local]
|
#[local]
|
||||||
step_selector -> gtk::DropDown{
|
step_selector -> gtk::DropDown{
|
||||||
|
|||||||
@ -17,12 +17,14 @@ pub enum MonitorInputMsg {
|
|||||||
UpdateMetaItem(HashMap<String, String>),
|
UpdateMetaItem(HashMap<String, String>),
|
||||||
UpdateLayer((String, Box<dyn Fn(&mut Layer) + 'static>)),
|
UpdateLayer((String, Box<dyn Fn(&mut Layer) + 'static>)),
|
||||||
RefreshLayerList,
|
RefreshLayerList,
|
||||||
|
SetRenderRange(f64, f64, f64, f64),
|
||||||
None,
|
None,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Debug for MonitorInputMsg {
|
impl Debug for MonitorInputMsg {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
MonitorInputMsg::SetRenderRange(_, _, _, _) => write!(f, "MonitorInputMsg::SetRenderRange"),
|
||||||
MonitorInputMsg::RefreshLayerList => write!(f, "MonitorInputMsg::RefreshLayerList"),
|
MonitorInputMsg::RefreshLayerList => write!(f, "MonitorInputMsg::RefreshLayerList"),
|
||||||
MonitorInputMsg::NewElement(_) => write!(f, "MonitorInputMsg::NewElement"),
|
MonitorInputMsg::NewElement(_) => write!(f, "MonitorInputMsg::NewElement"),
|
||||||
MonitorInputMsg::AddLayer(_) => write!(f, "MonitorInputMsg::AddLayer"),
|
MonitorInputMsg::AddLayer(_) => write!(f, "MonitorInputMsg::AddLayer"),
|
||||||
|
|||||||
@ -79,8 +79,6 @@ impl Component for MonitorModel {
|
|||||||
#[name = "renderer"]
|
#[name = "renderer"]
|
||||||
#[wrap(Some)]
|
#[wrap(Some)]
|
||||||
set_child = &Render{
|
set_child = &Render{
|
||||||
// #[track = "model.changed(MonitorModel::new_layer())"]
|
|
||||||
// set_interior_layers: model.layers.clone(),
|
|
||||||
#[track = "model.changed(MonitorModel::render_cfg())"]
|
#[track = "model.changed(MonitorModel::render_cfg())"]
|
||||||
set_cfg: model.render_cfg,
|
set_cfg: model.render_cfg,
|
||||||
#[track = "model.changed(MonitorModel::render_range())"]
|
#[track = "model.changed(MonitorModel::render_range())"]
|
||||||
@ -110,7 +108,6 @@ impl Component for MonitorModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn update_with_view(&mut self, widgets: &mut Self::Widgets, message: Self::Input, sender: ComponentSender<Self>, root: &Self::Root) {
|
fn update_with_view(&mut self, widgets: &mut Self::Widgets, message: Self::Input, sender: ComponentSender<Self>, root: &Self::Root) {
|
||||||
|
|
||||||
self.reset();
|
self.reset();
|
||||||
match message {
|
match message {
|
||||||
MonitorInputMsg::AddLayer(layer) => {
|
MonitorInputMsg::AddLayer(layer) => {
|
||||||
@ -126,6 +123,9 @@ impl Component for MonitorModel {
|
|||||||
MonitorInputMsg::AddMetaItem(map) => {
|
MonitorInputMsg::AddMetaItem(map) => {
|
||||||
self.sidebar.emit(SideBarInputMsg::AddMetaItems(map))
|
self.sidebar.emit(SideBarInputMsg::AddMetaItems(map))
|
||||||
}
|
}
|
||||||
|
MonitorInputMsg::SetRenderRange(lon_start,lon_end,lat_start,lat_end)=>{
|
||||||
|
self.set_render_range((lat_start,lat_end,lon_start,lon_end));
|
||||||
|
}
|
||||||
MonitorInputMsg::ClearMetaItems => self.sidebar.emit(SideBarInputMsg::ClearMetaItems),
|
MonitorInputMsg::ClearMetaItems => self.sidebar.emit(SideBarInputMsg::ClearMetaItems),
|
||||||
MonitorInputMsg::UpdateMetaItem(map) => {
|
MonitorInputMsg::UpdateMetaItem(map) => {
|
||||||
self.sidebar.emit(SideBarInputMsg::ClearMetaItems);
|
self.sidebar.emit(SideBarInputMsg::ClearMetaItems);
|
||||||
@ -193,16 +193,6 @@ impl Component for MonitorModel {
|
|||||||
) {
|
) {
|
||||||
self.reset();
|
self.reset();
|
||||||
match msg {
|
match msg {
|
||||||
// MonitorCommand::NewLayer(layer) => {
|
|
||||||
// // self.layers.borrow_mut().insert(layer.name.clone(), layer);
|
|
||||||
// // self.set_render_range((29.13, 30.16, 119.53, 121.13));
|
|
||||||
// // self.sidebar
|
|
||||||
// // .sender()
|
|
||||||
// // .send(SideBarInputMsg::RefreshList)
|
|
||||||
// // .unwrap();
|
|
||||||
// // let raw_id = self.get_new_layer();
|
|
||||||
// // self.set_new_layer(*raw_id + 1);
|
|
||||||
// }
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
src/components/monitor/sidebar/actions.rs
Normal file
6
src/components/monitor/sidebar/actions.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
use crate::widgets::Layer;
|
||||||
|
|
||||||
|
relm4::safe_settings_and_actions! {
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub(super) Visible(group: "layer", name: "layer-visible");
|
||||||
|
}
|
||||||
@ -2,3 +2,4 @@ pub mod sidebar;
|
|||||||
pub use sidebar::*;
|
pub use sidebar::*;
|
||||||
pub mod bottom_bar;
|
pub mod bottom_bar;
|
||||||
pub mod meta_data_list;
|
pub mod meta_data_list;
|
||||||
|
mod actions;
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
use abi_stable::type_level::trait_marker::Hash;
|
use abi_stable::type_level::trait_marker::Hash;
|
||||||
|
use relm4::safe_settings_and_actions::extensions::SafeSimpleAction;
|
||||||
|
use super::actions::*;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::WidgetExt;
|
use gtk::prelude::WidgetExt;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use relm4::{
|
use relm4::{
|
||||||
|
gtk::gio,
|
||||||
binding::{Binding, U8Binding},
|
binding::{Binding, U8Binding},
|
||||||
factory::{DynamicIndex, FactoryComponent, FactorySender, FactoryVecDeque},
|
factory::{DynamicIndex, FactoryComponent, FactorySender, FactoryVecDeque},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
@ -26,11 +29,9 @@ use super::{
|
|||||||
meta_data_list::{InfoColumn, MyListItem, TagColumn},
|
meta_data_list::{InfoColumn, MyListItem, TagColumn},
|
||||||
};
|
};
|
||||||
|
|
||||||
relm4::new_action_group!(LayerActionGroup, "layer");
|
|
||||||
relm4::new_stateful_action!(ToTime, LayerActionGroup, "to_time", u32, ());
|
|
||||||
relm4::new_stateless_action!(BeTime, LayerActionGroup, "be_time");
|
|
||||||
pub struct SideBarModel {
|
pub struct SideBarModel {
|
||||||
layers: Rc<RefCell<Vec<Layer>>>,
|
layers: Rc<RefCell<Vec<Layer>>>,
|
||||||
|
selected_layer_idx: usize,
|
||||||
counter: u8,
|
counter: u8,
|
||||||
list_view_wrapper: TypedListView<LayerItem, gtk::SingleSelection>,
|
list_view_wrapper: TypedListView<LayerItem, gtk::SingleSelection>,
|
||||||
bottom_bar_vec: FactoryVecDeque<BottomBarModel>,
|
bottom_bar_vec: FactoryVecDeque<BottomBarModel>,
|
||||||
@ -93,8 +94,7 @@ impl SimpleComponent for SideBarModel {
|
|||||||
set_spacing: 5,
|
set_spacing: 5,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
layer_page = gtk::ScrolledWindow::builder()
|
layer_page = gtk::ScrolledWindow::builder()
|
||||||
.vexpand(true)
|
.vexpand(true)
|
||||||
@ -132,24 +132,9 @@ impl SimpleComponent for SideBarModel {
|
|||||||
// Initialize the ListView wrapper
|
// Initialize the ListView wrapper
|
||||||
let mut list_view_wrapper: TypedListView<LayerItem, gtk::SingleSelection> =
|
let mut list_view_wrapper: TypedListView<LayerItem, gtk::SingleSelection> =
|
||||||
TypedListView::with_sorting();
|
TypedListView::with_sorting();
|
||||||
|
|
||||||
let mut bottom_bar_vec = FactoryVecDeque::new(gtk::Box::default(), sender.input_sender());
|
let mut bottom_bar_vec = FactoryVecDeque::new(gtk::Box::default(), sender.input_sender());
|
||||||
|
|
||||||
let mut group = relm4::actions::RelmActionGroup::<LayerActionGroup>::new();
|
|
||||||
let action: RelmAction<ToTime> = {
|
|
||||||
RelmAction::new_stateful_with_target_value(&(), move |_, state, _value| {
|
|
||||||
sender.output(SideBarOutputMsg::SwitchToTimeSeries(_value as usize)).unwrap()
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
let action2:RelmAction<BeTime> = RelmAction::new_stateless(|_| {
|
|
||||||
dbg!("be time");
|
|
||||||
});
|
|
||||||
|
|
||||||
group.add_action(action);
|
|
||||||
group.add_action(action2);
|
|
||||||
let app = relm4::main_application();
|
let app = relm4::main_application();
|
||||||
group.register_for_widget(root);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut bottom_bar_vec_guard = bottom_bar_vec.guard();
|
let mut bottom_bar_vec_guard = bottom_bar_vec.guard();
|
||||||
@ -165,6 +150,7 @@ impl SimpleComponent for SideBarModel {
|
|||||||
let mut model = SideBarModel {
|
let mut model = SideBarModel {
|
||||||
meta_list_view,
|
meta_list_view,
|
||||||
layers: init,
|
layers: init,
|
||||||
|
selected_layer_idx: 0,
|
||||||
counter: 0,
|
counter: 0,
|
||||||
list_view_wrapper,
|
list_view_wrapper,
|
||||||
bottom_bar_vec,
|
bottom_bar_vec,
|
||||||
@ -269,8 +255,6 @@ impl RelmListItem for LayerItem {
|
|||||||
fn setup(_item: >k::ListItem) -> (gtk::Box, Widgets) {
|
fn setup(_item: >k::ListItem) -> (gtk::Box, Widgets) {
|
||||||
relm4::menu! {
|
relm4::menu! {
|
||||||
main_menu: {
|
main_menu: {
|
||||||
"Bind To Time" => ToTime(0),
|
|
||||||
"Be Time" => BeTime,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,8 +310,6 @@ impl RelmListItem for LayerItem {
|
|||||||
|
|
||||||
relm4::menu! {
|
relm4::menu! {
|
||||||
main_menu: {
|
main_menu: {
|
||||||
"Bind To Time" => ToTime(self.key),
|
|
||||||
"Be Time" => BeTime,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
menu.set_menu_model(Some(&main_menu));
|
menu.set_menu_model(Some(&main_menu));
|
||||||
|
|||||||
@ -26,6 +26,8 @@ use tracing::info;
|
|||||||
use tracing_subscriber;
|
use tracing_subscriber;
|
||||||
mod widgets;
|
mod widgets;
|
||||||
mod data_utils;
|
mod data_utils;
|
||||||
|
mod predefined;
|
||||||
|
mod map_tile_utils;
|
||||||
|
|
||||||
const APP_ID: &str = "org.tsuki.radar_g";
|
const APP_ID: &str = "org.tsuki.radar_g";
|
||||||
static RUNTIME: SafeLazy<Runtime> =
|
static RUNTIME: SafeLazy<Runtime> =
|
||||||
|
|||||||
9
src/map_tile_utils.rs
Normal file
9
src/map_tile_utils.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
pub fn lat_lon_to_zoom(lat_range: (f64, f64), lon_range: (f64, f64), w: f32, h:f32 ) -> u8 {
|
||||||
|
let lat_diff = lat_range.1 - lat_range.0;
|
||||||
|
let lon_diff = lon_range.1 - lon_range.0;
|
||||||
|
let z1 = ( (360.0 * w) as f64 / lon_diff / 256.0).log2();
|
||||||
|
let z2 = ( (180.0 * h) as f64 / lat_diff / 256.0).log2();
|
||||||
|
let z = z1.min(z2);
|
||||||
|
z as u8
|
||||||
|
}
|
||||||
@ -9,7 +9,8 @@ use crate::RUNTIME;
|
|||||||
use crate::{coords::Range, widgets::widget::Widget};
|
use crate::{coords::Range, widgets::widget::Widget};
|
||||||
use chrono::{DateTime, TimeZone, Utc};
|
use chrono::{DateTime, TimeZone, Utc};
|
||||||
use core_extensions::SelfOps;
|
use core_extensions::SelfOps;
|
||||||
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
use femtovg::rgb::alt::GRAY8;
|
||||||
|
use femtovg::{renderer::OpenGl, Canvas, ImageFlags, ImageId, ImageInfo, PixelFormat};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use glib::PropertyGet;
|
use glib::PropertyGet;
|
||||||
use radarg_plugin_interface::PluginResult;
|
use radarg_plugin_interface::PluginResult;
|
||||||
@ -149,8 +150,15 @@ impl InstantElement {
|
|||||||
let result_id = match target.target {
|
let result_id = match target.target {
|
||||||
TargetType::ImageId(id) => id,
|
TargetType::ImageId(id) => id,
|
||||||
TargetType::Mem(ref mem) => {
|
TargetType::Mem(ref mem) => {
|
||||||
|
let gl_bind = render.get_context();
|
||||||
|
let gl = gl_bind.as_ref().unwrap();
|
||||||
|
let flags = ImageFlags::empty();
|
||||||
|
let texture = target.mem_to_native_texture(gl, flags);
|
||||||
let converted = canvas
|
let converted = canvas
|
||||||
.load_image_mem(mem, femtovg::ImageFlags::empty())
|
.create_image_from_native_texture(
|
||||||
|
texture,
|
||||||
|
ImageInfo::new(flags, 3000, 3000, PixelFormat::Rgba8),
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
target.set_target(TargetType::ImageId(converted));
|
target.set_target(TargetType::ImageId(converted));
|
||||||
converted
|
converted
|
||||||
@ -168,17 +176,25 @@ impl InstantElement {
|
|||||||
pub fn to_time_series(
|
pub fn to_time_series(
|
||||||
self,
|
self,
|
||||||
dispatcher: Rc<Dispatcher>,
|
dispatcher: Rc<Dispatcher>,
|
||||||
cms:CMS
|
cms: CMS,
|
||||||
) -> (TimeSeriesElement, DateTime<Utc>) {
|
) -> (TimeSeriesElement, DateTime<Utc>) {
|
||||||
// let imp = Arc::new(InstantElementImpl::new(self));
|
// let imp = Arc::new(InstantElementImpl::new(self));
|
||||||
if let InstantElementDrawerType::Prepared((target, imp)) = self.draw_type {
|
if let InstantElementDrawerType::Prepared((target, imp)) = self.draw_type {
|
||||||
let mut time_series = TimeSeriesElement::new(imp, dispatcher, cms, self.key);
|
let mut time_series = TimeSeriesElement::new(imp, dispatcher, cms, self.key);
|
||||||
let data = target.data.clone().unwrap().downcast::<PluginResult>().unwrap();
|
let data = target
|
||||||
|
.data
|
||||||
|
.clone()
|
||||||
|
.unwrap()
|
||||||
|
.downcast::<PluginResult>()
|
||||||
|
.unwrap();
|
||||||
let time_stamp = data.blocks.first().unwrap().datetime;
|
let time_stamp = data.blocks.first().unwrap().datetime;
|
||||||
let meta_info: MetaInfo = data.meta.clone().into();
|
let meta_info: MetaInfo = data.meta.clone().into();
|
||||||
use chrono::prelude::*;
|
use chrono::prelude::*;
|
||||||
let time = Utc.timestamp_opt(time_stamp, 0).unwrap();
|
let time = Utc.timestamp_opt(time_stamp, 0).unwrap();
|
||||||
(*time_series.buffer).lock().unwrap().insert(time, Some(RenderResult::new(target, meta_info)));
|
(*time_series.buffer)
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.insert(time, Some(RenderResult::new(target, meta_info)));
|
||||||
(time_series, time)
|
(time_series, time)
|
||||||
} else {
|
} else {
|
||||||
panic!("InstantElementDrawerType is not prepared");
|
panic!("InstantElementDrawerType is not prepared");
|
||||||
@ -294,15 +310,11 @@ impl TimeSeriesElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
registers
|
registers.lock().unwrap().get_mut(&dt).map(|x| {
|
||||||
.lock()
|
x.into_iter().for_each(|n| {
|
||||||
.unwrap()
|
|
||||||
.get_mut(&dt)
|
|
||||||
.map(|x|x.into_iter()
|
|
||||||
.for_each(|n| {
|
|
||||||
n.notify_waiters();
|
n.notify_waiters();
|
||||||
}) )
|
})
|
||||||
;
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -383,6 +395,115 @@ impl Target {
|
|||||||
((x2 - x1).abs(), (y2 - y1).abs())
|
((x2 - x1).abs(), (y2 - y1).abs())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn mem_to_native_texture(&self, gl: &glow::Context, flags: ImageFlags) -> glow::NativeTexture {
|
||||||
|
if let TargetType::Mem(ref mem) = self.target{
|
||||||
|
use glow::*;
|
||||||
|
let texture = unsafe {
|
||||||
|
let id = gl.create_texture().unwrap();
|
||||||
|
gl.bind_texture(glow::TEXTURE_2D, Some(id));
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_ALIGNMENT, 1);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_ROW_LENGTH, 3000 as i32);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_SKIP_PIXELS, 0);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_SKIP_ROWS, 0);
|
||||||
|
id
|
||||||
|
};
|
||||||
|
let width = 3000; // 纹理宽度
|
||||||
|
let height = 3000; // 纹理高度
|
||||||
|
unsafe {
|
||||||
|
gl.tex_image_2d(
|
||||||
|
glow::TEXTURE_2D,
|
||||||
|
0, // level
|
||||||
|
glow::RGBA as i32, // internal_format
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
0, // border
|
||||||
|
glow::RGBA, // format
|
||||||
|
glow::UNSIGNED_BYTE, // type
|
||||||
|
Some(&mem), // pixels
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if flags.contains(ImageFlags::GENERATE_MIPMAPS) {
|
||||||
|
if flags.contains(ImageFlags::NEAREST) {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_2D,
|
||||||
|
glow::TEXTURE_MIN_FILTER,
|
||||||
|
glow::NEAREST_MIPMAP_NEAREST as i32,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(
|
||||||
|
glow::TEXTURE_2D,
|
||||||
|
glow::TEXTURE_MIN_FILTER,
|
||||||
|
glow::LINEAR_MIPMAP_LINEAR as i32,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if flags.contains(ImageFlags::NEAREST) {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MIN_FILTER, glow::NEAREST as i32);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MIN_FILTER, glow::LINEAR as i32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if flags.contains(ImageFlags::NEAREST) {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MAG_FILTER, glow::NEAREST as i32);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_MAG_FILTER, glow::LINEAR as i32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if flags.contains(ImageFlags::REPEAT_X) {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_S, glow::REPEAT as i32);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_S, glow::CLAMP_TO_EDGE as i32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if flags.contains(ImageFlags::REPEAT_Y) {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_T, glow::REPEAT as i32);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
gl.tex_parameter_i32(glow::TEXTURE_2D, glow::TEXTURE_WRAP_T, glow::CLAMP_TO_EDGE as i32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_ALIGNMENT, 4);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_ROW_LENGTH, 0);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_SKIP_PIXELS, 0);
|
||||||
|
gl.pixel_store_i32(glow::UNPACK_SKIP_ROWS, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if flags.contains(ImageFlags::GENERATE_MIPMAPS) {
|
||||||
|
unsafe {
|
||||||
|
gl.generate_mipmap(glow::TEXTURE_2D);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
gl.bind_texture(glow::TEXTURE_2D, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
return texture;
|
||||||
|
} else {
|
||||||
|
panic!("Target is not mem");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn origin(&self, cms: &Render) -> (f32, f32) {
|
pub fn origin(&self, cms: &Render) -> (f32, f32) {
|
||||||
let (x, y) = self.bounds;
|
let (x, y) = self.bounds;
|
||||||
let p1 = (x.0, y.1);
|
let p1 = (x.0, y.1);
|
||||||
|
|||||||
@ -14,6 +14,7 @@ use ndarray::ArrayView2;
|
|||||||
use num_traits::{AsPrimitive, FromPrimitive, Num, NumOps};
|
use num_traits::{AsPrimitive, FromPrimitive, Num, NumOps};
|
||||||
use std::{fmt::Debug, io::Cursor, marker::PhantomData};
|
use std::{fmt::Debug, io::Cursor, marker::PhantomData};
|
||||||
use gtk::ResponseType::No;
|
use gtk::ResponseType::No;
|
||||||
|
use tracing::info;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct GridFieldRenderer<CMAP, T>
|
pub struct GridFieldRenderer<CMAP, T>
|
||||||
@ -60,14 +61,14 @@ impl<T: NumOps + PartialOrd + Copy + FromPrimitive + AsPrimitive<f64>, CMAP: Col
|
|||||||
|
|
||||||
let rt_lat = dim2[[r + 1, c + 1]];
|
let rt_lat = dim2[[r + 1, c + 1]];
|
||||||
let rt_lon = dim1[[r + 1, c + 1]];
|
let rt_lon = dim1[[r + 1, c + 1]];
|
||||||
let cell: LineString = vec![
|
// let cell: LineString = vec![
|
||||||
(lb_lon, lb_lat),
|
// (lb_lon, lb_lat),
|
||||||
(rt_lon + 0.001, lb_lat),
|
// (rt_lon + 0.001, lb_lat),
|
||||||
(rt_lon + 0.001, rt_lat),
|
// (rt_lon + 0.001, rt_lat),
|
||||||
(lb_lon, rt_lat + 0.001),
|
// (lb_lon, rt_lat + 0.001),
|
||||||
(lb_lon, lb_lat + 0.001),
|
// (lb_lon, lb_lat + 0.001),
|
||||||
]
|
// ]
|
||||||
.into();
|
// .into();
|
||||||
|
|
||||||
let v = &data[[r, c]];
|
let v = &data[[r, c]];
|
||||||
let mapped_color = self.cmap.map_value_to_color(*v, fill_value);
|
let mapped_color = self.cmap.map_value_to_color(*v, fill_value);
|
||||||
@ -76,17 +77,20 @@ impl<T: NumOps + PartialOrd + Copy + FromPrimitive + AsPrimitive<f64>, CMAP: Col
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mapped_ring = cms.ring_map(&cell).unwrap();
|
// let mapped_ring = cms.ring_map(&cell).unwrap();
|
||||||
|
let (ox,oy) = cms.map((lb_lon, lb_lat)).unwrap();
|
||||||
|
let (rx, ry) = cms.map((rt_lon, rt_lat)).unwrap();
|
||||||
|
|
||||||
let mut path = Path::new();
|
let mut path = Path::new();
|
||||||
let mut points = mapped_ring.points();
|
// let mut points = mapped_ring.points();
|
||||||
let first_point = points.next().unwrap();
|
// let first_point = points.next().unwrap();
|
||||||
path.move_to(first_point.x(), first_point.y());
|
// path.move_to(first_point.x(), first_point.y());
|
||||||
|
//
|
||||||
for point in points {
|
// for point in points {
|
||||||
path.line_to(point.x(), point.y());
|
// path.line_to(point.x(), point.y());
|
||||||
}
|
// }
|
||||||
path.close();
|
path.rect(ox, oy, (rx - ox) * 1.5, (ry - oy) * 1.5);
|
||||||
|
// path.close();
|
||||||
canvas.fill_path(&path, &Paint::color(mapped_color.unwrap()));
|
canvas.fill_path(&path, &Paint::color(mapped_color.unwrap()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,11 +111,11 @@ where
|
|||||||
data: &Self::Data,
|
data: &Self::Data,
|
||||||
size: (f32, f32),
|
size: (f32, f32),
|
||||||
) -> Target {
|
) -> Target {
|
||||||
|
let start = std::time::Instant::now();
|
||||||
let (w, h) = size;
|
let (w, h) = size;
|
||||||
let new_img = canvas
|
let new_img = canvas
|
||||||
.create_image_empty(w as usize, h as usize, Rgba8, ImageFlags::empty())
|
.create_image_empty(w as usize, h as usize, Rgba8, ImageFlags::empty())
|
||||||
.expect("Can't Create Image");
|
.expect("Can't Create Image");
|
||||||
|
|
||||||
canvas.image_size(new_img).unwrap();
|
canvas.image_size(new_img).unwrap();
|
||||||
canvas.set_render_target(RenderTarget::Image(new_img));
|
canvas.set_render_target(RenderTarget::Image(new_img));
|
||||||
|
|
||||||
@ -126,6 +130,7 @@ where
|
|||||||
|
|
||||||
cms.set_lat_range(lat_start..lat_end);
|
cms.set_lat_range(lat_start..lat_end);
|
||||||
cms.set_lon_range(lon_start..lon_end);
|
cms.set_lon_range(lon_start..lon_end);
|
||||||
|
info!("Time to prepare data: {:?}", start.elapsed());
|
||||||
|
|
||||||
self.draw_2d(
|
self.draw_2d(
|
||||||
canvas,
|
canvas,
|
||||||
@ -136,6 +141,7 @@ where
|
|||||||
data.fill_value,
|
data.fill_value,
|
||||||
);
|
);
|
||||||
canvas.flush();
|
canvas.flush();
|
||||||
|
info!("Time to render: {:?}", start.elapsed());
|
||||||
let mut pixels: Vec<u8> = vec![0; w as usize * h as usize * 4];
|
let mut pixels: Vec<u8> = vec![0; w as usize * h as usize * 4];
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::ReadPixels(
|
gl::ReadPixels(
|
||||||
@ -149,23 +155,25 @@ where
|
|||||||
);
|
);
|
||||||
debug_assert_eq!(gl::GetError(), gl::NO_ERROR);
|
debug_assert_eq!(gl::GetError(), gl::NO_ERROR);
|
||||||
}
|
}
|
||||||
|
info!("Time to read pixels: {:?}", start.elapsed());
|
||||||
|
|
||||||
let img: ImageBuffer<Rgba<u8>, Vec<u8>> = ImageBuffer::from_raw(w as u32, h as u32, pixels)
|
// let img: ImageBuffer<Rgba<u8>, Vec<u8>> = ImageBuffer::from_raw(w as u32, h as u32, pixels)
|
||||||
.expect("Failed to create ImageBuffer");
|
// .expect("Failed to create ImageBuffer");
|
||||||
let thumbnail = resize(&img, 500, 500, image::imageops::FilterType::Lanczos3);
|
// let thumbnail = resize(&img, 500, 500, image::imageops::FilterType::Lanczos3);
|
||||||
let mut thumb_buffer = Cursor::new(Vec::new());
|
// let mut thumb_buffer = Cursor::new(Vec::new());
|
||||||
img.write_to(&mut thumb_buffer, image::ImageOutputFormat::Png)
|
// img.write_to(&mut thumb_buffer, image::ImageOutputFormat::Png)
|
||||||
.expect("Failed to write PNG buffer");
|
// .expect("Failed to write PNG buffer");
|
||||||
let thumb_data = thumb_buffer.into_inner();
|
// info!("Time to write PNG: {:?}", start.elapsed());
|
||||||
let thumbnail_tex =
|
// let thumb_data = thumb_buffer.into_inner();
|
||||||
gtk::gdk::Texture::from_bytes(>k::glib::Bytes::from(&thumb_data)).unwrap();
|
// let thumbnail_tex =
|
||||||
|
// gtk::gdk::Texture::from_bytes(>k::glib::Bytes::from(&thumb_data)).unwrap();
|
||||||
|
|
||||||
// 将 ImageBuffer 编码为 PNG
|
// 将 ImageBuffer 编码为 PNG
|
||||||
let mut png_buffer = Cursor::new(Vec::new());
|
// let mut png_buffer = Cursor::new(Vec::new());
|
||||||
img.write_to(&mut png_buffer, image::ImageOutputFormat::Bmp)
|
// img.write_to(&mut png_buffer, image::ImageOutputFormat::Bmp)
|
||||||
.expect("Failed to write PNG buffer");
|
// .expect("Failed to write PNG buffer");
|
||||||
|
|
||||||
let png_data = png_buffer.into_inner();
|
// let png_data = png_buffer.into_inner();
|
||||||
|
|
||||||
let d1_start = (data.dim1.view()).first().unwrap().clone();
|
let d1_start = (data.dim1.view()).first().unwrap().clone();
|
||||||
let d1_end = (data.dim1.view()).last().unwrap().clone();
|
let d1_end = (data.dim1.view()).last().unwrap().clone();
|
||||||
@ -175,11 +183,12 @@ where
|
|||||||
canvas.set_render_target(RenderTarget::Screen);
|
canvas.set_render_target(RenderTarget::Screen);
|
||||||
|
|
||||||
Target::new(
|
Target::new(
|
||||||
TargetType::Mem(png_data),
|
TargetType::Mem(pixels),
|
||||||
w,
|
w,
|
||||||
h,
|
h,
|
||||||
((d1_start, d1_end).into(), (d2_start, d2_end).into()),
|
((d1_start, d1_end).into(), (d2_start, d2_end).into()),
|
||||||
Some(thumbnail_tex),
|
// Some(thumbnail_tex),
|
||||||
|
None,
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/predefined/map_tile.rs
Normal file
20
src/predefined/map_tile.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
use crate::map_tile_utils::*;
|
||||||
|
use slippy_map_tiles::{BBox, merc_location_to_tile_coords, size_bbox_zoom_metatiles, Tile};
|
||||||
|
|
||||||
|
pub fn map_tile_layer(lat_range: (f64, f64), lon_range: (f64, f64), w: f32, h: f32) {
|
||||||
|
let z = lat_lon_to_zoom(lat_range, lon_range, w, h);
|
||||||
|
let bbox = BBox::new(lat_range.0 as f32, lon_range.0 as f32, lat_range.1 as f32, lon_range.1 as f32).unwrap();
|
||||||
|
let size = size_bbox_zoom_metatiles(&bbox, z, 4);
|
||||||
|
let t = Tile::new(10, 547, 380).unwrap();
|
||||||
|
println!("size: {:?}", size);
|
||||||
|
println!("tile: {:?}", t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
#[test]
|
||||||
|
fn test_map_tile_layer() {
|
||||||
|
map_tile_layer((37.7749, 37.7749), (-122.4194, -122.4194), 1000.0, 1000.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
src/predefined/mod.rs
Normal file
1
src/predefined/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
mod map_tile;
|
||||||
@ -51,6 +51,7 @@ pub struct Render {
|
|||||||
pub(super) exterior: RefCell<ExteriorWidget>,
|
pub(super) exterior: RefCell<ExteriorWidget>,
|
||||||
pub(super) interior: RefCell<InteriorWidget>,
|
pub(super) interior: RefCell<InteriorWidget>,
|
||||||
pub(super) canvas: RefCell<Option<femtovg::Canvas<femtovg::renderer::OpenGl>>>,
|
pub(super) canvas: RefCell<Option<femtovg::Canvas<femtovg::renderer::OpenGl>>>,
|
||||||
|
pub(super) glow_context: RefCell<Option<glow::Context>>,
|
||||||
pub config: RefCell<RenderConfig>,
|
pub config: RefCell<RenderConfig>,
|
||||||
pub status: RefCell<RenderStatus>,
|
pub status: RefCell<RenderStatus>,
|
||||||
pub mapper: RefCell<Mapper>,
|
pub mapper: RefCell<Mapper>,
|
||||||
@ -63,6 +64,7 @@ impl Default for Render {
|
|||||||
render_status: Cell::new(0),
|
render_status: Cell::new(0),
|
||||||
exterior: RefCell::new(ExteriorWidget::default()),
|
exterior: RefCell::new(ExteriorWidget::default()),
|
||||||
interior: RefCell::new(InteriorWidget::default()),
|
interior: RefCell::new(InteriorWidget::default()),
|
||||||
|
glow_context: RefCell::new(None),
|
||||||
interior_layers: RefCell::new(Rc::new(RefCell::new(Vec::new()))),
|
interior_layers: RefCell::new(Rc::new(RefCell::new(Vec::new()))),
|
||||||
config: RefCell::new(RenderConfig::default()),
|
config: RefCell::new(RenderConfig::default()),
|
||||||
status: RefCell::new(RenderStatus::default()),
|
status: RefCell::new(RenderStatus::default()),
|
||||||
@ -240,6 +242,7 @@ impl Render {
|
|||||||
let id = NonZeroU32::new(ctx.get_parameter_i32(glow::DRAW_FRAMEBUFFER_BINDING) as u32)
|
let id = NonZeroU32::new(ctx.get_parameter_i32(glow::DRAW_FRAMEBUFFER_BINDING) as u32)
|
||||||
.expect("No GTK provided framebuffer binding");
|
.expect("No GTK provided framebuffer binding");
|
||||||
ctx.bind_framebuffer(glow::FRAMEBUFFER, None);
|
ctx.bind_framebuffer(glow::FRAMEBUFFER, None);
|
||||||
|
self.glow_context.replace(Some(ctx));
|
||||||
(renderer, glow::NativeFramebuffer(id))
|
(renderer, glow::NativeFramebuffer(id))
|
||||||
};
|
};
|
||||||
renderer.set_screen_target(Some(fbo));
|
renderer.set_screen_target(Some(fbo));
|
||||||
|
|||||||
@ -1,180 +0,0 @@
|
|||||||
use super::super::{Render};
|
|
||||||
use crate::pipeline::offscreen_renderer::CanvasWrapper;
|
|
||||||
use crate::{coords::Range, widgets::widget::Widget};
|
|
||||||
use femtovg::{renderer::OpenGl, Canvas, ImageId};
|
|
||||||
use std::{
|
|
||||||
cell::{Ref, RefCell},
|
|
||||||
fmt::Debug,
|
|
||||||
future::Future,
|
|
||||||
pin::Pin,
|
|
||||||
sync::{Arc, Mutex},
|
|
||||||
};
|
|
||||||
use crate::coords::cms::CMS;
|
|
||||||
use crate::pipeline::element::Target;
|
|
||||||
|
|
||||||
type PrepareFunc = Arc<
|
|
||||||
Mutex<
|
|
||||||
Option<
|
|
||||||
Box<
|
|
||||||
dyn FnOnce(
|
|
||||||
LayerImplSync,
|
|
||||||
// Box<dyn LayerImpl + Send + Sync>,
|
|
||||||
Arc<Mutex<CanvasWrapper>>,
|
|
||||||
CMS,
|
|
||||||
) -> Target
|
|
||||||
+ Sync
|
|
||||||
+ Send,
|
|
||||||
>,
|
|
||||||
>,
|
|
||||||
>,
|
|
||||||
>;
|
|
||||||
type DrawFunc = Arc<dyn Fn(&Layer, Render, (f32, f32)) + Send + Sync>;
|
|
||||||
pub type LayerImplSync = Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>;
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct Layer {
|
|
||||||
pub visiable: bool,
|
|
||||||
pub name: String,
|
|
||||||
pub widgets: Arc<Mutex<Option<Vec<Box<dyn Widget>>>>>,
|
|
||||||
target: Arc<Mutex<Option<Target>>>,
|
|
||||||
prepare: PrepareFunc,
|
|
||||||
imp: Option<Arc<Mutex<Box<dyn LayerImpl + Send + Sync>>>>,
|
|
||||||
draw: DrawFunc,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Debug for Layer {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
f.debug_struct("Layer")
|
|
||||||
.field("visiable", &self.visiable)
|
|
||||||
.field("target", &self.target)
|
|
||||||
.field("imp", &self.imp)
|
|
||||||
.finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait LayerImpl: Debug {
|
|
||||||
fn draw(&self, canvas: &mut Canvas<OpenGl>, cms: &CMS) -> Option<Target>;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Layer {
|
|
||||||
pub fn new<
|
|
||||||
F: 'static + Fn(&Self, Render, (f32, f32)) + Send + Sync,
|
|
||||||
PREPARE: FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target + Send + Sync + 'static,
|
|
||||||
IMP: LayerImpl + Sync + Send + 'static,
|
|
||||||
>(
|
|
||||||
visiable: bool,
|
|
||||||
draw: F,
|
|
||||||
widgets: Option<Vec<Box<dyn Widget>>>,
|
|
||||||
layer_name: String,
|
|
||||||
prepare: Option<PREPARE>,
|
|
||||||
imp: Option<IMP>,
|
|
||||||
) -> Self {
|
|
||||||
Layer {
|
|
||||||
visiable,
|
|
||||||
target: Arc::new(Mutex::new(None)),
|
|
||||||
name: layer_name,
|
|
||||||
widgets: Arc::new(Mutex::new(widgets)),
|
|
||||||
prepare: Arc::new(Mutex::new(prepare.map(|p| {
|
|
||||||
Box::new(move |a, b, c| p(a, b, c))
|
|
||||||
as Box<
|
|
||||||
dyn FnOnce(LayerImplSync, Arc<Mutex<CanvasWrapper>>, CMS) -> Target
|
|
||||||
+ Sync
|
|
||||||
+ Send,
|
|
||||||
>
|
|
||||||
}))),
|
|
||||||
draw: Arc::new(Box::new(draw)),
|
|
||||||
imp: imp.map(|i| {
|
|
||||||
Arc::new(Mutex::new(
|
|
||||||
Box::new(i) as Box<dyn LayerImpl + Send + Sync + 'static>
|
|
||||||
))
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn draw(&self, render: &Render, window_size: (f32, f32)) {
|
|
||||||
if self.visiable {
|
|
||||||
let drawer = &self.draw;
|
|
||||||
drawer(self, render.clone(), window_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_prepare(&self) -> PrepareFunc {
|
|
||||||
self.prepare.clone()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_render_target(&self, target: Target) {
|
|
||||||
self.target.lock().unwrap().replace(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn render_target(&self) -> Arc<Mutex<Option<Target>>> {
|
|
||||||
self.target.clone()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_imp(&self) -> Option<Arc<Mutex<Box<dyn LayerImpl + Sync + Send + 'static>>>> {
|
|
||||||
// self.imp.map(|p| p.clone())
|
|
||||||
self.imp.clone()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_thumbnail(&self) -> Option<gtk::gdk::Texture> {
|
|
||||||
self.target
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.as_ref()
|
|
||||||
.and_then(|t| t.thumbnail.clone())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// #[derive(Clone, Debug, PartialEq, PartialOrd)]
|
|
||||||
// pub struct Target {
|
|
||||||
// pub target: TargetType,
|
|
||||||
// pub thumbnail: Option<gtk::gdk::Texture>,
|
|
||||||
// pub width: f32,
|
|
||||||
// pub height: f32,
|
|
||||||
// pub bounds: (Range, Range),
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord)]
|
|
||||||
// pub enum TargetType {
|
|
||||||
// ImageId(ImageId),
|
|
||||||
// Mem(Vec<u8>),
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// impl Target {
|
|
||||||
// pub fn new(
|
|
||||||
// target: TargetType,
|
|
||||||
// width: f32,
|
|
||||||
// height: f32,
|
|
||||||
// bounds: (Range, Range),
|
|
||||||
// thumbnail: Option<gtk::gdk::Texture>,
|
|
||||||
// ) -> Self {
|
|
||||||
// Self {
|
|
||||||
// target,
|
|
||||||
// width,
|
|
||||||
// height,
|
|
||||||
// bounds,
|
|
||||||
// thumbnail,
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pub fn size(&self, render: &Render) -> (f32, f32) {
|
|
||||||
// let (x, y) = self.bounds;
|
|
||||||
//
|
|
||||||
// let p1 = (x.0, y.0);
|
|
||||||
// let p2 = (x.1, y.1);
|
|
||||||
//
|
|
||||||
// let (x1, y1) = render.map(p1).unwrap();
|
|
||||||
// let (x2, y2) = render.map(p2).unwrap();
|
|
||||||
//
|
|
||||||
// ((x2 - x1).abs(), (y2 - y1).abs())
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pub fn origin(&self, render: &Render) -> (f32, f32) {
|
|
||||||
// let (x, y) = self.bounds;
|
|
||||||
// let p1 = (x.0, y.1);
|
|
||||||
// render.map(p1).unwrap()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pub fn set_target(&mut self, target: TargetType) {
|
|
||||||
// self.target = target;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
@ -35,6 +35,7 @@ pub enum AssoElement {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Layer {
|
pub struct Layer {
|
||||||
pub visiable: bool,
|
pub visiable: bool,
|
||||||
|
pub alpha: f32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
associated_element: AssoElement,
|
associated_element: AssoElement,
|
||||||
time: Option<DateTime<Utc>>,
|
time: Option<DateTime<Utc>>,
|
||||||
@ -55,6 +56,7 @@ pub trait LayerImpl: Debug {
|
|||||||
impl Layer {
|
impl Layer {
|
||||||
pub fn new(visiable: bool, layer_name: String, element: AssoElement) -> Self {
|
pub fn new(visiable: bool, layer_name: String, element: AssoElement) -> Self {
|
||||||
Layer {
|
Layer {
|
||||||
|
alpha: 1.0,
|
||||||
visiable,
|
visiable,
|
||||||
name: layer_name,
|
name: layer_name,
|
||||||
associated_element: element,
|
associated_element: element,
|
||||||
@ -100,7 +102,7 @@ impl Layer {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let paint = femtovg::Paint::image(result_id, ox, oy, x, y, 0.0, 1.0);
|
let paint = femtovg::Paint::image(result_id, ox, oy, x, y, 0.0, self.alpha);
|
||||||
let mut path = femtovg::Path::new();
|
let mut path = femtovg::Path::new();
|
||||||
path.rect(ox, oy, x, y);
|
path.rect(ox, oy, x, y);
|
||||||
canvas.fill_path(&path, &paint);
|
canvas.fill_path(&path, &paint);
|
||||||
@ -119,6 +121,10 @@ impl Layer {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_alpha(&mut self, alpha: f32) {
|
||||||
|
self.alpha = alpha;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn change_visiable(&mut self, visiable: bool) {
|
pub fn change_visiable(&mut self, visiable: bool) {
|
||||||
self.visiable = visiable;
|
self.visiable = visiable;
|
||||||
}
|
}
|
||||||
|
|||||||
30
src/widgets/render/interior/map_tile.rs
Normal file
30
src/widgets/render/interior/map_tile.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
pub(super) struct MapTile {
|
||||||
|
server: Option<String>,
|
||||||
|
lat_range: (f64, f64),
|
||||||
|
lon_range: (f64, f64),
|
||||||
|
zoom: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MapTile{
|
||||||
|
pub fn new(server: Option<String>, lat_range: (f64, f64), lon_range: (f64, f64), zoom: u8) -> MapTile {
|
||||||
|
MapTile {
|
||||||
|
server,
|
||||||
|
lat_range,
|
||||||
|
lon_range,
|
||||||
|
zoom,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_server(&self) -> Option<String> {
|
||||||
|
self.server.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_lat_range(&self) -> (f64, f64) {
|
||||||
|
self.lat_range
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_lon_range(&self) -> (f64, f64) {
|
||||||
|
self.lon_range
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,5 +1,7 @@
|
|||||||
mod imp;
|
mod imp;
|
||||||
mod layers;
|
mod layers;
|
||||||
|
mod map_tile;
|
||||||
|
|
||||||
use super::super::Render;
|
use super::super::Render;
|
||||||
use femtovg::{renderer::OpenGl, Canvas};
|
use femtovg::{renderer::OpenGl, Canvas};
|
||||||
pub use layers::{Layer, LayerImpl, LayerImplSync, AssoElement};
|
pub use layers::{Layer, LayerImpl, LayerImplSync, AssoElement};
|
||||||
|
|||||||
@ -112,6 +112,10 @@ impl Render {
|
|||||||
self.imp().canvas.borrow_mut()
|
self.imp().canvas.borrow_mut()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_context(&self) -> RefMut<'_, Option<glow::Context>> {
|
||||||
|
self.imp().glow_context.borrow_mut()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_cfg(&self, cfg: RenderConfig) {
|
pub fn set_cfg(&self, cfg: RenderConfig) {
|
||||||
self.imp().config.replace(cfg);
|
self.imp().config.replace(cfg);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user