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,584 @@
1
+ module Kredki
2
+ class Window
3
+
4
+ # Show a window.
5
+ def show
6
+ Pastele.window_show @pointer
7
+ end
8
+
9
+ # Hide a window.
10
+ def hide
11
+ Pastele.window_hide @pointer
12
+ end
13
+
14
+ # Maximize a window.
15
+ def maximize
16
+ Pastele.window_maximize @pointer
17
+ end
18
+
19
+ # Minimize a window.
20
+ def minimize
21
+ Pastele.window_minimize @pointer
22
+ end
23
+
24
+ # Request that a window be raised above other windows and gain the input focus.
25
+ def focus
26
+ Pastele.window_focus @pointer
27
+ end
28
+
29
+ # Request that the size and position of a minimized or maximized window be restored.
30
+ def restore
31
+ Pastele.window_restore @pointer
32
+ end
33
+
34
+ # Set whether the window has an stroke.
35
+ def set_stroke value = true
36
+ return if (c = stroke) == (value = block_given? ? yield(c) : value == Not ? !c : value)
37
+ Pastele.window_set_bordered @pointer, value ? 1 : 0
38
+ true
39
+ end
40
+
41
+ # See #set_stroke.
42
+ def stroke= value
43
+ set_stroke value
44
+ end
45
+
46
+ # Get whether the window has an stroke.
47
+ def stroke
48
+ Pastele.window_get_flags(@pointer) & 0x10 == 0
49
+ end
50
+
51
+ # See #stroke.
52
+ def stroke?
53
+ !!stroke
54
+ end
55
+
56
+ # Set whether fullscreen mode is on.
57
+ def set_fullscreen value = true
58
+ return if (c = fullscreen) == (value = block_given? ? yield(c) : value == Not ? !c : value)
59
+ Pastele.window_set_fullscreen @pointer, value ? 1 : 0
60
+ true
61
+ end
62
+
63
+ # See #set_fullscreen.
64
+ def fullscreen= value
65
+ set_fullscreen value
66
+ end
67
+
68
+ # Get whether fullscreen mode is on.
69
+ def fullscreen
70
+ Pastele.window_get_flags(@pointer) & 0x1000 != 0
71
+ end
72
+
73
+ # See #fullscreen.
74
+ def fullscreen?
75
+ !!fullscreen
76
+ end
77
+
78
+ # Set whether text input mode is on.
79
+ def set_text_input value = true
80
+ return if (c = text_input) == (value = block_given? ? yield(c) : value == Not ? !c : value)
81
+ Pastele.window_set_text_input @pointer, value ? 1 : 0
82
+ true
83
+ end
84
+
85
+ # See #set_text_input.
86
+ def text_input= value
87
+ set_text_input value
88
+ end
89
+
90
+ # Get whether text input mode is on.
91
+ def text_input
92
+ Pastele.window_get_text_input(@pointer) != 0
93
+ end
94
+
95
+ # See #text_input.
96
+ def text_input?
97
+ !!text_input
98
+ end
99
+
100
+ # Set opacity.
101
+ def set_opacity opacity = @opacity
102
+ return set_opacity yield self.opacity if block_given?
103
+ return if @opacity == opacity
104
+ Pastele.window_set_opacity @pointer, opacity > 1 ? opacity / 255.0 : opacity
105
+ @opacity = opacity
106
+ true
107
+ end
108
+
109
+ # See #set_opacity.
110
+ def opacity= param
111
+ set_opacity param
112
+ end
113
+
114
+ # Get opacity.
115
+ def opacity
116
+ @opacity
117
+ end
118
+
119
+ # Set position along X and Y axes.
120
+ def set_xy x = 0, y = x
121
+ return send_bundle :set_xy, yield(self.xy) if block_given?
122
+ x = case x
123
+ when Start
124
+ 0
125
+ when Center
126
+ (display_size[0] - size[0]) * 0.5
127
+ when End
128
+ display_size[0] - size[0]
129
+ when Numeric
130
+ x
131
+ else raise_ia x
132
+ end
133
+
134
+ y = case y
135
+ when Start
136
+ 0
137
+ when Center
138
+ (display_size[1] - size[1]) * 0.5
139
+ when End
140
+ display_size[1] - size[1]
141
+ when Numeric
142
+ y
143
+ else raise_ia y
144
+ end
145
+
146
+ Pastele.window_set_position @pointer, x, y
147
+ true
148
+ end
149
+
150
+ # See #set_xy.
151
+ def xy= param
152
+ send_bundle :set_xy, param
153
+ end
154
+
155
+ # Get position along X and Y axes.
156
+ def xy
157
+ point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
158
+ Pastele.window_get_position @pointer, point
159
+ [point.x, point.y]
160
+ end
161
+
162
+ # Set size.
163
+ def set_size size_x = 400, size_y = size_x, **ka
164
+ return send_bundle :set_size, yield(self.size) if block_given?
165
+ size_x = case size_x
166
+ when Rational
167
+ display_size[0] * size_x
168
+ when Numeric
169
+ size_x
170
+ else raise_ia size_x
171
+ end
172
+
173
+ size_y = case size_y
174
+ when Rational
175
+ display_size[1] * size_y
176
+ when Numeric
177
+ size_y
178
+ else raise_ia size_y
179
+ end
180
+
181
+ Pastele.window_set_size @pointer, size_x, size_y
182
+ ka.each{ send_bundle "size_#{_1}!", _2 }
183
+ report ResizeEvent.new size_x, size_y
184
+ true
185
+ end
186
+
187
+ # See #set_size.
188
+ def size= param
189
+ send_bundle :set_size, param
190
+ end
191
+
192
+ # Get size.
193
+ def size
194
+ point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
195
+ Pastele.window_get_size @pointer, point
196
+ [point.x, point.y]
197
+ end
198
+
199
+ # Get size in X axis.
200
+ def size_x
201
+ size[0]
202
+ end
203
+
204
+ # Get size in Y axis.
205
+ def size_y
206
+ size[1]
207
+ end
208
+
209
+ # Set size limit.
210
+ def set_size_limit x, y = x
211
+ return send_bundle :set_size_limit, yield(self.size_limit) if block_given?
212
+ x_min, x_max = parse_limit x
213
+ y_min, y_max = parse_limit y
214
+ Pastele.window_set_minimum_size @pointer, x_min, y_min
215
+ Pastele.window_set_maximum_size @pointer, x_max, y_max
216
+ true
217
+ end
218
+
219
+ # See #set_size_limit.
220
+ def size_limit= param
221
+ send_bundle :set_size_limit, param
222
+ end
223
+
224
+ # Get size limit.
225
+ def size_limit
226
+ point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
227
+ Pastele.window_get_minimum_size @pointer, point
228
+ x_min, y_min = [point.x, point.y]
229
+ Pastele.window_get_maximum_size @pointer, point
230
+ [x_min..point.x, y_min..point.y]
231
+ end
232
+
233
+ # Set whether a window width and height can be customized by dragging its border.
234
+ def set_resizable value = true
235
+ return if (c = resizable) == (value = block_given? ? yield(c) : value == Not ? !c : value)
236
+ Pastele.window_set_resizable @pointer, value ? 1 : 0
237
+ true
238
+ end
239
+
240
+ # See #set_resizable.
241
+ def resizable= param
242
+ set_resizable param
243
+ end
244
+
245
+ # Get whether a window width and height can be customized by dragging its border.
246
+ def resizable
247
+ Pastele.window_get_flags(@pointer) & 0x20 != 0
248
+ end
249
+
250
+ # See #resizable.
251
+ def resizable?
252
+ !!resizable
253
+ end
254
+
255
+ # Set title.
256
+ def set_title title = nil
257
+ return set_title yield self.title if block_given?
258
+ Pastele.window_set_title @pointer, title.to_s
259
+ true
260
+ end
261
+
262
+ # See #set_title.
263
+ def title= param
264
+ set_title param
265
+ end
266
+
267
+ # Get title.
268
+ def title
269
+ title = Pastele.window_get_title @pointer
270
+ title.to_s.force_encoding "utf-8"
271
+ end
272
+
273
+ # Set whether window is always in the foreground.
274
+ def set_top value = true
275
+ return if (c = top) == (value = block_given? ? yield(c) : value == Not ? !c : value)
276
+ Pastele.window_set_always_on_top @pointer, value ? 1 : 0
277
+ true
278
+ end
279
+
280
+ # See #set_top.
281
+ def top= param
282
+ set_top param
283
+ end
284
+
285
+ # Get whether window is always in the foreground.
286
+ def top
287
+ Pastele.window_get_flags(@pointer) & 0x10000 != 0
288
+ end
289
+
290
+ # See #top.
291
+ def top?
292
+ !!top
293
+ end
294
+
295
+ # Get mouse pointer position relative to the window [0, 0].
296
+ def mouse_xy
297
+ x, y = Kredki.mouse.xy
298
+ wx, wy = window.xy
299
+ [x - wx, y - wy]
300
+ end
301
+
302
+ # Set whether mouse pointer is confined to the window.
303
+ def set_mouse_grab value = true
304
+ return if (c = mouse_grab) == (value = block_given? ? yield(c) : value == Not ? !c : value)
305
+ Pastele.window_set_mouse_mouse_grab @pointer, value ? 1 : 0
306
+ true
307
+ end
308
+
309
+ # See #set_mouse_grab.
310
+ def mouse_grab= value
311
+ set_mouse_grab value
312
+ end
313
+
314
+ # Get whether mouse pointer is confined to the window.
315
+ def mouse_grab
316
+ Pastele.window_get_mouse_grab(@pointer) != 0
317
+ end
318
+
319
+ # See #mouse_grab.
320
+ def mouse_grab?
321
+ !!mouse_grab
322
+ end
323
+
324
+ # Set whether relative mouse mode is on.
325
+ def set_mouse_relative value = true
326
+ return if (c = relative) == (value = block_given? ? yield(c) : value == Not ? !c : value)
327
+ Pastele.window_set_mouse_relative_mode @pointer, value ? 1 : 0
328
+ true
329
+ end
330
+
331
+ # See #set_mouse_relative.
332
+ def mouse_relative= value
333
+ set_mouse_relative value
334
+ end
335
+
336
+ # Get whether relative mouse mode is on.
337
+ def mouse_relative
338
+ Pastele.window_get_mouse_relative_mode(@pointer) != 0
339
+ end
340
+
341
+ # See #mouse_relative.
342
+ def mouse_relative?
343
+ !!mouse_relative
344
+ end
345
+
346
+ # Get whether mouse pointer is in window.
347
+ def mouse_in
348
+ @mouse_in.nil? ? Kredki.mouse.get_cursor_position != [0, 0] : @mouse_in
349
+ end
350
+
351
+ # Get whether capture mode is on.
352
+ def mouse_capture
353
+ Pastele.window_get_flags(@pointer) & 0x4000 != 0
354
+ end
355
+
356
+ # See #capture.
357
+ def mouse_capture?
358
+ !!mouse_capture
359
+ end
360
+
361
+ # Set default pane.
362
+ def pane! ...
363
+ set_pane(default_pane).set(...)
364
+ end
365
+
366
+ # Set pane.
367
+ def set_pane pane = default_pane
368
+ case pane
369
+ when Class
370
+ set_pane pane.new
371
+ when String
372
+ pane_service = set_pane
373
+ pane_service.set{ eval File.read pane }
374
+ when Pane
375
+ update_pane pane
376
+ pane.context_service
377
+ else raise_ia pane
378
+ end
379
+ end
380
+
381
+ # See #set_pane.
382
+ def pane= param
383
+ send_bundle :set_pane, param
384
+ end
385
+
386
+ # Get pane.
387
+ def pane
388
+ @pane
389
+ end
390
+
391
+ # Get window (self).
392
+ def window
393
+ self
394
+ end
395
+
396
+ def << feature
397
+ case feature
398
+ when Pane
399
+ set_pane feature
400
+ end
401
+ end
402
+
403
+ # Request window close.
404
+ def close
405
+ Pastele.window_close @pointer
406
+ end
407
+
408
+ # Get display size.
409
+ def display_size
410
+ bounds = Pastele::Bounds.malloc(Fiddle::RUBY_FREE)
411
+ Pastele.window_get_display_bounds @pointer, bounds
412
+ [bounds.w, bounds.h]
413
+ end
414
+
415
+ # Set fps limit.
416
+ def set_fps_limit fps_limit = @fps_limit
417
+ return set_fps_limit yield(@fps_limit) if block_given?
418
+ return if @fps_limit == fps_limit
419
+ @fps_limit = fps_limit
420
+ true
421
+ end
422
+
423
+ # See #set_fps_limit.
424
+ def fps_limit= param
425
+ send_bundle :set_fps_limit, param
426
+ end
427
+
428
+ # Get fps limit.
429
+ def fps_limit
430
+ @fps_limit
431
+ end
432
+
433
+ # Save window as PNG image.
434
+ def to_png filepath
435
+ @pane.arrange
436
+ Pastele.window_surface_to_png @pointer, File.expand_path(filepath)
437
+ end
438
+
439
+ # Get pixel color.
440
+ def pixel_color x, y
441
+ rg = Pastele::IntPoint.malloc Fiddle::RUBY_FREE
442
+ ba = Pastele::IntPoint.malloc Fiddle::RUBY_FREE
443
+ Pastele.window_get_pixel_color @pointer, x, y, rg, ba
444
+ Kredki.color [rg.x, rg.y, ba.x, ba.y]
445
+ end
446
+
447
+ # :section: LEVEL 2
448
+
449
+ def initialize *a
450
+ @pointer = default_pointer *a
451
+ @app = nil
452
+ @sketched = false
453
+ @update_thread = nil
454
+ @update_queue = Thread::Queue.new
455
+ @update_timestamp = 0
456
+ @update_error = 0
457
+ @fps_limit = 100
458
+ @expose_timestamp = 0
459
+ @pane = nil
460
+ @mouse_in = nil
461
+ ObjectSpace.define_finalizer(self, Window.finalizer(@pointer))
462
+ end
463
+
464
+ def self.finalizer pointer
465
+ proc{ Pastele.window_delete pointer }
466
+ end
467
+
468
+ def default_pointer size_x = 400, size_y = 400
469
+ Pastele.window_new_sw size_x, size_y
470
+ end
471
+
472
+ def default_pane
473
+ Pane.new
474
+ end
475
+
476
+ attr :pointer
477
+
478
+ def sketch_window
479
+ return if @sketched
480
+ @sketched = true
481
+ sketch
482
+ end
483
+
484
+ def sketch
485
+ set_resizable true
486
+ set_text_input true
487
+ end
488
+
489
+ def attach app
490
+ @app = app
491
+ sketch_window
492
+ @update_thread = Thread.new do
493
+ loop do
494
+ Pastele.window_update_request window.pointer
495
+ @update_queue.pop&.then{|it| sleep it }
496
+ end
497
+ end
498
+ end
499
+
500
+ def detach
501
+ @app = nil
502
+ @update_thread&.kill
503
+ @update_thread = nil
504
+ end
505
+
506
+ def app
507
+ @app
508
+ end
509
+
510
+ def update_complete event
511
+ if @fps_limit
512
+ @update_queue.push (update_delay (event.timestamp - @update_timestamp) / 1000000000.0, 1.0 / @fps_limit)
513
+ else
514
+ @update_queue.push nil
515
+ end
516
+ @update_timestamp = event.timestamp
517
+ end
518
+
519
+ def update_delay last, target
520
+ return target if last > 2 * target
521
+ @update_error += (target - last) * 0.01
522
+ e = target + @update_error
523
+ e < 0 ? target : e
524
+ end
525
+
526
+ def report event, ...
527
+ case event
528
+ when UpdateCompleteEvent
529
+ update_complete event
530
+ when WindowExposeEvent
531
+ update = if @fps_limit
532
+ delay = (event.timestamp - @expose_timestamp) / 1000000000.0
533
+ rate_delay = 1.0 / @fps_limit
534
+ delay >= rate_delay
535
+ else true
536
+ end
537
+ if update
538
+ @expose_timestamp = event.timestamp
539
+ @pane&.report(event, ...)
540
+ Pastele.window_update @pointer, 1
541
+ end
542
+ else
543
+ @pane&.report(event, ...)
544
+ end
545
+ end
546
+
547
+ def update_paint paint
548
+ Pastele.window_paint_to_update @pointer, paint.pointer
549
+ end
550
+
551
+ def inspect
552
+ "#{self.class}:#{object_id}"
553
+ end
554
+
555
+ def update_pane pane, &block
556
+ pane&.window&.update_pane nil
557
+ pane&.window = self
558
+ Pastele.window_set_scene @pointer, pane&.pointer
559
+ update_paint pane if pane
560
+ @pane = pane
561
+ end
562
+
563
+ def paint_displayed pane
564
+ @pane == pane && !!@app
565
+ end
566
+
567
+ def update_mouse_in set
568
+ @mouse_in = set
569
+ end
570
+
571
+ def get_capture
572
+ Pastele.window_get_flags(@pointer) & 0x4000 != 0
573
+ end
574
+
575
+ def parse_limit limit
576
+ case limit
577
+ when Range
578
+ [limit.begin || 0, limit.end || 0]
579
+ else
580
+ [0, limit || 0]
581
+ end
582
+ end
583
+ end
584
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'core/setup'
2
+ require_relative 'core/kredki'
@@ -0,0 +1,9 @@
1
+ run_at_exit = !defined?(Kredki::Pastele) && !defined?(IRB)
2
+
3
+ require_relative 'script'
4
+
5
+ if run_at_exit
6
+ at_exit do
7
+ app.run
8
+ end
9
+ end
data/lib/kredki/irb.rb ADDED
@@ -0,0 +1,90 @@
1
+ require 'irb'
2
+
3
+ class KredkiWorkSpace < IRB::WorkSpace
4
+ def initialize app, ...
5
+ super(...)
6
+ @app = app
7
+ @mutex = Thread::Mutex.new
8
+ @convar = Thread::ConditionVariable.new
9
+ @cmd = nil
10
+ end
11
+
12
+ alias_method :oeval, :evaluate
13
+
14
+ def evaluate *a
15
+ @mutex.synchronize do
16
+ @cmd = a
17
+ @convar.wait @mutex
18
+ result = @cmd
19
+ @cmd = nil
20
+ result
21
+ end
22
+ end
23
+
24
+ def release
25
+ @mutex.synchronize do
26
+ if @cmd
27
+ if @cmd == [:exit]
28
+ @app.return
29
+ else
30
+ @cmd = oeval *@cmd
31
+ end
32
+ @convar.signal
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ KredkiProc = proc do
39
+ mutex = Thread::Mutex.new
40
+ convar = Thread::ConditionVariable.new
41
+ Thread.new do
42
+ app = Kredki.app
43
+ MainLayer = app.open hidden: true
44
+ module Kredki
45
+ module Extend
46
+ extend Forwardable
47
+
48
+ (MainLayer.methods - Object.instance_methods).each do |it|
49
+ def_delegator :MainLayer, it
50
+ end
51
+ end
52
+ end
53
+ extend Kredki::Extend
54
+ include Kredki
55
+ include Kredki::Pads
56
+
57
+ window.set do
58
+ set_resizable
59
+ set_text_input
60
+ set_top
61
+ pane.set_fill 20, 70, 20
62
+ pane.close_on_esc
63
+ end
64
+ MainLayer.carry_focus_on_tab
65
+
66
+ kredki_workspace = KredkiWorkSpace.new app, binding
67
+ IRB.CurrentContext.replace_workspace kredki_workspace
68
+ IRB.conf[:AT_EXIT] << proc{ kredki_workspace.evaluate :exit }
69
+ job.loop{ kredki_workspace.release }
70
+ mutex.synchronize{ convar.signal }
71
+ window.show
72
+ app.run
73
+ end
74
+
75
+ mutex.synchronize{ convar.wait mutex }
76
+ end
77
+
78
+ if IRB.CurrentContext
79
+ KredkiProc.call
80
+ else
81
+ module IRB
82
+ class Irb
83
+ alias_method :o_configure_io, :configure_io
84
+ def configure_io
85
+ KredkiProc.call
86
+ o_configure_io
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,3 @@
1
+ require_relative 'core'
2
+ require_relative 'pads/setup'
3
+ require_relative 'pads/module'
@@ -0,0 +1,13 @@
1
+ module Kredki
2
+ module Pads
3
+ # Application of Pads module.
4
+ class Application < Kredki::Application
5
+
6
+ # :section: LEVEL 2
7
+
8
+ def default_window
9
+ Window.new
10
+ end
11
+ end
12
+ end
13
+ end