mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
Support min/max window size
This commit is contained in:
parent
05803fb5d5
commit
af6daa273e
4 changed files with 85 additions and 1 deletions
|
|
@ -28,6 +28,10 @@ func main() {
|
|||
AlwaysOnTop: false,
|
||||
URL: "https://google.com",
|
||||
DisableResize: false,
|
||||
MinWidth: 100,
|
||||
MinHeight: 100,
|
||||
MaxWidth: 1000,
|
||||
MaxHeight: 1000,
|
||||
})
|
||||
|
||||
myWindow2 := app.NewWindow(&options.Window{
|
||||
|
|
@ -45,6 +49,8 @@ func main() {
|
|||
myWindow.SetAlwaysOnTop(true)
|
||||
myWindow2.SetTitle("OMFG")
|
||||
myWindow2.NavigateToURL("https://wails.io")
|
||||
myWindow.SetMinSize(600, 600)
|
||||
myWindow.SetMaxSize(650, 650)
|
||||
}()
|
||||
|
||||
err := app.Run()
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ type windowImpl interface {
|
|||
run() error
|
||||
navigateToURL(url string)
|
||||
setResizable(resizable bool)
|
||||
setMinSize(width, height int)
|
||||
setMaxSize(width, height int)
|
||||
}
|
||||
|
||||
type Window struct {
|
||||
|
|
@ -67,3 +69,34 @@ func (w *Window) SetResizable(b bool) {
|
|||
}
|
||||
w.impl.setResizable(b)
|
||||
}
|
||||
|
||||
func (w *Window) SetMinSize(minWidth, minHeight int) {
|
||||
if w.impl == nil {
|
||||
w.options.MinWidth = minWidth
|
||||
if w.options.Width < minWidth {
|
||||
w.options.Width = minWidth
|
||||
}
|
||||
w.options.MinHeight = minHeight
|
||||
if w.options.Height < minHeight {
|
||||
w.options.Height = minHeight
|
||||
}
|
||||
return
|
||||
}
|
||||
w.impl.setSize(w.options.Width, w.options.Height)
|
||||
w.impl.setMinSize(minWidth, minHeight)
|
||||
}
|
||||
func (w *Window) SetMaxSize(maxWidth, maxHeight int) {
|
||||
if w.impl == nil {
|
||||
w.options.MinWidth = maxWidth
|
||||
if w.options.Width > maxWidth {
|
||||
w.options.Width = maxWidth
|
||||
}
|
||||
w.options.MinHeight = maxHeight
|
||||
if w.options.Height > maxHeight {
|
||||
w.options.Height = maxHeight
|
||||
}
|
||||
return
|
||||
}
|
||||
w.impl.setSize(w.options.Width, w.options.Height)
|
||||
w.impl.setMaxSize(maxWidth, maxHeight)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,36 @@ void windowSetResizable(void* nsWindow, bool resizable) {
|
|||
});
|
||||
}
|
||||
|
||||
// Set NSWindow min size
|
||||
void windowSetMinSize(void* nsWindow, int width, int height) {
|
||||
// Set window min size on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[(NSWindow*)nsWindow setContentMinSize:NSMakeSize(width, height)];
|
||||
});
|
||||
}
|
||||
|
||||
// Set NSWindow max size
|
||||
void windowSetMaxSize(void* nsWindow, int width, int height) {
|
||||
// Set window max size on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[(NSWindow*)nsWindow setContentMaxSize:NSMakeSize(width, height)];
|
||||
});
|
||||
}
|
||||
|
||||
// Reset NSWindow min and max size
|
||||
void windowResetMinSize(void* nsWindow) {
|
||||
// Reset window min size on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[(NSWindow*)nsWindow setContentMinSize:NSMakeSize(0, 0)];
|
||||
});
|
||||
}
|
||||
|
||||
void windowResetMaxSize(void* nsWindow) {
|
||||
// Reset window max size on main thread
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[(NSWindow*)nsWindow setContentMaxSize:NSMakeSize(0, 0)];
|
||||
});
|
||||
}
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
|
@ -133,6 +163,13 @@ func (w *macosWindow) setSize(width, height int) {
|
|||
C.windowSetSize(w.nsWindow, C.int(width), C.int(height))
|
||||
}
|
||||
|
||||
func (w *macosWindow) setMinSize(width, height int) {
|
||||
C.windowSetMinSize(w.nsWindow, C.int(width), C.int(height))
|
||||
}
|
||||
func (w *macosWindow) setMaxSize(width, height int) {
|
||||
C.windowSetMaxSize(w.nsWindow, C.int(width), C.int(height))
|
||||
}
|
||||
|
||||
func (w *macosWindow) setResizable(resizable bool) {
|
||||
C.windowSetResizable(w.nsWindow, C.bool(resizable))
|
||||
}
|
||||
|
|
@ -142,7 +179,11 @@ func (w *macosWindow) run() error {
|
|||
w.setTitle(w.options.Title)
|
||||
w.setAlwaysOnTop(w.options.AlwaysOnTop)
|
||||
w.setResizable(!w.options.DisableResize)
|
||||
w.setMinSize(w.options.MinWidth, w.options.MinHeight)
|
||||
w.setMaxSize(w.options.MaxWidth, w.options.MaxHeight)
|
||||
if w.options.URL != "" {
|
||||
w.navigateToURL(w.options.URL)
|
||||
}
|
||||
C.windowShow(w.nsWindow)
|
||||
C.navigationLoadURL(w.nsWindow, C.CString(w.options.URL))
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,4 +27,8 @@ type Window struct {
|
|||
URL string
|
||||
DisableResize bool
|
||||
Resizable bool
|
||||
MinWidth int
|
||||
MinHeight int
|
||||
MaxWidth int
|
||||
MaxHeight int
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue