diff --git a/Cargo.lock b/Cargo.lock index af114829d..72963311d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,7 +315,7 @@ dependencies = [ "anyrender", "image", "peniko", - "read-fonts", + "read-fonts 0.39.2", "serde", "serde_json", "sha2", @@ -855,7 +855,7 @@ dependencies = [ "percent-encoding", "rayon", "selectors", - "skrifa", + "skrifa 0.42.1", "slab", "smallvec", "stylo", @@ -2799,6 +2799,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bf886368962a7d8456f136073ed33ed1b0770c690d2063731bb6a776e99f33" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontconfig-parser" version = "0.5.8" @@ -2824,9 +2833,8 @@ dependencies = [ [[package]] name = "fontique" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "274fa4f0f0a926ae182c7c076c078cce8a38471d15e61a102a02cac984be9813" +version = "0.11.0" +source = "git+https://github.com/linebender/parley?rev=30f6ff1970e958498787fbfbf68a2eb013bee158#30f6ff1970e958498787fbfbf68a2eb013bee158" dependencies = [ "hashbrown 0.17.1", "linebender_resource_handle", @@ -2836,7 +2844,7 @@ dependencies = [ "objc2-core-text", "objc2-foundation 0.3.2", "parlance", - "read-fonts", + "read-fonts 0.40.2", "roxmltree 0.21.1", "smallvec", "windows", @@ -3140,7 +3148,7 @@ dependencies = [ "hashbrown 0.17.1", "log", "peniko", - "skrifa", + "skrifa 0.42.1", "smallvec", "vello_common", ] @@ -3324,13 +3332,13 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d12c7c642d4ce8c2e784b4751a6634bd89583912265add4a679a8882d123fbcd" +checksum = "f0589ddd0d2935dd2845827ac606b4081c266225d613b268ed2910f832889cab" dependencies = [ "bitflags 2.13.0", "bytemuck", - "read-fonts", + "read-fonts 0.40.2", "smallvec", ] @@ -4769,7 +4777,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc8f19a1c361e5fb1a57e487b993ff8b3c44321b50ca86c9e2b235e57dc94008" dependencies = [ - "font-types", + "font-types 0.11.3", ] [[package]] @@ -5246,14 +5254,12 @@ dependencies = [ [[package]] name = "parlance" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" +source = "git+https://github.com/linebender/parley?rev=30f6ff1970e958498787fbfbf68a2eb013bee158#30f6ff1970e958498787fbfbf68a2eb013bee158" [[package]] name = "parley" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1cfcf399c774719fb1fa51bc6b91e86bdf003b03202a0902f1827ba6750746" +version = "0.11.0" +source = "git+https://github.com/linebender/parley?rev=30f6ff1970e958498787fbfbf68a2eb013bee158#30f6ff1970e958498787fbfbf68a2eb013bee158" dependencies = [ "fontique", "harfrust", @@ -5264,14 +5270,13 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.43.2", ] [[package]] name = "parley_data" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1d3755e2cc12c0625b0cd2f2773c6a37dd11d1531940c945ade4aeb78f2b145" +version = "0.11.0" +source = "git+https://github.com/linebender/parley?rev=30f6ff1970e958498787fbfbf68a2eb013bee158#30f6ff1970e958498787fbfbf68a2eb013bee158" dependencies = [ "icu_properties", ] @@ -5903,7 +5908,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", - "font-types", + "font-types 0.11.3", +] + +[[package]] +name = "read-fonts" +version = "0.40.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487889119a5f19ff7c0a20637196bdc76b9f54ebec17e3588b5d75e4999f8773" +dependencies = [ + "bytemuck", + "font-types 0.12.0", + "once_cell", ] [[package]] @@ -6601,7 +6617,7 @@ checksum = "caad12d9a3f75948b725a643cd60aea6de9d20cb03d3e35221e7a8a31c549409" dependencies = [ "fnv", "hashbrown 0.17.1", - "skrifa", + "skrifa 0.42.1", "thiserror 2.0.18", "write-fonts", ] @@ -6640,7 +6656,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.39.2", +] + +[[package]] +name = "skrifa" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbe997d0f2480442d727488fbe2150779114cbe480ecdbadef58b33e0318ffb" +dependencies = [ + "bytemuck", + "read-fonts 0.40.2", ] [[package]] @@ -7973,7 +7999,7 @@ dependencies = [ "log", "peniko", "png 0.18.1", - "skrifa", + "skrifa 0.42.1", "static_assertions", "thiserror 2.0.18", "vello_encoding", @@ -8023,7 +8049,7 @@ dependencies = [ "bytemuck", "guillotiere", "peniko", - "skrifa", + "skrifa 0.42.1", "smallvec", ] @@ -9299,11 +9325,11 @@ version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb731d4c4d93eacc69a1ad2f270f905788a98e4a3438267bcafbe08d3431c8d8" dependencies = [ - "font-types", + "font-types 0.11.3", "indexmap", "kurbo", "log", - "read-fonts", + "read-fonts 0.39.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index d4ea4db12..b9bad0332 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -100,7 +100,7 @@ taffy = { version = "=0.11.0-experimental-cache-fix.3", default-features = false "calc", "detailed_layout_info", ] } -parley = { version = "0.10", default-features = false, features = ["std"] } +parley = { git = "https://github.com/linebender/parley", rev="30f6ff1970e958498787fbfbf68a2eb013bee158", default-features = false, features = ["std"] } skrifa = { version = "0.42", default-features = false, features = [ "std", ] } # Should match parley and vello versions diff --git a/packages/blitz-dom/src/layout/construct.rs b/packages/blitz-dom/src/layout/construct.rs index d7d59a6b9..a05d2f59b 100644 --- a/packages/blitz-dom/src/layout/construct.rs +++ b/packages/blitz-dom/src/layout/construct.rs @@ -942,6 +942,7 @@ pub(crate) fn build_inline_layout_into( kind: box_kind, // Overridden by push_inline_box method index: 0, + baseline: None, // Width and height are set during layout width: 0.0, height: 0.0, @@ -1022,6 +1023,7 @@ pub(crate) fn build_inline_layout_into( kind: box_kind, // Overridden by push_inline_box method index: 0, + baseline: None, // Width and height are set during layout width: 0.0, height: 0.0, diff --git a/packages/blitz-dom/src/layout/inline.rs b/packages/blitz-dom/src/layout/inline.rs index b64f37299..7d84e6e36 100644 --- a/packages/blitz-dom/src/layout/inline.rs +++ b/packages/blitz-dom/src/layout/inline.rs @@ -300,6 +300,7 @@ impl BaseDocument { ibox.height = 0.0; } else { let output = self.compute_child_layout(NodeId::from(ibox.id), child_inputs); + ibox.baseline = output.first_baselines.y; ibox.width = (margin.left + margin.right + output.size.width) * scale; ibox.height = (margin.top + margin.bottom + output.size.height) * scale; } @@ -537,7 +538,7 @@ impl BaseDocument { // dbg!(&layout.size); // dbg!(&layout.location); - state.append_inline_box_to_line(box_break_data.advance, 0.0); + state.append_inline_box_to_line(box_break_data.advance, 0.0, 0.0); // if float.is_floated() { // println!("INLINE FLOATED BOX ({}) {:?}", ibox.id, float); @@ -662,6 +663,11 @@ impl BaseDocument { // println!("known_dimensions: w: {:?} h: {:?}", inputs.known_dimensions.width, inputs.known_dimensions.height); // println!("\n"); + let first_baseline = inline_layout + .layout + .first_baseline() + .map(|baseline| baseline + content_box_inset.top); + // Put layout back self.nodes[node_id] .data @@ -672,7 +678,10 @@ impl BaseDocument { LayoutOutput { size: final_size, content_size: measured_size + padding.sum_axes(), - first_baselines: Point::NONE, + first_baselines: Point { + x: None, + y: first_baseline, + }, top_margin: CollapsibleMarginSet::ZERO, bottom_margin: CollapsibleMarginSet::ZERO, margins_can_collapse_through: !has_styles_preventing_being_collapsed_through