WIP components (as built)

This commit is contained in:
ZacharyZhang-NY committed 2026-10-05 15:51:57 -04:00
1 parent c804f2ab94
commit 03e974a139
96 files changed
+6468 -16

No files matched your search

+87
View File
@@ -0,0 +1,87 @@
package mujica
import (
"image/color"
"testing"
"github.com/egoist/mygo/ui"
"mujicaui/theme"
)
// remoteMono maps offsets onto 40-column, 8×20 DIP cells.
func remoteMono() RemoteCursorOptions {
at := func(o int) (float32, float32) { return float32(o%40) * 8, float32(o/40) * 20 }
return RemoteCursorOptions{
Caret: func(o int) ui.Rect { x, y := at(o); return ui.Rect{X: x, Y: y, W: 2, H: 20} },
Selection: func(from, to int) []ui.Rect {
var out []ui.Rect
for o := from; o < to; o++ {
x, y := at(o)
out = append(out, ui.Rect{X: x, Y: y, W: 8, H: 20})
}
return out
},
}
}
func remoteTester(carets []RemoteCaret, button *int) *ui.Tester {
return ui.NewTester(func(c *ui.Context) {
Use(c, Settings{Mode: Light})
ui.Box(c).Size(320, 120).Children(func() {
if Button(c, "Underneath", ButtonOptions{}).Size(320, 120).Clicked() {
*button++
}
RemoteCursor(c, carets, remoteMono())
})
}, 340, 140)
}
func TestRemoteCursorDrawCaretAndSelection(t *testing.T) {
carets := []RemoteCaret{{ID: "ada", Name: "Ada", Offset: 45, Anchor: 42}}
tt := remoteTester(carets, new(int))
col := remoteColor(theme.Light(), "ada")
img := tt.Image()
// Offset 45 places the caret at x=40, y=20..40.
if got := img.RGBAAt(40, 35); got != (color.RGBA{col.R, col.G, col.B, 255}) {
t.Fatalf("caret pixel %v, want %v", got, col)
}
if got := img.RGBAAt(28, 35); got == (color.RGBA{col.R, col.G, col.B, 255}) || got == img.RGBAAt(100, 35) {
t.Fatalf("selection pixel %v not tinted", got)
}
if !tt.HasText("Also editing: Ada") {
t.Fatalf("texts %q", tt.Texts())
}
}
func TestRemoteCursorPassInput(t *testing.T) {
n := 0
tt := remoteTester([]RemoteCaret{{ID: "b", Name: "Blaise", Offset: 3, Anchor: 3}}, &n)
tt.ClickAt(30, 10)
if n != 1 {
t.Fatal("the overlay took the click")
}
}
func TestRemoteCursorInvalid(t *testing.T) {
defer func() {
if recover() == nil {
t.Fatal("missing ID did not panic")
}
}()
remoteTester([]RemoteCaret{{Name: "x"}}, new(int))
}
func TestRemoteCursorSnapshot(t *testing.T) {
snapshot(t, "remote_cursor", 360, 120, func(c *ui.Context) {
k := Tokens(c)
ui.Box(c).Margin(12).Size(320, 80).Background(k.Surface).Children(func() {
ui.Column(c).Children(func() {
for _, l := range []string{"The seal of the court is kept", "by the chancellor, who answers"} {
ui.Text(c, l).Font(theme.MonoFont).FontSize(FontSize(c, 13)).Height(20)
}
})
RemoteCursor(c, []RemoteCaret{{ID: "ada", Name: "Ada", Offset: 48, Anchor: 43}, {ID: "blaise", Name: "Blaise", Offset: 8, Anchor: 8}}, remoteMono())
})
})
}