...
1 package etk
2
3 import (
4 "image"
5 "image/color"
6 "sync"
7
8 "github.com/hajimehoshi/ebiten/v2"
9 )
10
11
12
13 type Box struct {
14 rect image.Rectangle
15 children []Widget
16 background color.RGBA
17 visible bool
18
19 sync.Mutex
20 }
21
22
23 func NewBox() *Box {
24 return &Box{
25 background: transparent,
26 visible: true,
27 }
28 }
29
30
31 func (b *Box) Rect() image.Rectangle {
32 b.Lock()
33 defer b.Unlock()
34
35 return b.rect
36 }
37
38
39 func (b *Box) SetRect(r image.Rectangle) {
40 b.Lock()
41 b.rect = r
42 b.Unlock()
43
44 for _, w := range b.children {
45 w.SetRect(r)
46 }
47 }
48
49
50 func (b *Box) Background() color.RGBA {
51 b.Lock()
52 defer b.Unlock()
53
54 return b.background
55 }
56
57
58 func (b *Box) SetBackground(background color.RGBA) {
59 b.Lock()
60 defer b.Unlock()
61
62 b.background = background
63 }
64
65
66 func (b *Box) Focus() bool {
67 return false
68 }
69
70
71 func (b *Box) SetFocus(focus bool) bool {
72 return false
73 }
74
75
76 func (b *Box) Visible() bool {
77 return b.visible
78 }
79
80
81 func (b *Box) SetVisible(visible bool) {
82 b.visible = visible
83 }
84
85
86 func (b *Box) HandleKeyboard(key ebiten.Key, r rune) (handled bool, err error) {
87 return false, nil
88 }
89
90
91
92 func (b *Box) HandleMouse(cursor image.Point, pressed bool, clicked bool) (handled bool, err error) {
93 return false, nil
94 }
95
96
97 func (b *Box) Draw(screen *ebiten.Image) error {
98 return nil
99 }
100
101
102
103
104 func (b *Box) Children() []Widget {
105 b.Lock()
106 defer b.Unlock()
107
108 return b.children
109 }
110
111
112 func (b *Box) AddChild(w ...Widget) {
113 b.Lock()
114 defer b.Unlock()
115
116 b.children = append(b.children, w...)
117 }
118
119
120 func (b *Box) Clear() {
121 b.Lock()
122 defer b.Unlock()
123
124 b.children = b.children[:0]
125 }
126
127 var _ Widget = &Box{}
128
View as plain text