From 62f8e71f7f36add69d041d22138dbc0746c64b7a Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Fri, 11 Feb 2022 09:05:32 +0800 Subject: [PATCH] fix: borderless example --- examples/borderless.rs | 6 +++--- packages/desktop/src/desktop_context.rs | 16 +++++++++++++++- packages/desktop/src/lib.rs | 18 +++++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/examples/borderless.rs b/examples/borderless.rs index d52e9fb5a..3122c91fa 100644 --- a/examples/borderless.rs +++ b/examples/borderless.rs @@ -13,7 +13,7 @@ fn app(cx: Scope) -> Element { link { href:"https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css", rel:"stylesheet" } header { class: "text-gray-400 bg-gray-900 body-font", - onmousedown: move |_| window.drag(), + onmousedown: move |_| window.drag_window(), div { class: "container mx-auto flex flex-wrap p-5 flex-col md:flex-row items-center", a { class: "flex title-font font-medium items-center text-white mb-4 md:mb-0", @@ -23,13 +23,13 @@ fn app(cx: Scope) -> Element { button { class: "inline-flex items-center bg-gray-800 border-0 py-1 px-3 focus:outline-none hover:bg-gray-700 rounded text-base mt-4 md:mt-0", onmousedown: |evt| evt.cancel_bubble(), - onclick: move |_| window.minimize(true), + onclick: move |_| window.set_minimized(true), "Minimize" } button { class: "inline-flex items-center bg-gray-800 border-0 py-1 px-3 focus:outline-none hover:bg-gray-700 rounded text-base mt-4 md:mt-0", onmousedown: |evt| evt.cancel_bubble(), - onclick: move |_| window.close(), + onclick: move |_| window.close_window(), "Close" } } diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index 2f2c41d28..c3f193629 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -48,6 +48,7 @@ impl DesktopContext { let _ = self.proxy.send_event(UserWindowEvent::Maximize(maximized)); } + /// set window visible or not pub fn set_visible(&self, visible: bool) { let _ = self.proxy.send_event(UserWindowEvent::Visible(visible)); } @@ -62,6 +63,7 @@ impl DesktopContext { let _ = self.proxy.send_event(UserWindowEvent::FocusWindow); } + /// change window to fullscreen pub fn set_fullscreen(&self, fullscreen: Option) { let _ = self .proxy @@ -73,16 +75,23 @@ impl DesktopContext { let _ = self.proxy.send_event(UserWindowEvent::Resizable(resizable)); } + /// set the window always on top pub fn set_always_on_top(&self, top: bool) { let _ = self.proxy.send_event(UserWindowEvent::AlwaysOnTop(top)); } + // set cursor visible or not pub fn set_cursor_visible(&self, visible: bool) { let _ = self .proxy .send_event(UserWindowEvent::CursorVisible(visible)); } + // set cursor grab + pub fn set_cursor_grab(&self, grab: bool) { + let _ = self.proxy.send_event(UserWindowEvent::CursorGrab(grab)); + } + /// set window title pub fn set_title(&self, title: &str) { let _ = self @@ -90,12 +99,17 @@ impl DesktopContext { .send_event(UserWindowEvent::SetTitle(String::from(title))); } - /// hide the menu + /// change window to borderless pub fn set_decorations(&self, decoration: bool) { let _ = self .proxy .send_event(UserWindowEvent::SetDecorations(decoration)); } + + /// skip/hidden the taskbar icon + pub fn set_skip_taskbar(&self, skip: bool) { + let _ = self.proxy.send_event(UserWindowEvent::SkipTaskBar(skip)); + } } /// use this function can get the `DesktopContext` context. diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index a0344c75a..1835e6876 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -72,7 +72,9 @@ use tao::{ pub use wry; pub use wry::application as tao; use wry::{ - application::{event_loop::EventLoopProxy, window::Fullscreen}, + application::{ + event_loop::EventLoopProxy, platform::windows::WindowExtWindows, window::Fullscreen, + }, webview::RpcRequest, webview::{WebView, WebViewBuilder}, }; @@ -352,6 +354,12 @@ pub fn launch_with_props( window.set_cursor_visible(state); } } + UserWindowEvent::CursorGrab(state) => { + for webview in desktop.webviews.values() { + let window = webview.window(); + let _ = window.set_cursor_grab(state); + } + } UserWindowEvent::SetTitle(content) => { for webview in desktop.webviews.values() { @@ -365,6 +373,12 @@ pub fn launch_with_props( window.set_decorations(state); } } + UserWindowEvent::SkipTaskBar(state) => { + for webview in desktop.webviews.values() { + let window = webview.window(); + window.set_skip_taskbar(state); + } + } } } Event::MainEventsCleared => {} @@ -390,9 +404,11 @@ pub enum UserWindowEvent { Fullscreen(Box>), CursorVisible(bool), + CursorGrab(bool), SetTitle(String), SetDecorations(bool), + SkipTaskBar(bool), } pub struct DesktopController {