Skip to content

Commit 65b47a6

Browse files
authored
Sync Dioxus Native (Blitz 0.3.0-alpha.4) (#5563)
1 parent c77315b commit 65b47a6

24 files changed

Lines changed: 734 additions & 6185 deletions

File tree

Cargo.lock

Lines changed: 370 additions & 676 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -191,27 +191,28 @@ const-serialize-macro = { path = "packages/const-serialize-macro", version = "0.
191191
warnings = { version = "0.2.1" }
192192

193193
# blitz / native
194-
blitz-dom = { version = "=0.3.0-alpha.2", default-features = false }
195-
blitz-net = { version = "=0.3.0-alpha.2" }
196-
blitz-html = { version = "=0.3.0-alpha.2" }
197-
blitz-paint = { version = "=0.3.0-alpha.2" }
198-
blitz-traits = { version = "=0.3.0-alpha.2" }
199-
blitz-shell = { version = "=0.3.0-alpha.2", default-features = false }
200-
anyrender = { version = "0.8", default-features = false }
201-
anyrender_vello = { version = "0.8", default-features = false }
202-
anyrender_vello_cpu = { version = "0.10", default-features = false }
203-
anyrender_vello_hybrid = { version = "0.3", default-features = false }
204-
anyrender_skia = { version = "0.5", default-features = false }
205-
wgpu_context = { version = "0.4" }
206-
wgpu = { version = "28" }
207-
vello = "0.8"
194+
blitz-dom = { version = "=0.3.0-alpha.4", default-features = false }
195+
blitz-net = { version = "=0.3.0-alpha.4" }
196+
blitz-html = { version = "=0.3.0-alpha.4" }
197+
blitz-paint = { version = "=0.3.0-alpha.4" }
198+
blitz-traits = { version = "=0.3.0-alpha.4" }
199+
blitz-shell = { version = "=0.3.0-alpha.4", default-features = false }
200+
peniko = { version = "0.6.1", default-features = false }
201+
anyrender = { version = "0.10", default-features = false }
202+
anyrender_vello = { version = "0.10.1", default-features = false }
203+
anyrender_vello_cpu = { version = "0.12.1", default-features = false }
204+
anyrender_vello_hybrid = { version = "0.5.1", default-features = false }
205+
anyrender_skia = { version = "0.8", default-features = false }
206+
wgpu_context = { version = "0.6" }
207+
wgpu = { version = "29.0.3" }
208+
vello = "0.9"
208209
winit = { version = "=0.31.0-beta.2" }
209210

210211

211212
# a fork of pretty please for tests - let's get off of this if we can!
212213
prettier-please = { version = "0.3.0", features = ["verbatim"] }
213214
anyhow = "1.0.98"
214-
clap = { version = "4.5.40" }
215+
clap = { version = "4.5.54" }
215216
askama_escape = "0.13.0"
216217
tracing = "0.1.41"
217218
tracing-futures = "0.2.5"
@@ -226,10 +227,11 @@ futures = "0.3.32"
226227
futures-channel = "0.3.32"
227228
futures-util = { version = "0.3.32", default-features = false }
228229
rustc-hash = "2.1.1"
229-
wasm-bindgen = "0.2.100"
230-
wasm-bindgen-futures = "0.4.50"
231-
js-sys = "0.3.77"
232-
web-sys = { version = "0.3.77", default-features = false }
230+
wasm-bindgen = "0.2.121"
231+
wasm-bindgen-futures = "0.4.71"
232+
wasm-bindgen-test = "0.3.71"
233+
js-sys = "0.3.98"
234+
web-sys = { version = "0.3.98", default-features = false }
233235
html_parser = "0.7.0"
234236
thiserror = "2.0.18"
235237
prettyplease = { version = "0.2.35", features = ["verbatim"] }
@@ -242,7 +244,7 @@ sha1 = "0.10.6"
242244
md5 = "0.8.0"
243245
rpm = { version = "0.20.0", default-features = false, features = ["gzip-compression"] }
244246
lru = "0.16.0"
245-
async-trait = "0.1.88"
247+
async-trait = "0.1.89"
246248
axum = { version = "0.8.4", default-features = false }
247249
axum-server = { version = "0.7.3", default-features = false }
248250
http-body = { version = "1.0.1" }
@@ -266,7 +268,7 @@ rustls = { version = "0.23.28", default-features = false, features = [
266268
"ring",
267269
] }
268270
serde_json = "1.0.140"
269-
serde = "1.0.225"
271+
serde = "1.0.228"
270272
schemars = "1.2.1"
271273
syn = "2.0.117"
272274
quote = "1.0.38"
@@ -318,15 +320,15 @@ object = { version = "0.37.1" }
318320
inventory = { version = "0.3" }
319321
macro-string = "0.1.4"
320322
walkdir = "2.5.0"
321-
url = "2.5.4"
323+
url = "2.5.7"
322324
data-url = "0.3.2"
323325
separator = "0.4.1"
324326
pretty_assertions = "1"
325327
serde_repr = "0.1.19"
326328
hyper-util = "0.1.12"
327329
krates = { version = "0.17.5" }
328330
libloading = "0.8.8"
329-
libc = "0.2.174"
331+
libc = "0.2.177"
330332
memmap2 = "0.9.10"
331333
memfd = "0.6.4"
332334
xxhash-rust = { version = "0.8.15", default-features = false }
@@ -338,15 +340,15 @@ send_wrapper = "0.6.0"
338340
pin-project = { version = "1.1.10" }
339341
postcard = { version = "1.1.3", default-features = false }
340342
serde_urlencoded = "0.7.1"
341-
form_urlencoded = "1.2.1"
343+
form_urlencoded = "1.2.2"
342344
winnow = "0.7.14"
343345

344346
# desktop
345347
wry = { version = "0.53.5", default-features = false }
346348
tao = { version = "0.34.0", features = ["rwh_05"] }
347349
infer = "0.19.0"
348350
dunce = "1.0.5"
349-
percent-encoding = "2.3.1"
351+
percent-encoding = "2.3.2"
350352
muda = "0.17.0"
351353
objc2 = { version = "0.6.4", features = ["exception"] }
352354
objc2-foundation = { version = "0.3.2", default-features = false }
@@ -473,7 +475,7 @@ separator = { workspace = true }
473475
serde = { workspace = true, features = ["derive"] }
474476
serde_json = { workspace = true }
475477
rand = { workspace = true, features = ["small_rng"] }
476-
form_urlencoded = "1.2.1"
478+
form_urlencoded = { workspace = true }
477479
async-std = "1.13.1"
478480
web-time = "1.1.0"
479481
anyhow = { workspace = true }

examples/07-fullstack/auth/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ dioxus = { features = ["fullstack"], workspace = true }
1313
axum = { workspace = true, optional = true, features = ["macros"]}
1414
tokio = { workspace = true, features = ["full"], optional = true }
1515
tower-http = { workspace = true, features = ["auth"], optional = true }
16-
async-trait = { version = "0.1.88", optional = true }
16+
async-trait = { version = "0.1.89", optional = true }
1717
sqlx = { version = "0.8.6", features = [
1818
"macros",
1919
"migrate",

examples/08-apis/wgpu_child_window.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use dioxus::{
1111
desktop::{Config, tao::window::WindowBuilder, use_wry_event_handler, window},
1212
};
1313
use std::sync::Arc;
14+
use wgpu::CurrentSurfaceTexture;
1415

1516
fn main() {
1617
let config = Config::new()
@@ -208,12 +209,23 @@ fn fs_main() -> @location(0) vec4<f32> {
208209
device,
209210
pipeline,
210211
queue,
211-
..
212+
config,
212213
} = self;
213214

214-
let frame = surface
215-
.get_current_texture()
216-
.expect("Failed to acquire next swap chain texture");
215+
let frame = match surface.get_current_texture() {
216+
CurrentSurfaceTexture::Success(surface_texture) => surface_texture,
217+
CurrentSurfaceTexture::Lost
218+
| CurrentSurfaceTexture::Outdated
219+
| CurrentSurfaceTexture::Suboptimal(_) => {
220+
surface.configure(device, config);
221+
return;
222+
}
223+
CurrentSurfaceTexture::Occluded | CurrentSurfaceTexture::Timeout => {
224+
return;
225+
}
226+
CurrentSurfaceTexture::Validation => panic!("Current surface texture is invalid"),
227+
};
228+
217229
let view = frame
218230
.texture
219231
.create_view(&wgpu::TextureViewDescriptor::default());

examples/10-integrations/native-headless/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ fn main() {
115115
// (i.e. to render a custom renderer instead of Vello)
116116
paint_scene(
117117
&mut VelloScenePainter::new(&mut scene),
118-
&dioxus_doc.inner(),
118+
&mut dioxus_doc.inner_mut(),
119119
SCALE_FACTOR as f64,
120120
WIDTH,
121121
HEIGHT,

examples/10-integrations/wgpu-texture/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ tracing = ["dep:tracing-subscriber", "dioxus-native/tracing"]
1414
[dependencies]
1515
dioxus-native = { workspace = true }
1616
dioxus = { workspace = true }
17+
anyrender = { workspace = true }
18+
blitz-dom = { workspace = true }
19+
blitz-traits = { workspace = true }
20+
peniko = { workspace = true }
1721
wgpu = { workspace = true }
1822
winit = { workspace = true }
1923
bytemuck = "1.25"
20-
color = "0.3.2"
24+
color = "0.3.3"
2125
tracing-subscriber = { workspace = true, optional = true }

examples/10-integrations/wgpu-texture/src/demo_renderer.rs

Lines changed: 64 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
// Copyright © SixtyFPS GmbH <info@slint.dev>
22
// SPDX-License-Identifier: MIT
33
use crate::Color;
4-
use dioxus_native::{CustomPaintCtx, CustomPaintSource, DeviceHandle, TextureHandle};
4+
use anyrender::{PaintRef, PaintScene, RenderContext, ResourceId};
5+
use blitz_dom::Widget;
6+
use blitz_dom::node::ComputedStyles;
7+
use dioxus_native::DeviceHandle;
8+
use peniko::kurbo::{Affine, Rect};
9+
use peniko::{Fill, ImageBrush, ImageSampler};
510
use std::sync::mpsc::{Receiver, Sender, channel};
611
use std::time::Instant;
712
use wgpu::{
@@ -12,36 +17,69 @@ use wgpu::{
1217
TextureUsages, TextureViewDescriptor, VertexState,
1318
};
1419

15-
pub struct DemoPaintSource {
20+
pub struct DemoWidget {
1621
state: DemoRendererState,
1722
start_time: std::time::Instant,
1823
tx: Sender<DemoMessage>,
1924
rx: Receiver<DemoMessage>,
2025
color: Color,
2126
}
2227

23-
impl CustomPaintSource for DemoPaintSource {
24-
fn resume(&mut self, device_handle: &DeviceHandle) {
25-
// Extract device and queue from device_handle
26-
let device = &device_handle.device;
27-
let queue = &device_handle.queue;
28-
let active_state = ActiveDemoRenderer::new(device, queue);
29-
self.state = DemoRendererState::Active(Box::new(active_state));
28+
impl Widget for DemoWidget {
29+
fn connected(&mut self) {}
30+
fn disconnected(&mut self) {}
31+
fn can_create_surfaces(&mut self, render_ctx: &mut dyn anyrender::RenderContext) {
32+
if let Some(renderer_specific_context) = render_ctx.renderer_specific_context() {
33+
if let Ok(device_handle) = renderer_specific_context.downcast::<DeviceHandle>() {
34+
let active_state =
35+
ActiveDemoRenderer::new(&device_handle.device, &device_handle.queue);
36+
self.state = DemoRendererState::Active(Box::new(active_state));
37+
} else {
38+
println!("WARNING: Running WGPU example with non-wgpu rendering backend");
39+
}
40+
} else {
41+
println!("WARNING: Rendering backend returned no context!");
42+
}
3043
}
31-
32-
fn suspend(&mut self) {
44+
fn destroy_surfaces(&mut self) {
3345
self.state = DemoRendererState::Suspended;
3446
}
3547

36-
fn render(
48+
fn handle_event(&mut self, event: &blitz_traits::events::UiEvent) {
49+
let _ = event;
50+
}
51+
52+
fn paint(
3753
&mut self,
38-
ctx: CustomPaintCtx<'_>,
54+
render_ctx: &mut dyn anyrender::RenderContext,
55+
_styles: &ComputedStyles,
3956
width: u32,
4057
height: u32,
4158
_scale: f64,
42-
) -> Option<TextureHandle> {
59+
) -> anyrender::Scene {
60+
let mut scene = anyrender::Scene::new();
61+
62+
// if matches!(self.state, DemoRendererState::Suspended) {
63+
// self.can_create_surfaces(render_ctx);
64+
// }
65+
4366
self.process_messages();
44-
self.render(ctx, width, height)
67+
if let Some(resource_id) = self.render(render_ctx, width, height) {
68+
scene.fill(
69+
Fill::NonZero,
70+
Affine::IDENTITY,
71+
PaintRef::Resource(ImageBrush {
72+
image: resource_id,
73+
sampler: ImageSampler::default(),
74+
}),
75+
None,
76+
&Rect::from_origin_size((0.0, 0.0), (width as f64, height as f64)),
77+
);
78+
} else {
79+
println!("WARNING: render returned None");
80+
}
81+
82+
scene
4583
}
4684
}
4785

@@ -58,7 +96,7 @@ enum DemoRendererState {
5896
#[derive(Clone)]
5997
struct TextureAndHandle {
6098
texture: Texture,
61-
handle: TextureHandle,
99+
handle: ResourceId,
62100
}
63101

64102
struct ActiveDemoRenderer {
@@ -69,7 +107,7 @@ struct ActiveDemoRenderer {
69107
next_texture: Option<TextureAndHandle>,
70108
}
71109

72-
impl DemoPaintSource {
110+
impl DemoWidget {
73111
pub fn new() -> Self {
74112
let (tx, rx) = channel();
75113
Self::with_channel(tx, rx)
@@ -102,10 +140,10 @@ impl DemoPaintSource {
102140

103141
fn render(
104142
&mut self,
105-
ctx: CustomPaintCtx<'_>,
143+
ctx: &mut dyn RenderContext,
106144
width: u32,
107145
height: u32,
108-
) -> Option<TextureHandle> {
146+
) -> Option<ResourceId> {
109147
if width == 0 || height == 0 {
110148
return None;
111149
}
@@ -163,32 +201,34 @@ impl ActiveDemoRenderer {
163201

164202
pub(crate) fn render(
165203
&mut self,
166-
mut ctx: CustomPaintCtx<'_>,
204+
ctx: &mut dyn RenderContext,
167205
light: [f32; 3],
168206
width: u32,
169207
height: u32,
170208
start_time: &Instant,
171-
) -> Option<TextureHandle> {
209+
) -> Option<ResourceId> {
172210
// If "next texture" size doesn't match specified size then unregister and drop texture
173211
if let Some(next) = &self.next_texture
174212
&& (next.texture.width() != width || next.texture.height() != height)
175213
{
176-
ctx.unregister_texture(self.next_texture.take().unwrap().handle);
214+
ctx.unregister_resource(self.next_texture.take().unwrap().handle);
177215
}
178216

179217
// If there is no "next texture" then create one and register it.
180218
let texture_and_handle = match &self.next_texture {
181219
Some(next) => next,
182220
None => {
183221
let texture = create_texture(&self.device, width, height);
184-
let handle = ctx.register_texture(texture.clone());
222+
let handle = ctx
223+
.try_register_custom_resource(Box::new(texture.clone()))
224+
.unwrap();
185225
self.next_texture = Some(TextureAndHandle { texture, handle });
186226
self.next_texture.as_ref().unwrap()
187227
}
188228
};
189229

190230
let next_texture = &texture_and_handle.texture;
191-
let next_texture_handle = texture_and_handle.handle.clone();
231+
let next_texture_handle = texture_and_handle.handle;
192232

193233
let elapsed: f32 = start_time.elapsed().as_millis() as f32 / 500.;
194234
let [light_red, light_green, light_blue] = light;

0 commit comments

Comments
 (0)