Merge pull request #405 from mrxiaozhuox/master
Add some new window api for desktop
This commit is contained in:
2 files changed
+51
-4
No files matched your search
@@ -0,0 +1,23 @@
|
||||
use dioxus::desktop::use_window;
|
||||
use dioxus::prelude::*;
|
||||
|
||||
fn main() {
|
||||
dioxus::desktop::launch(app);
|
||||
}
|
||||
|
||||
fn app(cx: Scope) -> Element {
|
||||
let window = use_window(&cx);
|
||||
|
||||
let level = use_state(&cx, || 1.0);
|
||||
cx.render(rsx! {
|
||||
input {
|
||||
r#type: "number",
|
||||
value: "{level}",
|
||||
oninput: |e| {
|
||||
let num = e.value.parse::<f64>().unwrap_or(1.0);
|
||||
level.set(num);
|
||||
window.set_zoom_level(num);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -115,6 +115,16 @@ impl DesktopContext {
|
||||
let _ = self.proxy.send_event(SetDecorations(decoration));
|
||||
}
|
||||
|
||||
/// set window zoom level
|
||||
pub fn set_zoom_level(&self, scale_factor: f64) {
|
||||
let _ = self.proxy.send_event(SetZoomLevel(scale_factor));
|
||||
}
|
||||
|
||||
/// launch print modal
|
||||
pub fn print(&self) {
|
||||
let _ = self.proxy.send_event(Print);
|
||||
}
|
||||
|
||||
/// opens DevTool window
|
||||
pub fn devtool(&self) {
|
||||
let _ = self.proxy.send_event(DevTool);
|
||||
@@ -148,6 +158,9 @@ pub enum UserWindowEvent {
|
||||
SetTitle(String),
|
||||
SetDecorations(bool),
|
||||
|
||||
SetZoomLevel(f64),
|
||||
|
||||
Print,
|
||||
DevTool,
|
||||
|
||||
Eval(String),
|
||||
@@ -191,11 +204,22 @@ pub(super) fn handler(
|
||||
SetTitle(content) => window.set_title(&content),
|
||||
SetDecorations(state) => window.set_decorations(state),
|
||||
|
||||
DevTool => {}
|
||||
SetZoomLevel(scale_factor) => webview.zoom(scale_factor),
|
||||
|
||||
Eval(code) => webview
|
||||
.evaluate_script(code.as_str())
|
||||
.expect("eval shouldn't panic"),
|
||||
Print => {
|
||||
if let Err(e) = webview.print() {
|
||||
// we can't panic this error.
|
||||
log::warn!("Open print modal failed: {e}");
|
||||
}
|
||||
}
|
||||
DevTool => webview.open_devtools(),
|
||||
|
||||
Eval(code) => {
|
||||
if let Err(e) = webview.evaluate_script(code.as_str()) {
|
||||
// we can't panic this error.
|
||||
log::warn!("Eval script error: {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user