Browse Source

fix: borderless example

mrxiaozhuox 3 years ago
parent
commit
62f8e71f7f
3 changed files with 35 additions and 5 deletions
  1. 3 3
      examples/borderless.rs
  2. 15 1
      packages/desktop/src/desktop_context.rs
  3. 17 1
      packages/desktop/src/lib.rs

+ 3 - 3
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"
                 }
             }

+ 15 - 1
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<Fullscreen>) {
         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.

+ 17 - 1
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<P: 'static + Send>(
                             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<P: 'static + Send>(
                             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<Option<Fullscreen>>),
 
     CursorVisible(bool),
+    CursorGrab(bool),
 
     SetTitle(String),
     SetDecorations(bool),
+    SkipTaskBar(bool),
 }
 
 pub struct DesktopController {