版本发布 5
| Name | Crates.io | Docs | | :--- | :--- | :--- | | Parley | **[Crates.io](https://crates.io/crates/parley/0.7.0)** | **[Docs](https://docs.rs/parley/0.7.0/)** | | Fontique | **[Crates.io](https://crates.io/crates/fontique/0.7.0)** | **[Docs](https://docs.rs/fontique/0.7.0/)** | This release has an [MSRV] of 1.83. ### Highlights [#448][] by [@taj-p][]) and ([#449][] by [@nicoburns][] collectively fix a significant performance bug that occurred when laying out large paragraphs of text. Previously the time to perform layout was non-linear with respect to the input size and laying out paragraphs of text with more than ~1k characters was very slow. The new `TextWrapMode` style implements the semantics of the [`text-wrap-mode`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-wrap-mode) CSS property and allows text-wrapping to be disabled completely for a span of text. ### Migration Some modules have been moved: - `parley::editor` and `parley::layout::editor` are now `parley::editing`. - `parley::layout::cursor` is now `parley::cursor`. Fontique no longer sets the `dlopen` feature of `yeslogic-fontconfig-sys` by default. If you wish to run Fontique on a Linux system without fontconfig installed then you will need to enable the new `fontconfig-dlopen` feature of the `fontique` crate. If you wish to compile Fontique on a Linux system without the `fontconfig-dlopen` enabled then you will need the fontconfig dev package (e.g. `libfontconfig1-dev` on Ubuntu) installed. ### Added #### Parley - Add `TextWrapMode` style. This allow line wrapping to be disabled completely for a span of text (excluding explicit line breaks). ([#367][] by [@nicoburns][]) - Add `Cluster::from_point_exact` method for hit-testing spans of text. This is useful for implementing "hover" or "click" functionality. ([#447][] by [@nicoburns][]) ### Changed #### Parley - Split off various modules into "editing" folder. ([#440][] by [@PoignardAzur][]) - Split contents of layout/mod.rs file. ([#444][] by [@PoignardAzur][]) #### Fontique - Make the yeslogic-fontconfig-sys/dlopen feature optional. [#467][] by [@ogoffart][]) ### Fixed #### Parley - Running line height calculation. ([#448][] by [@taj-p][]) - Optimise line height computation. ([#449][] by [@nicoburns][]) - Add word and letter spacing to text layout based on style properties. ([#468][] by [@dolsup][]) - Hang trailing whitespace preceding explicit newline. ([#276][] by [@wfdewith][]) #### Fontique - Fix build on platforms without 64bit atomics. ([#451][] by [@nicoburns][]) ## New Contributors * @dolsup made their first contribution in https://github.com/linebender/parley/pull/468 * @ogoffart made their first contribution in https://github.com/linebender/parley/pull/467 * @PoignardAzur made their first contribution in https://github.com/linebender/parley/pull/440 **Full Changelog**: https://github.com/linebender/parley/compare/v0.6.0...v0.7.0 [MSRV]: README.md#minimum-supported-rust-version-msrv
### Parley **[Crates.io](https://crates.io/crates/parley/0.4.0) | [Docs](https://docs.rs/parley/0.4.0/)** ### Fontique **[Crates.io](https://crates.io/crates/fontique/0.4.0) | [Docs](https://docs.rs/fontique/0.4.0/)** --- This release has an [MSRV] of 1.82. ### Migration Quantization of vertical layout metrics is now optional. For an easy upgrade we recommend enabling it by setting `quantize` to `true` when calling [`LayoutContext::ranged_builder`](https://docs.rs/parley/0.4.0/parley/struct.LayoutContext.html#method.ranged_builder) or [`LayoutContext::tree_builder`](https://docs.rs/parley/0.4.0/parley/struct.LayoutContext.html#method.tree_builder). ### Added #### Parley - Option to skip quantization of vertical layout metrics for advanced rendering use cases. ([#297][] by [@valadaptive][], [#344][] by [@xStrom]) - The `WordBreak` and `OverflowWrap` style properties for controlling line wrapping. ([#315][] by [@valadaptive][]) - `PlainEditor` methods `raw_selection` and `raw_text`. ([#316][], [#317][] by [@mwcampbell][]) - `PlainEditor::selection_geometry_with`, the equivalent of `Selection::geometry_with` method. ([#318][] by [@valadaptive][]) - `BreakLines::is_done` method to check if all the text has been placed into lines. ([#319][] by [@valadaptive][]) ### Changed #### Parley - Breaking change: `Selection::geometry`, `Selection::geometry_with`, and `PlainEditor::selection_geometry` now include the line indices that the selection rectangles belong to. ([#318][] by [@valadaptive][]) - Updated to `accesskit` 0.18. ([#294][] by [@waywardmonkeys][])) - Now displaying selected newlines as whitespace in the selection highlight. ([#296][] by [@valadaptive][]) - Made `BreakReason` public. ([#300][] by [@valadaptive][]) #### Fontique - Breaking change: `Collection::register_fonts` now takes a `Blob<u8>` instead of a `Vec<u8>`. ([#306][] by [@valadaptive][]) - Breaking change: `Collection::register_fonts` now takes an optional second parameter which allows overriding the metadata used for matching the font. ([#312][] by [@valadaptive][]) ### Fixed #### Parley - Text editing for layouts which contain inline boxes. ([#299][] by [@valadaptive][]) - Cursor navigation in RTL text sometimes getting stuck within a line. ([#331][] by [@valadaptive][]) - Using `Layout::align` on an aligned layout without breaking lines again. ([#342][] by [@xStrom][]) - Selection box height going below ascent + descent with small line heights. ([#344][] by [@xStrom]) - Rounding error accumulation of vertical layout metrics. ([#344][] by [@xStrom]) #### Fontique - Panic on macOS when running in debug mode. ([#335][] by [@NoahR02][]) ## New Contributors * @valadaptive made their first contribution in https://github.com/linebender/parley/pull/300 * @NoahR02 made their first contribution in https://github.com/linebender/parley/pull/335 **Full Changelog**: https://github.com/linebender/parley/compare/v0.3.0...v0.4.0 [MSRV]: README.md#minimum-supported-rust-version-msrv [@dfrg]: https://github.com/dfrg [@DJMcNab]: https://github.com/DJMcNab [@mwcampbell]: https://github.com/mwcampbell [@nicoburns]: https://github.com/nicoburns [@NoahR02]: https://github.com/NoahR02 [@spirali]: https://github.com/spirali [@tomcur]: https://github.com/tomcur [@valadaptive]: https://github.com/valadaptive [@waywardmonkeys]: https://github.com/waywardmonkeys [@wfdewith]: https://github.com/wfdewith [@xorgy]: https://github.com/xorgy [@xStrom]: https://github.com/xStrom [#54]: https://github.com/linebender/parley/pull/54 [#55]: https://github.com/linebender/parley/pull/55 [#56]: https://github.com/linebender/parley/pull/56 [#59]: https://github.com/linebender/parley/pull/59 [#71]: https://github.com/linebender/parley/pull/71 [#72]: https://github.com/linebender/parley/pull/72 [#76]: https://github.com/linebender/parley/pull/76 [#78]: https://github.com/linebender/parley/pull/78 [#85]: https://github.com/linebender/parley/pull/85 [#106]: https://github.com/linebender/parley/pull/106 [#126]: https://github.com/linebender/parley/pull/126 [#129]: https://github.com/linebender/parley/pull/129 [#133]: https://github.com/linebender/parley/pull/133 [#137]: https://github.com/linebender/parley/pull/137 [#143]: https://github.com/linebender/parley/pull/143 [#146]: https://github.com/linebender/parley/pull/146 [#154]: https://github.com/linebender/parley/pull/154 [#162]: https://github.com/linebender/parley/pull/162 [#163]: https://github.com/linebender/parley/pull/163 [#166]: https://github.com/linebender/parley/pull/166 [#169]: https://github.com/linebender/parley/pull/169 [#170]: https://github.com/linebender/parley/pull/170 [#176]: https://github.com/linebender/parley/pull/176 [#182]: https://github.com/linebender/parley/pull/182 [#187]: https://github.com/linebender/parley/pull/187 [#188]: https://github.com/linebender/parley/pull/188 [#191]: https://github.com/linebender/parley/pull/191 [#192]: https://github.com/linebender/parley/pull/192 [#194]: https://github.com/linebender/parley/pull/194 [#198]: https://github.com/linebender/parley/pull/198 [#201]: https://github.com/linebender/parley/pull/201 [#202]: https://github.com/linebender/parley/pull/202 [#207]: https://github.com/linebender/parley/pull/207 [#211]: https://github.com/linebender/parley/pull/211 [#212]: https://github.com/linebender/parley/pull/212 [#213]: https://github.com/linebender/parley/pull/213 [#223]: https://github.com/linebender/parley/pull/223 [#224]: https://github.com/linebender/parley/pull/224 [#241]: https://github.com/linebender/parley/pull/241 [#245]: https://github.com/linebender/parley/pull/245 [#249]: https://github.com/linebender/parley/pull/249 [#250]: https://github.com/linebender/parley/pull/250 [#254]: https://github.com/linebender/parley/pull/254 [#256]: https://github.com/linebender/parley/pull/256 [#259]: https://github.com/linebender/parley/pull/259 [#264]: https://github.com/linebender/parley/pull/264 [#268]: https://github.com/linebender/parley/pull/268 [#271]: https://github.com/linebender/parley/pull/271 [#280]: https://github.com/linebender/parley/pull/280 [#294]: https://github.com/linebender/parley/pull/294 [#296]: https://github.com/linebender/parley/pull/296 [#297]: https://github.com/linebender/parley/pull/297 [#299]: https://github.com/linebender/parley/pull/299 [#300]: https://github.com/linebender/parley/pull/300 [#306]: https://github.com/linebender/parley/pull/306 [#312]: https://github.com/linebender/parley/pull/312 [#315]: https://github.com/linebender/parley/pull/315 [#316]: https://github.com/linebender/parley/pull/316 [#317]: https://github.com/linebender/parley/pull/317 [#318]: https://github.com/linebender/parley/pull/318 [#319]: https://github.com/linebender/parley/pull/319 [#331]: https://github.com/linebender/parley/pull/331 [#335]: https://github.com/linebender/parley/pull/335 [#342]: https://github.com/linebender/parley/pull/342 [#344]: https://github.com/linebender/parley/pull/344
The time has come to release v0.3.0 of [Parley] along with v0.3.0 of [Fontique]. [AccessKit] integration, `Cursor` redesign, and significant changes to `PlainEditor` are some of the highlights. This release has an [MSRV] of 1.82. For more details check out the [changelog]. [Parley]: https://crates.io/crates/parley [Fontique]: https://crates.io/crates/fontique [AccessKit]: https://github.com/AccessKit/accesskit [MSRV]: README.md#minimum-supported-rust-version-msrv [changelog]: CHANGELOG.md#030---2025-02-27
With growing community effort, we have reached v0.2.0 of [Parley](https://crates.io/crates/parley)! This release also conincides with the release of v0.2.0 of [Fontique](https://crates.io/crates/fontique). This release has an [MSRV] of 1.75. This remains alpha-quality software. There are plenty of issues, known and unknown, and we look forward to further development. ### Added #### Parley - Example using tiny-skia which renders into a png (#55 by @nicoburns) - Breaking change: There is now a blanket implementation for `Brush`. - A swash example which renders into a png (#54 by @nicoburns) - An example with Vello on Winit which shows a basic text editor (#106 by @dfrg) - `PlainEditor`, a basic action-based text editor based on Parley `Selection` and `Cursor` (#126 by @xorgy) - Tree style builder (#76 by @nicoburns) - Conversions for `FontFamily`, `FontStack`, and `StyleProperty` to make styling more ergonomic (#129 by @xorgy) ### Changed #### General - Repository layout updated to match Linebender standard (#59 by @waywardmonkeys) #### Parley - Emoji clusters now get an Emoji family added by default (#56 by @dfrg) - Style builders now accept `Into<StyleProperty<'a, B: Brush>>` so you can push a `GenericFamily` or `FontStack` directly. (#129 by @xorgy) #### Fontique - Removed unsafe code from fontconfig cache (#78 by @waywardmonkeys) - Switched to `windows-rs` for `dwrite` backend (#85 by @dfrg) ### Fixed #### Fontique - Search correct paths for fonts on Apple platforms (#71 by @waywardmonkeys) ### Removed #### Fontique - Breaking change: removed conversion to/from `icu_properties::Script` for `fontique::Script` (#72 by @waywardmonkeys) - This can be restored by using the `icu_properties` feature of `fontique`. **Full Changelog**: https://github.com/linebender/parley/compare/v0.1.0...v0.2.0
We are proud to announce that after years of development we have released v0.1.0 of [Parley](https://crates.io/crates/parley)! This release also conincides with the release of v0.1.0 of [Fontique](https://crates.io/crates/fontique). These are alpha-quality software. There are plenty of known and unknown issues, and we expect to continue very active development.