5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-05 01:50:56 +08:00

[v3] Add some missing methods for darwin and windows

This commit is contained in:
stffabi 2023-05-02 21:54:56 +02:00
parent 86a1de6788
commit f4749db8b3
5 changed files with 40 additions and 7 deletions

View File

@ -3,11 +3,13 @@
package application package application
import ( import (
"github.com/wailsapp/wails/v3/pkg/events" "os"
"github.com/wailsapp/wails/v3/pkg/w32"
"syscall" "syscall"
"unsafe" "unsafe"
"github.com/wailsapp/wails/v3/pkg/events"
"github.com/wailsapp/wails/v3/pkg/w32"
"github.com/samber/lo" "github.com/samber/lo"
) )
@ -217,7 +219,6 @@ func newPlatformApp(app *App) *windowsApp {
os.Exit(1) os.Exit(1)
} }
result := &windowsApp{ result := &windowsApp{
parent: app, parent: app,
instance: w32.GetModuleHandle(""), instance: w32.GetModuleHandle(""),

View File

@ -173,6 +173,8 @@ func newRole(role Role) *MenuItem {
return newMinimizeMenuItem() return newMinimizeMenuItem()
case Zoom: case Zoom:
return newZoomMenuItem() return newZoomMenuItem()
case FullScreen:
return newFullScreenMenuItem()
default: default:
println("No support for role:", role) println("No support for role:", role)

View File

@ -606,7 +606,7 @@ func newMinimizeMenuItem() *MenuItem {
OnClick(func(ctx *Context) { OnClick(func(ctx *Context) {
currentWindow := globalApplication.CurrentWindow() currentWindow := globalApplication.CurrentWindow()
if currentWindow != nil { if currentWindow != nil {
currentWindow.Minimize() currentWindow.Minimise()
} }
}) })
} }
@ -620,3 +620,13 @@ func newZoomMenuItem() *MenuItem {
} }
}) })
} }
func newFullScreenMenuItem() *MenuItem {
return newMenuItem("Fullscreen").
OnClick(func(ctx *Context) {
currentWindow := globalApplication.CurrentWindow()
if currentWindow != nil {
currentWindow.Fullscreen()
}
})
}

View File

@ -177,3 +177,7 @@ func newMinimizeMenuItem() *MenuItem {
func newZoomMenuItem() *MenuItem { func newZoomMenuItem() *MenuItem {
panic("implement me") panic("implement me")
} }
func newFullScreenMenuItem() *MenuItem {
panic("implement me")
}

View File

@ -703,6 +703,12 @@ static bool isFullScreen(void *window) {
return (mask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen; return (mask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen;
} }
static bool isVisible(void *window) {
// get main window
WebviewWindow* nsWindow = (WebviewWindow*)window;
return (nsWindow.occlusionState & NSWindowOcclusionStateVisible) == NSWindowOcclusionStateVisible;
}
// windowSetFullScreen // windowSetFullScreen
static void windowSetFullScreen(void *window, bool fullscreen) { static void windowSetFullScreen(void *window, bool fullscreen) {
if (isFullScreen(window)) { if (isFullScreen(window)) {
@ -942,6 +948,14 @@ func (w *macosWebviewWindow) isFullscreen() bool {
}) })
} }
func (w *macosWebviewWindow) isNormal() bool {
return !w.isMinimised() && !w.isMaximised() && !w.isFullscreen()
}
func (w *macosWebviewWindow) isVisible() bool {
return bool(C.isVisible(w.nsWindow))
}
func (w *macosWebviewWindow) syncMainThreadReturningBool(fn func() bool) bool { func (w *macosWebviewWindow) syncMainThreadReturningBool(fn func() bool) bool {
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(1) wg.Add(1)
@ -1147,10 +1161,12 @@ func (w *macosWebviewWindow) run() {
}) })
} }
func (w *macosWebviewWindow) nativeWindowHandle() uintptr {
return uintptr(w.nsWindow)
}
func (w *macosWebviewWindow) setBackgroundColour(colour RGBA) { func (w *macosWebviewWindow) setBackgroundColour(colour RGBA) {
if colour == nil {
return
}
C.windowSetBackgroundColour(w.nsWindow, C.int(colour.Red), C.int(colour.Green), C.int(colour.Blue), C.int(colour.Alpha)) C.windowSetBackgroundColour(w.nsWindow, C.int(colour.Red), C.int(colour.Green), C.int(colour.Blue), C.int(colour.Alpha))
} }