From 5bdda6e3c5501f06ab08cb4b52ba6607112e9137 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Mon, 9 Sep 2024 15:01:50 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ libs/webview/include/webview.h | 29 +++++++++++++++++++++++++++++ webview.go | 11 +++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 66fd13c..f36daf8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ # Dependency directories (remove the comment below to include it) # vendor/ + +# IDEA +.idea diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 62ac14b..8e10805 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -265,6 +265,13 @@ WEBVIEW_API void webview_set_title(webview_t w, const char *title); WEBVIEW_API void webview_set_size(webview_t w, int width, int height, webview_hint_t hints); +/** + * Updates the drag of the native window. + * + * @param w The webview instance. + */ +WEBVIEW_API void webview_start_dragging(webview_t w); + /** * Navigates webview to the given URL. URL may be a properly encoded data URI. * @@ -1006,6 +1013,10 @@ if (status === 0) {\ set_size_impl(width, height, hints); } + void start_dragging() { + start_dragging_impl(); + } + void set_html(const std::string &html) { set_html_impl(html); } void init(const std::string &js) { init_impl(js); } void eval(const std::string &js) { eval_impl(js); } @@ -1020,6 +1031,7 @@ if (status === 0) {\ virtual void dispatch_impl(std::function f) = 0; virtual void set_title_impl(const std::string &title) = 0; virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; + virtual void start_dragging_impl() = 0; virtual void set_html_impl(const std::string &html) = 0; virtual void init_impl(const std::string &js) = 0; virtual void eval_impl(const std::string &js) = 0; @@ -1351,6 +1363,7 @@ class gtk_webkit_engine : public engine_base { gtk_window_set_geometry_hints(GTK_WINDOW(m_window), nullptr, &g, h); } } + void start_dragging_impl() override {} void navigate_impl(const std::string &url) override { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(m_webview), url.c_str()); @@ -1679,6 +1692,7 @@ class cocoa_wkwebview_engine : public engine_base { } objc::msg_send(m_window, "center"_sel); } + void start_dragging_impl() override {} void navigate_impl(const std::string &url) override { objc::autoreleasepool arp; @@ -3270,6 +3284,12 @@ class win32_edge_engine : public engine_base { } else { style |= (WS_THICKFRAME | WS_MAXIMIZEBOX); } + + //ADD ++++ 去掉标题栏 + //style &= ~WS_CAPTION; + style &= ~ (WS_CAPTION); + //ADD ==== + SetWindowLong(m_window, GWL_STYLE, style); if (hints == WEBVIEW_HINT_MAX) { @@ -3291,6 +3311,11 @@ class win32_edge_engine : public engine_base { } } + void start_dragging_impl() override { + ReleaseCapture(); + SendMessage(m_window, WM_SYSCOMMAND, SC_MOVE| HTCAPTION, 0); + } + void navigate_impl(const std::string &url) override { auto wurl = widen_string(url); m_webview->Navigate(wurl.c_str()); @@ -3552,6 +3577,10 @@ WEBVIEW_API void webview_set_size(webview_t w, int width, int height, static_cast(w)->set_size(width, height, hints); } +WEBVIEW_API void webview_start_dragging(webview_t w) { + static_cast(w)->start_dragging(); +} + WEBVIEW_API void webview_navigate(webview_t w, const char *url) { static_cast(w)->navigate(url); } diff --git a/webview.go b/webview.go index 7cf0d9f..3eb1f3a 100644 --- a/webview.go +++ b/webview.go @@ -25,12 +25,12 @@ void CgoWebViewUnbind(webview_t w, const char *name); */ import "C" import ( + "encoding/json" + "errors" _ "github.com/webview/webview_go/libs/mswebview2" _ "github.com/webview/webview_go/libs/mswebview2/include" _ "github.com/webview/webview_go/libs/webview" _ "github.com/webview/webview_go/libs/webview/include" - "encoding/json" - "errors" "reflect" "runtime" "sync" @@ -89,6 +89,9 @@ type WebView interface { // SetSize updates native window size. See Hint constants. SetSize(w int, h int, hint Hint) + // StartDragging Drag native window. + StartDragging() + // Navigate navigates webview to the given URL. URL may be a properly encoded data. // URI. Examples: // w.Navigate("https://github.com/webview/webview") @@ -196,6 +199,10 @@ func (w *webview) SetSize(width int, height int, hint Hint) { C.webview_set_size(w.w, C.int(width), C.int(height), C.webview_hint_t(hint)) } +func (w *webview) StartDragging() { + C.webview_start_dragging(w.w) +} + func (w *webview) Init(js string) { s := C.CString(js) defer C.free(unsafe.Pointer(s)) From e70734f3ecca27819c27fece6242d893136f38eb Mon Sep 17 00:00:00 2001 From: huazhimeng <2435965705@qq.com> Date: Mon, 9 Sep 2024 16:55:00 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E3=80=90add=E3=80=91show=20hide=20title?= =?UTF-8?q?=20bar.=20=20=20=20=20=20=20example:=20=20=20=20=20=20=20go:=20?= =?UTF-8?q?`w.SetTitleBar(false)`=20=E3=80=90add=E3=80=91hide=20title=20ba?= =?UTF-8?q?r,bind=20`StartDragging`=20function=20to=20Drag=20window.=20=20?= =?UTF-8?q?=20=20=20=20=20example:=20=20=20=20=20=20=20go:=20`=5F=20=3D=20?= =?UTF-8?q?w.Bind("dragging",=20w.StartDragging)`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit example: html:`
My Dragging Title Bar
` js:` document.addEventListener("DOMContentLoaded", ()=>{ document.querySelector("#my_title_bar").addEventListener("mousemove", event => window.dragging()); }); ` --- libs/webview/include/webview.h | 38 +++++++++++++++++++++++++++++----- webview.go | 7 +++++++ 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 8e10805..6dfa3ef 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -254,6 +254,14 @@ WEBVIEW_API void *webview_get_native_handle(webview_t w, */ WEBVIEW_API void webview_set_title(webview_t w, const char *title); +/** + * Updates the title bar of the native window. + * + * @param w The webview instance. + * @param title The title bar Show or hide. + */ +WEBVIEW_API void webview_set_title_bar(webview_t w, int b); + /** * Updates the size of the native window. * @@ -1008,6 +1016,7 @@ if (status === 0) {\ void terminate() { terminate_impl(); } void dispatch(std::function f) { dispatch_impl(f); } void set_title(const std::string &title) { set_title_impl(title); } + void set_title_bar(int b) { set_title_bar_impl(b); } void set_size(int width, int height, webview_hint_t hints) { set_size_impl(width, height, hints); @@ -1030,6 +1039,7 @@ if (status === 0) {\ virtual void terminate_impl() = 0; virtual void dispatch_impl(std::function f) = 0; virtual void set_title_impl(const std::string &title) = 0; + virtual void set_title_bar_impl(int b) = 0; virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; virtual void start_dragging_impl() = 0; virtual void set_html_impl(const std::string &html) = 0; @@ -1347,6 +1357,8 @@ class gtk_webkit_engine : public engine_base { gtk_window_set_title(GTK_WINDOW(m_window), title.c_str()); } + void set_title_bar_impl(int b) override {} + void set_size_impl(int width, int height, webview_hint_t hints) override { gtk_window_set_resizable(GTK_WINDOW(m_window), hints != WEBVIEW_HINT_FIXED); if (hints == WEBVIEW_HINT_NONE) { @@ -1668,6 +1680,9 @@ class cocoa_wkwebview_engine : public engine_base { "stringWithUTF8String:"_sel, title.c_str())); } + + void set_title_bar_impl(int b) override {} + void set_size_impl(int width, int height, webview_hint_t hints) override { objc::autoreleasepool arp; @@ -3277,6 +3292,19 @@ class win32_edge_engine : public engine_base { SetWindowTextW(m_window, widen_string(title).c_str()); } + + void set_title_bar_impl(int b) override { + auto style = GetWindowLong(m_window, GWL_STYLE); + if (b == 0){ + style &= ~(WS_CAPTION); + }else{ + style |= (WS_CAPTION); + } + SetWindowLong(m_window, GWL_STYLE, style); + SetWindowPos(m_window, nullptr, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + } + void set_size_impl(int width, int height, webview_hint_t hints) override { auto style = GetWindowLong(m_window, GWL_STYLE); if (hints == WEBVIEW_HINT_FIXED) { @@ -3285,11 +3313,6 @@ class win32_edge_engine : public engine_base { style |= (WS_THICKFRAME | WS_MAXIMIZEBOX); } - //ADD ++++ 去掉标题栏 - //style &= ~WS_CAPTION; - style &= ~ (WS_CAPTION); - //ADD ==== - SetWindowLong(m_window, GWL_STYLE, style); if (hints == WEBVIEW_HINT_MAX) { @@ -3572,6 +3595,11 @@ WEBVIEW_API void webview_set_title(webview_t w, const char *title) { static_cast(w)->set_title(title); } + +WEBVIEW_API void webview_set_title_bar(webview_t w, int b) { + static_cast(w)->set_title_bar(b); +} + WEBVIEW_API void webview_set_size(webview_t w, int width, int height, webview_hint_t hints) { static_cast(w)->set_size(width, height, hints); diff --git a/webview.go b/webview.go index 3eb1f3a..9039e18 100644 --- a/webview.go +++ b/webview.go @@ -86,6 +86,9 @@ type WebView interface { // thread. SetTitle(title string) + // SetTitleBar show or hide title bar + SetTitleBar(b bool) + // SetSize updates native window size. See Hint constants. SetSize(w int, h int, hint Hint) @@ -195,6 +198,10 @@ func (w *webview) SetTitle(title string) { C.webview_set_title(w.w, s) } +func (w *webview) SetTitleBar(b bool) { + C.webview_set_title_bar(w.w, boolToInt(b)) +} + func (w *webview) SetSize(width int, height int, hint Hint) { C.webview_set_size(w.w, C.int(width), C.int(height), C.webview_hint_t(hint)) } From c9614818662247b6fde0f86bc7dd978c71932bc4 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Tue, 10 Sep 2024 11:11:40 +0800 Subject: [PATCH 03/12] set always on top --- libs/webview/include/webview.h | 23 +++++++++++++++++++++++ webview.go | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 6dfa3ef..4ba6430 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -280,6 +280,13 @@ WEBVIEW_API void webview_set_size(webview_t w, int width, int height, */ WEBVIEW_API void webview_start_dragging(webview_t w); +/** + * Set Always On Top of the native window. + * + * @param w The webview instance. + */ +WEBVIEW_API void webview_set_always_on_top(webview_t w); + /** * Navigates webview to the given URL. URL may be a properly encoded data URI. * @@ -1026,6 +1033,10 @@ if (status === 0) {\ start_dragging_impl(); } + void set_always_on_top() { + set_always_on_top_impl(); + } + void set_html(const std::string &html) { set_html_impl(html); } void init(const std::string &js) { init_impl(js); } void eval(const std::string &js) { eval_impl(js); } @@ -1042,6 +1053,7 @@ if (status === 0) {\ virtual void set_title_bar_impl(int b) = 0; virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; virtual void start_dragging_impl() = 0; + virtual void set_always_on_top_impl() = 0; virtual void set_html_impl(const std::string &html) = 0; virtual void init_impl(const std::string &js) = 0; virtual void eval_impl(const std::string &js) = 0; @@ -1377,6 +1389,8 @@ class gtk_webkit_engine : public engine_base { } void start_dragging_impl() override {} + void set_always_on_top_impl() override {} + void navigate_impl(const std::string &url) override { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(m_webview), url.c_str()); } @@ -1708,6 +1722,7 @@ class cocoa_wkwebview_engine : public engine_base { objc::msg_send(m_window, "center"_sel); } void start_dragging_impl() override {} + void set_always_on_top_impl() override {} void navigate_impl(const std::string &url) override { objc::autoreleasepool arp; @@ -3339,6 +3354,10 @@ class win32_edge_engine : public engine_base { SendMessage(m_window, WM_SYSCOMMAND, SC_MOVE| HTCAPTION, 0); } + void set_always_on_top_impl() override { + SetWindowPos(m_window, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + } + void navigate_impl(const std::string &url) override { auto wurl = widen_string(url); m_webview->Navigate(wurl.c_str()); @@ -3609,6 +3628,10 @@ WEBVIEW_API void webview_start_dragging(webview_t w) { static_cast(w)->start_dragging(); } +WEBVIEW_API void webview_set_always_on_top(webview_t w) { + static_cast(w)->set_always_on_top(); +} + WEBVIEW_API void webview_navigate(webview_t w, const char *url) { static_cast(w)->navigate(url); } diff --git a/webview.go b/webview.go index 9039e18..03a8c74 100644 --- a/webview.go +++ b/webview.go @@ -210,6 +210,10 @@ func (w *webview) StartDragging() { C.webview_start_dragging(w.w) } +func (w *webview) SetAlwaysOnTop() { + C.webview_set_always_on_top(w.w) +} + func (w *webview) Init(js string) { s := C.CString(js) defer C.free(unsafe.Pointer(s)) From 82dd41c40d98a7ea6cb2180fc5e5f2b426685aab Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Tue, 10 Sep 2024 11:22:09 +0800 Subject: [PATCH 04/12] set always on top --- webview.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/webview.go b/webview.go index 03a8c74..893bce5 100644 --- a/webview.go +++ b/webview.go @@ -95,6 +95,9 @@ type WebView interface { // StartDragging Drag native window. StartDragging() + // SetAlwaysOnTop set always on top native window. + SetAlwaysOnTop() + // Navigate navigates webview to the given URL. URL may be a properly encoded data. // URI. Examples: // w.Navigate("https://github.com/webview/webview") From 651542587751139e3bc6a242c631c1e5fe94ebf9 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Tue, 10 Sep 2024 11:30:15 +0800 Subject: [PATCH 05/12] set always on top --- libs/webview/include/webview.h | 20 ++++++++++---------- webview.go | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 4ba6430..42e914f 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -285,7 +285,7 @@ WEBVIEW_API void webview_start_dragging(webview_t w); * * @param w The webview instance. */ -WEBVIEW_API void webview_set_always_on_top(webview_t w); +WEBVIEW_API void webview_set_always_on_top(webview_t w,int b); /** * Navigates webview to the given URL. URL may be a properly encoded data URI. @@ -1033,8 +1033,8 @@ if (status === 0) {\ start_dragging_impl(); } - void set_always_on_top() { - set_always_on_top_impl(); + void set_always_on_top(int b) { + set_always_on_top_impl(b); } void set_html(const std::string &html) { set_html_impl(html); } @@ -1053,7 +1053,7 @@ if (status === 0) {\ virtual void set_title_bar_impl(int b) = 0; virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; virtual void start_dragging_impl() = 0; - virtual void set_always_on_top_impl() = 0; + virtual void set_always_on_top_impl(int b) = 0; virtual void set_html_impl(const std::string &html) = 0; virtual void init_impl(const std::string &js) = 0; virtual void eval_impl(const std::string &js) = 0; @@ -1389,7 +1389,7 @@ class gtk_webkit_engine : public engine_base { } void start_dragging_impl() override {} - void set_always_on_top_impl() override {} + void set_always_on_top_impl(int b) override {} void navigate_impl(const std::string &url) override { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(m_webview), url.c_str()); @@ -1722,7 +1722,7 @@ class cocoa_wkwebview_engine : public engine_base { objc::msg_send(m_window, "center"_sel); } void start_dragging_impl() override {} - void set_always_on_top_impl() override {} + void set_always_on_top_impl(int b) override {} void navigate_impl(const std::string &url) override { objc::autoreleasepool arp; @@ -3354,8 +3354,8 @@ class win32_edge_engine : public engine_base { SendMessage(m_window, WM_SYSCOMMAND, SC_MOVE| HTCAPTION, 0); } - void set_always_on_top_impl() override { - SetWindowPos(m_window, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + void set_always_on_top_impl(int b) override { + SetWindowPos(m_window, b == 0 ? HWND_NOTOPMOST : HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } void navigate_impl(const std::string &url) override { @@ -3628,8 +3628,8 @@ WEBVIEW_API void webview_start_dragging(webview_t w) { static_cast(w)->start_dragging(); } -WEBVIEW_API void webview_set_always_on_top(webview_t w) { - static_cast(w)->set_always_on_top(); +WEBVIEW_API void webview_set_always_on_top(webview_t w, int b) { + static_cast(w)->set_always_on_top(b); } WEBVIEW_API void webview_navigate(webview_t w, const char *url) { diff --git a/webview.go b/webview.go index 893bce5..f405abb 100644 --- a/webview.go +++ b/webview.go @@ -96,7 +96,7 @@ type WebView interface { StartDragging() // SetAlwaysOnTop set always on top native window. - SetAlwaysOnTop() + SetAlwaysOnTop(b bool) // Navigate navigates webview to the given URL. URL may be a properly encoded data. // URI. Examples: @@ -213,8 +213,8 @@ func (w *webview) StartDragging() { C.webview_start_dragging(w.w) } -func (w *webview) SetAlwaysOnTop() { - C.webview_set_always_on_top(w.w) +func (w *webview) SetAlwaysOnTop(b bool) { + C.webview_set_always_on_top(w.w, boolToInt(b)) } func (w *webview) Init(js string) { From 3cee49df99c95ed8110d7a08da4c38c87a09dad8 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 11:53:05 +0800 Subject: [PATCH 06/12] set window min max unmax --- libs/webview/include/webview.h | 66 ++++++++++++++++++++++++++++++++++ webview.go | 21 +++++++++++ 2 files changed, 87 insertions(+) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 42e914f..0260a30 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -262,6 +262,27 @@ WEBVIEW_API void webview_set_title(webview_t w, const char *title); */ WEBVIEW_API void webview_set_title_bar(webview_t w, int b); +/** + * Set the native window maximize. + * + * @param w The webview instance. + */ +WEBVIEW_API void webview_set_maximize(webview_t w); + +/** + * Set the native window un maximize. + * + * @param w The webview instance. + */ +WEBVIEW_API void webview_set_un_maximize(webview_t w); + +/** + * Set the native window minimize. + * + * @param w The webview instance. + */ +WEBVIEW_API void webview_set_minimize(webview_t w); + /** * Updates the size of the native window. * @@ -1024,6 +1045,9 @@ if (status === 0) {\ void dispatch(std::function f) { dispatch_impl(f); } void set_title(const std::string &title) { set_title_impl(title); } void set_title_bar(int b) { set_title_bar_impl(b); } + void set_maximize() { set_maximize_impl(); } + void set_un_maximize() { set_un_maximize_impl(); } + void set_minimize() { set_minimize_impl(); } void set_size(int width, int height, webview_hint_t hints) { set_size_impl(width, height, hints); @@ -1051,6 +1075,9 @@ if (status === 0) {\ virtual void dispatch_impl(std::function f) = 0; virtual void set_title_impl(const std::string &title) = 0; virtual void set_title_bar_impl(int b) = 0; + virtual void set_maximize_impl() = 0; + virtual void set_un_maximize_impl() = 0; + virtual void set_minimize_impl() = 0; virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; virtual void start_dragging_impl() = 0; virtual void set_always_on_top_impl(int b) = 0; @@ -1371,6 +1398,12 @@ class gtk_webkit_engine : public engine_base { void set_title_bar_impl(int b) override {} + void set_maximize_impl() override {} + + void set_un_maximize_impl() override {} + + void set_minimize_impl() override {} + void set_size_impl(int width, int height, webview_hint_t hints) override { gtk_window_set_resizable(GTK_WINDOW(m_window), hints != WEBVIEW_HINT_FIXED); if (hints == WEBVIEW_HINT_NONE) { @@ -1697,6 +1730,12 @@ class cocoa_wkwebview_engine : public engine_base { void set_title_bar_impl(int b) override {} + void set_maximize_impl() override {} + + void set_un_maximize_impl() override {} + + void set_minimize_impl() override {} + void set_size_impl(int width, int height, webview_hint_t hints) override { objc::autoreleasepool arp; @@ -3320,6 +3359,21 @@ class win32_edge_engine : public engine_base { SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); } + void set_maximize_impl() override { + ShowWindow(m_widget, SW_MAXIMIZE); + UpdateWindow(m_widget); + } + + void set_un_maximize_impl() override { + ShowWindow(m_widget, SW_RESTORE); + UpdateWindow(m_widget); + } + + void set_minimize_impl() override { + ShowWindow(m_widget, SW_MINIMIZE); + UpdateWindow(m_widget); + } + void set_size_impl(int width, int height, webview_hint_t hints) override { auto style = GetWindowLong(m_window, GWL_STYLE); if (hints == WEBVIEW_HINT_FIXED) { @@ -3619,6 +3673,18 @@ WEBVIEW_API void webview_set_title_bar(webview_t w, int b) { static_cast(w)->set_title_bar(b); } +WEBVIEW_API void webview_set_maximize(webview_t w) { + static_cast(w)->set_maximize(); +} + +WEBVIEW_API void webview_set_un_maximize(webview_t w) { + static_cast(w)->set_un_maximize(); +} + +WEBVIEW_API void webview_set_minimize(webview_t w) { + static_cast(w)->set_minimize(); +} + WEBVIEW_API void webview_set_size(webview_t w, int width, int height, webview_hint_t hints) { static_cast(w)->set_size(width, height, hints); diff --git a/webview.go b/webview.go index f405abb..82bb2f2 100644 --- a/webview.go +++ b/webview.go @@ -89,6 +89,15 @@ type WebView interface { // SetTitleBar show or hide title bar SetTitleBar(b bool) + // SetMaximize set native window maximize + SetMaximize() + + // SetUnMaximize set native window unmaximize + SetUnMaximize() + + // SetMinimize set native window minimize + SetMinimize() + // SetSize updates native window size. See Hint constants. SetSize(w int, h int, hint Hint) @@ -205,6 +214,18 @@ func (w *webview) SetTitleBar(b bool) { C.webview_set_title_bar(w.w, boolToInt(b)) } +func (w *webview) SetMaximize() { + C.webview_set_maximize(w.w) +} + +func (w *webview) SetUnMaximize() { + C.webview_set_un_maximize(w.w) +} + +func (w *webview) SetMinimize() { + C.webview_set_minimize(w.w) +} + func (w *webview) SetSize(width int, height int, hint Hint) { C.webview_set_size(w.w, C.int(width), C.int(height), C.webview_hint_t(hint)) } From a0160c877b738ad35072cab99394862cec588c8f Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 12:36:18 +0800 Subject: [PATCH 07/12] set window min max unmax --- libs/webview/include/webview.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 0260a30..f6a769a 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -3360,18 +3360,18 @@ class win32_edge_engine : public engine_base { } void set_maximize_impl() override { - ShowWindow(m_widget, SW_MAXIMIZE); - UpdateWindow(m_widget); + ShowWindow(m_window, SW_MAXIMIZE); + UpdateWindow(m_window); } void set_un_maximize_impl() override { - ShowWindow(m_widget, SW_RESTORE); - UpdateWindow(m_widget); + ShowWindow(m_window, SW_RESTORE); + UpdateWindow(m_window); } void set_minimize_impl() override { - ShowWindow(m_widget, SW_MINIMIZE); - UpdateWindow(m_widget); + ShowWindow(m_window, SW_MINIMIZE); + UpdateWindow(m_window); } void set_size_impl(int width, int height, webview_hint_t hints) override { From 4670bd65568e7cd60e6ba1cbb9bd5f2f3b70779f Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 13:17:01 +0800 Subject: [PATCH 08/12] set window min max unmax --- libs/webview/include/webview.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index f6a769a..7d0e226 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -3360,18 +3360,15 @@ class win32_edge_engine : public engine_base { } void set_maximize_impl() override { - ShowWindow(m_window, SW_MAXIMIZE); - UpdateWindow(m_window); + PostMessage(m_window, WM_SYSCOMMAND, SC_MAXIMIZE, 0); } void set_un_maximize_impl() override { - ShowWindow(m_window, SW_RESTORE); - UpdateWindow(m_window); + PostMessage(mainWindow, WM_SYSCOMMAND, SC_RESTORE, 0); } void set_minimize_impl() override { - ShowWindow(m_window, SW_MINIMIZE); - UpdateWindow(m_window); + PostMessage(mainWindow, WM_SYSCOMMAND, SW_MINIMIZE, 0); } void set_size_impl(int width, int height, webview_hint_t hints) override { From d9c02b1e02cc4c25ccb3d37310d6d24aeaf25ba0 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 13:19:05 +0800 Subject: [PATCH 09/12] set window min max unmax --- libs/webview/include/webview.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 7d0e226..6420c23 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -3364,11 +3364,11 @@ class win32_edge_engine : public engine_base { } void set_un_maximize_impl() override { - PostMessage(mainWindow, WM_SYSCOMMAND, SC_RESTORE, 0); + PostMessage(m_window, WM_SYSCOMMAND, SC_RESTORE, 0); } void set_minimize_impl() override { - PostMessage(mainWindow, WM_SYSCOMMAND, SW_MINIMIZE, 0); + PostMessage(m_window, WM_SYSCOMMAND, SW_MINIMIZE, 0); } void set_size_impl(int width, int height, webview_hint_t hints) override { From b3fc2c648660176642e08e8dab94c081fd82804b Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 13:25:54 +0800 Subject: [PATCH 10/12] set window min max unmax --- libs/webview/include/webview.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 6420c23..76d255c 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -3368,7 +3368,7 @@ class win32_edge_engine : public engine_base { } void set_minimize_impl() override { - PostMessage(m_window, WM_SYSCOMMAND, SW_MINIMIZE, 0); + PostMessage(m_window, WM_SYSCOMMAND, SC_MINIMIZE, 0); } void set_size_impl(int width, int height, webview_hint_t hints) override { From 19b8d9292c086a96418e781c96b903fb0d59518b Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 18:26:21 +0800 Subject: [PATCH 11/12] set resizable --- libs/webview/include/webview.h | 32 ++++++++++++++++++++++++++++++-- webview.go | 7 +++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index 76d255c..aaf6b93 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -305,8 +305,16 @@ WEBVIEW_API void webview_start_dragging(webview_t w); * Set Always On Top of the native window. * * @param w The webview instance. + * @param b bool. */ WEBVIEW_API void webview_set_always_on_top(webview_t w,int b); +/** + * Set Always On Top of the native window. + * + * @param w The webview instance. + * @param b bool. + */ +WEBVIEW_API void webview_set_resizable(webview_t w,int b); /** * Navigates webview to the given URL. URL may be a properly encoded data URI. @@ -1061,6 +1069,10 @@ if (status === 0) {\ set_always_on_top_impl(b); } + void set_resizable(int b) { + set_resizable_impl(b); + } + void set_html(const std::string &html) { set_html_impl(html); } void init(const std::string &js) { init_impl(js); } void eval(const std::string &js) { eval_impl(js); } @@ -1081,6 +1093,7 @@ if (status === 0) {\ virtual void set_size_impl(int width, int height, webview_hint_t hints) = 0; virtual void start_dragging_impl() = 0; virtual void set_always_on_top_impl(int b) = 0; + virtual void set_resizable_impl(int b) = 0; virtual void set_html_impl(const std::string &html) = 0; virtual void init_impl(const std::string &js) = 0; virtual void eval_impl(const std::string &js) = 0; @@ -1423,6 +1436,7 @@ class gtk_webkit_engine : public engine_base { void start_dragging_impl() override {} void set_always_on_top_impl(int b) override {} + void set_resizable_impl(int b) override {} void navigate_impl(const std::string &url) override { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(m_webview), url.c_str()); @@ -1762,6 +1776,7 @@ class cocoa_wkwebview_engine : public engine_base { } void start_dragging_impl() override {} void set_always_on_top_impl(int b) override {} + void set_resizable_impl(int b) override {} void navigate_impl(const std::string &url) override { objc::autoreleasepool arp; @@ -3350,9 +3365,9 @@ class win32_edge_engine : public engine_base { void set_title_bar_impl(int b) override { auto style = GetWindowLong(m_window, GWL_STYLE); if (b == 0){ - style &= ~(WS_CAPTION); + style &= ~WS_CAPTION; }else{ - style |= (WS_CAPTION); + style |= WS_CAPTION; } SetWindowLong(m_window, GWL_STYLE, style); SetWindowPos(m_window, nullptr, 0, 0, 0, 0, @@ -3409,6 +3424,16 @@ class win32_edge_engine : public engine_base { SetWindowPos(m_window, b == 0 ? HWND_NOTOPMOST : HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } + void set_resizable_impl(int b) override { + auto style = GetWindowLong(m_window, GWL_STYLE); + if (is_resizable_ == 0) { + style &= ~WS_THICKFRAME; + } else { + style |= WS_THICKFRAME; + } + ::SetWindowLong(m_window, GWL_STYLE, style); + } + void navigate_impl(const std::string &url) override { auto wurl = widen_string(url); m_webview->Navigate(wurl.c_str()); @@ -3694,6 +3719,9 @@ WEBVIEW_API void webview_start_dragging(webview_t w) { WEBVIEW_API void webview_set_always_on_top(webview_t w, int b) { static_cast(w)->set_always_on_top(b); } +WEBVIEW_API void webview_set_resizable(webview_t w, int b) { + static_cast(w)->set_resizable(b); +} WEBVIEW_API void webview_navigate(webview_t w, const char *url) { static_cast(w)->navigate(url); diff --git a/webview.go b/webview.go index 82bb2f2..c39c37d 100644 --- a/webview.go +++ b/webview.go @@ -107,6 +107,9 @@ type WebView interface { // SetAlwaysOnTop set always on top native window. SetAlwaysOnTop(b bool) + // SetResizable set resizable native window. + SetResizable(b bool) + // Navigate navigates webview to the given URL. URL may be a properly encoded data. // URI. Examples: // w.Navigate("https://github.com/webview/webview") @@ -238,6 +241,10 @@ func (w *webview) SetAlwaysOnTop(b bool) { C.webview_set_always_on_top(w.w, boolToInt(b)) } +func (w *webview) SetResizable(b bool) { + C.webview_set_resizable(w.w, boolToInt(b)) +} + func (w *webview) Init(js string) { s := C.CString(js) defer C.free(unsafe.Pointer(s)) From 4c3095afc1fa8ade40df412aeb8e717c8fdb2346 Mon Sep 17 00:00:00 2001 From: huazhimeng <2902151499@qq.com> Date: Thu, 12 Sep 2024 18:43:09 +0800 Subject: [PATCH 12/12] set resizable --- libs/webview/include/webview.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/webview/include/webview.h b/libs/webview/include/webview.h index aaf6b93..8e980b6 100644 --- a/libs/webview/include/webview.h +++ b/libs/webview/include/webview.h @@ -3426,7 +3426,7 @@ class win32_edge_engine : public engine_base { void set_resizable_impl(int b) override { auto style = GetWindowLong(m_window, GWL_STYLE); - if (is_resizable_ == 0) { + if (b == 0) { style &= ~WS_THICKFRAME; } else { style |= WS_THICKFRAME;