mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
Support GPU acceleration settings on Windows & Linux (#2266)
* support GPU acceleration settings Window & Linux * fix linux empty option crash * fix change linux gpu policy switch case * add PR to changelog
This commit is contained in:
@@ -214,7 +214,7 @@ gboolean close_button_pressed(GtkWidget *widget, GdkEvent *event, void* data)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
GtkWidget* setupWebview(void* contentManager, GtkWindow* window, int hideWindowOnClose) {
|
||||
GtkWidget* setupWebview(void* contentManager, GtkWindow* window, int hideWindowOnClose, int gpuPolicy) {
|
||||
GtkWidget* webview = webkit_web_view_new_with_user_content_manager((WebKitUserContentManager*)contentManager);
|
||||
//gtk_container_add(GTK_CONTAINER(window), webview);
|
||||
WebKitWebContext *context = webkit_web_context_get_default();
|
||||
@@ -228,6 +228,20 @@ GtkWidget* setupWebview(void* contentManager, GtkWindow* window, int hideWindowO
|
||||
|
||||
WebKitSettings *settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview));
|
||||
webkit_settings_set_user_agent_with_application_details(settings, "wails.io", "");
|
||||
|
||||
switch (gpuPolicy) {
|
||||
case 0:
|
||||
webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_ALWAYS);
|
||||
break;
|
||||
case 1:
|
||||
webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND);
|
||||
break;
|
||||
case 2:
|
||||
webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER);
|
||||
break;
|
||||
default:
|
||||
webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND);
|
||||
}
|
||||
return webview;
|
||||
}
|
||||
|
||||
@@ -706,7 +720,17 @@ func NewWindow(appoptions *options.App, debug bool) *Window {
|
||||
C.webkit_user_content_manager_register_script_message_handler(result.cWebKitUserContentManager(), external)
|
||||
C.setupInvokeSignal(result.contentManager)
|
||||
|
||||
webview := C.setupWebview(result.contentManager, result.asGTKWindow(), bool2Cint(appoptions.HideWindowOnClose))
|
||||
var webviewGpuPolicy int
|
||||
if appoptions.Linux != nil {
|
||||
webviewGpuPolicy = int(appoptions.Linux.WebviewGpuPolicy)
|
||||
}
|
||||
|
||||
webview := C.setupWebview(
|
||||
result.contentManager,
|
||||
result.asGTKWindow(),
|
||||
bool2Cint(appoptions.HideWindowOnClose),
|
||||
C.int(webviewGpuPolicy),
|
||||
)
|
||||
result.webview = unsafe.Pointer(webview)
|
||||
buttonPressedName := C.CString("button-press-event")
|
||||
defer C.free(unsafe.Pointer(buttonPressedName))
|
||||
|
||||
@@ -412,7 +412,12 @@ func (f *Frontend) setupChromium() {
|
||||
if opts := f.frontendOptions.Windows; opts != nil {
|
||||
chromium.DataPath = opts.WebviewUserDataPath
|
||||
chromium.BrowserPath = opts.WebviewBrowserPath
|
||||
|
||||
if opts.WebviewGpuIsDisabled {
|
||||
chromium.AdditionalBrowserArgs = append(chromium.AdditionalBrowserArgs, "--disable-gpu")
|
||||
}
|
||||
}
|
||||
|
||||
chromium.MessageCallback = f.processMessage
|
||||
chromium.WebResourceRequestedCallback = f.processRequest
|
||||
chromium.NavigationCompletedCallback = f.navigationCompleted
|
||||
@@ -420,6 +425,7 @@ func (f *Frontend) setupChromium() {
|
||||
w32.PostMessage(f.mainWindow.Handle(), w32.WM_KEYDOWN, uintptr(vkey), 0)
|
||||
return false
|
||||
}
|
||||
|
||||
chromium.Embed(f.mainWindow.Handle())
|
||||
chromium.Resize()
|
||||
settings, err := chromium.GetSettings()
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
@@ -36,9 +37,10 @@ type Chromium struct {
|
||||
padding Rect
|
||||
|
||||
// Settings
|
||||
Debug bool
|
||||
DataPath string
|
||||
BrowserPath string
|
||||
Debug bool
|
||||
DataPath string
|
||||
BrowserPath string
|
||||
AdditionalBrowserArgs []string
|
||||
|
||||
// permissions
|
||||
permissions map[CoreWebView2PermissionKind]CoreWebView2PermissionState
|
||||
@@ -98,7 +100,8 @@ func (e *Chromium) Embed(hwnd uintptr) bool {
|
||||
}
|
||||
}
|
||||
|
||||
if err := createCoreWebView2EnvironmentWithOptions(e.BrowserPath, dataPath, e.envCompleted); err != nil {
|
||||
browserArgs := strings.Join(e.AdditionalBrowserArgs, " ")
|
||||
if err := createCoreWebView2EnvironmentWithOptions(e.BrowserPath, dataPath, e.envCompleted, browserArgs); err != nil {
|
||||
log.Printf("Error calling Webview2Loader: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -8,12 +8,13 @@ import (
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2/webviewloader"
|
||||
)
|
||||
|
||||
func createCoreWebView2EnvironmentWithOptions(browserExecutableFolder, userDataFolder string, environmentCompletedHandle *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler) error {
|
||||
func createCoreWebView2EnvironmentWithOptions(browserExecutableFolder, userDataFolder string, environmentCompletedHandle *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, additionalBrowserArgs string) error {
|
||||
e := &environmentCreatedHandler{environmentCompletedHandle}
|
||||
return webviewloader.CreateCoreWebView2EnvironmentWithOptions(
|
||||
e,
|
||||
webviewloader.WithBrowserExecutableFolder(browserExecutableFolder),
|
||||
webviewloader.WithUserDataFolder(userDataFolder),
|
||||
webviewloader.WithAdditionalBrowserArguments(additionalBrowserArgs),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
func createCoreWebView2EnvironmentWithOptions(browserExecutableFolder, userDataFolder string, environmentCompletedHandle *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler) error {
|
||||
func createCoreWebView2EnvironmentWithOptions(browserExecutableFolder, userDataFolder string, environmentCompletedHandle *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, additionalBrowserArgs string) error {
|
||||
browserPathPtr, err := windows.UTF16PtrFromString(browserExecutableFolder)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error calling UTF16PtrFromString for %s: %v", browserExecutableFolder, err)
|
||||
|
||||
Reference in New Issue
Block a user