kredki 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. checksums.yaml +7 -0
  2. data/lib/kredki/core/application.rb +314 -0
  3. data/lib/kredki/core/color.rb +100 -0
  4. data/lib/kredki/core/event/block_event_reaction.rb +44 -0
  5. data/lib/kredki/core/event/composite_event_manager.rb +37 -0
  6. data/lib/kredki/core/event/event.rb +91 -0
  7. data/lib/kredki/core/event/event_manager.rb +60 -0
  8. data/lib/kredki/core/event/event_manager_jobs.rb +53 -0
  9. data/lib/kredki/core/event/event_reaction.rb +36 -0
  10. data/lib/kredki/core/event/family/drop_event.rb +40 -0
  11. data/lib/kredki/core/event/family/exit_event.rb +5 -0
  12. data/lib/kredki/core/event/family/focus_enter_event.rb +5 -0
  13. data/lib/kredki/core/event/family/focus_leave_event.rb +5 -0
  14. data/lib/kredki/core/event/family/hide_event.rb +5 -0
  15. data/lib/kredki/core/event/family/joystick_event.rb +102 -0
  16. data/lib/kredki/core/event/family/key_event.rb +40 -0
  17. data/lib/kredki/core/event/family/mouse_event.rb +190 -0
  18. data/lib/kredki/core/event/family/pastele_event.rb +11 -0
  19. data/lib/kredki/core/event/family/show_event.rb +5 -0
  20. data/lib/kredki/core/event/family/text_event.rb +23 -0
  21. data/lib/kredki/core/event/family/tick_event.rb +5 -0
  22. data/lib/kredki/core/event/family/update_complete_event.rb +5 -0
  23. data/lib/kredki/core/event/family/window_event.rb +108 -0
  24. data/lib/kredki/core/event/job_event_reaction.rb +44 -0
  25. data/lib/kredki/core/event/joystick_event_manager.rb +30 -0
  26. data/lib/kredki/core/event/keyboard_event_manager.rb +29 -0
  27. data/lib/kredki/core/event/method_event_reaction.rb +46 -0
  28. data/lib/kredki/core/event/mouse_event_manager.rb +27 -0
  29. data/lib/kredki/core/font.rb +53 -0
  30. data/lib/kredki/core/job/after_job.rb +59 -0
  31. data/lib/kredki/core/job/job.rb +108 -0
  32. data/lib/kredki/core/job/loop_job.rb +87 -0
  33. data/lib/kredki/core/job/play_animation_job.rb +44 -0
  34. data/lib/kredki/core/job/play_job.rb +41 -0
  35. data/lib/kredki/core/job/play_loop_animation_job.rb +98 -0
  36. data/lib/kredki/core/job/play_loop_job.rb +104 -0
  37. data/lib/kredki/core/job/side_job.rb +62 -0
  38. data/lib/kredki/core/kernel-path.rb +71 -0
  39. data/lib/kredki/core/kredki.rb +89 -0
  40. data/lib/kredki/core/linear_gradient.rb +43 -0
  41. data/lib/kredki/core/media/clipboard.rb +35 -0
  42. data/lib/kredki/core/media/joystick.rb +199 -0
  43. data/lib/kredki/core/media/keyboard.rb +84 -0
  44. data/lib/kredki/core/media/keyboard_modifiers_decoder.rb +154 -0
  45. data/lib/kredki/core/media/mouse.rb +197 -0
  46. data/lib/kredki/core/paint/animation.rb +247 -0
  47. data/lib/kredki/core/paint/area.rb +67 -0
  48. data/lib/kredki/core/paint/block_shape_area.rb +102 -0
  49. data/lib/kredki/core/paint/ellipse.rb +22 -0
  50. data/lib/kredki/core/paint/paint.rb +392 -0
  51. data/lib/kredki/core/paint/picture.rb +126 -0
  52. data/lib/kredki/core/paint/rectangle.rb +202 -0
  53. data/lib/kredki/core/paint/scene.rb +277 -0
  54. data/lib/kredki/core/paint/shape.rb +394 -0
  55. data/lib/kredki/core/paint/shape_area.rb +57 -0
  56. data/lib/kredki/core/paint/text.rb +222 -0
  57. data/lib/kredki/core/pastele/pastele-extern.rb +139 -0
  58. data/lib/kredki/core/pastele/pastele.rb +205 -0
  59. data/lib/kredki/core/radial_gradient.rb +45 -0
  60. data/lib/kredki/core/setup.rb +214 -0
  61. data/lib/kredki/core/window/pane.rb +178 -0
  62. data/lib/kredki/core/window/pane_event_manager.rb +44 -0
  63. data/lib/kredki/core/window/pane_events.rb +366 -0
  64. data/lib/kredki/core/window/window.rb +584 -0
  65. data/lib/kredki/core.rb +2 -0
  66. data/lib/kredki/hide.rb +9 -0
  67. data/lib/kredki/irb.rb +90 -0
  68. data/lib/kredki/module.rb +3 -0
  69. data/lib/kredki/pads/application.rb +13 -0
  70. data/lib/kredki/pads/button.rb +151 -0
  71. data/lib/kredki/pads/checkbox/checkbox.rb +68 -0
  72. data/lib/kredki/pads/checkbox/checkbox_button.rb +65 -0
  73. data/lib/kredki/pads/context/item.rb +65 -0
  74. data/lib/kredki/pads/context/item_group.rb +10 -0
  75. data/lib/kredki/pads/context/layer.rb +59 -0
  76. data/lib/kredki/pads/context/menu.rb +77 -0
  77. data/lib/kredki/pads/context/pad.rb +26 -0
  78. data/lib/kredki/pads/context/primary_layer.rb +51 -0
  79. data/lib/kredki/pads/context/secondary_layer.rb +60 -0
  80. data/lib/kredki/pads/item/item.rb +140 -0
  81. data/lib/kredki/pads/item/item_group.rb +44 -0
  82. data/lib/kredki/pads/item/item_x.rb +22 -0
  83. data/lib/kredki/pads/item/item_y.rb +31 -0
  84. data/lib/kredki/pads/label.rb +71 -0
  85. data/lib/kredki/pads/layer.rb +326 -0
  86. data/lib/kredki/pads/layout/align.rb +10 -0
  87. data/lib/kredki/pads/layout/layout.rb +88 -0
  88. data/lib/kredki/pads/layout/way.rb +99 -0
  89. data/lib/kredki/pads/layout/x_way.rb +119 -0
  90. data/lib/kredki/pads/layout/y_way.rb +120 -0
  91. data/lib/kredki/pads/list/item.rb +117 -0
  92. data/lib/kredki/pads/list/item_group.rb +36 -0
  93. data/lib/kredki/pads/list/pad.rb +74 -0
  94. data/lib/kredki/pads/list/tree/item.rb +138 -0
  95. data/lib/kredki/pads/list/tree/item_group.rb +86 -0
  96. data/lib/kredki/pads/list/tree/pad.rb +94 -0
  97. data/lib/kredki/pads/module.rb +11 -0
  98. data/lib/kredki/pads/note.rb +212 -0
  99. data/lib/kredki/pads/notes.rb +32 -0
  100. data/lib/kredki/pads/option/option.rb +121 -0
  101. data/lib/kredki/pads/option/option_item.rb +15 -0
  102. data/lib/kredki/pads/option/option_item_group.rb +16 -0
  103. data/lib/kredki/pads/option/option_layer.rb +81 -0
  104. data/lib/kredki/pads/pad/animation_pad.rb +106 -0
  105. data/lib/kredki/pads/pad/glyph_pad.rb +71 -0
  106. data/lib/kredki/pads/pad/pad.rb +1290 -0
  107. data/lib/kredki/pads/pad/pad_events.rb +358 -0
  108. data/lib/kredki/pads/pad/picture_pad.rb +89 -0
  109. data/lib/kredki/pads/pad/rectangle_pad.rb +181 -0
  110. data/lib/kredki/pads/pad/scroll_pad.rb +176 -0
  111. data/lib/kredki/pads/pad/shape_pad.rb +148 -0
  112. data/lib/kredki/pads/pad/space_pad.rb +33 -0
  113. data/lib/kredki/pads/pad/text_pad.rb +310 -0
  114. data/lib/kredki/pads/pane.rb +267 -0
  115. data/lib/kredki/pads/portal_layer.rb +94 -0
  116. data/lib/kredki/pads/radio/group.rb +45 -0
  117. data/lib/kredki/pads/radio/item.rb +69 -0
  118. data/lib/kredki/pads/radio/item_button.rb +143 -0
  119. data/lib/kredki/pads/service/event_queue.rb +79 -0
  120. data/lib/kredki/pads/service/service.rb +248 -0
  121. data/lib/kredki/pads/service/service_event_manager.rb +43 -0
  122. data/lib/kredki/pads/service/service_filter.rb +98 -0
  123. data/lib/kredki/pads/service/service_inherited.rb +48 -0
  124. data/lib/kredki/pads/setup.rb +36 -0
  125. data/lib/kredki/pads/slider/slider.rb +145 -0
  126. data/lib/kredki/pads/slider/slider_x.rb +41 -0
  127. data/lib/kredki/pads/slider/slider_y.rb +41 -0
  128. data/lib/kredki/pads/table/cell.rb +22 -0
  129. data/lib/kredki/pads/table/column.rb +63 -0
  130. data/lib/kredki/pads/table/column_layout.rb +88 -0
  131. data/lib/kredki/pads/table/pad.rb +116 -0
  132. data/lib/kredki/pads/table/row.rb +24 -0
  133. data/lib/kredki/pads/table/scroll_rows.rb +50 -0
  134. data/lib/kredki/pads/text/editable_text_verse.rb +77 -0
  135. data/lib/kredki/pads/text/editable_text_verses.rb +59 -0
  136. data/lib/kredki/pads/text/navigable_text_pad.rb +413 -0
  137. data/lib/kredki/pads/text/text_edition.rb +97 -0
  138. data/lib/kredki/pads/text/text_navigation.rb +109 -0
  139. data/lib/kredki/pads/toolbar/item.rb +62 -0
  140. data/lib/kredki/pads/toolbar/item_group.rb +22 -0
  141. data/lib/kredki/pads/toolbar/layer.rb +41 -0
  142. data/lib/kredki/pads/toolbar/pad.rb +51 -0
  143. data/lib/kredki/pads/toolbar/primary_layer.rb +64 -0
  144. data/lib/kredki/pads/window.rb +11 -0
  145. data/lib/kredki/script.rb +29 -0
  146. data/lib/kredki/setup.rb +2 -0
  147. data/lib/kredki/test.rb +35 -0
  148. data/lib/kredki.rb +10 -0
  149. data/lib/readme.md +31 -0
  150. data/stuff/config/config.rb +431 -0
  151. data/stuff/config/pads_config.rb +111 -0
  152. data/stuff/dll/SDL3.dll +0 -0
  153. data/stuff/dll/pastele.dll +0 -0
  154. data/stuff/dll/thorvg-1.dll +0 -0
  155. data/stuff/font/MartianMono-StdRg.ttf +0 -0
  156. data/stuff/font/MavenPro-Medium.ttf +0 -0
  157. data/stuff/font/MavenPro-Regular.ttf +0 -0
  158. data/stuff/glyph/alert-circle-svgrepo-com.svg +4 -0
  159. data/stuff/glyph/alert-triangle-svgrepo-com.svg +12 -0
  160. data/stuff/glyph/archivebox-svgrepo-com.svg +5 -0
  161. data/stuff/glyph/arrow-2-ccw-svgrepo-com.svg +5 -0
  162. data/stuff/glyph/arrow-2-cw-svgrepo-com.svg +5 -0
  163. data/stuff/glyph/arrow-2-rectangle-path-svgrepo-com.svg +5 -0
  164. data/stuff/glyph/arrow-4-way-svgrepo-com.svg +4 -0
  165. data/stuff/glyph/arrow-ccw-svgrepo-com.svg +4 -0
  166. data/stuff/glyph/arrow-circle-down-svgrepo-com.svg +4 -0
  167. data/stuff/glyph/arrow-circle-left-svgrepo-com.svg +4 -0
  168. data/stuff/glyph/arrow-circle-right-svgrepo-com.svg +4 -0
  169. data/stuff/glyph/arrow-circle-up-svgrepo-com.svg +4 -0
  170. data/stuff/glyph/arrow-cw-svgrepo-com.svg +4 -0
  171. data/stuff/glyph/arrow-down-svgrepo-com.svg +4 -0
  172. data/stuff/glyph/arrow-from-line-down-svgrepo-com.svg +5 -0
  173. data/stuff/glyph/arrow-from-line-left-svgrepo-com.svg +5 -0
  174. data/stuff/glyph/arrow-from-line-right-svgrepo-com.svg +5 -0
  175. data/stuff/glyph/arrow-from-line-up-svgrepo-com.svg +5 -0
  176. data/stuff/glyph/arrow-from-shape-right-svgrepo-com.svg +5 -0
  177. data/stuff/glyph/arrow-from-shape-up-svgrepo-com.svg +5 -0
  178. data/stuff/glyph/arrow-left-svgrepo-com.svg +4 -0
  179. data/stuff/glyph/arrow-right-arrow-left-svgrepo-com.svg +5 -0
  180. data/stuff/glyph/arrow-right-svgrepo-com.svg +4 -0
  181. data/stuff/glyph/arrow-shape-turn-left-svgrepo-com.svg +4 -0
  182. data/stuff/glyph/arrow-shape-turn-right-svgrepo-com.svg +4 -0
  183. data/stuff/glyph/arrow-small-down-svgrepo-com.svg +4 -0
  184. data/stuff/glyph/arrow-small-left-svgrepo-com.svg +4 -0
  185. data/stuff/glyph/arrow-small-right-svgrepo-com.svg +4 -0
  186. data/stuff/glyph/arrow-small-up-svgrepo-com.svg +4 -0
  187. data/stuff/glyph/arrow-thin-down-svgrepo-com.svg +4 -0
  188. data/stuff/glyph/arrow-thin-left-svgrepo-com.svg +4 -0
  189. data/stuff/glyph/arrow-thin-right-svgrepo-com.svg +4 -0
  190. data/stuff/glyph/arrow-thin-up-svgrepo-com.svg +4 -0
  191. data/stuff/glyph/arrow-to-line-down-svgrepo-com.svg +5 -0
  192. data/stuff/glyph/arrow-to-line-left-svgrepo-com.svg +5 -0
  193. data/stuff/glyph/arrow-to-line-right-svgrepo-com.svg +5 -0
  194. data/stuff/glyph/arrow-to-line-up-svgrepo-com.svg +5 -0
  195. data/stuff/glyph/arrow-to-shape-down-svgrepo-com.svg +5 -0
  196. data/stuff/glyph/arrow-to-shape-right-svgrepo-com.svg +5 -0
  197. data/stuff/glyph/arrow-trend-down-svgrepo-com.svg +12 -0
  198. data/stuff/glyph/arrow-trend-up-svgrepo-com.svg +12 -0
  199. data/stuff/glyph/arrow-turn-down-left-svgrepo-com.svg +4 -0
  200. data/stuff/glyph/arrow-turn-down-right-svgrepo-com.svg +4 -0
  201. data/stuff/glyph/arrow-turn-left-down-svgrepo-com.svg +4 -0
  202. data/stuff/glyph/arrow-turn-left-up-svgrepo-com.svg +4 -0
  203. data/stuff/glyph/arrow-turn-right-down-svgrepo-com.svg +4 -0
  204. data/stuff/glyph/arrow-turn-right-up-svgrepo-com.svg +4 -0
  205. data/stuff/glyph/arrow-turn-up-left-svgrepo-com.svg +4 -0
  206. data/stuff/glyph/arrow-turn-up-right-svgrepo-com.svg +4 -0
  207. data/stuff/glyph/arrow-up-arrow-down-svgrepo-com.svg +5 -0
  208. data/stuff/glyph/arrow-up-svgrepo-com.svg +4 -0
  209. data/stuff/glyph/at-sign-svgrepo-com.svg +4 -0
  210. data/stuff/glyph/bag-svgrepo-com.svg +4 -0
  211. data/stuff/glyph/bell-slash-svgrepo-com.svg +6 -0
  212. data/stuff/glyph/bell-svgrepo-com.svg +5 -0
  213. data/stuff/glyph/book-open-svgrepo-com.svg +5 -0
  214. data/stuff/glyph/bookmark-svgrepo-com.svg +4 -0
  215. data/stuff/glyph/box-svgrepo-com.svg +6 -0
  216. data/stuff/glyph/calendar-svgrepo-com.svg +5 -0
  217. data/stuff/glyph/camera-svgrepo-com.svg +4 -0
  218. data/stuff/glyph/caret-down-svgrepo-com.svg +4 -0
  219. data/stuff/glyph/caret-left-svgrepo-com.svg +4 -0
  220. data/stuff/glyph/caret-right-svgrepo-com.svg +4 -0
  221. data/stuff/glyph/caret-up-svgrepo-com.svg +4 -0
  222. data/stuff/glyph/cart-svgrepo-com.svg +6 -0
  223. data/stuff/glyph/chart-pie-svgrepo-com.svg +5 -0
  224. data/stuff/glyph/chartbar-2-svgrepo-com.svg +7 -0
  225. data/stuff/glyph/chartbar-svgrepo-com.svg +7 -0
  226. data/stuff/glyph/checkmark-circle-svgrepo-com.svg +4 -0
  227. data/stuff/glyph/checkmark-double-svgrepo-com.svg +5 -0
  228. data/stuff/glyph/checkmark-square-svgrepo-com.svg +4 -0
  229. data/stuff/glyph/checkmark-svgrepo-com.svg +4 -0
  230. data/stuff/glyph/chevron-down-svgrepo-com.svg +4 -0
  231. data/stuff/glyph/chevron-left-chevron-right-svgrepo-com.svg +5 -0
  232. data/stuff/glyph/chevron-left-svgrepo-com.svg +4 -0
  233. data/stuff/glyph/chevron-right-svgrepo-com.svg +4 -0
  234. data/stuff/glyph/chevron-small-down-svgrepo-com.svg +4 -0
  235. data/stuff/glyph/chevron-small-left-svgrepo-com.svg +4 -0
  236. data/stuff/glyph/chevron-small-right-svgrepo-com.svg +4 -0
  237. data/stuff/glyph/chevron-small-up-svgrepo-com.svg +4 -0
  238. data/stuff/glyph/chevron-up-chevron-down-svgrepo-com.svg +5 -0
  239. data/stuff/glyph/chevron-up-svgrepo-com.svg +4 -0
  240. data/stuff/glyph/clock-svgrepo-com.svg +4 -0
  241. data/stuff/glyph/cloud-arrow-up-svgrepo-com.svg +4 -0
  242. data/stuff/glyph/cloud-download-svgrepo-com.svg +4 -0
  243. data/stuff/glyph/cloud-slash-svgrepo-com.svg +5 -0
  244. data/stuff/glyph/cloud-svgrepo-com.svg +4 -0
  245. data/stuff/glyph/columns-svgrepo-com.svg +5 -0
  246. data/stuff/glyph/command-svgrepo-com.svg +4 -0
  247. data/stuff/glyph/compass-svgrepo-com.svg +5 -0
  248. data/stuff/glyph/credit-card-svgrepo-com.svg +5 -0
  249. data/stuff/glyph/crop-svgrepo-com.svg +5 -0
  250. data/stuff/glyph/crown-svgrepo-com.svg +4 -0
  251. data/stuff/glyph/delete-left-svgrepo-com.svg +4 -0
  252. data/stuff/glyph/device-desktop-svgrepo-com.svg +4 -0
  253. data/stuff/glyph/device-mobile-svgrepo-com.svg +4 -0
  254. data/stuff/glyph/device-tablet-svgrepo-com.svg +4 -0
  255. data/stuff/glyph/doc-svgrepo-com.svg +5 -0
  256. data/stuff/glyph/dot-small-svgrepo-com.svg +4 -0
  257. data/stuff/glyph/dots-3-horizontal-svgrepo-com.svg +6 -0
  258. data/stuff/glyph/dots-3-vertical-svgrepo-com.svg +6 -0
  259. data/stuff/glyph/dots-6-horizontal-svgrepo-com.svg +9 -0
  260. data/stuff/glyph/dots-6-vertical-svgrepo-com.svg +9 -0
  261. data/stuff/glyph/dots-9-svgrepo-com.svg +12 -0
  262. data/stuff/glyph/emoji-frown-svgrepo-com.svg +4 -0
  263. data/stuff/glyph/emoji-meh-svgrepo-com.svg +4 -0
  264. data/stuff/glyph/emoji-smile-svgrepo-com.svg +4 -0
  265. data/stuff/glyph/envelope-svgrepo-com.svg +5 -0
  266. data/stuff/glyph/external-link-svgrepo-com.svg +5 -0
  267. data/stuff/glyph/eye-slash-svgrepo-com.svg +15 -0
  268. data/stuff/glyph/eye-svgrepo-com.svg +4 -0
  269. data/stuff/glyph/filter-svgrepo-com.svg +4 -0
  270. data/stuff/glyph/flame-svgrepo-com.svg +4 -0
  271. data/stuff/glyph/floppy-disk-svgrepo-com.svg +4 -0
  272. data/stuff/glyph/folder-svgrepo-com.svg +4 -0
  273. data/stuff/glyph/fullscreen-alt-svgrepo-com.svg +7 -0
  274. data/stuff/glyph/fullscreen-exit-alt-svgrepo-com.svg +7 -0
  275. data/stuff/glyph/fullscreen-exit-svgrepo-com.svg +5 -0
  276. data/stuff/glyph/fullscreen-svgrepo-com.svg +5 -0
  277. data/stuff/glyph/gear-svgrepo-com.svg +4 -0
  278. data/stuff/glyph/giftbox-svgrepo-com.svg +6 -0
  279. data/stuff/glyph/half-star-svgrepo-com.svg +4 -0
  280. data/stuff/glyph/hashtag-svgrepo-com.svg +4 -0
  281. data/stuff/glyph/headphones-svgrepo-com.svg +4 -0
  282. data/stuff/glyph/heart-half-svgrepo-com.svg +4 -0
  283. data/stuff/glyph/heart-svgrepo-com.svg +4 -0
  284. data/stuff/glyph/house-svgrepo-com.svg +4 -0
  285. data/stuff/glyph/image-svgrepo-com.svg +4 -0
  286. data/stuff/glyph/info-circle-svgrepo-com.svg +4 -0
  287. data/stuff/glyph/key-svgrepo-com.svg +4 -0
  288. data/stuff/glyph/layers-3-svgrepo-com.svg +6 -0
  289. data/stuff/glyph/layout-svgrepo-com.svg +6 -0
  290. data/stuff/glyph/line-3-svgrepo-com.svg +6 -0
  291. data/stuff/glyph/link-alt-svgrepo-com.svg +5 -0
  292. data/stuff/glyph/link-svgrepo-com.svg +6 -0
  293. data/stuff/glyph/list-bullet-svgrepo-com.svg +9 -0
  294. data/stuff/glyph/location-svgrepo-com.svg +4 -0
  295. data/stuff/glyph/lock-open-svgrepo-com.svg +4 -0
  296. data/stuff/glyph/lock-svgrepo-com.svg +4 -0
  297. data/stuff/glyph/map-pin-svgrepo-com.svg +4 -0
  298. data/stuff/glyph/medal-svgrepo-com.svg +13 -0
  299. data/stuff/glyph/media-backward-end-svgrepo-com.svg +5 -0
  300. data/stuff/glyph/media-backward-svgrepo-com.svg +5 -0
  301. data/stuff/glyph/media-forward-end-svgrepo-com.svg +5 -0
  302. data/stuff/glyph/media-forward-svgrepo-com.svg +4 -0
  303. data/stuff/glyph/media-pause-circle-svgrepo-com.svg +4 -0
  304. data/stuff/glyph/media-pause-svgrepo-com.svg +5 -0
  305. data/stuff/glyph/media-play-circle-svgrepo-com.svg +4 -0
  306. data/stuff/glyph/media-play-svgrepo-com.svg +4 -0
  307. data/stuff/glyph/media-stop-circle-svgrepo-com.svg +4 -0
  308. data/stuff/glyph/media-stop-svgrepo-com.svg +4 -0
  309. data/stuff/glyph/message-bubble-2-svgrepo-com.svg +4 -0
  310. data/stuff/glyph/message-bubble-svgrepo-com.svg +4 -0
  311. data/stuff/glyph/mic-slash-svgrepo-com.svg +6 -0
  312. data/stuff/glyph/mic-svgrepo-com.svg +5 -0
  313. data/stuff/glyph/minus-circle-svgrepo-com.svg +4 -0
  314. data/stuff/glyph/minus-square-svgrepo-com.svg +4 -0
  315. data/stuff/glyph/minus-svgrepo-com.svg +4 -0
  316. data/stuff/glyph/moon-svgrepo-com.svg +4 -0
  317. data/stuff/glyph/music-note-svgrepo-com.svg +4 -0
  318. data/stuff/glyph/nosign-svgrepo-com.svg +4 -0
  319. data/stuff/glyph/paper-clip-svgrepo-com.svg +4 -0
  320. data/stuff/glyph/paper-plane-svgrepo-com.svg +4 -0
  321. data/stuff/glyph/pen-tool-svgrepo-com.svg +4 -0
  322. data/stuff/glyph/pencil-svgrepo-com.svg +5 -0
  323. data/stuff/glyph/percent-svgrepo-com.svg +6 -0
  324. data/stuff/glyph/phone-incoming-svgrepo-com.svg +5 -0
  325. data/stuff/glyph/phone-missed-svgrepo-com.svg +4 -0
  326. data/stuff/glyph/phone-outgoing-svgrepo-com.svg +5 -0
  327. data/stuff/glyph/phone-slash-svgrepo-com.svg +4 -0
  328. data/stuff/glyph/phone-svgrepo-com.svg +4 -0
  329. data/stuff/glyph/plus-circle-svgrepo-com.svg +4 -0
  330. data/stuff/glyph/plus-square-svgrepo-com.svg +4 -0
  331. data/stuff/glyph/plus-svgrepo-com.svg +4 -0
  332. data/stuff/glyph/power-svgrepo-com.svg +5 -0
  333. data/stuff/glyph/printer-svgrepo-com.svg +5 -0
  334. data/stuff/glyph/question-circle-svgrepo-com.svg +4 -0
  335. data/stuff/glyph/scissors-svgrepo-com.svg +5 -0
  336. data/stuff/glyph/search-svgrepo-com.svg +4 -0
  337. data/stuff/glyph/server-svgrepo-com.svg +5 -0
  338. data/stuff/glyph/shape-circle-svgrepo-com.svg +4 -0
  339. data/stuff/glyph/shape-rhombus-svgrepo-com.svg +4 -0
  340. data/stuff/glyph/shape-square-svgrepo-com.svg +4 -0
  341. data/stuff/glyph/shape-triangle-svgrepo-com.svg +12 -0
  342. data/stuff/glyph/share-svgrepo-com.svg +4 -0
  343. data/stuff/glyph/shield-slash-svgrepo-com.svg +13 -0
  344. data/stuff/glyph/shield-svgrepo-com.svg +4 -0
  345. data/stuff/glyph/shippingbox-svgrepo-com.svg +7 -0
  346. data/stuff/glyph/slider-3-horizontal-svgrepo-com.svg +9 -0
  347. data/stuff/glyph/slider-3-vertical-svgrepo-com.svg +9 -0
  348. data/stuff/glyph/speaker-svgrepo-com.svg +4 -0
  349. data/stuff/glyph/speaker-wave-1-svgrepo-com.svg +5 -0
  350. data/stuff/glyph/speaker-wave-2-svgrepo-com.svg +6 -0
  351. data/stuff/glyph/speaker-xmark-svgrepo-com.svg +5 -0
  352. data/stuff/glyph/square-4-grid-svgrepo-com.svg +7 -0
  353. data/stuff/glyph/square-on-square-svgrepo-com.svg +5 -0
  354. data/stuff/glyph/star-svgrepo-com.svg +4 -0
  355. data/stuff/glyph/sun-svgrepo-com.svg +12 -0
  356. data/stuff/glyph/tag-svgrepo-com.svg +4 -0
  357. data/stuff/glyph/text-align-center-svgrepo-com.svg +7 -0
  358. data/stuff/glyph/text-align-justify-svgrepo-com.svg +7 -0
  359. data/stuff/glyph/text-align-left-svgrepo-com.svg +7 -0
  360. data/stuff/glyph/text-align-right-svgrepo-com.svg +7 -0
  361. data/stuff/glyph/text-bold-svgrepo-com.svg +4 -0
  362. data/stuff/glyph/text-heading-svgrepo-com.svg +4 -0
  363. data/stuff/glyph/text-italic-svgrepo-com.svg +4 -0
  364. data/stuff/glyph/text-svgrepo-com.svg +4 -0
  365. data/stuff/glyph/text-underline-svgrepo-com.svg +5 -0
  366. data/stuff/glyph/thumbs-down-svgrepo-com.svg +5 -0
  367. data/stuff/glyph/thumbs-up-svgrepo-com.svg +5 -0
  368. data/stuff/glyph/trash-svgrepo-com.svg +5 -0
  369. data/stuff/glyph/tray-svgrepo-com.svg +4 -0
  370. data/stuff/glyph/umbrela-svgrepo-com.svg +4 -0
  371. data/stuff/glyph/user-svgrepo-com.svg +5 -0
  372. data/stuff/glyph/users-svgrepo-com.svg +7 -0
  373. data/stuff/glyph/video-svgrepo-com.svg +12 -0
  374. data/stuff/glyph/waveform-ecg-svgrepo-com.svg +4 -0
  375. data/stuff/glyph/wi-fi-svgrepo-com.svg +7 -0
  376. data/stuff/glyph/xmark-circle-svgrepo-com.svg +4 -0
  377. data/stuff/glyph/xmark-small-svgrepo-com.svg +4 -0
  378. data/stuff/glyph/xmark-svgrepo-com.svg +4 -0
  379. data/stuff/glyph/zap-svgrepo-com.svg +4 -0
  380. data/stuff/glyph/zoom-in-svgrepo-com.svg +5 -0
  381. data/stuff/glyph/zoom-out-svgrepo-com.svg +5 -0
  382. data/stuff/readme.md +266 -0
  383. data/stuff/so/libSDL3.so +0 -0
  384. data/stuff/so/libpastele.so +0 -0
  385. data/stuff/so/libthorvg-1.so +0 -0
  386. metadata +427 -0
