11package app
22
3+ import (
4+ "slices"
5+ )
6+
37// Controller is a mechanism through which the user code can be
48// notified of changes to the application window.
59//
@@ -33,6 +37,12 @@ type Controller interface {
3337 // not be propagated to other potential receivers, otherwise return false.
3438 OnMouseEvent (window Window , event MouseEvent ) bool
3539
40+ // OnGamepadEvent is called whenever a gamepad event has occurred.
41+ //
42+ // Return true to indicate that the event has been consumed and should
43+ // not be propagated to other potential receivers, otherwise return false.
44+ OnGamepadEvent (window Window , event GamepadEvent ) bool
45+
3646 // OnClipboardEvent is called whenever the clipboard content has been
3747 // requested and the underlying window has managed to retrieve it.
3848 OnClipboardEvent (window Window , event ClipboardEvent ) bool
@@ -71,6 +81,8 @@ func (NopController) OnKeyboardEvent(window Window, event KeyboardEvent) bool {
7181
7282func (NopController ) OnMouseEvent (window Window , event MouseEvent ) bool { return false }
7383
84+ func (NopController ) OnGamepadEvent (window Window , event GamepadEvent ) bool { return false }
85+
7486func (NopController ) OnClipboardEvent (window Window , event ClipboardEvent ) bool { return false }
7587
7688func (NopController ) OnRender (window Window ) {}
@@ -97,67 +109,76 @@ type LayeredController struct {
97109}
98110
99111func (c * LayeredController ) OnCreate (window Window ) {
100- for i := 0 ; i < len ( c .layers ); i ++ {
101- c . layers [ i ] .OnCreate (window )
112+ for _ , layer := range c .layers {
113+ layer .OnCreate (window )
102114 }
103115}
104116
105117func (c * LayeredController ) OnResize (window Window , width , height int ) {
106- for i := 0 ; i < len ( c .layers ); i ++ {
107- c . layers [ i ] .OnResize (window , width , height )
118+ for _ , layer := range c .layers {
119+ layer .OnResize (window , width , height )
108120 }
109121}
110122
111123func (c * LayeredController ) OnFramebufferResize (window Window , width , height int ) {
112- for i := 0 ; i < len ( c .layers ); i ++ {
113- c . layers [ i ] .OnFramebufferResize (window , width , height )
124+ for _ , layer := range c .layers {
125+ layer .OnFramebufferResize (window , width , height )
114126 }
115127}
116128
117129func (c * LayeredController ) OnKeyboardEvent (window Window , event KeyboardEvent ) bool {
118- for i := len (c .layers ) - 1 ; i >= 0 ; i -- {
119- if c . layers [ i ] .OnKeyboardEvent (window , event ) {
130+ for _ , layer := range slices . Backward (c .layers ) {
131+ if layer .OnKeyboardEvent (window , event ) {
120132 return true
121133 }
122134 }
123135 return false
124136}
125137
126138func (c * LayeredController ) OnMouseEvent (window Window , event MouseEvent ) bool {
127- for i := len (c .layers ) - 1 ; i >= 0 ; i -- {
128- if c .layers [i ].OnMouseEvent (window , event ) {
139+ for _ , layer := range slices .Backward (c .layers ) {
140+ if layer .OnMouseEvent (window , event ) {
141+ return true
142+ }
143+ }
144+ return false
145+ }
146+
147+ func (c * LayeredController ) OnGamepadEvent (window Window , event GamepadEvent ) bool {
148+ for _ , layer := range slices .Backward (c .layers ) {
149+ if layer .OnGamepadEvent (window , event ) {
129150 return true
130151 }
131152 }
132153 return false
133154}
134155
135156func (c * LayeredController ) OnClipboardEvent (window Window , event ClipboardEvent ) bool {
136- for i := len (c .layers ) - 1 ; i >= 0 ; i -- {
137- if c . layers [ i ] .OnClipboardEvent (window , event ) {
157+ for _ , layer := range slices . Backward (c .layers ) {
158+ if layer .OnClipboardEvent (window , event ) {
138159 return true
139160 }
140161 }
141162 return false
142163}
143164
144165func (c * LayeredController ) OnRender (window Window ) {
145- for i := 0 ; i < len ( c .layers ); i ++ {
146- c . layers [ i ] .OnRender (window )
166+ for _ , layer := range c .layers {
167+ layer .OnRender (window )
147168 }
148169}
149170
150171func (c * LayeredController ) OnCloseRequested (window Window ) bool {
151- for i := len (c .layers ) - 1 ; i >= 0 ; i -- {
152- if ! c . layers [ i ] .OnCloseRequested (window ) {
172+ for _ , layer := range slices . Backward (c .layers ) {
173+ if ! layer .OnCloseRequested (window ) {
153174 return false
154175 }
155176 }
156177 return true
157178}
158179
159180func (c * LayeredController ) OnDestroy (window Window ) {
160- for i := len (c .layers ) - 1 ; i >= 0 ; i -- {
161- c . layers [ i ] .OnDestroy (window )
181+ for _ , layer := range slices . Backward (c .layers ) {
182+ layer .OnDestroy (window )
162183 }
163184}
0 commit comments