event.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. /* event handler and events for the Zori module. */
  2. package event
  3. import . "gitlab.com/beoran/ebsgo/zori/types"
  4. type Basic struct {
  5. Stamp float64
  6. // Widget Widget
  7. Data interface{}
  8. }
  9. func (be Basic) Timestamp() float64 {
  10. return be.Stamp
  11. }
  12. /* Update event, when UI has to update (animations, etc). */
  13. type Update struct {
  14. Basic
  15. TimePassed float64
  16. }
  17. /* Resize event, when the parent of an element has resized. */
  18. type Resize struct {
  19. Basic
  20. NewSize Box
  21. }
  22. /* Draw event when the UI has to draw itself. */
  23. type Draw struct {
  24. Basic
  25. }
  26. /* Cleanup event. */
  27. type Destroy struct {
  28. Basic
  29. }
  30. /* Action event. */
  31. type Action struct {
  32. Basic
  33. }
  34. /* Close event. */
  35. type Close struct {
  36. Basic
  37. // Parent Widget
  38. }
  39. /* Close event. */
  40. type NewChild struct {
  41. Basic
  42. // Child Widget
  43. }
  44. type Event interface {
  45. Timestamp() float64
  46. }
  47. type JoyButtonPress interface {
  48. ID() int
  49. Button() int
  50. IsJoyButtonPress()
  51. }
  52. type JoyButtonRelease interface {
  53. ID() int
  54. Button() int
  55. IsJoyButtonRelease()
  56. }
  57. type JoyAxis interface {
  58. Event
  59. ID() int
  60. Stick() int
  61. Axis() int
  62. Pos() float32
  63. IsJoyAxis()
  64. }
  65. type KeyPress interface {
  66. Event
  67. KeyCode() int
  68. Display() Display
  69. IsKeyPress()
  70. }
  71. type KeyRelease interface {
  72. Event
  73. KeyCode() int
  74. Display() Display
  75. IsKeyRelease()
  76. }
  77. type KeyChar interface {
  78. Event
  79. KeyCode() int
  80. Display() Display
  81. Unichar() rune
  82. Modifiers() int
  83. Repeat() bool
  84. IsKeyChar()
  85. }
  86. type MouseAxes interface {
  87. Event
  88. Display() Display
  89. X() int
  90. Y() int
  91. Z() int
  92. W() int
  93. DX() int
  94. DY() int
  95. DZ() int
  96. DW() int
  97. Pressure() float32
  98. }
  99. type MouseWarped interface {
  100. Event
  101. Display() Display
  102. X() int
  103. Y() int
  104. Z() int
  105. W() int
  106. DX() int
  107. DY() int
  108. DZ() int
  109. DW() int
  110. Pressure() float32
  111. }
  112. type MouseButtonPress interface {
  113. Event
  114. Display() Display
  115. X() int
  116. Y() int
  117. Z() int
  118. W() int
  119. Button() int
  120. Pressure() float32
  121. }
  122. type MouseButtonRelease interface {
  123. Event
  124. Display() Display
  125. X() int
  126. Y() int
  127. Z() int
  128. W() int
  129. Button() int
  130. Pressure() float32
  131. }
  132. type MouseEnterDisplay interface {
  133. Event
  134. Display() Display
  135. X() int
  136. Y() int
  137. Z() int
  138. W() int
  139. }
  140. type MouseLeaveDisplay interface {
  141. Event
  142. Display() Display
  143. X() int
  144. Y() int
  145. Z() int
  146. W() int
  147. }
  148. type Touch interface {
  149. Event
  150. Display() Display
  151. X() int
  152. Y() int
  153. DX() int
  154. DY() int
  155. ID() int
  156. Primary() bool
  157. }
  158. type TouchBegin interface {
  159. Touch
  160. }
  161. type TouchEnd interface {
  162. Touch
  163. }
  164. type TouchMove interface {
  165. Touch
  166. }
  167. type TouchCancel interface {
  168. Touch
  169. }
  170. type Result bool
  171. type UIHandler interface {
  172. Update(ev Update) Result
  173. Resize(ev Resize) Result
  174. Draw(ev Draw) Result
  175. Destroy(ev Destroy) Result
  176. Action(ev Action) Result
  177. Close(ev Close) Result
  178. NewChild(ev NewChild) Result
  179. }
  180. type JoyHandler interface {
  181. JoyButtonPress(ev JoyButtonPress) Result
  182. JoyButtonRelease(ev JoyButtonRelease) Result
  183. JoyAxis(ev JoyAxis) Result
  184. }
  185. type KeyHandler interface {
  186. KeyPress(ev KeyPress) Result
  187. KeyRelease(ev KeyRelease) Result
  188. KeyChar(ev KeyChar) Result
  189. }
  190. type MouseHandler interface {
  191. MouseAxes(ev MouseAxes) Result
  192. MouseWarped(ev MouseWarped) Result
  193. MouseButtonPress(ev MouseButtonPress) Result
  194. MouseButtonRelease(ev MouseButtonRelease) Result
  195. MouseEnterDisplay(ev MouseEnterDisplay) Result
  196. MouseLeaveDisplay(ev MouseLeaveDisplay) Result
  197. }
  198. type TouchHandler interface {
  199. TouchBegin(ev TouchBegin) Result
  200. TouchEnd(ev TouchEnd) Result
  201. TouchMove(ev TouchMove) Result
  202. TouchCancel(ev TouchCancel) Result
  203. }
  204. /* Handler is an interface for a type that can handle all
  205. * of Zori's events. */
  206. type Handler interface {
  207. UIHandler
  208. JoyHandler
  209. KeyHandler
  210. MouseHandler
  211. TouchHandler
  212. Default(ev Event) Result
  213. }
  214. func Dispatch(event Event, handler Handler) Result {
  215. switch de := event.(type) {
  216. case Update: return handler.Update(de)
  217. case Draw: return handler.Draw(de)
  218. case Destroy: return handler.Destroy(de)
  219. case Action: return handler.Action(de)
  220. case Close: return handler.Close(de)
  221. case NewChild: return handler.NewChild(de)
  222. case JoyButtonPress: return handler.JoyButtonPress(de)
  223. case JoyButtonRelease: return handler.JoyButtonRelease(de)
  224. case JoyAxis: return handler.JoyAxis(de)
  225. case KeyPress: return handler.KeyPress(de)
  226. case KeyRelease: return handler.KeyRelease(de)
  227. case KeyChar: return handler.KeyChar(de)
  228. case MouseAxes: return handler.MouseAxes(de)
  229. case MouseWarped: return handler.MouseWarped(de)
  230. case MouseButtonPress: return handler.MouseButtonPress(de)
  231. case MouseButtonRelease: return handler.MouseButtonRelease(de)
  232. case MouseEnterDisplay: return handler.MouseEnterDisplay(de)
  233. case MouseLeaveDisplay: return handler.MouseLeaveDisplay(de)
  234. case TouchBegin: return handler.TouchBegin(de)
  235. case TouchEnd: return handler.TouchEnd(de)
  236. case TouchMove: return handler.TouchMove(de)
  237. case TouchCancel: return handler.TouchCancel(de)
  238. default: return handler.Default(event)
  239. }
  240. }