From 48eeebc2661a5acd25c51d6cc3ce0cbfed20410c Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Fri, 6 Nov 2020 09:00:55 +0000 Subject: [PATCH] druid update --- Cargo.lock | 271 ++++++++++++++++------------------------- Cargo.toml | 2 +- core/Cargo.toml | 2 +- core/src/completion.rs | 3 +- core/src/editor.rs | 16 +-- core/src/explorer.rs | 2 +- core/src/palette.rs | 2 +- core/src/scroll.rs | 139 ++++++++------------- core/src/status.rs | 3 +- core/src/window.rs | 2 +- src/main.rs | 11 -- 11 files changed, 175 insertions(+), 278 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a87896f5..af6251cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -278,9 +278,6 @@ name = "cc" version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c" -dependencies = [ - "jobserver", -] [[package]] name = "cexpr" @@ -387,8 +384,8 @@ dependencies = [ "bitflags", "block", "cocoa-foundation", - "core-foundation", - "core-graphics", + "core-foundation 0.9.1", + "core-graphics 0.22.1", "foreign-types", "libc", "objc", @@ -402,7 +399,7 @@ checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ "bitflags", "block", - "core-foundation", + "core-foundation 0.9.1", "core-graphics-types", "foreign-types", "libc", @@ -442,22 +439,50 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce90df4c658c62f12d78f7508cf92f9173e5184a539c10bfe54a3107b3ffd0f2" +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + [[package]] name = "core-foundation" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.1", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-foundation-sys" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0af3b5e4601de3837c9332e29e0aae47a0d46ebfa246d12b82f564bac233393" +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + [[package]] name = "core-graphics" version = "0.22.1" @@ -465,7 +490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc239bba52bab96649441699533a68de294a101533b0270b2d65aa402b29a7f9" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.1", "core-graphics-types", "foreign-types", "libc", @@ -478,7 +503,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.1", + "foreign-types", + "libc", +] + +[[package]] +name = "core-text" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "131b3fd1f8bd5db9f2b398fa4fdb6008c64afc04d447c306ac2c7e98fba2a61d" +dependencies = [ + "core-foundation 0.7.0", + "core-graphics 0.19.2", "foreign-types", "libc", ] @@ -489,8 +526,8 @@ version = "19.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2c7f46e8b820fd5f4b28528104b28b0a91cbe9e9c5bde8017087fb44bc93a60" dependencies = [ - "core-foundation", - "core-graphics", + "core-foundation 0.9.1", + "core-graphics 0.22.1", "foreign-types", "libc", ] @@ -630,7 +667,6 @@ checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" [[package]] name = "druid" version = "0.6.0" -source = "git+https://github.com/linebender/druid#705fc14b79c475845b1045dd38414a2134eef0b7" dependencies = [ "console_log", "druid-derive", @@ -652,7 +688,6 @@ dependencies = [ [[package]] name = "druid-derive" version = "0.3.1" -source = "git+https://github.com/linebender/druid#705fc14b79c475845b1045dd38414a2134eef0b7" dependencies = [ "proc-macro2 1.0.23", "quote 1.0.7", @@ -662,16 +697,17 @@ dependencies = [ [[package]] name = "druid-shell" version = "0.6.0" -source = "git+https://github.com/linebender/druid#705fc14b79c475845b1045dd38414a2134eef0b7" dependencies = [ "anyhow", "bitflags", + "block", "cairo-rs", "cfg-if 0.1.10", "cocoa", - "core-graphics", + "core-graphics 0.22.1", "foreign-types", "gdk", + "gdk-pixbuf", "gdk-sys", "gio", "glib", @@ -681,11 +717,12 @@ dependencies = [ "instant", "js-sys", "keyboard-types", - "kurbo", + "kurbo 0.7.0", "lazy_static 1.4.0", "log", "objc", "piet-common", + "scopeguard 1.1.0", "time 0.2.22", "wasm-bindgen", "web-sys", @@ -802,18 +839,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fontdb" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa64e442fe4adbae6edd55ab3ebe905a858208db2aa12ab204e261890b69fd5" -dependencies = [ - "log", - "memmap2", - "ttf-parser", - "uuid 0.8.1", -] - [[package]] name = "foreign-types" version = "0.3.2" @@ -831,9 +856,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "freetype" -version = "0.7.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6" +checksum = "b73222ab32d9ad65fe0e1c3258da8d614fd47cf19fce92b09eb520060c5c5ad5" dependencies = [ "freetype-sys", "libc", @@ -841,9 +866,9 @@ dependencies = [ [[package]] name = "freetype-sys" -version = "0.13.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" +checksum = "d48ac0ce366dd47a115ec8e598d7c51b4a974fc52ded5e53a56b31f55f34f3ea" dependencies = [ "cmake", "libc", @@ -1083,17 +1108,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "getrandom" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "gimli" version = "0.22.0" @@ -1244,18 +1258,28 @@ dependencies = [ [[package]] name = "harfbuzz-sys" -version = "0.5.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf8c27ca13930dc4ffe474880040fe9e0f03c2121600dc9c95423624cab3e467" +checksum = "845f3e65ec4e30b0b1b6e1c055900871f3776d3492cc76744e3fc5943a6129a9" dependencies = [ "cc", - "core-graphics", - "core-text", + "core-graphics 0.19.2", + "core-text 15.0.0", "foreign-types", "freetype", "pkg-config", ] +[[package]] +name = "harfbuzz_rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bba81dd6b356135f0b31c42447e49d45116adc2e02910070947a322c423aa5" +dependencies = [ + "bitflags", + "harfbuzz-sys", +] + [[package]] name = "hashbrown" version = "0.9.1" @@ -1430,15 +1454,6 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" -[[package]] -name = "jobserver" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" version = "0.3.45" @@ -1487,6 +1502,15 @@ dependencies = [ "arrayvec 0.5.1", ] +[[package]] +name = "kurbo" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ebfa590bba04e706e514c3285bb2c662610136fdbd58d7572d8afe0d22de1f0" +dependencies = [ + "arrayvec 0.5.1", +] + [[package]] name = "languageserver-types" version = "0.54.0" @@ -1524,7 +1548,7 @@ dependencies = [ "toml", "tree-sitter", "tree-sitter-highlight", - "uuid 0.7.4", + "uuid", "xi-core-lib", "xi-rope", "xi-rpc", @@ -1554,7 +1578,7 @@ dependencies = [ "toml", "tree-sitter", "tree-sitter-highlight", - "uuid 0.7.4", + "uuid", "xi-core-lib", "xi-rope", "xi-rpc", @@ -2202,18 +2226,15 @@ checksum = "28b9b4df73455c861d7cbf8be42f01d3b373ed7f02e378d55fa84eafc6f638b1" [[package]] name = "piet" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02ec0a227cffb4c468fb082e7e64491bbee586bd53f1ebcdb8de6bc3a3f4d119" +version = "0.2.0-pre6" dependencies = [ - "kurbo", + "kurbo 0.7.0", + "unic-bidi", ] [[package]] name = "piet-cairo" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7e3de2465c3f74e9e263940d46bd6ac8750fe54ae551852b2e7cc06e9cd20" +version = "0.2.0-pre6" dependencies = [ "cairo-rs", "piet", @@ -2223,14 +2244,12 @@ dependencies = [ [[package]] name = "piet-common" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0313f4b1aaa502096840cfc69f2486b2fb2cf54c55ea9d8683025d817a725365" +version = "0.2.0-pre6" dependencies = [ "cairo-rs", "cairo-sys-rs", - "cfg-if 0.1.10", - "core-graphics", + "cfg-if 1.0.0", + "core-graphics 0.22.1", "piet", "piet-cairo", "piet-coregraphics", @@ -2242,24 +2261,19 @@ dependencies = [ [[package]] name = "piet-coregraphics" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a4c56f36eab5364e4b15f519696e9c84c020ca687362a94d5d91d25ca30885" +version = "0.2.0-pre6" dependencies = [ - "core-foundation", - "core-foundation-sys", - "core-graphics", - "core-text", + "core-foundation 0.9.1", + "core-foundation-sys 0.8.1", + "core-graphics 0.22.1", + "core-text 19.1.0", "foreign-types", "piet", - "unic-bidi", ] [[package]] name = "piet-direct2d" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5ba077c472c0ea2ceafffbfae45b85e25e5111aef5c6bf7c2246c6db475f02" +version = "0.2.0-pre6" dependencies = [ "associative-cache", "dwrote", @@ -2271,9 +2285,7 @@ dependencies = [ [[package]] name = "piet-web" -version = "0.2.0-pre4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f71e381210e85093f700e74b36836a49702945853721af2c0f0ff56b34beb89d" +version = "0.2.0-pre6" dependencies = [ "js-sys", "piet", @@ -2329,12 +2341,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "ppv-lite86" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" - [[package]] name = "proc-macro-crate" version = "0.1.5" @@ -2456,9 +2462,9 @@ checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ "autocfg 0.1.7", "libc", - "rand_chacha 0.1.1", + "rand_chacha", "rand_core 0.4.2", - "rand_hc 0.1.0", + "rand_hc", "rand_isaac", "rand_jitter", "rand_os", @@ -2467,19 +2473,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", -] - [[package]] name = "rand_chacha" version = "0.1.1" @@ -2490,16 +2483,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_core" version = "0.3.1" @@ -2515,15 +2498,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom", -] - [[package]] name = "rand_hc" version = "0.1.0" @@ -2533,15 +2507,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_isaac" version = "0.1.1" @@ -2663,9 +2628,9 @@ dependencies = [ [[package]] name = "roxmltree" -version = "0.13.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17dfc6c39f846bfc7d2ec442ad12055d79608d501380789b965d22f9354451f2" +checksum = "d5001f134077069d87f77c8b9452b690df2445f7a43f1c7ca4a1af8dd505789d" dependencies = [ "xmlparser", ] @@ -2691,16 +2656,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustybuzz" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "587e0c54f676a15df40c5fe5ea98da021000fe73762ace644d0ce4c5e3e80812" -dependencies = [ - "bitflags", - "cc", -] - [[package]] name = "ryu" version = "1.0.5" @@ -3135,7 +3090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi", "winapi 0.3.9", ] @@ -3397,21 +3352,20 @@ dependencies = [ [[package]] name = "usvg" -version = "0.11.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ccafe45031f8b566d1603f2c03876c90111ffd53341b3423b545373572bfed" +checksum = "d681fd78e7926787a4e23c67beb18472525a10cb161d98e12f8a0a751f699ef8" dependencies = [ "base64 0.12.3", "data-url", "flate2", - "fontdb", - "kurbo", + "harfbuzz_rs", + "kurbo 0.6.3", "log", "memmap2", "pico-args", "rctree", "roxmltree", - "rustybuzz", "simplecss", "siphasher", "svgtypes", @@ -3437,15 +3391,6 @@ dependencies = [ "rand 0.6.5", ] -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" -dependencies = [ - "rand 0.7.3", -] - [[package]] name = "vcpkg" version = "0.2.10" @@ -3481,12 +3426,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index a46f30f1..f11c4b0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ xi-rpc = { path = "../xi-editor/rust/rpc/" } fzyr = "0.1.2" uuid = { version = "0.7.4", features = ["v4"] } lsp-types = "0.61.0" -druid = { git = "https://github.com/linebender/druid", features = ["svg"] } +druid = { path = "../druid/druid", features = ["svg"] } [build-dependencies] cc = "*" diff --git a/core/Cargo.toml b/core/Cargo.toml index ce930dc9..322231bd 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -27,7 +27,7 @@ xi-rpc = { path = "../../xi-editor/rust/rpc/" } fzyr = "0.1.2" uuid = { version = "0.7.4", features = ["v4"] } lsp-types = "0.82.0" -druid = { git = "https://github.com/linebender/druid", features = ["svg"] } +druid = { path = "../../druid/druid", features = ["svg"] } [build-dependencies] cc = "*" diff --git a/core/src/completion.rs b/core/src/completion.rs index c2e9ed24..6d3f070b 100644 --- a/core/src/completion.rs +++ b/core/src/completion.rs @@ -196,7 +196,8 @@ fn paint_raw(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { ); } - let mut layout = TextLayout::new(item.item.label.as_str()); + let mut layout = + TextLayout::::from_text(item.item.label.as_str()); layout.set_font(LapceTheme::EDITOR_FONT); layout.set_text_color(LapceTheme::EDITOR_FOREGROUND); layout.rebuild_if_needed(&mut ctx.text(), env); diff --git a/core/src/editor.rs b/core/src/editor.rs index 63c80b55..d4ba87f7 100644 --- a/core/src/editor.rs +++ b/core/src/editor.rs @@ -2131,7 +2131,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { ); let mut x = 10.0; - let mut text_layout = TextLayout::new(file_name.clone()); + let mut text_layout = TextLayout::::from_text(file_name.clone()); text_layout.set_font( FontDescriptor::new(FontFamily::SYSTEM_UI).with_size(13.0), ); @@ -2147,7 +2147,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { path.as_path() }; let dir = dir.to_str().unwrap().to_string(); - let mut text_layout = TextLayout::new(dir); + let mut text_layout = TextLayout::::from_text(dir); text_layout.set_font( FontDescriptor::new(FontFamily::SYSTEM_UI).with_size(13.0), ); @@ -2577,7 +2577,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { return; } - let mut layout = TextLayout::new("W"); + let mut layout = TextLayout::::from_text("W"); layout.set_font(LapceTheme::EDITOR_FONT); layout.rebuild_if_needed(&mut ctx.text(), env); let width = layout.point_for_text_position(1).x; @@ -2621,7 +2621,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { .layout .draw(ctx, Point::new(x, line_height * line as f64)); } else { - let mut layout = TextLayout::new(content.clone()); + let mut layout = TextLayout::from_text(content.clone()); layout.set_font(LapceTheme::EDITOR_FONT); layout.set_text_color(LapceTheme::EDITOR_FOREGROUND); layout.rebuild_if_needed(&mut ctx.text(), env); @@ -2638,7 +2638,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { } struct EditorTextLayout { - layout: TextLayout, + layout: TextLayout, text: String, } @@ -2891,7 +2891,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { let buffer_id = buffer_id.unwrap(); let size = ctx.size(); - let mut layout = TextLayout::new("W"); + let mut layout = TextLayout::::from_text("W"); layout.set_font(LapceTheme::EDITOR_FONT); layout.rebuild_if_needed(&mut ctx.text(), env); let width = layout.point_for_text_position(1).x; @@ -3039,7 +3039,9 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { == buffer.offset_of_position(&start) { let mut text_layout = - TextLayout::new(diagnositic.message.clone()); + TextLayout::::from_text( + diagnositic.message.clone(), + ); text_layout.set_font( FontDescriptor::new(FontFamily::SYSTEM_UI) .with_size(14.0), diff --git a/core/src/explorer.rs b/core/src/explorer.rs index 278310d4..604a12c4 100644 --- a/core/src/explorer.rs +++ b/core/src/explorer.rs @@ -243,7 +243,7 @@ fn paint( ); } let y = i as f64 * line_height; - let mut text_layout = TextLayout::new( + let mut text_layout = TextLayout::::from_text( item.path_buf.file_name().unwrap().to_str().unwrap(), ); if item.path_buf.is_dir() { diff --git a/core/src/palette.rs b/core/src/palette.rs index 6c5c210a..81f59409 100644 --- a/core/src/palette.rs +++ b/core/src/palette.rs @@ -1123,7 +1123,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { let line_height = env.get(LapceTheme::EDITOR_LINE_HEIGHT); let text = palette.input.clone(); let cursor = palette.cursor; - let mut text_layout = TextLayout::new(text.as_ref()); + let mut text_layout = TextLayout::::from_text(&text); text_layout.set_text_color(LapceTheme::EDITOR_FOREGROUND); text_layout.rebuild_if_needed(ctx.text(), env); let line = text_layout.cursor_line_for_text_position(cursor); diff --git a/core/src/scroll.rs b/core/src/scroll.rs index 3723ae26..ca667e98 100644 --- a/core/src/scroll.rs +++ b/core/src/scroll.rs @@ -2,8 +2,9 @@ use druid::kurbo::{Point, Rect, Size, Vec2}; use druid::{ - scroll_component::*, BoxConstraints, Data, Env, Event, EventCtx, LayoutCtx, - LifeCycle, LifeCycleCtx, PaintCtx, UpdateCtx, Widget, WidgetPod, + scroll_component::*, widget::ClipBox, widget::Scroll, BoxConstraints, Data, Env, + Event, EventCtx, LayoutCtx, LifeCycle, LifeCycleCtx, PaintCtx, UpdateCtx, + Widget, WidgetPod, }; use crate::command::{LapceUICommand, LAPCE_UI_COMMAND}; @@ -28,9 +29,12 @@ enum ScrollDirection { /// [`vertical`]: struct.Scroll.html#method.vertical /// [`horizontal`]: struct.Scroll.html#method.horizontal pub struct LapceScroll { - child: WidgetPod, + clip: ClipBox, + //child: WidgetPod, scroll_component: ScrollComponent, - direction: ScrollDirection, + //direction: ScrollDirection, + //content_size: Size, + //scroll_offset: Vec2, } impl> LapceScroll { @@ -41,59 +45,62 @@ impl> LapceScroll { /// [horizontal](#method.horizontal) methods to limit scrolling to a specific axis. pub fn new(child: W) -> LapceScroll { LapceScroll { - child: WidgetPod::new(child), + clip: ClipBox::new(child), scroll_component: ScrollComponent::new(), - direction: ScrollDirection::Bidirectional, + //direction: ScrollDirection::Bidirectional, + //content_size: Size::ZERO, + //scroll_offset: Vec2::ZERO, } } /// Restrict scrolling to the vertical axis while locking child width. pub fn vertical(mut self) -> Self { - self.direction = ScrollDirection::Vertical; + self.clip.set_constrain_vertical(false); + self.clip.set_constrain_horizontal(true); self } /// Restrict scrolling to the horizontal axis while locking child height. pub fn horizontal(mut self) -> Self { - self.direction = ScrollDirection::Horizontal; + self.clip.set_constrain_vertical(true); + self.clip.set_constrain_horizontal(false); self } /// Returns a reference to the child widget. pub fn child(&self) -> &W { - self.child.widget() + self.clip.child() } /// Returns a mutable reference to the child widget. pub fn child_mut(&mut self) -> &mut W { - self.child.widget_mut() + self.clip.child_mut() } /// Returns the size of the child widget. pub fn child_size(&self) -> Size { - self.scroll_component.content_size + self.clip.content_size() } /// Returns the current scroll offset. pub fn offset(&self) -> Vec2 { - self.scroll_component.scroll_offset + self.clip.viewport_origin().to_vec2() } pub fn scroll(&mut self, x: f64, y: f64) { - let mut offset = self.offset(); - offset.x = offset.x + x; - offset.y = offset.y + y; - if offset.y < 0.0 { - offset.y = 0.0; - } - self.scroll_component.scroll_offset = offset; - self.child.set_viewport_offset(offset); + self.clip.pan_by(Vec2::new(x, y)); + //let mut offset = self.offset(); + //offset.x = offset.x + x; + //offset.y = offset.y + y; + //if offset.y < 0.0 { + // offset.y = 0.0; + //} + //self.scroll_offset = offset; + //self.child.set_viewport_offset(offset); } pub fn scroll_to(&mut self, x: f64, y: f64) { - let offset = Vec2::new(x, y); - self.scroll_component.scroll_offset = offset; - self.child.set_viewport_offset(offset); + self.clip.pan_to(Point::new(x, y)); } pub fn ensure_visible( @@ -103,12 +110,11 @@ pub fn ensure_visible( margin: &(f64, f64), ) -> bool { let mut new_offset = self.offset(); - let content_size = self.scroll_component.content_size; + let content_size = self.child_size(); let (x_margin, y_margin) = margin; - new_offset.x = if new_offset.x < rect.x1 + x_margin - scroll_size.width - { + new_offset.x = if new_offset.x < rect.x1 + x_margin - scroll_size.width { (rect.x1 + x_margin - scroll_size.width) .min(content_size.width - scroll_size.width) } else if new_offset.x > rect.x0 - x_margin { @@ -117,8 +123,7 @@ pub fn ensure_visible( new_offset.x }; - new_offset.y = if new_offset.y < rect.y1 + y_margin - scroll_size.height - { + new_offset.y = if new_offset.y < rect.y1 + y_margin - scroll_size.height { (rect.y1 + y_margin - scroll_size.height) .min(content_size.height - scroll_size.height) } else if new_offset.y > rect.y0 - y_margin { @@ -131,23 +136,16 @@ pub fn ensure_visible( return false; } - self.scroll_component.scroll_offset = new_offset; - self.child.set_viewport_offset(new_offset); + self.clip.pan_to(Point::new(new_offset.x, new_offset.y)); true } } impl> Widget for LapceScroll { - fn event( - &mut self, - ctx: &mut EventCtx, - event: &Event, - data: &mut T, - env: &Env, - ) { + fn event(&mut self, ctx: &mut EventCtx, event: &Event, data: &mut T, env: &Env) { match event { Event::Internal(_) => { - self.child.event(ctx, event, data, env); + self.clip.event(ctx, event, data, env); } Event::Command(cmd) => match cmd { _ if cmd.is(LAPCE_UI_COMMAND) => { @@ -161,11 +159,7 @@ fn event( println!("scroll request paint"); ctx.request_paint(); } - LapceUICommand::EnsureVisible(( - rect, - margin, - position, - )) => { + LapceUICommand::EnsureVisible((rect, margin, position)) => { if self.ensure_visible(ctx.size(), rect, margin) { ctx.request_paint(); } @@ -180,10 +174,7 @@ fn event( ctx.request_paint(); return; } - _ => println!( - "scroll unprocessed ui command {:?}", - command - ), + _ => println!("scroll unprocessed ui command {:?}", command), } } _ => (), @@ -192,23 +183,17 @@ fn event( }; // self.scroll_component.event(ctx, event, env); if !ctx.is_handled() { - let viewport = Rect::from_origin_size(Point::ORIGIN, ctx.size()); - - let force_event = self.child.is_hot() || self.child.is_active(); - let child_event = event.transform_scroll( - self.scroll_component.scroll_offset, - viewport, - force_event, - ); - if let Some(child_event) = child_event { - self.child.event(ctx, &child_event, data, env); - }; + self.clip.event(ctx, event, data, env); } - self.scroll_component.handle_scroll(ctx, event, env); + // self.scroll_component.handle_scroll( + // self.child.viewport_offset(), + // ctx, + // event, + // env, + // ); // In order to ensure that invalidation regions are correctly propagated up the tree, // we need to set the viewport offset on our child whenever we change our scroll offset. - self.child.set_viewport_offset(self.offset()); } fn lifecycle( @@ -218,18 +203,12 @@ fn lifecycle( data: &T, env: &Env, ) { + self.clip.lifecycle(ctx, event, data, env); self.scroll_component.lifecycle(ctx, event, env); - self.child.lifecycle(ctx, event, data, env); } - fn update( - &mut self, - ctx: &mut UpdateCtx, - _old_data: &T, - data: &T, - env: &Env, - ) { - self.child.update(ctx, data, env); + fn update(&mut self, ctx: &mut UpdateCtx, old_data: &T, data: &T, env: &Env) { + self.clip.update(ctx, old_data, data, env); } fn layout( @@ -241,30 +220,16 @@ fn layout( ) -> Size { bc.debug_check("Scroll"); - let max_bc = match self.direction { - ScrollDirection::Bidirectional => Size::new(INFINITY, INFINITY), - ScrollDirection::Vertical => Size::new(bc.max().width, INFINITY), - ScrollDirection::Horizontal => Size::new(INFINITY, bc.max().height), - }; - - let child_bc = BoxConstraints::new(bc.max(), max_bc); - let child_size = self.child.layout(ctx, &child_bc, data, env); - self.scroll_component.content_size = child_size; - self.child - .set_layout_rect(ctx, data, env, child_size.to_rect()); + let old_size = self.clip.viewport().rect.size(); + let child_size = self.clip.layout(ctx, &bc, data, env); let self_size = bc.constrain(child_size); - let _ = self.scroll_component.scroll(Vec2::new(0.0, 0.0), self_size); - self.child.set_viewport_offset(self.offset()); self_size } fn paint(&mut self, ctx: &mut PaintCtx, data: &T, env: &Env) { + self.clip.paint(ctx, data, env); self.scroll_component - .paint_content(ctx, env, |visible, ctx| { - ctx.with_child_ctx(visible, |ctx| { - self.child.paint_raw(ctx, data, env) - }); - }); + .draw_bars(ctx, &self.clip.viewport(), env); } } diff --git a/core/src/status.rs b/core/src/status.rs index 26fd1fb2..187bc163 100644 --- a/core/src/status.rs +++ b/core/src/status.rs @@ -85,7 +85,8 @@ fn paint( } } - let mut text_layout = TextLayout::new(format!("{} {}", errors, warnings)); + let mut text_layout = + TextLayout::::from_text(format!("{} {}", errors, warnings)); text_layout .set_font(FontDescriptor::new(FontFamily::SYSTEM_UI).with_size(13.0)); text_layout.set_text_color(LapceTheme::EDITOR_FOREGROUND); diff --git a/core/src/window.rs b/core/src/window.rs index ba078ef9..dc1fb4bf 100644 --- a/core/src/window.rs +++ b/core/src/window.rs @@ -408,7 +408,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceUIState, env: &Env) { format!("{} [{}]", dir, host) } }; - let mut text_layout = TextLayout::new(dir); + let mut text_layout = TextLayout::::from_text(dir); text_layout.set_font( FontDescriptor::new(FontFamily::SYSTEM_UI).with_size(13.0), ); diff --git a/src/main.rs b/src/main.rs index 3218a48d..5f8ca437 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,17 +41,6 @@ pub fn new() -> Delegate { } impl AppDelegate for Delegate { - fn command( - &mut self, - ctx: &mut DelegateCtx, - target: Target, - cmd: &Command, - data: &mut LapceUIState, - env: &Env, - ) -> bool { - true - } - fn window_added( &mut self, id: WindowId,