mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 08:29:40 +08:00

* add support for minimum and maximum window sizes
* attempt to fix windows
* bug fixes
* support min/max window sizes on Linux and Windows
* fix min/max window sizes on Linux
* formatting and comments
* fixes Windows DPI issue, clamps width/height values to min/max
* App can't go into full screen when max size is set for Mac
* fixed Linux maximum width/height on window maximize
* Revert "fixed Linux maximum width/height on window maximize"
This reverts commit 3f7ba8b264
.
The fix glitches on PopOS
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
package runtime
|
|
|
|
import (
|
|
"bytes"
|
|
"runtime"
|
|
|
|
"github.com/abadojack/whatlanggo"
|
|
"github.com/wailsapp/wails/lib/interfaces"
|
|
"golang.org/x/text/encoding"
|
|
"golang.org/x/text/encoding/japanese"
|
|
"golang.org/x/text/encoding/korean"
|
|
"golang.org/x/text/encoding/simplifiedchinese"
|
|
"golang.org/x/text/transform"
|
|
)
|
|
|
|
func detectEncoding(text string) (encoding.Encoding, string) {
|
|
// korean
|
|
var enc encoding.Encoding
|
|
info := whatlanggo.Detect(text)
|
|
//fmt.Println("Language:", info.Lang.String(), " Script:", whatlanggo.Scripts[info.Script], " Confidence: ", info.Confidence)
|
|
switch info.Lang.String() {
|
|
case "Korean":
|
|
enc = korean.EUCKR
|
|
case "Mandarin":
|
|
enc = simplifiedchinese.GBK
|
|
case "Japanese":
|
|
enc = japanese.EUCJP
|
|
}
|
|
return enc, info.Lang.String()
|
|
}
|
|
|
|
// ProcessEncoding attempts to convert CKJ strings to UTF-8
|
|
func ProcessEncoding(text string) string {
|
|
if runtime.GOOS != "windows" {
|
|
return text
|
|
}
|
|
|
|
encoding, _ := detectEncoding(text)
|
|
if encoding != nil {
|
|
var bufs bytes.Buffer
|
|
wr := transform.NewWriter(&bufs, encoding.NewEncoder())
|
|
_, err := wr.Write([]byte(text))
|
|
defer wr.Close()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
return bufs.String()
|
|
}
|
|
return text
|
|
}
|
|
|
|
// Window exposes an interface for manipulating the window
|
|
type Window struct {
|
|
renderer interfaces.Renderer
|
|
}
|
|
|
|
// NewWindow creates a new Window struct
|
|
func NewWindow(renderer interfaces.Renderer) *Window {
|
|
return &Window{
|
|
renderer: renderer,
|
|
}
|
|
}
|
|
|
|
// SetColour sets the the window colour
|
|
func (r *Window) SetColour(colour string) error {
|
|
return r.renderer.SetColour(colour)
|
|
}
|
|
|
|
// SetMinSize sets the minimum size of a resizable window
|
|
func (r *Window) SetMinSize(width, height int) {
|
|
r.renderer.SetMinSize(width, height)
|
|
}
|
|
|
|
// SetMaxSize sets the maximum size of a resizable window
|
|
func (r *Window) SetMaxSize(width, height int) {
|
|
r.renderer.SetMaxSize(width, height)
|
|
}
|
|
|
|
// Fullscreen makes the window fullscreen
|
|
func (r *Window) Fullscreen() {
|
|
r.renderer.Fullscreen()
|
|
}
|
|
|
|
// UnFullscreen attempts to restore the window to the size/position before fullscreen
|
|
func (r *Window) UnFullscreen() {
|
|
r.renderer.UnFullscreen()
|
|
}
|
|
|
|
// SetTitle sets the the window title
|
|
func (r *Window) SetTitle(title string) {
|
|
title = ProcessEncoding(title)
|
|
r.renderer.SetTitle(title)
|
|
}
|
|
|
|
// Close shuts down the window and therefore the app
|
|
func (r *Window) Close() {
|
|
r.renderer.Close()
|
|
}
|