Compare commits

...

5 Commits

Author SHA1 Message Date
Lea Anthony
2b5bbfd897 Script to rebuild runtime_*.c 2021-01-05 13:01:38 +11:00
Lea Anthony
d2020fedda Move generated assets to build dir. Precompile platform runtime. 2021-01-05 13:01:03 +11:00
Lea Anthony
98789bd85a Fix rollup-plugin-svelte in KS 2021-01-04 22:23:07 +11:00
Lea Anthony
e6ace2fafd Add Pace to Thanks 2021-01-04 19:52:12 +11:00
Lea Anthony
a55fc4d0e9 Refactor TrayOptions to Tray. Add ID. 2021-01-04 15:58:28 +11:00
20 changed files with 137 additions and 36 deletions

2
.gitignore vendored
View File

@@ -22,8 +22,6 @@ v2/test/**/frontend/dist
v2/test/**/build/
v2/test/frameless/icon.png
v2/test/hidden/icon.png
v2/internal/ffenestri/runtime.c
v2/internal/runtime/assets/desktop.js
v2/test/kitchensink/frontend/public/bundle.*
v2/pkg/parser/testproject/frontend/wails
v2/test/kitchensink/frontend/public

View File

@@ -147,7 +147,12 @@ This project was mainly coded to the following albums:
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwailsapp%2Fwails.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwailsapp%2Fwails?ref=badge_large)
## Special Thank You
## Special Thanks
<p align="center" style="text-align: center">
A *huge* thanks to <a href="https://pace.dev"><img src="pace.jpeg"/> Pace</a> for sponsoring the project and helping the efforts to get Wails ported to Apple Silicon!<br/><br/>
If you are looking for a Project Management tool that's powerful but quick and easy to use, check them out!<br/><br/>
</p>
<p align="center" style="text-align: center">
A special thank you to JetBrains for donating licenses to us!<br/><br/>

BIN
pace.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -98,15 +98,15 @@
#define NSAlertThirdButtonReturn 1002
// References to assets
extern const unsigned char *assets[];
#include "assets.h"
extern const unsigned char runtime;
// Tray icons
extern const unsigned char *trayIcons[];
#include "trayicons.h"
// Dialog icons
extern const unsigned char *defaultDialogIcons[];
extern const unsigned char *userDialogIcons[];
#include "userdialogicons.h"
// MAIN DEBUG FLAG
int debug;

View File

