Skip to content

Commit 8c0c7d2

Browse files
authored
This Month in Linebender, May 2025 (#110)
1 parent af64029 commit 8c0c7d2

File tree

6 files changed

+170
-2
lines changed

6 files changed

+170
-2
lines changed

content/blog/2025-04-04-tmil-15/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ It lets you build user interfaces declaratively by composing lightweight views t
6262
Vello is our GPU vector renderer.
6363
It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.
6464

65-
- [vello#841][]: Fixed incorrect COLR Emoi rendering, which especially impacted users on Windows.
65+
- [vello#841][]: Fixed incorrect COLR Emoji rendering, which especially impacted users on Windows.
6666
We backported this to create [Vello 0.4.1](https://github.com/linebender/vello/releases/tag/v0.4.1).
6767
- [vello#817][], [vello#877][]: Updates some of our GPU encoding code to not assume that allocators will give over-aligned allocations.
6868

4.83 KB
Loading
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
+++
2+
title = "Linebender in May 2025"
3+
authors = ["Olivier Faure"]
4+
+++
5+
6+
Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for [the Rust programming language](https://rust-lang.org).
7+
8+
9+
## RustWeek
10+
11+
This month saw the [RustWeek 2025](https://rustweek.org/) conference, in Utrecht in the Netherlands.
12+
13+
A lot of things happened!
14+
15+
### The talks
16+
17+
Raph Levien gave a talk titled *Faster, easier 2D vector rendering*, about Vello's new architecture.
18+
The talk had some nice visuals and a pretty cool demo!
19+
20+
<img style="height: auto" width="991" height="626" src="sparse-strips.png" alt="Image from the sparse strips demo">
21+
22+
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/_sv8K190Zps?si=s-NdOxRPaBmS9FdQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
23+
24+
Matt Campbell gave a talk titled *AccessKit: reusable UI accessibility*, showing off AccessKit and its API and architecture.
25+
The talk also came with a cool demo, showcasing AccessKit's Android integration.
26+
27+
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/OI2TzJ6Sw10?si=FBRXVnlmasTLr_bF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
28+
29+
### The Anniversary
30+
31+
RustWeek also saw [the release of Rust 1.87](https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/), which coincided ([to the day!](https://poignardazur.github.io/2025/06/13/anniversary-trivia/)) with the "10 years of Rust" party.
32+
33+
Some members of Linebender were at the party, which was a great experience. See who you can spot on the group photo!
34+
35+
<img style="height: auto" width="1752" height="996" src="party.jpg" alt="Rust Anniversary group photo">
36+
37+
38+
### The Unconference
39+
40+
The Linebender team also went to the UI Unconference, a roundtable where various subjects were broached (accessibility, platform integrations, SVG rendering, etc).
41+
42+
Overall it felt like various project leaders were increasingly interested in pooling resources and using common libraries, but there is still a long way to go on that front.
43+
44+
45+
## Masonry
46+
47+
Masonry is the widget system developed by Linebender.
48+
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
49+
50+
- [xilem#950][]: Adds support for [`ui-events`][] crate.
51+
- [xilem#961][]: Adds default property values and a default theme.
52+
- [xilem#973][]: Releases Masonry [0.3.0](https://github.com/linebender/xilem/releases/tag/v0.3.0).
53+
54+
<figure>
55+
56+
<img style="height: auto" width="300" height="300" src="button-shadows.png" alt="Screenshot of the new shadows.">
57+
58+
<figcaption>
59+
60+
[xilem#960][]: Adds new shadow property to buttons.
61+
62+
</figcaption>
63+
</figure>
64+
65+
66+
67+
## Xilem
68+
69+
Xilem is our flagship GUI project, inspired by SwiftUI, which uses Masonry for its widgets.
70+
It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.
71+
72+
- [xilem#964][]: Handles Masonry properties for more styling options.
73+
- [xilem#973][]: Release Xilem [0.3.0](https://github.com/linebender/xilem/releases/tag/v0.3.0).
74+
75+
76+
## Vello
77+
78+
Vello is our GPU vector renderer.
79+
It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.
80+
81+
- [vello#524][]: Implements pipeline caching, drastically improving Android startup times.
82+
- [vello#963][]: Rounds vertical hinting offsets.
83+
- [vello#966][]: Releases Vello [0.5.0](https://github.com/linebender/vello/releases/tag/v0.5.0).
84+
85+
This month we continued seeing a massive amount of activity on Vello's sparse strips renderers (see Raph's video above for details), thanks in part to the tireless contributions of Canva developers Alex Gemberg, Taj Pereira and Andrew Jakubowicz, and to the continued work of Laurenz Stampfl as part of his master's project.
86+
87+
- [vello#937][]: Adds support for rendering bitmap and COLR glyphs.
88+
- [vello#948][]: Adds support for drawing blurred, rounded rectangles.
89+
- [vello#957][]: Adds clipping and spatiotemportal allocation to vello_hybrid.
90+
- [vello#1011][]: Adds native WebGL backend for vello_hybrid.
91+
- [vello#1008][]: Makes vello_common and vello_cpu no_std.
92+
93+
This month also saw the first release of [vello_cpu](https://crates.io/crates/vello_cpu)!
94+
95+
As the name implies, vello_cpu is a CPU-only renderer for vector graphics using Vello's tech stack.
96+
It's still very experimental (version [0.0.1](https://github.com/linebender/vello/releases/tag/sparse-strips-v0.0.1)) and likely to see all sorts of breaking changes, and performance isn't great, but if you want to experiment with it, you can run `cargo add vello_cpu` in your terminal and start hacking away.
97+
98+
99+
## Parley
100+
101+
Parley is a text layout library.
102+
It handles text layout, mostly at the level of line breaking and resolving glyph positions.
103+
104+
105+
- [parley#334][]: Adds editor features required for Android IME.
106+
- [parley#344][]: Adds option to quantize vertical layout metrics.
107+
- [parley#346][]: Enables Parley/Fontique to compile to wasm with default features enabled, for better discoverability of the wasm target.
108+
- [parley#349][]: Releases Parley [0.4.0](https://github.com/linebender/parley/releases/tag/v0.4.0).
109+
- [parley#362][]: Adds absolute and metrics-relative line height styles.
110+
111+
112+
## Get Involved
113+
114+
We welcome collaboration on any of our crates.
115+
This can include improving the documentation, implementing new features, improving our test coverage, or using them within your own code.
116+
117+
We host an hour long office hours meeting each week where we discuss what's going on in our projects.
118+
See [#office hours in Zulip](https://xi.zulipchat.com/#narrow/channel/359642-office-hours) for details.
119+
We've also started a separate office hours time dedicated to the renderer collaboration, details also available at that link.
120+
121+
- Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended discussion of the ecosystem.
122+
- [See Daniel's schedule here](https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2).
123+
- [See Olivier's schedule here](https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2t767ZRETD_TkRI_VxK2ZTG0VrO9OZ4l7HvTxefhtJcg85iK0ZN7zWNnAEZtH0Dn7C1GKxrmYM).
124+
125+
[Color]: https://docs.rs/color/
126+
[CSS Color Module Level 4]: https://www.w3.org/TR/css-color-4/
127+
128+
[Kompari]: https://github.com/linebender/kompari
129+
130+
[`ui-events`]: https://github.com/endoli/ui-events
131+
132+
[xilem#950]: https://github.com/linebender/xilem/pull/950
133+
[xilem#961]: https://github.com/linebender/xilem/pull/961
134+
[xilem#960]: https://github.com/linebender/xilem/pull/960
135+
[xilem#973]: https://github.com/linebender/xilem/pull/973
136+
[xilem#964]: https://github.com/linebender/xilem/pull/964
137+
[xilem#973]: https://github.com/linebender/xilem/pull/973
138+
[vello#524]: https://github.com/linebender/vello/pull/524
139+
[vello#963]: https://github.com/linebender/vello/pull/963
140+
[vello#966]: https://github.com/linebender/vello/pull/966
141+
[vello#937]: https://github.com/linebender/vello/pull/937
142+
[vello#948]: https://github.com/linebender/vello/pull/948
143+
[vello#957]: https://github.com/linebender/vello/pull/957
144+
[vello#1011]: https://github.com/linebender/vello/pull/1011
145+
[vello#1008]: https://github.com/linebender/vello/pull/1008
146+
[parley#334]: https://github.com/linebender/parley/pull/334
147+
[parley#344]: https://github.com/linebender/parley/pull/344
148+
[parley#346]: https://github.com/linebender/parley/pull/346
149+
[parley#349]: https://github.com/linebender/parley/pull/349
150+
[parley#362]: https://github.com/linebender/parley/pull/362
249 KB
Loading
197 KB
Loading

sass/main.scss

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ h2,
3939
h3,
4040
h4,
4141
h5,
42+
h6 {
43+
margin-top:20px
44+
}
45+
iframe,
46+
img,
47+
h1,
48+
h2,
49+
h3,
50+
h4,
51+
h5,
4252
h6,
4353
p,
4454
blockquote,
@@ -53,14 +63,22 @@ figure,
5363
main {
5464
display:block
5565
}
66+
iframe {
67+
display:block;
68+
margin-right:auto;
69+
margin-left:auto;
70+
}
5671
img {
72+
margin-right:auto;
73+
margin-left:auto;
5774
max-width:100%;
58-
vertical-align:middle
75+
vertical-align:middle;
5976
}
6077
figure>img {
6178
display:block
6279
}
6380
figcaption {
81+
text-align: center;
6482
font-size:14px
6583
}
6684
ul,

0 commit comments

Comments
 (0)