@@ -0,0 +1,46 @@
1
+ module Kredki
2
+ # Method based event reaction.
3
+ class MethodEventReaction < EventReaction
4
+
5
+ # Attach copy of reaction to another manager.
6
+ def attach manager, always = false
7
+ self.class.new @method, manager, always
8
+ end
9
+
10
+ # Cancel reaction.
11
+ def cancel
12
+ super
13
+ @method = nil
14
+ end
15
+
16
+ # :section: LEVEL 2
17
+
18
+ def initialize method, ...
19
+ super(...)
20
+ @method = method
21
+ end
22
+
23
+ attr_accessor :method
24
+
25
+ def call event = nil
26
+ return if !@always && event&.closed?
27
+ event&.reaction = self
28
+ begin
29
+ @method.call event
30
+ rescue => e
31
+ res = Kredki.app.rescue
32
+ if res
33
+ res.call e, event
34
+ else
35
+ raise inspect
36
+ end
37
+ end
38
+ end
39
+
40
+ def inspect
41
+ "#{self.class}:#{object_id} #{@method.source_location}"
42
+ end
43
+
44
+
45
+ end
46
+ end
@@ -0,0 +1,27 @@
1
+ module Kredki
2
+ # Manage mouse events managers.
3
+ class MouseEventManager
4
+
5
+ # :section: LEVEL 2
6
+
7
+ def initialize
8
+ @managers = {}
9
+ end
10
+
11
+ def report event
12
+ id = event.code and @managers[id]&.report event
13
+ @managers[nil]&.report event
14
+ end
15
+
16
+ def [](*ids)
17
+ case ids.size
18
+ when 0
19
+ @managers[nil] ||= EventManager.new
20
+ when 1
21
+ @managers[ids.first] ||= EventManager.new
22
+ else
23
+ CompositeEventManager.new ids.map{|it| @managers[it] ||= EventManager.new }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,53 @@
1
+ module Kredki
2
+ # Immutable font model
3
+ class Font
4
+
5
+ # Get name.
6
+ def name
7
+ unless @loaded
8
+ @name = Font.load path
9
+ @loaded = true
10
+ end
11
+ @name
12
+ end
13
+
14
+ # Get path.
15
+ def path
16
+ @path
17
+ end
18
+
19
+ # :section: LEVEL 2
20
+
21
+ def initialize path
22
+ @path = path
23
+ @loaded = false
24
+ @name = nil
25
+ end
26
+
27
+ class << self
28
+ attr_accessor :loaded_fonts
29
+
30
+ def load path
31
+ name = path_to_name path
32
+ loaded = loaded_fonts[name]
33
+ return name if loaded == path
34
+ unload name if loaded
35
+ Pastele.font_load path
36
+ loaded_fonts[name] = path
37
+ name
38
+ end
39
+
40
+ def unload font
41
+ name = String === font ? font : font.name
42
+ path = loaded_fonts.delete name
43
+ Pastele.font_unload name if path
44
+ end
45
+
46
+ def path_to_name path
47
+ path.split("/").last.split(".").first
48
+ end
49
+ end
50
+
51
+ self.loaded_fonts = {}
52
+ end
53
+ end
@@ -0,0 +1,59 @@
1
+ module Kredki
2
+ # Job executed after 0 or more milisecond delay.
3
+ class AfterJob < Job
4
+
5
+ # Run job.
6
+ def run host, event = nil
7
+ cancel
8
+ @host = host
9
+ @event = event || RunEvent.new(nil, nil, self)
10
+ @run_ms = @host.app.ms + @delay
11
+ @host.put_job self
12
+ end
13
+
14
+ # Cancel job and all subjobs.
15
+ def cancel event = nil
16
+ @host&.delete_job self
17
+ @event_manager.report event || CancelEvent.new
18
+ @host = nil
19
+ end
20
+
21
+ # :section: LEVEL 2
22
+
23
+ def initialize block, delay
24
+ super()
25
+ @block = block
26
+ @delay = delay
27
+ @run_ms = 0
28
+ end
29
+
30
+ def inspect
31
+ "#{self.class}:#{object_id} #{@block}"
32
+ end
33
+
34
+ def tick ms
35
+ dms = ms - @run_ms
36
+ if dms >= 0
37
+ if RunEvent === @event
38
+ if @block
39
+ result = @block.call self, @event.source || @event, @event.result
40
+ else
41
+ result = @event.result
42
+ end
43
+ @event_manager.report RunEvent.new result, @event.source || nil, @host
44
+ else
45
+ if @block
46
+ result = @block.call self, @event
47
+ else
48
+ result = nil
49
+ end
50
+ @event_manager.report RunEvent.new result, @event, @host
51
+ end
52
+ @host = nil
53
+ @event = nil
54
+ return false
55
+ end
56
+ true
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,108 @@
1
+ module Kredki
2
+ # Base class for jobs.
3
+ class Job
4
+
5
+ # Create and attach job after.
6
+ def after delay = 0, &block
7
+ case delay
8
+ when Numeric
9
+ job = AfterJob.new block, delay
10
+ @event_manager << job
11
+ job
12
+ when Job
13
+ @event_manager << delay
14
+ delay
15
+ when Proc
16
+ job = AfterJob.new delay, 0
17
+ @event_manager << job
18
+ job
19
+ else raise_ia delay
20
+ end
21
+ end
22
+
23
+ # Create and attach Kredki::LoopJob.
24
+ def loop period = 0, &block
25
+ after LoopJob.new block, period
26
+ end
27
+
28
+ # Create and attach Kredki::SideJob.
29
+ def side &block
30
+ after SideJob.new block
31
+ end
32
+
33
+ # Create and attach play job.
34
+ def play subject, speed: 1, &block
35
+ case subject
36
+ when Numeric
37
+ after PlayJob.new block, subject, speed
38
+ else
39
+ after PlayAnimationJob.new block, subject, speed
40
+ end
41
+ end
42
+
43
+ # Create and attach play in loop job.
44
+ def play_loop subject, speed: 1, &block
45
+ case subject
46
+ when Numeric
47
+ after PlayLoopJob.new block, subject, speed
48
+ else
49
+ after PlayLoopAnimationJob.new block, subject, speed
50
+ end
51
+ end
52
+
53
+ # Push job after.
54
+ def << job
55
+ after job
56
+ end
57
+
58
+
59
+ # Get event.
60
+ def event
61
+ @event
62
+ end
63
+
64
+ # Get host.
65
+ def host
66
+ @host
67
+ end
68
+
69
+ # Release result.
70
+ def release result = nil
71
+ @result = result
72
+ end
73
+
74
+ # :section: LEVEL 2
75
+
76
+ class RunEvent < Event
77
+ def initialize result, ...
78
+ super(...)
79
+ @result = result
80
+ end
81
+
82
+ def result
83
+ @result
84
+ end
85
+ end
86
+
87
+ class CancelEvent < Event
88
+ end
89
+
90
+ def initialize
91
+ @event_manager = EventManager.new
92
+ @host = nil
93
+ @event = nil
94
+ @result = nil
95
+ end
96
+
97
+ def call event
98
+ case event
99
+ when RunEvent
100
+ run event.target, event
101
+ when CancelEvent
102
+ cancel event
103
+ else
104
+ run event.target.pane, event
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,87 @@
1
+ module Kredki
2
+ # Job executed in a loop.
3
+ class LoopJob < Job
4
+
5
+ # Get last iteration duration in milliseconds.
6
+ def ms
7
+ @ms
8
+ end
9
+
10
+ # Get total duration in milliseconds.
11
+ def total_ms
12
+ @total_ms
13
+ end
14
+
15
+ # Release job.
16
+ def release result = nil
17
+ super
18
+ @released = true
19
+ end
20
+
21
+ # Run job.
22
+ def run host, event = nil
23
+ cancel
24
+ @host = host
25
+ @event = event || RunEvent.new(nil, nil, self)
26
+ @next_ms = @host.app.ms
27
+ @total_ms = 0
28
+ @host.put_job self
29
+ end
30
+
31
+ # Cancel job and all subjobs.
32
+ def cancel event = nil
33
+ @host&.delete_job self
34
+ @event_manager.report event || CancelEvent.new
35
+ @host = nil
36
+ @result = nil
37
+ end
38
+
39
+ # :section: LEVEL 2
40
+
41
+ def initialize block, period
42
+ super()
43
+ @block = block
44
+ @period = period
45
+ @next_ms = 0
46
+ @released = false
47
+ @ms = nil
48
+ end
49
+
50
+ def inspect
51
+ "#{self.class}:#{object_id} #{@block}"
52
+ end
53
+
54
+ def tick ms
55
+ dms = ms - @next_ms
56
+ if dms >= 0
57
+ unless @released
58
+ @ms = dms + @period
59
+ @total_ms += @ms
60
+ if RunEvent === @event
61
+ @block.call self, @event.source || @event, @event.result
62
+ else
63
+ @block.call self, @event
64
+ end
65
+ if @period > 0
66
+ @next_ms += @period * (1 + dms / @period)
67
+ else
68
+ @next_ms += dms
69
+ end
70
+ end
71
+ if @released
72
+ @released = false
73
+ if RunEvent === @event
74
+ @event_manager.report RunEvent.new @result, @event.source || nil, @host
75
+ else
76
+ @event_manager.report RunEvent.new @result, @event, @host
77
+ end
78
+ @host = nil
79
+ @event = nil
80
+ @result = nil
81
+ return false
82
+ end
83
+ end
84
+ true
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,44 @@
1
+ module Kredki
2
+ # Job executed in a loop.
3
+ class PlayAnimationJob < PlayLoopAnimationJob
4
+
5
+ # Get play progress.
6
+ def progress
7
+ progress = @total_ms * @speed / @period
8
+ progress > 1 ? 1.0 : progress
9
+ end
10
+
11
+ def tick ms
12
+ dms = ms - @next_ms
13
+ if dms >= 0
14
+ unless @released
15
+ @ms = dms
16
+ @total_ms += @ms
17
+ if !@block
18
+ frame = progress
19
+ elsif RunEvent === @event
20
+ frame = @block.call self, @event.source || @event, @event.result
21
+ else
22
+ frame = @block.call self, @event
23
+ end
24
+ @animation.set_frame frame if frame
25
+ @next_ms += dms
26
+ end
27
+ release if !@released && @animation.duration <= @total_ms
28
+ if @released
29
+ @released = false
30
+ if RunEvent === @event
31
+ @event_manager.report RunEvent.new @result, @event.source || nil, @host
32
+ else
33
+ @event_manager.report RunEvent.new @result, @event, @host
34
+ end
35
+ @host = nil
36
+ @event = nil
37
+ @result = nil
38
+ return false
39
+ end
40
+ end
41
+ true
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
1
+ module Kredki
2
+ # Job executed in a loop.
3
+ class PlayJob < PlayLoopJob
4
+
5
+ # Get play progress.
6
+ def progress
7
+ progress = @total_ms * @speed / @duration
8
+ progress > 1 ? 1.0 : progress
9
+ end
10
+
11
+ def tick ms
12
+ dms = ms - @next_ms
13
+ if dms >= 0
14
+ unless @released
15
+ @ms = dms
16
+ @total_ms += @ms
17
+ if RunEvent === @event
18
+ @block.call self, @event.source || @event, @event.result
19
+ else
20
+ @block.call self, @event
21
+ end
22
+ @next_ms += dms
23
+ end
24
+ release if !@released && @duration <= @total_ms
25
+ if @released
26
+ @released = false
27
+ if RunEvent === @event
28
+ @event_manager.report RunEvent.new @result, @event.source || nil, @host
29
+ else
30
+ @event_manager.report RunEvent.new @result, @event, @host
31
+ end
32
+ @host = nil
33
+ @event = nil
34
+ @result = nil
35
+ return false
36
+ end
37
+ end
38
+ true
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,98 @@
1
+ module Kredki
2
+ # Job executed in a loop.
3
+ class PlayLoopAnimationJob < Job
4
+
5
+ # Get the period between the last two iterations in milliseconds.
6
+ def ms
7
+ @ms
8
+ end
9
+
10
+ # Get the period between the first and the last iteration in milliseconds.
11
+ def total_ms
12
+ @total_ms
13
+ end
14
+
15
+ # Get play progress.
16
+ def progress period = nil
17
+ duration = @animation.duration
18
+ if period == true
19
+ @total_ms * @speed % duration / duration
20
+ else
21
+ total_progress = @total_ms * @speed / duration
22
+ period ? total_progress - (total_progress / period).floor * period : total_progress
23
+ end
24
+ end
25
+
26
+ # Release job.
27
+ def release result = nil
28
+ super
29
+ @released = true
30
+ end
31
+
32
+ # Run job.
33
+ def run host, event = nil
34
+ cancel
35
+ @host = host
36
+ @event = event || RunEvent.new(nil, nil, self)
37
+ @next_ms = @host.app.ms
38
+ @total_ms = 0
39
+ @host.put_job self
40
+ end
41
+
42
+ # Cancel job and all subjobs.
43
+ def cancel event = nil
44
+ @host&.delete_job self
45
+ @event_manager.report event || CancelEvent.new
46
+ @host = nil
47
+ @result = nil
48
+ end
49
+
50
+ # :section: LEVEL 2
51
+
52
+ def initialize block, animation, speed
53
+ super()
54
+ @block = block
55
+ @animation = animation
56
+ @speed = speed
57
+ @next_ms = 0
58
+ @released = false
59
+ @ms = nil
60
+ end
61
+
62
+ def inspect
63
+ "#{self.class}:#{object_id} #{@block}"
64
+ end
65
+
66
+ def tick ms
67
+ dms = ms - @next_ms
68
+ if dms >= 0
69
+ unless @released
70
+ @ms = dms
71
+ @total_ms += @ms
72
+ if !@block
73
+ frame = progress true
74
+ elsif RunEvent === @event
75
+ frame = @block.call self, @event.source || @event, @event.result
76
+ else
77
+ frame = @block.call self, @event
78
+ end
79
+ @animation.set_frame frame if frame
80
+ @next_ms += dms
81
+ end
82
+ if @released
83
+ @released = false
84
+ if RunEvent === @event
85
+ @event_manager.report RunEvent.new @result, @event.source || nil, @host
86
+ else
87
+ @event_manager.report RunEvent.new @result, @event, @host
88
+ end
89
+ @host = nil
90
+ @event = nil
91
+ @result = nil
92
+ return false
93
+ end
94
+ end
95
+ true
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,104 @@
1
+ module Kredki
2
+ # Job executed in a loop.
3
+ class PlayLoopJob < Job
4
+
5
+ # Get the period between the last two iterations in milliseconds.
6
+ def ms
7
+ @ms
8
+ end
9
+
10
+ # Get the period between the first and the last iteration in milliseconds.
11
+ def total_ms
12
+ @total_ms
13
+ end
14
+
15
+ # Get play progress.
16
+ def progress period = nil
17
+ if period == true
18
+ @total_ms * @speed % @duration / @duration
19
+ else
20
+ total_progress = @total_ms * @speed / @duration
21
+ period ? total_progress - (total_progress / period).floor * period : total_progress
22
+ end
23
+ end
24
+
25
+ # Get animation progress
26
+ def progress clamp = false
27
+ if clamp
28
+ @total_ms % @duration / @duration
29
+ else
30
+ @total_ms / @duration
31
+ end
32
+ end
33
+
34
+ # Release job.
35
+ def release result = nil
36
+ super
37
+ @released = true
38
+ end
39
+
40
+ # Run job.
41
+ def run host, event = nil
42
+ cancel
43
+ @host = host
44
+ @event = event || RunEvent.new(nil, nil, self)
45
+ @next_ms = @host.app.ms
46
+ @total_ms = 0
47
+ @host.put_job self
48
+ release if @duration <= 0
49
+ end
50
+
51
+ # Cancel job and all subjobs.
52
+ def cancel event = nil
53
+ @host&.delete_job self
54
+ @event_manager.report event || CancelEvent.new
55
+ @host = nil
56
+ @result = nil
57
+ end
58
+
59
+ # :section: LEVEL 2
60
+
61
+ def initialize block, duration, speed
62
+ super()
63
+ @block = block
64
+ @duration = duration
65
+ @speed = speed
66
+ @next_ms = 0
67
+ @released = false
68
+ @ms = nil
69
+ end
70
+
71
+ def inspect
72
+ "#{self.class}:#{object_id} #{@block}"
73
+ end
74
+
75
+ def tick ms
76
+ dms = ms - @next_ms
77
+ if dms >= 0
78
+ unless @released
79
+ @ms = dms
80
+ @total_ms += @ms
81
+ if RunEvent === @event
82
+ @block.call self, @event.source || @event, @event.result
83
+ else
84
+ @block.call self, @event
85
+ end
86
+ @next_ms += dms
87
+ end
88
+ if @released
89
+ @released = false
90
+ if RunEvent === @event
91
+ @event_manager.report RunEvent.new @result, @event.source || nil, @host
92
+ else
93
+ @event_manager.report RunEvent.new @result, @event, @host
94
+ end
95
+ @host = nil
96
+ @event = nil
97
+ @result = nil
98
+ return false
99
+ end
100
+ end
101
+ true
102
+ end
103
+ end
104
+ end