@@ -156,7 +156,7 @@ func (a *AssetBundle) WriteToCFile(targetDir string) (string, error) {
var cdata strings.Builder
// Write header
header := `// assets.c
header := `// assets.h
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Ă‚ MODIWL.
// This file was auto-generated. DO NOT MODIFY.
@@ -185,7 +185,7 @@ func (a *AssetBundle) WriteToCFile(targetDir string) (string, error) {
}
// Save file
assetsFile := filepath.Join(targetDir, "assets.c")
assetsFile := filepath.Join(targetDir, "assets.h")
err = ioutil.WriteFile(assetsFile, []byte(cdata.String()), 0600)
if err != nil {
return "", err

View File

@@ -21,7 +21,7 @@ type Runtime struct {
}
// New creates a new runtime
func New(serviceBus *servicebus.ServiceBus, menu *menu.Menu, trayMenu *menu.TrayOptions, contextMenus *menu.ContextMenus) *Runtime {
func New(serviceBus *servicebus.ServiceBus, menu *menu.Menu, trayMenu *menu.Tray, contextMenus *menu.ContextMenus) *Runtime {
result := &Runtime{
Browser: newBrowser(),
Events: newEvents(serviceBus),

View File

@@ -0,0 +1,76 @@
package main
import (
"bytes"
"fmt"
"github.com/wailsapp/wails/v2/internal/fs"
"github.com/wailsapp/wails/v2/internal/shell"
"io/ioutil"
"log"
"os"
"strings"
)
func main() {
sourceDir := fs.RelativePath("../../../internal/runtime/js")
platforms := []string{"darwin"}
for _, platform := range platforms {
println("Building JS Runtime for " + platform)
envvars := []string{"WAILSPLATFORM=" + platform}
// Split up the InstallCommand and execute it
stdout, stderr, err := shell.RunCommand(sourceDir, "npm", "install")
if err != nil {
for _, l := range strings.Split(stdout, "\n") {
fmt.Printf(" %s\n", l)
}
for _, l := range strings.Split(stderr, "\n") {
fmt.Printf(" %s\n", l)
}
}
runtimeDir := fs.RelativePath("../js")
cmd := shell.CreateCommand(runtimeDir, "npm", "run", "build:desktop")
cmd.Env = append(os.Environ(), envvars...)
var stdo, stde bytes.Buffer
cmd.Stdout = &stdo
cmd.Stderr = &stde
err = cmd.Run()
if err != nil {
for _, l := range strings.Split(stdo.String(), "\n") {
fmt.Printf(" %s\n", l)
}
for _, l := range strings.Split(stde.String(), "\n") {
fmt.Printf(" %s\n", l)
}
log.Fatal(err)
}
wailsJS := fs.RelativePath("../../../internal/runtime/assets/desktop.js")
runtimeData, err := ioutil.ReadFile(wailsJS)
if err != nil {
log.Fatal(err)
}
// Convert to C structure
runtimeC := `
// runtime.c (c) 2019-Present Lea Anthony.
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Ă‚ MODIWL
// This file was auto-generated. DO NOT MODIFY.
const unsigned char runtime[]={`
for _, b := range runtimeData {
runtimeC += fmt.Sprintf("0x%x, ", b)
}
runtimeC += "0x00};"
// Save file
outputFile := fs.RelativePath(fmt.Sprintf("../../ffenestri/runtime_%s.c", platform))
if err := ioutil.WriteFile(outputFile, []byte(runtimeC), 0600); err != nil {
log.Fatal(err)
}
}
}

View File

@@ -8,8 +8,9 @@ import (
// Tray defines all Tray related operations
type Tray interface {
NewTray(id string) *menu.Tray
On(menuID string, callback func(*menu.MenuItem))
Update()
Update(tray ...*menu.Tray)
GetByID(menuID string) *menu.MenuItem
RemoveByID(id string) bool
SetLabel(label string)
@@ -18,11 +19,11 @@ type Tray interface {
type trayRuntime struct {
bus *servicebus.ServiceBus
trayMenu *menu.TrayOptions
trayMenu *menu.Tray
}
// newTray creates a new Menu struct
func newTray(bus *servicebus.ServiceBus, menu *menu.TrayOptions) Tray {
func newTray(bus *servicebus.ServiceBus, menu *menu.Tray) Tray {
return &trayRuntime{
bus: bus,
trayMenu: menu,
@@ -37,7 +38,16 @@ func (t *trayRuntime) On(menuID string, callback func(*menu.MenuItem)) {
})
}
func (t *trayRuntime) Update() {
// NewTray creates a new Tray item
func (t *trayRuntime) NewTray(trayID string) *menu.Tray {
return &menu.Tray{
ID: trayID,
}
}
func (t *trayRuntime) Update(tray ...*menu.Tray) {
//trayToUpdate := t.trayMenu
t.bus.Publish("tray:update", t.trayMenu)
}

View File

@@ -24,7 +24,7 @@ type Runtime struct {
}
// NewRuntime creates a new runtime subsystem
func NewRuntime(bus *servicebus.ServiceBus, logger *logger.Logger, menu *menu.Menu, trayMenu *menu.TrayOptions, contextMenus *menu.ContextMenus) (*Runtime, error) {
func NewRuntime(bus *servicebus.ServiceBus, logger *logger.Logger, menu *menu.Menu, trayMenu *menu.Tray, contextMenus *menu.ContextMenus) (*Runtime, error) {
// Register quit channel
quitChannel, err := bus.Subscribe("quit")

View File

@@ -26,14 +26,14 @@ type Tray struct {
logger logger.CustomLogger
// The tray menu
trayMenu *menu.TrayOptions
trayMenu *menu.Tray
// Service Bus
bus *servicebus.ServiceBus
}
// NewTray creates a new menu subsystem
func NewTray(trayMenu *menu.TrayOptions, bus *servicebus.ServiceBus,
func NewTray(trayMenu *menu.Tray, bus *servicebus.ServiceBus,
logger *logger.Logger) (*Tray, error) {
// Register quit channel

View File

@@ -206,6 +206,15 @@ func (b *BaseBuilder) CompileProject(options *Options) error {
// Set GO111MODULE environment variable
cmd.Env = append(os.Environ(), "GO111MODULE=on")
// Add CGO flags
// We use the project/build dir as a temporary place for our generated c headers
buildBaseDir, err := fs.RelativeToCwd("build")
if err != nil {
return err
}
cmd.Env = append(os.Environ(), fmt.Sprintf("CGO_CFLAGS=-I%s", buildBaseDir))
// Setup buffers
var stdo, stde bytes.Buffer
cmd.Stdout = &stdo

View File

@@ -113,10 +113,6 @@ func Build(options *Options) (string, error) {
// Build the base assets
outputLogger.Println(" - Compiling Assets")
err = builder.BuildRuntime(options)
if err != nil {
return "", err
}
err = builder.BuildAssets(options)
if err != nil {
return "", err

View File

@@ -64,7 +64,10 @@ func (d *DesktopBuilder) BuildBaseAssets(assets *html.AssetBundle, options *Opti
outputLogger.Print(" - Embedding Assets...")
// Get target asset directory
assetDir := fs.RelativePath("../../../internal/ffenestri")
assetDir, err := fs.RelativeToCwd("build")
if err != nil {
return err
}
// Dump assets as C
assetsFile, err := assets.WriteToCFile(assetDir)

View File

@@ -46,7 +46,7 @@ func (d *DesktopBuilder) processTrayIcons(assetDir string, options *Options) err
// Setup target
targetFilename := "trayicons"
targetFile := filepath.Join(assetDir, targetFilename+".c")
targetFile := filepath.Join(assetDir, targetFilename+".h")
d.addFileToDelete(targetFile)
var dataBytes []byte
@@ -55,7 +55,7 @@ func (d *DesktopBuilder) processTrayIcons(assetDir string, options *Options) err
var cdata strings.Builder
// Write header
header := `// trayicons.c
header := `// trayicons.h
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Ă‚ MODIWL.
// This file was auto-generated. DO NOT MODIFY.
@@ -135,7 +135,7 @@ func (d *DesktopBuilder) processDialogIcons(assetDir string, options *Options) e
// Setup target
targetFilename := "userdialogicons"
targetFile := filepath.Join(assetDir, targetFilename+".c")
targetFile := filepath.Join(assetDir, targetFilename+".h")
d.addFileToDelete(targetFile)
var dataBytes []byte
@@ -144,7 +144,7 @@ func (d *DesktopBuilder) processDialogIcons(assetDir string, options *Options) e
var cdata strings.Builder
// Write header
header := `// userdialogicons.c
header := `// userdialogicons.h
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Ă‚ MODIWL.
// This file was auto-generated. DO NOT MODIFY.

View File

@@ -1,7 +1,11 @@
package menu
// TrayOptions are the options
type TrayOptions struct {
// Tray are the options
type Tray struct {
// The ID of this tray
ID string
// Label is the text we wish to display in the tray
Label string

View File

@@ -9,6 +9,6 @@ type Options struct {
WebviewIsTransparent bool
WindowBackgroundIsTranslucent bool
Menu *menu.Menu
Tray *menu.TrayOptions
Tray *menu.Tray
ContextMenus *menu.ContextMenus
}

View File

@@ -25,7 +25,7 @@ type App struct {
DevTools bool
RGBA int
ContextMenus *menu.ContextMenus
Tray *menu.TrayOptions
Tray *menu.Tray
Menu *menu.Menu
Mac *mac.Options
Logger logger.Logger `json:"-"`
@@ -41,8 +41,8 @@ func MergeDefaults(appoptions *App) {
}
func GetTray(appoptions *App) *menu.TrayOptions {
var result *menu.TrayOptions
func GetTray(appoptions *App) *menu.Tray {
var result *menu.Tray
switch runtime.GOOS {
case "darwin":
if appoptions.Mac != nil {

View File

@@ -3125,9 +3125,9 @@
}
},
"rollup-plugin-svelte": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.2.3.tgz",
"integrity": "sha512-513vOht9A93OV7fvmpIq8mD1JFgTZ5LidmpULKM2Od9P1l8oI5KwvO32fwCnASuVJS1EkRfvCnS7vKQ8DF4srg==",
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz",
"integrity": "sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow==",
"dev": true,
"requires": {
"require-relative": "^0.8.7",

View File

@@ -20,7 +20,7 @@
"rollup-plugin-livereload": "^1.0.0",
"rollup-plugin-postcss": "^3.1.8",
"rollup-plugin-string": "^3.0.0",
"rollup-plugin-svelte": "^5.0.3",
"rollup-plugin-svelte": "~6.1.1",
"rollup-plugin-terser": "^5.1.2",
"sirv-cli": "^0.4.4",
"svelte": "^3.31.0",

View File

@@ -28,7 +28,7 @@ func main() {
// Comment out line below to see Window.SetTitle() work
TitleBar: mac.TitleBarHiddenInset(),
Menu: createApplicationMenu(),
Tray: &menu.TrayOptions{
Tray: &menu.Tray{
Icon: "light",
Menu: createApplicationTray(),
},