Compare commits

...

26 Commits

Author SHA1 Message Date
Lea Anthony
c582aafd25 v1.16.0 2021-04-02 20:44:25 +11:00
Lea Anthony
626b989eb2 Update actions to use 1.16 2021-04-02 20:42:49 +11:00
Lea Anthony
d0f753776a Merge branch 'develop' into feature/1.16 2021-04-02 20:39:07 +11:00
Lea Anthony
38c68d8189 Revert "Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)" (#642)
This reverts commit 17b28a26bd.
2021-04-02 20:38:17 +11:00
Lea Anthony
c5391c927e Consistent styling of README.md 2021-04-02 20:38:17 +11:00
Lea Anthony
ec468888be Updated sponsors 2021-04-02 20:37:36 +11:00
Lea Anthony
b2c8b32f09 Update README.md 2021-04-02 20:37:36 +11:00
Lea Anthony
22cabfe704 Fix react import path 2021-04-02 20:35:47 +11:00
Lea Anthony
b383ac9942 Import embed in templates! 2021-04-02 16:59:56 +11:00
Lea Anthony
2659d9d0c2 Remove mewn. Update templates. Remove logging. 2021-04-02 16:56:25 +11:00
Lea Anthony
57bbadf57b v1.13.0 2021-04-02 16:36:27 +11:00
RH12503
77fb1e070a Support for minimum and maximum window sizes (#612)
* 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 3f7ba8b26435392116df3c9fe66ef11536e30c59.

The fix glitches on PopOS

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2021-04-02 16:36:27 +11:00
Lea Anthony
9ae95f86a1 Security (#644)
* Bump y18n from 3.2.1 to 3.2.2 in /runtime/js/runtime (#639)

* Create FUNDING.yml

* Update README.md

* Bump y18n from 3.2.1 to 3.2.2 in /runtime/js/runtime

Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump elliptic from 6.5.3 to 6.5.4 in /runtime/js (#617)

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#643)

* Create FUNDING.yml

* Update README.md

* Updated sponsors

* Consistent styling of README.md

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)

Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Revert "Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)" (#642)

This reverts commit 17b28a26bd.

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js

Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-02 16:36:27 +11:00
Lea Anthony
79af447109 Merge branch 'master' into develop 2021-04-02 16:24:23 +11:00
Lea Anthony
21bdc94941 v1.13.0 2021-04-02 16:18:29 +11:00
RH12503
a1bd1013cb Support for minimum and maximum window sizes (#612)
* 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 3f7ba8b26435392116df3c9fe66ef11536e30c59.

The fix glitches on PopOS

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2021-04-02 16:14:09 +11:00
Lea Anthony
2b6860b6c3 Security (#644)
* Bump y18n from 3.2.1 to 3.2.2 in /runtime/js/runtime (#639)

* Create FUNDING.yml

* Update README.md

* Bump y18n from 3.2.1 to 3.2.2 in /runtime/js/runtime

Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump elliptic from 6.5.3 to 6.5.4 in /runtime/js (#617)

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#643)

* Create FUNDING.yml

* Update README.md

* Updated sponsors

* Consistent styling of README.md

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)

Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Revert "Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)" (#642)

This reverts commit 17b28a26bd.

* Bump y18n from 4.0.0 to 4.0.1 in /runtime/js

Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-02 15:55:22 +11:00
Lea Anthony
984c5f58f2 Revert "Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)" (#642)
This reverts commit 17b28a26bd.
2021-04-02 15:46:02 +11:00
dependabot[bot]
17b28a26bd Bump y18n from 4.0.0 to 4.0.1 in /runtime/js (#638)
Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-02 15:45:30 +11:00
Lea Anthony
5088c1647f Consistent styling of README.md 2021-04-02 15:41:57 +11:00
Lea Anthony
9cb0ded9ed Updated sponsors 2021-04-02 15:38:43 +11:00
Lea Anthony
befcf14d40 Initial support for embed 2021-04-02 15:30:59 +11:00
Lea Anthony
eea6ee28aa Update README.md 2021-03-29 09:24:21 +11:00
Lea Anthony
5b30db47ac Create FUNDING.yml 2021-03-28 20:43:08 +11:00
Lea Anthony
d4de8b4af0 v1.12.3 2021-03-27 21:24:47 +11:00
Lea Anthony
a706b3f7e5 Use Releases API for tag discovery 2021-03-27 21:24:17 +11:00
41 changed files with 465 additions and 280 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: [leaanthony]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -13,10 +13,10 @@ jobs:
os: [ubuntu-latest, windows-latest, macOS-latest] os: [ubuntu-latest, windows-latest, macOS-latest]
steps: steps:
- name: Set up Go 1.13 - name: Set up Go 1.16
uses: actions/setup-go@v1 uses: actions/setup-go@v1
with: with:
go-version: 1.13 go-version: 1.16
id: go id: go
- name: Check out code into the Go module directory - name: Check out code into the Go module directory

View File

@@ -13,10 +13,10 @@ jobs:
os: [ubuntu-latest, windows-latest, macOS-latest] os: [ubuntu-latest, windows-latest, macOS-latest]
steps: steps:
- name: Set up Go 1.13 - name: Set up Go 1.16
uses: actions/setup-go@v1 uses: actions/setup-go@v1
with: with:
go-version: 1.13 go-version: 1.16
id: go id: go
- name: Check out code into the Go module directory - name: Check out code into the Go module directory

View File

@@ -15,10 +15,10 @@ jobs:
os: [ubuntu-latest, windows-latest, macOS-latest] os: [ubuntu-latest, windows-latest, macOS-latest]
steps: steps:
- name: Set up Go 1.13 - name: Set up Go 1.16
uses: actions/setup-go@v1 uses: actions/setup-go@v1
with: with:
go-version: 1.13 go-version: 1.16
id: go id: go
- name: Check out code into the Go module directory - name: Check out code into the Go module directory

View File

@@ -35,8 +35,14 @@ The official docs can be found at [https://wails.app](https://wails.app).
This project is supported by these kind people: This project is supported by these kind people:
<a href="https://pace.dev" style="width:100px"><img src="pace.jpeg" width="100"/></a> <a href="https://pace.dev" style="width:100px"><img src="pace.jpeg" width="100"/></a>
<a href="https://github.com/tc-hib" style="width:50px"> <a href="https://github.com/tc-hib" style="width:50px;border-radius: 50%">
<img src="https://github.com/tc-hib.png?size=50" width="50"/> <img src="https://github.com/tc-hib.png?size=50" width="50" style="border-radius: 50%"/>
</a>
<a href="https://github.com/picatz" style="width:50px;border-radius: 50%">
<img src="https://github.com/picatz.png?size=50" width="50" style="border-radius: 50%"/>
</a>
<a href="https://github.com/tylertravisty" style="width:50px;border-radius: 50%">
<img src="https://github.com/tylertravisty.png?size=50" width="50" style="border-radius: 50%"/>
</a> </a>
## Installation ## Installation

File diff suppressed because one or more lines are too long

View File

@@ -24,7 +24,7 @@ func (g *GitHubHelper) GetVersionTags() ([]*SemanticVersion, error) {
result := []*SemanticVersion{} result := []*SemanticVersion{}
var err error var err error
resp, err := http.Get("https://api.github.com/repos/wailsapp/wails/tags") resp, err := http.Get("https://api.github.com/repos/wailsapp/wails/releases")
if err != nil { if err != nil {
return result, err return result, err
} }

View File

@@ -2,7 +2,6 @@ package cmd
import ( import (
"fmt" "fmt"
"io/ioutil"
"os" "os"
"os/exec" "os/exec"
"os/user" "os/user"
@@ -12,10 +11,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/leaanthony/mewn"
"github.com/leaanthony/mewn/lib"
"github.com/leaanthony/slicer" "github.com/leaanthony/slicer"
"github.com/leaanthony/spinner" "github.com/leaanthony/spinner"
wailsruntime "github.com/wailsapp/wails/runtime"
) )
const xgoVersion = "1.0.1" const xgoVersion = "1.0.1"
@@ -61,30 +59,6 @@ func InstallGoDependencies(verbose bool) error {
return nil return nil
} }
// EmbedAssets will embed the built frontend assets via mewn.
func EmbedAssets() ([]string, error) {
mewnFiles := lib.GetMewnFiles([]string{}, false)
referencedAssets, err := lib.GetReferencedAssets(mewnFiles)
if err != nil {
return []string{}, err
}
targetFiles := []string{}
for _, referencedAsset := range referencedAssets {
packfileData, err := lib.GeneratePackFileString(referencedAsset, false)
if err != nil {
return []string{}, err
}
targetFile := filepath.Join(referencedAsset.BaseDir, referencedAsset.PackageName+"-mewn.go")
targetFiles = append(targetFiles, targetFile)
ioutil.WriteFile(targetFile, []byte(packfileData), 0644)
}
return targetFiles, nil
}
func InitializeCrossCompilation(verbose bool) error { func InitializeCrossCompilation(verbose bool) error {
// Check Docker // Check Docker
if err := CheckIfInstalled("docker"); err != nil { if err := CheckIfInstalled("docker"); err != nil {
@@ -127,7 +101,10 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
// Check build directory // Check build directory
buildDirectory := filepath.Join(fs.Cwd(), "build") buildDirectory := filepath.Join(fs.Cwd(), "build")
if !fs.DirExists(buildDirectory) { if !fs.DirExists(buildDirectory) {
fs.MkDir(buildDirectory) err := fs.MkDir(buildDirectory)
if err != nil {
return err
}
} }
buildCommand := slicer.String() buildCommand := slicer.String()
@@ -198,11 +175,6 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
// BuildNative builds on the target platform itself. // BuildNative builds on the target platform itself.
func BuildNative(binaryName string, forceRebuild bool, buildMode string, projectOptions *ProjectOptions) error { func BuildNative(binaryName string, forceRebuild bool, buildMode string, projectOptions *ProjectOptions) error {
// Check Mewn is installed
if err := CheckMewn(projectOptions.Verbose); err != nil {
return err
}
if err := CheckWindres(); err != nil { if err := CheckWindres(); err != nil {
return err return err
} }
@@ -275,12 +247,6 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
func BuildApplication(binaryName string, forceRebuild bool, buildMode string, packageApp bool, projectOptions *ProjectOptions) error { func BuildApplication(binaryName string, forceRebuild bool, buildMode string, packageApp bool, projectOptions *ProjectOptions) error {
var err error var err error
// embed resources
targetFiles, err := EmbedAssets()
if err != nil {
return err
}
if projectOptions.CrossCompile { if projectOptions.CrossCompile {
if err := InitializeCrossCompilation(projectOptions.Verbose); err != nil { if err := InitializeCrossCompilation(projectOptions.Verbose); err != nil {
return err return err
@@ -296,20 +262,6 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
} }
} }
// cleanup temporary embedded assets
defer func() {
for _, filename := range targetFiles {
if err := os.Remove(filename); err != nil {
fmt.Println(err)
}
}
// Removed by popular demand
// TODO: Potentially add a flag to cleanup
// if projectOptions.Platform == "windows" {
// helper.CleanWindows(projectOptions)
// }
}()
if projectOptions.CrossCompile { if projectOptions.CrossCompile {
err = BuildDocker(binaryName, buildMode, projectOptions) err = BuildDocker(binaryName, buildMode, projectOptions)
} else { } else {
@@ -374,30 +326,6 @@ func BuildFrontend(projectOptions *ProjectOptions) error {
return nil return nil
} }
// CheckMewn checks if mewn is installed and if not, attempts to fetch it
func CheckMewn(verbose bool) (err error) {
programHelper := NewProgramHelper(verbose)
if !programHelper.IsInstalled("mewn") {
var buildSpinner *spinner.Spinner
if !verbose {
buildSpinner = spinner.New()
buildSpinner.SetSpinSpeed(50)
buildSpinner.Start("Installing Mewn asset packer...")
}
err := programHelper.InstallGoPackage("github.com/leaanthony/mewn/cmd/mewn")
if err != nil {
if buildSpinner != nil {
buildSpinner.Error()
}
return err
}
if buildSpinner != nil {
buildSpinner.Success()
}
}
return nil
}
// CheckWindres checks if Windres is installed and if not, aborts // CheckWindres checks if Windres is installed and if not, aborts
func CheckWindres() (err error) { func CheckWindres() (err error) {
if runtime.GOOS != "windows" { // FIXME: Handle windows cross-compile for windows! if runtime.GOOS != "windows" { // FIXME: Handle windows cross-compile for windows!
@@ -493,11 +421,18 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
} }
// Update md5sum file // Update md5sum file
ioutil.WriteFile(md5sumFile, []byte(packageJSONMD5), 0644) err := os.WriteFile(md5sumFile, []byte(packageJSONMD5), 0644)
if err != nil {
return err
}
} }
// Install the runtime // Install the runtime
err = InstallRuntime(caller, projectDir, projectOptions) if caller == "build" {
err = InstallProdRuntime(projectDir, projectOptions)
} else {
err = InstallBridge(projectDir, projectOptions)
}
if err != nil { if err != nil {
return err return err
} }
@@ -510,28 +445,17 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
return nil return nil
} }
// InstallRuntime installs the correct runtime for the type of build
func InstallRuntime(caller string, projectDir string, projectOptions *ProjectOptions) error {
if caller == "build" {
return InstallProdRuntime(projectDir, projectOptions)
}
return InstallBridge(projectDir, projectOptions)
}
// InstallBridge installs the relevant bridge javascript library // InstallBridge installs the relevant bridge javascript library
func InstallBridge(projectDir string, projectOptions *ProjectOptions) error { func InstallBridge(projectDir string, projectOptions *ProjectOptions) error {
bridgeFileData := mewn.String("../runtime/assets/bridge.js")
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js") bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
err := fs.CreateFile(bridgeFileTarget, []byte(bridgeFileData)) err := fs.CreateFile(bridgeFileTarget, wailsruntime.BridgeJS)
return err return err
} }
// InstallProdRuntime installs the production runtime // InstallProdRuntime installs the production runtime
func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error { func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error {
prodInit := mewn.String("../runtime/js/runtime/init.js")
bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js") bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js")
err := fs.CreateFile(bridgeFileTarget, []byte(prodInit)) err := fs.CreateFile(bridgeFileTarget, wailsruntime.InitJS)
return err return err
} }

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "World!" return "World!"
} }
func main() { //go:embed frontend/dist/my-app/main.js
var js string
js := mewn.String("./frontend/dist/my-app/main.js") //go:embed frontend/dist/my-app/styles.css
css := mewn.String("./frontend/dist/my-app/styles.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "World!" return "World!"
} }
func main() { //go:embed frontend/build/static/js/main.js
var js string
js := mewn.String("./frontend/build/static/js/main.js") //go:embed frontend/build/static/css/main.css
css := mewn.String("./frontend/build/static/css/main.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,9 +9,13 @@ func basic() string {
return "World!" return "World!"
} }
//go:embed frontend/public/build/bundle.js
var js string
//go:embed frontend/public/build/bundle.css
var css string
func main() { func main() {
js := mewn.String("./frontend/public/build/bundle.js")
css := mewn.String("./frontend/public/build/bundle.css")
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,14 +1,17 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
func main() { //go:embed frontend/build/main.js
var js string
js := mewn.String("./frontend/build/main.js") //go:embed frontend/build/main.css
css := mewn.String("./frontend/build/main.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "Hello World!" return "Hello World!"
} }
func main() { //go:embed frontend/dist/app.js
var js string
js := mewn.String("./frontend/dist/app.js") //go:embed frontend/dist/app.css
css := mewn.String("./frontend/dist/app.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "Hello World!" return "Hello World!"
} }
func main() { //go:embed frontend/dist/app.js
var js string
js := mewn.String("./frontend/dist/app.js") //go:embed frontend/dist/app.css
css := mewn.String("./frontend/dist/app.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "Hello World!" return "Hello World!"
} }
func main() { //go:embed frontend/dist/app.js
var js string
js := mewn.String("./frontend/dist/app.js") //go:embed frontend/dist/app.css
css := mewn.String("./frontend/dist/app.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/leaanthony/mewn" _ "embed"
"github.com/wailsapp/wails" "github.com/wailsapp/wails"
) )
@@ -9,10 +9,13 @@ func basic() string {
return "Hello World!" return "Hello World!"
} }
func main() { //go:embed frontend/dist/app.js
var js string
js := mewn.String("./frontend/dist/app.js") //go:embed frontend/dist/app.css
css := mewn.String("./frontend/dist/app.css") var css string
func main() {
app := wails.CreateApp(&wails.AppConfig{ app := wails.CreateApp(&wails.AppConfig{
Width: 1024, Width: 1024,

View File

@@ -1,4 +1,4 @@
package cmd package cmd
// Version - Wails version // Version - Wails version
const Version = "v1.12.2" const Version = "v1.16.0"

View File

@@ -39,12 +39,6 @@ Create your first project by running 'wails init'.`
return err return err
} }
// Check Mewn
err = cmd.CheckMewn(false)
if err != nil {
return err
}
// Check for errors // Check for errors
// CheckDependencies() returns !errors // CheckDependencies() returns !errors
// so to get the right message in this // so to get the right message in this

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"log"
"os" "os"
"runtime" "runtime"
"strings" "strings"
@@ -52,7 +53,10 @@ func init() {
var b strings.Builder var b strings.Builder
for _, plat := range getSupportedPlatforms() { for _, plat := range getSupportedPlatforms() {
fmt.Fprintf(&b, " - %s\n", plat) _, err := fmt.Fprintf(&b, " - %s\n", plat)
if err != nil {
log.Fatal(err)
}
} }
initCmd.StringFlag("x", initCmd.StringFlag("x",
fmt.Sprintf("Cross-compile application to specified platform via xgo\n%s", b.String()), fmt.Sprintf("Cross-compile application to specified platform via xgo\n%s", b.String()),
@@ -80,7 +84,7 @@ func init() {
fs := cmd.NewFSHelper() fs := cmd.NewFSHelper()
err := projectOptions.LoadConfig(fs.Cwd()) err := projectOptions.LoadConfig(fs.Cwd())
if err != nil { if err != nil {
return fmt.Errorf("Unable to find 'project.json'. Please check you are in a Wails project directory") return fmt.Errorf("unable to find 'project.json'. Please check you are in a Wails project directory")
} }
// Set firebug flag // Set firebug flag
@@ -143,12 +147,6 @@ func init() {
if err != nil { if err != nil {
return err return err
} }
// Ensure that runtime init.js is the production version
err = cmd.InstallProdRuntime(projectDir, projectOptions)
if err != nil {
return err
}
} }
// Move to project directory // Move to project directory

View File

@@ -27,19 +27,13 @@ func init() {
logger.PrintSmallBanner(message) logger.PrintSmallBanner(message)
fmt.Println() fmt.Println()
// Check Mewn is installed
err := cmd.CheckMewn(verbose)
if err != nil {
return err
}
// Project options // Project options
projectOptions := &cmd.ProjectOptions{} projectOptions := &cmd.ProjectOptions{}
// Check we are in project directory // Check we are in project directory
// Check project.json loads correctly // Check project.json loads correctly
fs := cmd.NewFSHelper() fs := cmd.NewFSHelper()
err = projectOptions.LoadConfig(fs.Cwd()) err := projectOptions.LoadConfig(fs.Cwd())
if err != nil { if err != nil {
return err return err
} }

View File

@@ -31,6 +31,18 @@ type AppConfig struct {
// Indicates whether your app should be resizable // Indicates whether your app should be resizable
Resizable bool Resizable bool
// Minimum width of a resizable window. If set, MinHeight should also be set.
MinWidth int
// Minimum height of a resizable window. If set, MinWidth should also be set.
MinHeight int
// Maximum width of a resizable window. If set, MaxHeight should also be set.
MaxWidth int
// Maximum height of a resizable window. If set, MaxWidth should also be set.
MaxHeight int
// Indicated if the devtools should be disabled // Indicated if the devtools should be disabled
DisableInspector bool DisableInspector bool
} }
@@ -65,6 +77,26 @@ func (a *AppConfig) GetResizable() bool {
return a.Resizable return a.Resizable
} }
// GetMinWidth returns the minimum width of the window
func (a *AppConfig) GetMinWidth() int {
return a.MinWidth
}
// GetMinHeight returns the minimum height of the window
func (a *AppConfig) GetMinHeight() int {
return a.MinHeight
}
// GetMaxWidth returns the maximum width of the window
func (a *AppConfig) GetMaxWidth() int {
return a.MaxWidth
}
// GetMaxHeight returns the maximum height of the window
func (a *AppConfig) GetMaxHeight() int {
return a.MaxHeight
}
// GetDisableInspector returns true if the inspector should be disabled // GetDisableInspector returns true if the inspector should be disabled
func (a *AppConfig) GetDisableInspector() bool { func (a *AppConfig) GetDisableInspector() bool {
return a.DisableInspector return a.DisableInspector
@@ -115,6 +147,23 @@ func (a *AppConfig) merge(in *AppConfig) error {
if in.Height != 0 { if in.Height != 0 {
a.Height = in.Height a.Height = in.Height
} }
if in.MinWidth != 0 {
a.MinWidth = in.MinWidth
}
if in.MinHeight != 0 {
a.MinHeight = in.MinHeight
}
if in.MaxWidth != 0 {
a.MaxWidth = in.MaxWidth
}
if in.MaxHeight != 0 {
a.MaxHeight = in.MaxHeight
}
a.Resizable = in.Resizable a.Resizable = in.Resizable
a.DisableInspector = in.DisableInspector a.DisableInspector = in.DisableInspector
@@ -127,6 +176,10 @@ func newConfig(userConfig *AppConfig) (*AppConfig, error) {
Width: 800, Width: 800,
Height: 600, Height: 600,
Resizable: true, Resizable: true,
MinWidth: -1,
MinHeight: -1,
MaxWidth: -1,
MaxHeight: -1,
Title: "My Wails App", Title: "My Wails App",
Colour: "#FFF", // White by default Colour: "#FFF", // White by default
HTML: defaultHTML, HTML: defaultHTML,

3
go.mod
View File

@@ -9,7 +9,6 @@ require (
github.com/jackmordaunt/icns v1.0.0 github.com/jackmordaunt/icns v1.0.0
github.com/kennygrant/sanitize v1.2.4 github.com/kennygrant/sanitize v1.2.4
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
github.com/leaanthony/mewn v0.10.7
github.com/leaanthony/slicer v1.4.0 github.com/leaanthony/slicer v1.4.0
github.com/leaanthony/spinner v0.5.3 github.com/leaanthony/spinner v0.5.3
github.com/mattn/go-colorable v0.1.1 // indirect github.com/mattn/go-colorable v0.1.1 // indirect
@@ -28,4 +27,4 @@ require (
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22 gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
) )
go 1.13 go 1.16

3
go.sum
View File

@@ -26,8 +26,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/leaanthony/mewn v0.10.7 h1:jCcNJyIUOpwj+I5SuATvCugDjHkoo+j6ubEOxxrxmPA=
github.com/leaanthony/mewn v0.10.7/go.mod h1:CRkTx8unLiSSilu/Sd7i1LwrdaAL+3eQ3ses99qGMEQ=
github.com/leaanthony/slicer v1.4.0 h1:Q9u4w+UBU4WHjXnEDdz+eRLMKF/rnyosRBiqULnc1J8= github.com/leaanthony/slicer v1.4.0 h1:Q9u4w+UBU4WHjXnEDdz+eRLMKF/rnyosRBiqULnc1J8=
github.com/leaanthony/slicer v1.4.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= github.com/leaanthony/slicer v1.4.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY=
github.com/leaanthony/spinner v0.5.3 h1:IMTvgdQCec5QA4qRy0wil4XsRP+QcG1OwLWVK/LPZ5Y= github.com/leaanthony/spinner v0.5.3 h1:IMTvgdQCec5QA4qRy0wil4XsRP+QcG1OwLWVK/LPZ5Y=
@@ -66,7 +64,6 @@ github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba h1:2DHfQOxcpWdGf5
github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba/go.mod h1:iLnlXG2Pakcii2CU0cbY07DRCSvpWNa7nFxtevhOChk= github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba/go.mod h1:iLnlXG2Pakcii2CU0cbY07DRCSvpWNa7nFxtevhOChk=
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw= golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=

View File

@@ -5,6 +5,10 @@ type AppConfig interface {
GetWidth() int GetWidth() int
GetHeight() int GetHeight() int
GetTitle() string GetTitle() string
GetMinWidth() int
GetMinHeight() int
GetMaxWidth() int
GetMaxHeight() int
GetResizable() bool GetResizable() bool
GetHTML() string GetHTML() string
GetDisableInspector() bool GetDisableInspector() bool

View File

@@ -22,6 +22,10 @@ type Renderer interface {
// Window Runtime // Window Runtime
SetColour(string) error SetColour(string) error
SetMinSize(width, height int)
SetMaxSize(width, height int)
Fullscreen() Fullscreen()
UnFullscreen() UnFullscreen()
SetTitle(title string) SetTitle(title string)

View File

@@ -1,4 +1,4 @@
package interfaces package interfaces
// Runtime interface // Runtime interface
type Runtime interface {} type Runtime interface{}

View File

@@ -186,6 +186,18 @@ func (h *Bridge) SetColour(colour string) error {
return nil return nil
} }
// SetMinSize is unsupported for Bridge but required
// for the Renderer interface
func (h *Bridge) SetMinSize(width, height int) {
h.log.Warn("SetMinSize() unsupported in bridge mode")
}
// SetMaxSize is unsupported for Bridge but required
// for the Renderer interface
func (h *Bridge) SetMaxSize(width, height int) {
h.log.Warn("SetMaxSize() unsupported in bridge mode")
}
// Fullscreen is unsupported for Bridge but required // Fullscreen is unsupported for Bridge but required
// for the Renderer interface // for the Renderer interface
func (h *Bridge) Fullscreen() { func (h *Bridge) Fullscreen() {

File diff suppressed because one or more lines are too long

View File

@@ -3,8 +3,9 @@ package renderer
import ( import (
"time" "time"
"github.com/wailsapp/wails/runtime"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/leaanthony/mewn"
"github.com/wailsapp/wails/lib/interfaces" "github.com/wailsapp/wails/lib/interfaces"
"github.com/wailsapp/wails/lib/logger" "github.com/wailsapp/wails/lib/logger"
) )
@@ -58,8 +59,7 @@ func (s *session) start(firstSession bool) {
s.log.Infof("Connected to frontend.") s.log.Infof("Connected to frontend.")
go s.writePump() go s.writePump()
wailsRuntime := mewn.String("../../runtime/assets/wails.js") s.evalJS(runtime.WailsJS, wailsRuntimeMessage)
s.evalJS(wailsRuntime, wailsRuntimeMessage)
// Inject bindings // Inject bindings
for _, binding := range s.bindingCache { for _, binding := range s.bindingCache {

File diff suppressed because one or more lines are too long

View File

@@ -8,8 +8,9 @@ import (
"sync" "sync"
"time" "time"
"github.com/wailsapp/wails/runtime"
"github.com/go-playground/colors" "github.com/go-playground/colors"
"github.com/leaanthony/mewn"
"github.com/wailsapp/wails/lib/interfaces" "github.com/wailsapp/wails/lib/interfaces"
"github.com/wailsapp/wails/lib/logger" "github.com/wailsapp/wails/lib/logger"
"github.com/wailsapp/wails/lib/messages" "github.com/wailsapp/wails/lib/messages"
@@ -29,6 +30,7 @@ type WebView struct {
config interfaces.AppConfig config interfaces.AppConfig
eventManager interfaces.EventManager eventManager interfaces.EventManager
bindingCache []string bindingCache []string
maximumSizeSet bool
} }
// NewWebView returns a new WebView struct // NewWebView returns a new WebView struct
@@ -52,10 +54,37 @@ func (w *WebView) Initialise(config interfaces.AppConfig, ipc interfaces.IPCMana
// Save the config // Save the config
w.config = config w.config = config
width := config.GetWidth()
height := config.GetHeight()
// Clamp width and height
minWidth, minHeight := config.GetMinWidth(), config.GetMinHeight()
maxWidth, maxHeight := config.GetMaxWidth(), config.GetMaxHeight()
setMinSize := minWidth != -1 && minHeight != -1
setMaxSize := maxWidth != -1 && maxHeight != -1
if setMinSize {
if width < minWidth {
width = minWidth
}
if height < minHeight {
height = minHeight
}
}
if setMaxSize {
if width > maxWidth {
width = maxWidth
}
if height > maxHeight {
height = maxHeight
}
}
// Create the WebView instance // Create the WebView instance
w.window = wv.NewWebview(wv.Settings{ w.window = wv.NewWebview(wv.Settings{
Width: config.GetWidth(), Width: width,
Height: config.GetHeight(), Height: height,
Title: config.GetTitle(), Title: config.GetTitle(),
Resizable: config.GetResizable(), Resizable: config.GetResizable(),
URL: config.GetHTML(), URL: config.GetHTML(),
@@ -64,6 +93,24 @@ func (w *WebView) Initialise(config interfaces.AppConfig, ipc interfaces.IPCMana
w.ipc.Dispatch(message, w.callback) w.ipc.Dispatch(message, w.callback)
}, },
}) })
fmt.Println("Control")
// Set minimum and maximum sizes
if setMinSize {
w.SetMinSize(minWidth, minHeight)
}
if setMaxSize {
w.SetMaxSize(maxWidth, maxHeight)
fmt.Println("Max")
}
// Set minimum and maximum sizes
if setMinSize {
w.SetMinSize(minWidth, minHeight)
}
if setMaxSize {
w.SetMaxSize(maxWidth, maxHeight)
}
// SignalManager.OnExit(w.Exit) // SignalManager.OnExit(w.Exit)
@@ -74,6 +121,7 @@ func (w *WebView) Initialise(config interfaces.AppConfig, ipc interfaces.IPCMana
} }
w.log.Info("Initialised") w.log.Info("Initialised")
return nil return nil
} }
@@ -183,8 +231,8 @@ func (w *WebView) Run() error {
} }
// Runtime assets // Runtime assets
wailsRuntime := mewn.String("../../runtime/assets/wails.js") w.log.DebugFields("Injecting wails JS runtime", logger.Fields{"js": runtime.WailsJS})
w.evalJS(wailsRuntime) w.evalJS(runtime.WailsJS)
// Ping the wait channel when the wails runtime is loaded // Ping the wait channel when the wails runtime is loaded
w.eventManager.On("wails:loaded", func(...interface{}) { w.eventManager.On("wails:loaded", func(...interface{}) {
@@ -207,10 +255,9 @@ func (w *WebView) Run() error {
w.injectCSS(w.config.GetCSS()) w.injectCSS(w.config.GetCSS())
} else { } else {
// Use default wails css // Use default wails css
w.log.Debug("Injecting Default Wails CSS")
defaultCSS := mewn.String("../../runtime/assets/wails.css")
w.injectCSS(defaultCSS) w.log.Debug("Injecting Default Wails CSS: " + runtime.WailsCSS)
w.injectCSS(runtime.WailsCSS)
} }
// Inject user JS // Inject user JS
@@ -353,11 +400,37 @@ func (w *WebView) NotifyEvent(event *messages.EventData) error {
return w.evalJS(message) return w.evalJS(message)
} }
// SetMinSize sets the minimum size of a resizable window
func (w *WebView) SetMinSize(width, height int) {
if w.config.GetResizable() == false {
w.log.Warn("Cannot call SetMinSize() - App.Resizable = false")
return
}
w.window.Dispatch(func() {
w.window.SetMinSize(width, height)
})
}
// SetMaxSize sets the maximum size of a resizable window
func (w *WebView) SetMaxSize(width, height int) {
if w.config.GetResizable() == false {
w.log.Warn("Cannot call SetMaxSize() - App.Resizable = false")
return
}
w.maximumSizeSet = true
w.window.Dispatch(func() {
w.window.SetMaxSize(width, height)
})
}
// Fullscreen makes the main window go fullscreen // Fullscreen makes the main window go fullscreen
func (w *WebView) Fullscreen() { func (w *WebView) Fullscreen() {
if w.config.GetResizable() == false { if w.config.GetResizable() == false {
w.log.Warn("Cannot call Fullscreen() - App.Resizable = false") w.log.Warn("Cannot call Fullscreen() - App.Resizable = false")
return return
} else if w.maximumSizeSet {
w.log.Warn("Cannot call Fullscreen() - Maximum size of window set")
return
} }
w.window.Dispatch(func() { w.window.Dispatch(func() {
w.window.SetFullscreen(true) w.window.SetFullscreen(true)

View File

@@ -69,6 +69,14 @@ static inline void CgoWebViewFocus(void *w) {
webview_focus((struct webview *)w); webview_focus((struct webview *)w);
} }
static inline void CgoWebViewMinSize(void *w, int width, int height) {
webview_minsize((struct webview *)w, width, height);
}
static inline void CgoWebViewMaxSize(void *w, int width, int height) {
webview_maxsize((struct webview *)w, width, height);
}
static inline void CgoWebViewSetFullscreen(void *w, int fullscreen) { static inline void CgoWebViewSetFullscreen(void *w, int fullscreen) {
webview_set_fullscreen((struct webview *)w, fullscreen); webview_set_fullscreen((struct webview *)w, fullscreen);
} }
@@ -178,6 +186,12 @@ type WebView interface {
// Focus() puts the main window into focus // Focus() puts the main window into focus
Focus() Focus()
// SetMinSize() sets the minimum size of the window
SetMinSize(width, height int)
// SetMaxSize() sets the maximum size of the window
SetMaxSize(width, height int)
// SetFullscreen() controls window full-screen mode. This method must be // SetFullscreen() controls window full-screen mode. This method must be
// called from the main thread only. See Dispatch() for more details. // called from the main thread only. See Dispatch() for more details.
SetFullscreen(fullscreen bool) SetFullscreen(fullscreen bool)
@@ -319,6 +333,14 @@ func (w *webview) Focus() {
C.CgoWebViewFocus(w.w) C.CgoWebViewFocus(w.w)
} }
func (w *webview) SetMinSize(width, height int) {
C.CgoWebViewMinSize(w.w, C.int(width), C.int(height))
}
func (w *webview) SetMaxSize(width, height int) {
C.CgoWebViewMaxSize(w.w, C.int(width), C.int(height))
}
func (w *webview) SetFullscreen(fullscreen bool) { func (w *webview) SetFullscreen(fullscreen bool) {
C.CgoWebViewSetFullscreen(w.w, C.int(boolToInt(fullscreen))) C.CgoWebViewSetFullscreen(w.w, C.int(boolToInt(fullscreen)))
} }

View File

@@ -54,6 +54,11 @@ extern "C"
int ready; int ready;
int js_busy; int js_busy;
int should_exit; int should_exit;
int min_width;
int min_height;
int max_width;
int max_height;
}; };
#elif defined(WEBVIEW_WINAPI) #elif defined(WEBVIEW_WINAPI)
#define CINTERFACE #define CINTERFACE
@@ -75,6 +80,11 @@ struct webview_priv
DWORD saved_style; DWORD saved_style;
DWORD saved_ex_style; DWORD saved_ex_style;
RECT saved_rect; RECT saved_rect;
int min_width;
int min_height;
int max_width;
int max_height;
}; };
#elif defined(WEBVIEW_COCOA) #elif defined(WEBVIEW_COCOA)
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@@ -169,6 +179,8 @@ struct webview_priv
WEBVIEW_API int webview_inject_css(struct webview *w, const char *css); WEBVIEW_API int webview_inject_css(struct webview *w, const char *css);
WEBVIEW_API void webview_set_title(struct webview *w, const char *title); WEBVIEW_API void webview_set_title(struct webview *w, const char *title);
WEBVIEW_API void webview_focus(struct webview *w); WEBVIEW_API void webview_focus(struct webview *w);
WEBVIEW_API void webview_minsize(struct webview *w, int width, int height);
WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height);
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen); WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen);
WEBVIEW_API void webview_set_color(struct webview *w, uint8_t r, uint8_t g, WEBVIEW_API void webview_set_color(struct webview *w, uint8_t r, uint8_t g,
uint8_t b, uint8_t a); uint8_t b, uint8_t a);
@@ -330,6 +342,12 @@ struct webview_priv
w->priv.should_exit = 0; w->priv.should_exit = 0;
w->priv.queue = g_async_queue_new(); w->priv.queue = g_async_queue_new();
w->priv.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); w->priv.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
w->priv.min_width = -1;
w->priv.min_height = -1;
w->priv.max_width = -1;
w->priv.max_height = -1;
gtk_window_set_title(GTK_WINDOW(w->priv.window), w->title); gtk_window_set_title(GTK_WINDOW(w->priv.window), w->title);
if (w->resizable) if (w->resizable)
@@ -402,6 +420,44 @@ struct webview_priv
gtk_window_present(GTK_WINDOW(w->priv.window)); gtk_window_present(GTK_WINDOW(w->priv.window));
} }
WEBVIEW_API void webview_minsize(struct webview *w, int width, int height) {
w->priv.min_width = width;
w->priv.min_height = height;
GdkGeometry hints;
GdkWindowHints usedHints = (GdkWindowHints) GDK_HINT_MIN_SIZE;
hints.min_width = w->priv.min_width;
hints.min_height = w->priv.min_height;
if (w->priv.max_width != -1) {
hints.max_width = w->priv.max_width;
hints.max_height = w->priv.max_height;
usedHints = (GdkWindowHints)(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
}
gtk_window_set_geometry_hints(GTK_WINDOW(w->priv.window), w->priv.window, &hints, usedHints);
}
WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height) {
w->priv.max_width = width;
w->priv.max_height = height;
GdkGeometry hints;
GdkWindowHints usedHints = (GdkWindowHints) GDK_HINT_MAX_SIZE;
if (w->priv.min_width != -1) {
hints.min_width = w->priv.min_width;
hints.min_height = w->priv.min_height;
usedHints = (GdkWindowHints)(GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
}
hints.max_width = w->priv.max_width;
hints.max_height = w->priv.max_height;
gtk_window_set_geometry_hints(GTK_WINDOW(w->priv.window), w->priv.window, &hints, usedHints);
}
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen) WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen)
{ {
if (fullscreen) if (fullscreen)
@@ -1337,7 +1393,39 @@ struct webview_priv
case WM_CREATE: case WM_CREATE:
w = (struct webview *)((CREATESTRUCT *)lParam)->lpCreateParams; w = (struct webview *)((CREATESTRUCT *)lParam)->lpCreateParams;
w->priv.hwnd = hwnd; w->priv.hwnd = hwnd;
return EmbedBrowserObject(w); return EmbedBrowserObject(w);
case WM_GETMINMAXINFO:
{
if (w != NULL) {
// get pixel density
HDC hDC = GetDC(NULL);
double DPIScaleX = GetDeviceCaps(hDC, 88)/96.0;
double DPIScaleY = GetDeviceCaps(hDC, 90)/96.0;
ReleaseDC(NULL, hDC);
RECT rcClient, rcWind;
POINT ptDiff;
GetClientRect(hwnd, &rcClient);
GetWindowRect(hwnd, &rcWind);
int widthExtra = (rcWind.right - rcWind.left) - rcClient.right;
int heightExtra = (rcWind.bottom - rcWind.top) - rcClient.bottom;
LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;
if (w->priv.min_width != -1) {
lpMMI->ptMinTrackSize.x = w->priv.min_width * DPIScaleX + widthExtra;
lpMMI->ptMinTrackSize.y = w->priv.min_height * DPIScaleY + heightExtra;
}
if (w->priv.max_width != -1) {
lpMMI->ptMaxTrackSize.x = w->priv.max_width * DPIScaleX + widthExtra;
lpMMI->ptMaxTrackSize.y = w->priv.max_height * DPIScaleY + heightExtra;
}
}
return 0;
}
case WM_DESTROY: case WM_DESTROY:
UnEmbedBrowserObject(w); UnEmbedBrowserObject(w);
PostQuitMessage(0); PostQuitMessage(0);
@@ -1402,6 +1490,9 @@ struct webview_priv
WEBVIEW_API int webview_init(struct webview *w) WEBVIEW_API int webview_init(struct webview *w)
{ {
w->priv.min_width = -1;
w->priv.max_width = -1;
WNDCLASSEX wc; WNDCLASSEX wc;
HINSTANCE hInstance; HINSTANCE hInstance;
DWORD style; DWORD style;
@@ -1652,6 +1743,16 @@ struct webview_priv
SetFocus(w->priv.hwnd); SetFocus(w->priv.hwnd);
} }
WEBVIEW_API void webview_minsize(struct webview *w, int width, int height) {
w->priv.min_width = width;
w->priv.min_height = height;
}
WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height) {
w->priv.max_width = width;
w->priv.max_height = height;
}
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen) WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen)
{ {
if (w->priv.is_fullscreen == !!fullscreen) if (w->priv.is_fullscreen == !!fullscreen)
@@ -2223,7 +2324,26 @@ struct webview_priv
{ {
[w->priv.window makeKeyWindow]; [w->priv.window makeKeyWindow];
} }
WEBVIEW_API void webview_minsize(struct webview *w, int width, int height) {
NSSize size;
size.width = width;
size.height = height;
[w->priv.window setMinSize:size];
}
WEBVIEW_API void webview_maxsize(struct webview *w, int width, int height) {
NSSize size;
size.width = width;
size.height = height;
[w->priv.window setMaxSize:size];
[w->priv.window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenAuxiliary|NSWindowCollectionBehaviorFullScreenNone|NSWindowCollectionBehaviorFullScreenDisallowsTiling];
NSButton *button = [w->priv.window standardWindowButton:NSWindowZoomButton];
[button setEnabled: NO];
}
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen) WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen)
{ {
int b = ((([w->priv.window styleMask] & NSWindowStyleMaskFullScreen) == int b = ((([w->priv.window styleMask] & NSWindowStyleMaskFullScreen) ==
@@ -2378,4 +2498,4 @@ struct webview_priv
} }
#endif #endif
#endif /* WEBVIEW_H */ #endif /* WEBVIEW_H */

3
package-lock.json generated Normal file
View File

@@ -0,0 +1,3 @@
{
"lockfileVersion": 1
}

15
runtime/assets.go Normal file
View File

@@ -0,0 +1,15 @@
package runtime
import _ "embed"
//go:embed assets/bridge.js
var BridgeJS []byte
//go:embed assets/wails.js
var WailsJS string
//go:embed assets/wails.css
var WailsCSS string
//go:embed js/runtime/init.js
var InitJS []byte

View File

@@ -2681,26 +2681,18 @@
"dev": true "dev": true
}, },
"elliptic": { "elliptic": {
"version": "6.5.3", "version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
"integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"bn.js": "^4.4.0", "bn.js": "^4.11.9",
"brorand": "^1.0.1", "brorand": "^1.1.0",
"hash.js": "^1.0.0", "hash.js": "^1.0.0",
"hmac-drbg": "^1.0.0", "hmac-drbg": "^1.0.1",
"inherits": "^2.0.1", "inherits": "^2.0.4",
"minimalistic-assert": "^1.0.0", "minimalistic-assert": "^1.0.1",
"minimalistic-crypto-utils": "^1.0.0" "minimalistic-crypto-utils": "^1.0.1"
},
"dependencies": {
"bn.js": {
"version": "4.11.9",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
"dev": true
}
} }
}, },
"emoji-regex": { "emoji-regex": {
@@ -6590,9 +6582,9 @@
"dev": true "dev": true
}, },
"y18n": { "y18n": {
"version": "4.0.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true "dev": true
}, },
"yallist": { "yallist": {

View File

@@ -451,9 +451,9 @@
} }
}, },
"y18n": { "y18n": {
"version": "3.2.1", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {

View File

@@ -67,6 +67,16 @@ func (r *Window) SetColour(colour string) error {
return r.renderer.SetColour(colour) 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 // Fullscreen makes the window fullscreen
func (r *Window) Fullscreen() { func (r *Window) Fullscreen() {
r.renderer.Fullscreen() r.renderer.Fullscreen()

View File

@@ -8,38 +8,6 @@ import (
"path/filepath" "path/filepath"
) )
// Default target to run when none is specified
// If not set, running mage will list available targets
// var Default = Build
/*
# Build runtime
echo "**** Building Runtime ****"
cd runtime/js
npm install
npm run build
cd ../..
echo "**** Packing Assets ****"
cd cmd
mewn
cd ..
cd lib/renderer
mewn
cd ../..
echo "**** Installing Wails locally ****"
cd cmd/wails
go install
cd ../..
echo "**** Tidying the mods! ****"
go mod tidy
echo "**** WE ARE DONE! ****"
*/
func runCommand(command string, args ...string) { func runCommand(command string, args ...string) {
cmd := exec.Command(command, args...) cmd := exec.Command(command, args...)
output, err := cmd.CombinedOutput() output, err := cmd.CombinedOutput()
@@ -48,7 +16,6 @@ func runCommand(command string, args ...string) {
log.Println(string(output)) log.Println(string(output))
log.Fatal(err) log.Fatal(err)
} }
cmd.Run()
fmt.Println(string(output)) fmt.Println(string(output))
} }
@@ -60,26 +27,26 @@ func main() {
// Build Runtime // Build Runtime
fmt.Println("**** Building Runtime ****") fmt.Println("**** Building Runtime ****")
runtimeDir, _ := filepath.Abs(filepath.Join(dir, "..", "runtime", "js")) runtimeDir, _ := filepath.Abs(filepath.Join(dir, "..", "runtime", "js"))
os.Chdir(runtimeDir) err := os.Chdir(runtimeDir)
if err != nil {
log.Fatal(err)
}
runCommand("npm", "install") runCommand("npm", "install")
runCommand("npm", "run", "build") runCommand("npm", "run", "build")
// Pack assets
fmt.Println("**** Packing Assets ****")
rendererDir, _ := filepath.Abs(filepath.Join(dir, "..", "lib", "renderer"))
os.Chdir(rendererDir)
runCommand("mewn")
cmdDir, _ := filepath.Abs(filepath.Join(dir, "..", "cmd"))
os.Chdir(cmdDir)
runCommand("mewn")
// Install Wails // Install Wails
fmt.Println("**** Installing Wails locally ****") fmt.Println("**** Installing Wails locally ****")
execDir, _ := filepath.Abs(filepath.Join(dir, "..", "cmd", "wails")) execDir, _ := filepath.Abs(filepath.Join(dir, "..", "cmd", "wails"))
os.Chdir(execDir) err = os.Chdir(execDir)
if err != nil {
log.Fatal(err)
}
runCommand("go", "install") runCommand("go", "install")
baseDir, _ := filepath.Abs(filepath.Join(dir, "..")) baseDir, _ := filepath.Abs(filepath.Join(dir, ".."))
os.Chdir(baseDir) err = os.Chdir(baseDir)
if err != nil {
log.Fatal(err)
}
runCommand("go", "mod", "tidy") runCommand("go", "mod", "tidy")
} }

View File

@@ -15,15 +15,6 @@ npm install
npm run build npm run build
cd ../.. cd ../..
echo "**** Packing Assets ****"
cd cmd
mewn
cd ..
cd lib/renderer
mewn
cd ../..
cd cmd/wails cd cmd/wails
echo "**** Checking if Wails compiles ****" echo "**** Checking if Wails compiles ****"
if ! go build . if ! go build .

View File

@@ -16,7 +16,6 @@ cd runtime/js
npm run build npm run build
cd ../.. cd ../..
mewn
git add cmd/version.go git add cmd/version.go
git commit cmd/version.go -m "Bump to ${TAG}" git commit cmd/version.go -m "Bump to ${TAG}"