...
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
87 func (b *Box) Cursor() ebiten.CursorShapeType {
88 return -1
89 }
90
91
92 func (b *Box) HandleKeyboard(key ebiten.Key, r rune) (handled bool, err error) {
93 return false, nil
94 }
95
96
97
98 func (b *Box) HandleMouse(cursor image.Point, pressed bool, clicked bool) (handled bool, err error) {
99 return false, nil
100 }
101
102
103 func (b *Box) Draw(screen *ebiten.Image) error {
104 return nil
105 }
106
107
108
109
110 func (b *Box) Children() []Widget {
111 b.Lock()
112 defer b.Unlock()
113
114 return b.children
115 }
116
117
118 func (b *Box) AddChild(w ...Widget) {
119 b.Lock()
120 defer b.Unlock()
121
122 b.children = append(b.children, w...)
123 }
124
125
126 func (b *Box) Clear() {
127 b.Lock()
128 defer b.Unlock()
129
130 b.children = b.children[:0]
131 }
132
133 var _ Widget = &Box{}
134
View as plain text