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));
|
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
|
/// opens DevTool window
|
||||||
pub fn devtool(&self) {
|
pub fn devtool(&self) {
|
||||||
let _ = self.proxy.send_event(DevTool);
|
let _ = self.proxy.send_event(DevTool);
|
||||||
@@ -148,6 +158,9 @@ pub enum UserWindowEvent {
|
|||||||
SetTitle(String),
|
SetTitle(String),
|
||||||
SetDecorations(bool),
|
SetDecorations(bool),
|
||||||
|
|
||||||
|
SetZoomLevel(f64),
|
||||||
|
|
||||||
|
Print,
|
||||||
DevTool,
|
DevTool,
|
||||||
|
|
||||||
Eval(String),
|
Eval(String),
|
||||||
@@ -191,11 +204,22 @@ pub(super) fn handler(
|
|||||||
SetTitle(content) => window.set_title(&content),
|
SetTitle(content) => window.set_title(&content),
|
||||||
SetDecorations(state) => window.set_decorations(state),
|
SetDecorations(state) => window.set_decorations(state),
|
||||||
|
|
||||||
DevTool => {}
|
SetZoomLevel(scale_factor) => webview.zoom(scale_factor),
|
||||||
|
|
||||||
Eval(code) => webview
|
Print => {
|
||||||
.evaluate_script(code.as_str())
|
if let Err(e) = webview.print() {
|
||||||
.expect("eval shouldn't panic"),
|
// 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