mirror of
https://github.com/taigrr/wails.git
synced 2026-04-02 05:08:54 -07:00
[windows] Support all window runtime methods
This commit is contained in:
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/wailsapp/wails/v2/internal/menumanager"
|
||||
"github.com/wailsapp/wails/v2/internal/signal"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"time"
|
||||
)
|
||||
|
||||
// App defines a Wails application structure
|
||||
@@ -34,19 +33,75 @@ type App struct {
|
||||
func (a *App) Run() error {
|
||||
|
||||
go func() {
|
||||
time.Sleep(1 * time.Second)
|
||||
println("fullscreen")
|
||||
a.frontend.WindowFullscreen()
|
||||
time.Sleep(1 * time.Second)
|
||||
println("unfullscreen")
|
||||
a.frontend.WindowUnFullscreen()
|
||||
time.Sleep(1 * time.Second)
|
||||
println("hide")
|
||||
a.frontend.WindowHide()
|
||||
time.Sleep(1 * time.Second)
|
||||
println("show")
|
||||
a.frontend.WindowShow()
|
||||
time.Sleep(1 * time.Second)
|
||||
//time.Sleep(3 * time.Second)
|
||||
//println("WindowSetSize(3000,2000)")
|
||||
//a.frontend.WindowSetSize(3000,2000)
|
||||
//x,y := a.frontend.WindowGetSize()
|
||||
//println("X", x, "Y", y)
|
||||
//time.Sleep(3 * time.Second)
|
||||
//println("a.frontend.WindowSetSize(10,10)")
|
||||
//a.frontend.WindowSetSize(10,10)
|
||||
//x,y = a.frontend.WindowGetSize()
|
||||
//println("X", x, "Y", y)
|
||||
//time.Sleep(3 * time.Second)
|
||||
//time.Sleep(3 * time.Second)
|
||||
//println("WindowSetMaxSize(50,50)")
|
||||
//a.frontend.WindowSetMaxSize(200,200)
|
||||
//x,y := a.frontend.WindowGetSize()
|
||||
//println("X", x, "Y", y)
|
||||
//time.Sleep(3 * time.Second)
|
||||
//println("WindowSetMinSize(100,100)")
|
||||
//a.frontend.WindowSetMinSize(600,600)
|
||||
//x,y = a.frontend.WindowGetSize()
|
||||
//println("X", x, "Y", y)
|
||||
//println("fullscreen")
|
||||
//a.frontend.WindowFullscreen()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("unfullscreen")
|
||||
//a.frontend.WindowUnFullscreen()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("hide")
|
||||
//a.frontend.WindowHide()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("show")
|
||||
//a.frontend.WindowShow()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("title 1")
|
||||
//a.frontend.WindowSetTitle("title 1")
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("title 2")
|
||||
//a.frontend.WindowSetTitle("title 2")
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("setsize 1")
|
||||
//a.frontend.WindowSetSize(100,100)
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("setsize 2")
|
||||
//a.frontend.WindowSetSize(500,500)
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("setpos 1")
|
||||
//a.frontend.WindowSetPos(0,0)
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("setpos 2")
|
||||
//a.frontend.WindowSetPos(500,500)
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("Center 1")
|
||||
//a.frontend.WindowCenter()
|
||||
//time.Sleep(5 * time.Second)
|
||||
//println("Center 2")
|
||||
//a.frontend.WindowCenter()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("maximise")
|
||||
//a.frontend.WindowMaximise()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("UnMaximise")
|
||||
//a.frontend.WindowUnmaximise()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("minimise")
|
||||
//a.frontend.WindowMinimise()
|
||||
//time.Sleep(1 * time.Second)
|
||||
//println("unminimise")
|
||||
//a.frontend.WindowUnminimise()
|
||||
//time.Sleep(1 * time.Second)
|
||||
}()
|
||||
|
||||
return a.frontend.Run()
|
||||
|
||||
@@ -27,9 +27,11 @@ type Frontend interface {
|
||||
WindowMinimise()
|
||||
WindowUnminimise()
|
||||
WindowSetPos(x int, y int)
|
||||
WindowGetPos() (int, int)
|
||||
WindowSetSize(width int, height int)
|
||||
//WindowSetMinSize(width int, height int)
|
||||
//WindowSetMaxSize(width int, height int)
|
||||
WindowGetSize() (int, int)
|
||||
WindowSetMinSize(width int, height int)
|
||||
WindowSetMaxSize(width int, height int)
|
||||
WindowFullscreen()
|
||||
WindowUnFullscreen()
|
||||
//WindowSetColour(colour int)
|
||||
|
||||
@@ -2,63 +2,33 @@ package windows
|
||||
|
||||
import (
|
||||
"github.com/tadvi/winc"
|
||||
"github.com/tadvi/winc/w32"
|
||||
"github.com/wailsapp/wails/v2/internal/logger"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
type Frontend struct {
|
||||
options *options.App
|
||||
logger *logger.Logger
|
||||
frontendOptions *options.App
|
||||
logger *logger.Logger
|
||||
|
||||
// main window handle
|
||||
mainWindow *winc.Form
|
||||
mainWindow *Window
|
||||
minWidth, minHeight, maxWidth, maxHeight int
|
||||
}
|
||||
|
||||
func (f *Frontend) Run() error {
|
||||
|
||||
exStyle := w32.WS_EX_CONTROLPARENT | w32.WS_EX_APPWINDOW
|
||||
if f.options.Windows.WindowBackgroundIsTranslucent {
|
||||
exStyle |= w32.WS_EX_NOREDIRECTIONBITMAP
|
||||
}
|
||||
|
||||
var dwStyle uint
|
||||
if f.options.Frameless {
|
||||
dwStyle = w32.WS_POPUP
|
||||
}
|
||||
|
||||
mainWindow := winc.NewCustomForm(nil, exStyle, dwStyle)
|
||||
mainWindow := NewWindow(nil, f.frontendOptions)
|
||||
f.mainWindow = mainWindow
|
||||
mainWindow.SetSize(f.options.Width, f.options.Height)
|
||||
mainWindow.SetText(f.options.Title)
|
||||
mainWindow.EnableSizable(!f.options.DisableResize)
|
||||
mainWindow.EnableMaxButton(!f.options.DisableResize)
|
||||
|
||||
if f.options.Windows.WindowBackgroundIsTranslucent {
|
||||
mainWindow.SetTranslucentBackground()
|
||||
}
|
||||
|
||||
if f.options.Windows.DisableWindowIcon {
|
||||
mainWindow.DisableIcon()
|
||||
}
|
||||
|
||||
if f.options.StartHidden {
|
||||
mainWindow.Hide()
|
||||
}
|
||||
|
||||
if f.options.Fullscreen {
|
||||
mainWindow.Fullscreen()
|
||||
}
|
||||
|
||||
f.WindowCenter()
|
||||
|
||||
if !f.options.StartHidden {
|
||||
if !f.frontendOptions.StartHidden {
|
||||
mainWindow.Show()
|
||||
}
|
||||
|
||||
mainWindow.OnClose().Bind(func(arg *winc.Event) {
|
||||
if f.options.HideWindowOnClose {
|
||||
if f.frontendOptions.HideWindowOnClose {
|
||||
f.WindowHide()
|
||||
} else {
|
||||
f.Quit()
|
||||
@@ -78,12 +48,21 @@ func (f *Frontend) WindowSetPos(x, y int) {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.SetPos(x, y)
|
||||
}
|
||||
func (f *Frontend) WindowGetPos() (int, int) {
|
||||
runtime.LockOSThread()
|
||||
return f.mainWindow.Pos()
|
||||
}
|
||||
|
||||
func (f *Frontend) WindowSetSize(width, height int) {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.SetSize(width, height)
|
||||
}
|
||||
|
||||
func (f *Frontend) WindowGetSize() (int, int) {
|
||||
runtime.LockOSThread()
|
||||
return f.mainWindow.Size()
|
||||
}
|
||||
|
||||
func (f *Frontend) WindowSetTitle(title string) {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.SetText(title)
|
||||
@@ -125,6 +104,15 @@ func (f *Frontend) WindowUnminimise() {
|
||||
f.mainWindow.Restore()
|
||||
}
|
||||
|
||||
func (f *Frontend) WindowSetMinSize(width int, height int) {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.SetMinSize(width, height)
|
||||
}
|
||||
func (f *Frontend) WindowSetMaxSize(width int, height int) {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.SetMaxSize(width, height)
|
||||
}
|
||||
|
||||
func (f *Frontend) Quit() {
|
||||
winc.Exit()
|
||||
}
|
||||
@@ -132,7 +120,7 @@ func (f *Frontend) Quit() {
|
||||
func NewFrontend(appoptions *options.App, myLogger *logger.Logger) *Frontend {
|
||||
|
||||
return &Frontend{
|
||||
options: appoptions,
|
||||
logger: myLogger,
|
||||
frontendOptions: appoptions,
|
||||
logger: myLogger,
|
||||
}
|
||||
}
|
||||
|
||||
64
v2/internal/frontend/windows/window.go
Normal file
64
v2/internal/frontend/windows/window.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package windows
|
||||
|
||||
import (
|
||||
"github.com/tadvi/winc"
|
||||
"github.com/tadvi/winc/w32"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
)
|
||||
|
||||
type Window struct {
|
||||
winc.Form
|
||||
frontendOptions *options.App
|
||||
}
|
||||
|
||||
func NewWindow(parent winc.Controller, options *options.App) *Window {
|
||||
result := new(Window)
|
||||
result.frontendOptions = options
|
||||
result.SetIsForm(true)
|
||||
|
||||
exStyle := w32.WS_EX_CONTROLPARENT | w32.WS_EX_APPWINDOW
|
||||
if options.Windows.WindowBackgroundIsTranslucent {
|
||||
exStyle |= w32.WS_EX_NOREDIRECTIONBITMAP
|
||||
}
|
||||
|
||||
var dwStyle = w32.WS_OVERLAPPEDWINDOW
|
||||
if options.Frameless {
|
||||
dwStyle = w32.WS_POPUP
|
||||
}
|
||||
|
||||
winc.RegClassOnlyOnce("wailsWindow")
|
||||
result.SetHandle(winc.CreateWindow("wailsWindow", parent, uint(exStyle), uint(dwStyle)))
|
||||
result.SetParent(parent)
|
||||
|
||||
// result might fail if icon resource is not embedded in the binary
|
||||
if ico, err := winc.NewIconFromResource(winc.GetAppInstance(), uint16(winc.AppIconID)); err == nil {
|
||||
result.SetIcon(0, ico)
|
||||
}
|
||||
|
||||
result.SetSize(options.Width, options.Height)
|
||||
result.SetText(options.Title)
|
||||
result.EnableSizable(!options.DisableResize)
|
||||
result.EnableMaxButton(!options.DisableResize)
|
||||
result.SetMinSize(options.MinWidth, options.MinHeight)
|
||||
result.SetMaxSize(options.MaxWidth, options.MaxHeight)
|
||||
|
||||
// Dlg forces display of focus rectangles, as soon as the user starts to type.
|
||||
w32.SendMessage(result.Handle(), w32.WM_CHANGEUISTATE, w32.UIS_INITIALIZE, 0)
|
||||
winc.RegMsgHandler(result)
|
||||
|
||||
result.SetFont(winc.DefaultFont)
|
||||
|
||||
if options.Windows.WindowBackgroundIsTranslucent {
|
||||
result.SetTranslucentBackground()
|
||||
}
|
||||
|
||||
if options.Windows.DisableWindowIcon {
|
||||
result.DisableIcon()
|
||||
}
|
||||
|
||||
if options.Fullscreen {
|
||||
result.Fullscreen()
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user