~raph/blurrr

6cc5ee0cae048b1c49905f72ab81fa4dc226a7ab — Raph Levien 1 year, 8 months ago
First commit of blurred rounded rect tool

This version computes the source of truth fairly accurately using
numerical integration over scanlines.
7 files changed, 1550 insertions(+), 0 deletions(-)

A .gitignore
A Cargo.lock
A Cargo.toml
A src/image.rs
A src/integration.rs
A src/main.rs
A src/math.rs
A  => .gitignore +2 -0
@@ 1,2 @@
/target
**/*.rs.bk

A  => Cargo.lock +1345 -0
@@ 1,1345 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "arrayvec"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "atk"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "atk-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "autocfg"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "backtrace"
version = "0.3.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "backtrace-sys"
version = "0.1.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "base-x"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "block"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "blurrr"
version = "0.1.0"
dependencies = [
 "druid 0.5.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)",
]

[[package]]
name = "boolinator"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "bumpalo"
version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "cairo-rs"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "cairo-sys-rs"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "cc"
version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "cocoa"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "core-foundation"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "core-foundation-sys"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "core-graphics"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "direct2d"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "direct3d11"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "directwrite"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "discard"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "druid"
version = "0.5.0"
source = "git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd#ace395926ec641fbc6da75a250c837f3f55f7fbd"
dependencies = [
 "druid-derive 0.2.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)",
 "druid-shell 0.5.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)",
 "fluent-bundle 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "simple_logger 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "druid-derive"
version = "0.2.0"
source = "git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd#ace395926ec641fbc6da75a250c837f3f55f7fbd"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "druid-shell"
version = "0.5.0"
source = "git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd#ace395926ec641fbc6da75a250c837f3f55f7fbd"
dependencies = [
 "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 "cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gtk 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet-common 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "time 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "dxgi"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "either"
version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "failure"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)",
 "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "failure_derive"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
 "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "fluent-bundle"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "intl_pluralrules 5.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
 "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "fluent-langneg"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "fluent-syntax"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "fnv"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "foreign-types"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "foreign-types-shared"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "futures-channel"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "futures-core"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "futures-executor"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "futures-io"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "futures-macro"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "futures-task"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "futures-util"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gdk"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gdk-pixbuf"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gdk-pixbuf-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gdk-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gio"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gio-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "glib"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "glib-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gobject-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gtk"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "atk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "gtk-sys"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "hermit-abi"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "intl_pluralrules"
version = "5.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "itoa"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "js-sys"
version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "kurbo"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "libc"
version = "0.2.68"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "log"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num"
version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-bigint"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-complex"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-integer"
version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-iter"
version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-rational"
version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "num-traits"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "objc"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "pango"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "pango-sys"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "piet"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "piet-cairo"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "piet-common"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "direct2d 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "direct3d11 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet-cairo 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet-direct2d 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet-web 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "piet-direct2d"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "piet-web"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
 "piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
 "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "pin-utils"
version = "0.1.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "pkg-config"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "proc-macro-hack"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "proc-macro-nested"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "proc-macro2"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "quote"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rand"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rand_core"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rand_core"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "rdrand"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rental"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "rental-impl 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
 "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rental-impl"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rustc-demangle"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "rustc-serialize"
version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "rustversion"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "ryu"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "serde"
version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "serde_derive"
version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "serde_json"
version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
 "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "sha1"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "simple_logger"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "slab"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "smallvec"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "stable_deref_trait"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "standback"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "stdweb"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "stdweb-derive"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "stdweb-internal-macros"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)",
 "serde_json 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
 "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "stdweb-internal-runtime"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "syn"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "synstructure"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "time"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
 "rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 "standback 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
 "time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "time-macros"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
 "time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "time-macros-impl"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "tinystr"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "unic-langid"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "unic-langid-impl"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "unicode-segmentation"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "unicode-xid"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "wasm-bindgen"
version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "wasm-bindgen-backend"
version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "wasm-bindgen-macro"
version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "wasm-bindgen-shared"
version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "web-sys"
version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
 "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "winapi"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[[package]]
name = "wio"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "xi-unicode"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[metadata]
"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
"checksum atk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "444daefa55f229af145ea58d77efd23725024ee1f6f3102743709aa6b18c663e"
"checksum atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
"checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e"
"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118"
"checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1"
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
"checksum boolinator 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9"
"checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187"
"checksum cairo-rs 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "157049ba9618aa3a61c39d5d785102c04d3b1f40632a706c621a9aedc21e6084"
"checksum cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
"checksum cocoa 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a4736c86d51bd878b474400d9ec888156f4037015f5d09794fab9f26eab1ad4"
"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
"checksum core-graphics 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59e78b2e0aaf43f08e7ae0d6bc96895ef72ff0921c7d4ff4762201b2dba376dd"
"checksum direct2d 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7fa6ff10857eb253d1ae16987ebfd27372f4129b0c7a3fa41466fbdf7e453e75"
"checksum direct3d11 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "315aa929e68ba066cb6fb86f1b22af24f517e02fd9b5734c4d07e42cb9f4aefa"
"checksum directwrite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8cdcd739e9351c411b8caf5cab32a27c818cfe06260595da121382ecdd22083d"
"checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
"checksum druid 0.5.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)" = "<none>"
"checksum druid-derive 0.2.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)" = "<none>"
"checksum druid-shell 0.5.0 (git+https://github.com/xi-editor/druid?rev=ace395926ec641fbc6da75a250c837f3f55f7fbd)" = "<none>"
"checksum dxgi 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1639bbfd6765e92a40267d217a7acbac5b49320b68013f39a8e4376aa8c1e091"
"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b"
"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231"
"checksum fluent-bundle 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cb733f6cedee059a77da074a14d1d855f3c7a04de18164b181ba2aa82221e281"
"checksum fluent-langneg 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "55e840a3a9938e6dd9a57a6a3be02bef1d51b1d75b883cdfe84810c7e7ca1293"
"checksum fluent-syntax 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ac0f7e83d14cccbf26e165d8881dcac5891af0d85a88543c09dd72ebd31d91ba"
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8"
"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a"
"checksum futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba"
"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6"
"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7"
"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27"
"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5"
"checksum gdk 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fbe5e8772fc0865c52460cdd7a59d7d47700f44d9809d1dd00eecceb769a7589"
"checksum gdk-pixbuf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e248220c46b329b097d4b158d2717f8c688f16dd76d0399ace82b3e98062bdd7"
"checksum gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
"checksum gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
"checksum gio 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0cd10f9415cce39b53f8024bf39a21f84f8157afa52da53837b102e585a296a5"
"checksum gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
"checksum glib 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "40fb573a09841b6386ddf15fd4bc6655b4f5b106ca962f57ecaecde32a0061c0"
"checksum glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
"checksum gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
"checksum gtk 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87e1e8d70290239c668594002d1b174fcc7d7ef5d26670ee141490ede8facf8f"
"checksum gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
"checksum intl_pluralrules 5.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "752ecba25a0554836d7921e383ba5c78ffea6e4825cc70dac75e2ab8e43af1be"
"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
"checksum js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055"
"checksum kurbo 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bf50e17a1697110c694d47c5b1a6b64faf5eb3ffe5a286df23fb8cd516e33be6"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
"checksum num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
"checksum num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00"
"checksum num-rational 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
"checksum pango 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9c6b728f1be8edb5f9f981420b651d5ea30bdb9de89f1f1262d0084a020577"
"checksum pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
"checksum piet 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cc12ec839fb1931dadee762476260c068fd989d60c366dc6a0228a242c857f82"
"checksum piet-cairo 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc6ff3b4e078df5b4904b6e19efedca4142b896383ffcc53660825eb9d8191e"
"checksum piet-common 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "a4b532cd554b18c1931b9ca23ea6de342eb4f65cfe2288bdb1dc408ea765f6cc"
"checksum piet-direct2d 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bc87144e7af30fb0b40919e03f242309b71a063f564e68b8e36cd39ff198d6f7"
"checksum piet-web 0.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "326c17c8d48d513b42e3b9531571c6c42785e1473b7154813b76c20c902d808d"
"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
"checksum proc-macro-hack 0.5.14 (registry+https://github.com/rust-lang/crates.io-index)" = "fcfdefadc3d57ca21cf17990a28ef4c0f7c61383a28cb7604cf4a18e6ede1420"
"checksum proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694"
"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
"checksum rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f"
"checksum rental-impl 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de"
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bba175698996010c4f6dce5e7f173b6eb781fce25d2cfc45e27091ce0b79f6"
"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff"
"checksum serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8"
"checksum serde_json 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "78a7a12c167809363ec3bd7329fc0a3369056996de43c4b37ef3cd54a6ce4867"
"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
"checksum simple_logger 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fea0c4611f32f4c2bac73754f22dca1f57e6c1945e0590dae4e5f2a077b92367"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
"checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc"
"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
"checksum standback 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4edf667ea8f60afc06d6aeec079d20d5800351109addec1faea678a8663da4e1"
"checksum stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
"checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
"checksum stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
"checksum stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
"checksum time 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6329a7835505d46f5f3a9a2c237f8d6bf5ca6f0015decb3698ba57fcdbb609ba"
"checksum time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d"
"checksum time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987cfe0537f575b5fc99909de6185f6c19c3ad8889e2275e686a873d0869ba1"
"checksum tinystr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4bac79c4b51eda1b090b1edebfb667821bbb51f713855164dc7cec2cb8ac2ba3"
"checksum unic-langid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7935b530ca240640bf8dd67d04301a3ed02bfc8635105fea9e9a26477143ca22"
"checksum unic-langid-impl 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "86ab4a5be993d5b9d082476a7dd7149c083cf63a72469e700c09e69784511957"
"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
"checksum wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f"
"checksum wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd"
"checksum wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4"
"checksum wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931"
"checksum wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639"
"checksum web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb"
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
"checksum wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
"checksum xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7395cdb9d0a6219fa0ea77d08c946adf9c1984c72fcd443ace30365f3daadef7"

A  => Cargo.toml +10 -0
@@ 1,10 @@
[package]
name = "blurrr"
version = "0.1.0"
authors = ["Raph Levien <raph.levien@gmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
druid = { git = "https://github.com/xi-editor/druid", rev = "ace395926ec641fbc6da75a250c837f3f55f7fbd" }

A  => src/image.rs +14 -0
@@ 1,14 @@
use druid::piet::{Image, ImageFormat};
use druid::{PaintCtx, RenderContext};

// Make a grayscale image from a single intensity map.
pub fn make_image_one(ctx: &mut PaintCtx, w: usize, h: usize, data: &[u8]) -> Image {
    let mut buf = vec![255u8; w * h * 4];
    for i in 0..(w * h) {
        let g = data[i];
        buf[i * 4] = g;
        buf[i * 4 + 1] = g;
        buf[i * 4 + 2] = g;
    }
    ctx.make_image(w, h, &buf, ImageFormat::RgbaPremul).unwrap()
}

A  => src/integration.rs +42 -0
@@ 1,42 @@
//! Computation of blurred rounded rectangle blur through integration

use crate::math::{approx_inv_erf, compute_erf7, solve_rr};

const N_INTEGRATE: usize = 256;
const EXTENT: f64 = 3.0;

/// Generate a blurred rounded rectangle.
pub fn gen_integrate(width: usize, height: usize, w: f64, h: f64, r: f64, s: f64) -> Vec<u8> {
    let s_inv = s.max(1e-6).recip();
    let mut buf = vec![0u8; width * height];
    let mut line = vec![0.0f64; width / 2];
    for j in 0..(height / 2) {
        for i in 0..(width / 2) {
            line[i] = 0.0;
        }
        let y = (j as f64) + 0.5;
        for k in 0..N_INTEGRATE {
            let jf = (k + 1) as f64 * (2.0 / ((N_INTEGRATE + 1) as f64)) - 1.0;
            let yf = y + s * approx_inv_erf(jf);
            let xmax = solve_rr(w, h, r, yf);
            if xmax > 0.0 {
                let imax = ((xmax + EXTENT * s).ceil() as usize).min(width / 2);
                for i in 0..imax {
                    let x = (i as f64) + 0.5;
                    line[i] += compute_erf7((xmax - x) * s_inv) + compute_erf7((xmax + x) * s_inv);
                }
            }

        }
        let off0 = (j + height / 2) * width;
        let off1 = (height / 2 - j - 1) * width;
        for i in 0..(width / 2) {
            let g = (255.0 * (0.5 / N_INTEGRATE as f64) * line[i]).round() as u8;
            buf[off0 + width / 2 + i] = g;
            buf[off0 + width / 2 - i - 1] = g;
            buf[off1 + width / 2 + i] = g;
            buf[off1 + width / 2 - i - 1] = g;
        }
    }
    buf
}

A  => src/main.rs +96 -0
@@ 1,96 @@
use druid::piet::InterpolationMode;
use druid::widget::prelude::*;
use druid::widget::{Flex, Slider};
use druid::{
    AppLauncher, Color, Data, Lens, LocalizedString, Point, Rect, Widget, WidgetExt, WindowDesc,
};

mod image;
mod integration;
mod math;

#[derive(Clone, Data, Lens)]
struct AppState {
    width: f64,
    height: f64,
    radius: f64,
    std_dev: f64,
}

struct BlurWidget;

const IM_WIDTH: usize = 256;
const IM_HEIGHT: usize = 256;

impl Widget<AppState> for BlurWidget {
    fn event(&mut self, _ctx: &mut EventCtx, _event: &Event, _data: &mut AppState, _env: &Env) {}

    fn lifecycle(
        &mut self,
        _ctx: &mut LifeCycleCtx,
        _event: &LifeCycle,
        _data: &AppState,
        _env: &Env,
    ) {
    }

    fn update(&mut self, _ctx: &mut UpdateCtx, _old_data: &AppState, _data: &AppState, _env: &Env) {
    }

    fn layout(
        &mut self,
        _layout_ctx: &mut LayoutCtx,
        bc: &BoxConstraints,
        _data: &AppState,
        _env: &Env,
    ) -> Size {
        bc.max()
    }

    fn paint(&mut self, ctx: &mut PaintCtx, data: &AppState, _env: &Env) {
        // Let's draw a picture with Piet!

        // Clear the whole widget with the color of your choice
        // (ctx.size() returns the size of the layout rect we're painting in)
        let size = ctx.size();
        let rect = Rect::from_origin_size(Point::ORIGIN, size);
        //ctx.fill(rect.to_rounded_rect(data.radius), &Color::WHITE);
        let radius = data.radius.min(0.5 * data.width.min(data.height));
        let data = integration::gen_integrate(
            IM_WIDTH,
            IM_HEIGHT,
            data.width,
            data.height,
            radius,
            data.std_dev,
        );
        let image = image::make_image_one(ctx, IM_WIDTH, IM_HEIGHT, &data);
        let rect = Size::new(IM_WIDTH as f64, IM_HEIGHT as f64).to_rect();
        ctx.draw_image(&image, rect, InterpolationMode::Bilinear);
    }
}

fn ui_builder() -> impl Widget<AppState> {
    Flex::column()
        .with_spacer(5.0)
        .with_child(Slider::new().with_range(0.0, 250.0).lens(AppState::width))
        .with_spacer(5.0)
        .with_child(Slider::new().with_range(0.0, 250.0).lens(AppState::height))
        .with_spacer(5.0)
        .with_child(Slider::new().with_range(0.0, 50.0).lens(AppState::radius))
        .with_spacer(5.0)
        .with_child(Slider::new().with_range(0.0, 50.0).lens(AppState::std_dev))
        .with_spacer(5.0)
        .with_flex_child(BlurWidget, 1.0)
}

fn main() {
    let data = AppState {
        width: 100.0,
        height: 80.0,
        radius: 5.0,
        std_dev: 5.0,
    };
    let main_window = WindowDesc::new(ui_builder).title(LocalizedString::new("blur toy"));
    AppLauncher::with_window(main_window).launch(data).unwrap();
}

A  => src/math.rs +41 -0
@@ 1,41 @@
//! Various math functions.
//!
//! In general, these are designed to be approximations good enough for image
//! usage (error on the order of 1e-3), and suitable for SIMD and GPU acceleration.

// see https://people.maths.ox.ac.uk/gilesm/files/gems_erfinv.pdf
// Note: we just do the center because it's precise enough
pub fn approx_inv_erf(x: f64) -> f64 {
    let w = -((1.0 - x) * (1.0 + x)).ln() - 2.5;
    let mut p = 2.81022636e-08;
    p = 3.43273939e-07 + p * w;
    p = -3.5233877e-06 + p * w;
    p = -4.39150654e-06 + p * w;
    p = 0.00021858087 + p * w;
    p = -0.00125372503 + p * w;
    p = -0.00417768164 + p * w;
    p = 0.246640727 + p * w;
    p = 1.50140941 + p * w;
    p * x
}

// See https://raphlinus.github.io/audio/2018/09/05/sigmoid.html for a little
// explanation of this approximation to the erf function.
pub fn compute_erf7(x: f64) -> f64 {
    let x = x * std::f64::consts::FRAC_2_SQRT_PI;
    let xx = x * x;
    let x = x + (0.24295 + (0.03395 + 0.0104 * xx) * xx) * (x * xx);
    x / (1.0 + x * x).sqrt()
}

// Solve rounded rect for x given y. Assume center at origin.
pub fn solve_rr(w: f64, h: f64, r: f64, y: f64) -> f64 {
    let yy = y.abs() - 0.5 * h;
    if yy >= 0.0 {
        0.0
    } else if yy <= -r {
        0.5 * w
    } else {
        0.5 * w + (r * r - (yy + r).powi(2)).sqrt() - r
    }
}