Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ require (
github.com/roblillack/gocoa v0.0.0-20240514094225-79029b8f9f7f
)

require github.com/rodrigocfd/windigo v0.0.0-20230809154420-8faa606d9f5f // indirect

// replace github.com/roblillack/gocoa => ./libs/gocoa
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ github.com/pwiecz/go-fltk v0.0.0-20240511142305-990b442ae1ed h1:7/j/4x3KAwuJB9sW
github.com/pwiecz/go-fltk v0.0.0-20240511142305-990b442ae1ed/go.mod h1:uMK5daOr9p+ba2BPs5QadbfaqqrHR5TGj13yWGsAsmw=
github.com/roblillack/gocoa v0.0.0-20240514094225-79029b8f9f7f h1:Rgio8nqLhyfyswHoxppubbgu13L7b03CMXecKjM70tA=
github.com/roblillack/gocoa v0.0.0-20240514094225-79029b8f9f7f/go.mod h1:zySUFzLK/KSb3KDT903dTRJ2WPmMBbF3a2u8/39UzMg=
github.com/rodrigocfd/windigo v0.0.0-20230809154420-8faa606d9f5f h1:jIXpgDE/hOglaKyTP5ZRqe6rhcJx2dtCan2ncR66qhU=
github.com/rodrigocfd/windigo v0.0.0-20230809154420-8faa606d9f5f/go.mod h1:Vw0QLpSedVsbAFWYIVE/Zb1pa6XPIgwIMTUQQoUG8Wo=
2 changes: 1 addition & 1 deletion ui/button_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
69 changes: 69 additions & 0 deletions ui/button_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//go:build !fltk && windows

package ui

import (
"github.com/roblillack/spot"
wui "github.com/rodrigocfd/windigo/ui"
"github.com/rodrigocfd/windigo/win"
)

type nativeTypeButton = wui.Button

func (b *Button) callback() {
if b.OnClick != nil {
b.OnClick()
}
}

func (b *Button) Update(nextControl spot.Control) bool {
next, ok := nextControl.(*Button)
if !ok {
return false
}

if b.ref == nil {
return false
}

if next.Title != b.Title {
b.Title = next.Title
b.ref.SetText(b.Title)
}

b.OnClick = next.OnClick
return true
}

func (b *Button) Mount(parent spot.Control) any {
if b.ref != nil {
return b.ref
}

if parent == nil {
return nil
}

window, ok := parent.(*Window)
if !ok || window == nil || window.ref == nil {
return nil
}

b.ref = wui.NewButton(window.ref, wui.ButtonOpts().
Position(win.POINT{X: int32(b.X), Y: int32(b.Y)}).
Size(win.SIZE{Cx: int32(b.Width), Cy: int32(b.Height)}).
Text(b.Title))
b.ref.On().BnClicked(b.callback)

return b.ref
}

func (b *Button) Unmount() {
// if b.ref == nil {
// return
// }

// b.ref.Destroy()
// b.ref = nil
panic("not implemented")
}
2 changes: 2 additions & 0 deletions ui/checkbox.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/checkbox_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/dial.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/dial_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/dropdown.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import (
Expand Down
2 changes: 1 addition & 1 deletion ui/dropdown_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 1 addition & 1 deletion ui/init_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
44 changes: 44 additions & 0 deletions ui/init_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//go:build !fltk && windows

package ui

import (
"runtime"

"github.com/roblillack/spot"
)

// BackendName is the name of the backend. It can be used to check which backend
// is currently in use by the application during runtime.
const BackendName = "windows"

var activeWindow *Window

func runOnMainLoop(fn func()) {
if activeWindow == nil {
fn()
}

activeWindow.ref.RunUiThread(fn)
}

// Init initializes the UI library for the FLTK backend. It locks the OS thread
// and sets up Spot to be able to intercept the main loop.
func Init() {
runtime.LockOSThread()
spot.RunOnMainLoop = runOnMainLoop
}

// Run starts the main loop for the FLTK backend.
func Run() {
if activeWindow == nil {
return
}

ref := activeWindow.ref
if ref == nil {
return
}

ref.RunAsMain()
}
2 changes: 2 additions & 0 deletions ui/label.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import (
Expand Down
2 changes: 1 addition & 1 deletion ui/label_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/progressbar.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/progressbar_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/slider.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/slider_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/spinner.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/spinner_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/textfield.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import (
Expand Down
2 changes: 1 addition & 1 deletion ui/textfield_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 2 additions & 0 deletions ui/textview.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build ignore

package ui

import "github.com/roblillack/spot"
Expand Down
2 changes: 1 addition & 1 deletion ui/textview_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
2 changes: 1 addition & 1 deletion ui/window_fltk.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build !cocoa && (fltk || !darwin)
//go:build !cocoa && (fltk || (!darwin && !windows))

package ui

Expand Down
37 changes: 37 additions & 0 deletions ui/window_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//go:build !fltk && windows

package ui

import (
"github.com/roblillack/spot"
wui "github.com/rodrigocfd/windigo/ui"
"github.com/rodrigocfd/windigo/win"
)

type nativeTypeWindow = wui.WindowMain

func (w *Window) Update(nextComponent spot.Control) bool {
next, ok := nextComponent.(*Window)
if !ok {
return false
}

if next.Title != w.Title {
w.Title = next.Title
// if w.ref != nil {
// w.ref.SetLabel(w.Title)
// }
}

return true
}

func (w *Window) Mount(parent spot.Control) any {
w.ref = wui.NewWindowMain(
wui.WindowMainOpts().
Title(w.Title).
ClientArea(win.SIZE{Cx: int32(w.Width), Cy: int32(w.Height)}))

activeWindow = w
return w.ref
}