Skip to content

Commit 665b099

Browse files
committed
Merge main into pr-302
2 parents 700e3f7 + bd06308 commit 665b099

35 files changed

Lines changed: 1289 additions & 505 deletions

File tree

Cargo.lock

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

Cargo.toml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ dioxus-native-dom = { version = "0.7.0", path = "./packages/dioxus-native-dom",
4646
debug_timer = { version = "0.1.2", path = "./packages/debug_timer" }
4747

4848
# Servo dependencies
49-
style = { version = "0.9.0", package = "stylo" }
50-
style_traits = { version = "0.9.0", package = "stylo_traits" }
51-
style_atoms = { version = "0.9.0", package = "stylo_atoms" }
52-
style_config = { version = "0.9.0", package = "stylo_config" }
53-
style_dom = { version = "0.9.0", package = "stylo_dom" }
54-
selectors = { version = "0.33.0", package = "selectors" }
49+
style = { version = "0.10.0", package = "stylo" }
50+
style_traits = { version = "0.10.0", package = "stylo_traits" }
51+
style_atoms = { version = "0.10.0", package = "stylo_atoms" }
52+
style_config = { version = "0.10.0", package = "stylo_config" }
53+
style_dom = { version = "0.10.0", package = "stylo_dom" }
54+
selectors = { version = "0.34.0", package = "selectors" }
5555
cssparser = { version = "0.36" }
5656

5757
# HTML5ever dependencies
@@ -100,9 +100,9 @@ anyrender = { version = "0.6" }
100100
anyrender_vello = { version = "0.6" }
101101
anyrender_vello_cpu = { version = "0.8" }
102102
anyrender_vello_hybrid = { version = "0.1" }
103-
anyrender_skia = { version = "0.2.0" }
103+
anyrender_skia = { version = "0.3.0" }
104104
anyrender_svg = { version = "0.6" }
105-
wgpu_context = { version = "0.1.1" }
105+
wgpu_context = { version = "0.1.2" }
106106

107107
# Linebender + Fontations + WGPU + SVG
108108
color = "0.3"
@@ -230,7 +230,7 @@ blitz-shell = { workspace = true }
230230
blitz-net = { workspace = true }
231231
blitz = { workspace = true, features = ["net"] }
232232
dioxus = { workspace = true }
233-
dioxus-native = { workspace = true, features = ["vello", "floats", "svg"] }
233+
dioxus-native = { workspace = true, features = ["vello", "floats", "svg", "prelude"] }
234234
euclid = { workspace = true }
235235
reqwest = { workspace = true }
236236
tokio = { workspace = true, features = ["macros"] }

apps/browser/src/main.rs

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
//! A web browser with UI powered by Dioxus Native and content rendering powered by Blitz
66
7+
use std::cell::RefCell;
78
use std::rc::Rc;
89
use std::sync::{Arc, atomic::AtomicUsize, atomic::Ordering as Ao};
910

1011
use blitz_traits::shell::ShellProvider;
1112
use dioxus_core::Task;
12-
use dioxus_native::{SubDocumentAttr, prelude::*};
13+
use dioxus_native::{NodeHandle, SubDocumentAttr, prelude::*};
1314

1415
use blitz_dom::{DocumentConfig, FontContext};
1516
use blitz_html::{HtmlDocument, HtmlProvider};
@@ -40,7 +41,11 @@ fn use_sync_store<T: Send + Sync + 'static>(value: impl FnOnce() -> T) -> SyncSt
4041
fn app() -> Element {
4142
let home_url = use_hook(|| Url::parse("https://html.duckduckgo.com").unwrap());
4243

44+
let mut url_input_handle = use_signal(|| None);
45+
let mut webview_node_handle: Signal<Option<NodeHandle>> = use_signal(|| None);
4346
let mut url_input_value = use_signal(|| home_url.to_string());
47+
let mut is_focussed = use_signal(|| false);
48+
let block_mouse_up = use_hook(|| Rc::new(RefCell::new(false)));
4449
let mut history: SyncStore<History> = use_sync_store(|| History::new(home_url.clone()));
4550

4651
let net_provider = use_context::<Arc<StdNetProvider>>();
@@ -63,6 +68,21 @@ fn app() -> Element {
6368
let open_action =
6469
use_callback(move |_| open_in_external_browser(&history.current_url().read()));
6570

71+
let devtools_action = use_callback(move |_| {
72+
if let Some(handle) = webview_node_handle() {
73+
let node_id = handle.node_id();
74+
let mut doc = handle.doc_mut();
75+
if let Some(sub_doc) = doc
76+
.get_node_mut(node_id)
77+
.and_then(|node| node.element_data_mut())
78+
.and_then(|el| el.sub_doc_data_mut())
79+
{
80+
let mut sub_doc = sub_doc.inner_mut();
81+
sub_doc.devtools_mut().toggle_highlight_hover();
82+
}
83+
}
84+
});
85+
6686
rsx!(
6787
div { id: "frame",
6888
title { "Blitz Browser" }
@@ -79,6 +99,40 @@ fn app() -> Element {
7999
"type": "text",
80100
name: "url",
81101
value: url_input_value(),
102+
onmounted: move |evt: Event<MountedData>| {
103+
let node_handle = evt.downcast::<NodeHandle>().unwrap();
104+
*url_input_handle.write() = Some(node_handle.clone());
105+
},
106+
onblur: move |_evt| {
107+
*is_focussed.write() = false;
108+
},
109+
onfocus: move |_evt| {
110+
*is_focussed.write() = true;
111+
if let Some(handle) = url_input_handle() {
112+
let node_id = handle.node_id();
113+
let mut doc = handle.doc_mut();
114+
doc.with_text_input(node_id, |mut driver| driver.select_all());
115+
}
116+
},
117+
onmousedown: {
118+
let block_mouse_up = block_mouse_up.clone();
119+
move |_evt| {
120+
*block_mouse_up.borrow_mut() = !is_focussed();
121+
}
122+
},
123+
onmousemove: {
124+
let block_mouse_up = block_mouse_up.clone();
125+
move |evt| {
126+
if *block_mouse_up.borrow() {
127+
evt.prevent_default();
128+
}
129+
}
130+
},
131+
onmouseup: move |evt| {
132+
if *block_mouse_up.borrow() {
133+
evt.prevent_default();
134+
}
135+
},
82136
onkeydown: move |evt| {
83137
if evt.key() == Key::Enter {
84138
evt.prevent_default();
@@ -93,11 +147,18 @@ fn app() -> Element {
93147
oninput: move |evt| { *url_input_value.write() = evt.value() },
94148
}
95149
IconButton { icon: icons::EXTERNAL_LINK_ICON, action: open_action }
96-
IconButton { icon: icons::MENU_ICON }
150+
IconButton { icon: icons::MENU_ICON, action: devtools_action }
97151
}
98152

99153
// Web content
100-
web-view { class: "webview", "__webview_document": content_doc() }
154+
web-view {
155+
class: "webview",
156+
"__webview_document": content_doc(),
157+
onmounted: move |evt: Event<MountedData>| {
158+
let node_handle = evt.downcast::<NodeHandle>().unwrap();
159+
*webview_node_handle.write() = Some(node_handle.clone());
160+
},
161+
}
101162
}
102163
)
103164
}

examples/assets/hello_world.svg

Lines changed: 15 additions & 0 deletions
Loading

examples/assets/svg_size.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Svg render example</title>
6+
<style>
7+
.size-36px {
8+
height: 36px;
9+
width: 36px;
10+
}
11+
.bg-color-blue {
12+
background-color: blue;
13+
}
14+
</style>
15+
</head>
16+
<body>
17+
<div class="size-36px bg-color-blue"></div>
18+
<div class="size-36px">
19+
<svg viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
20+
<path d="M434.5-434.5H191.87v-91H434.5v-242.63h91v242.63h242.63v91H525.5v242.63h-91V-434.5Z"></path>
21+
</svg>
22+
</div>
23+
</body>
24+
</html>

examples/svg.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//! Drive the renderer from Dioxus
2+
use dioxus_native::prelude::*;
3+
4+
const SVG: Asset = asset!("./assets/hello_world.svg");
5+
6+
fn main() {
7+
dioxus_native::launch(app);
8+
}
9+
10+
fn app() -> Element {
11+
rsx! {
12+
div {
13+
h1 { "Test SVG" }
14+
img { src: SVG }
15+
}
16+
}
17+
}

examples/todomvc/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ edition = "2024"
55
license.workspace = true
66
publish = false
77

8+
[lib]
9+
crate-type = ["cdylib"]
10+
811
[features]
912
default = ["vello"]
1013
vello = ["dioxus-native/vello"]

0 commit comments

Comments
 (0)