lacci 0.2.1 → 0.3.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 (597) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +79 -0
  4. data/Rakefile +1 -4
  5. data/lib/lacci/scarpe_cli.rb +71 -0
  6. data/lib/lacci/scarpe_core.rb +22 -0
  7. data/lib/lacci/version.rb +13 -0
  8. data/lib/scarpe/niente/app.rb +23 -0
  9. data/lib/scarpe/niente/display_service.rb +62 -0
  10. data/lib/scarpe/niente/drawable.rb +57 -0
  11. data/lib/scarpe/niente/logger.rb +29 -0
  12. data/lib/scarpe/niente/shoes_spec.rb +87 -0
  13. data/lib/scarpe/niente.rb +20 -0
  14. data/lib/shoes/app.rb +165 -43
  15. data/lib/{scarpe → shoes}/background.rb +2 -2
  16. data/lib/{scarpe → shoes}/border.rb +2 -2
  17. data/lib/shoes/builtins.rb +63 -0
  18. data/lib/shoes/changelog.rb +52 -0
  19. data/lib/{scarpe → shoes}/colors.rb +3 -1
  20. data/lib/shoes/constants.rb +24 -3
  21. data/lib/{scarpe → shoes}/display_service.rb +45 -23
  22. data/lib/{scarpe → shoes}/download.rb +7 -7
  23. data/lib/shoes/drawable.rb +380 -0
  24. data/lib/shoes/drawables/arc.rb +49 -0
  25. data/lib/shoes/drawables/arrow.rb +41 -0
  26. data/lib/shoes/drawables/button.rb +73 -0
  27. data/lib/shoes/drawables/check.rb +29 -0
  28. data/lib/{scarpe → shoes/drawables}/document_root.rb +5 -5
  29. data/lib/{scarpe → shoes/drawables}/edit_box.rb +6 -6
  30. data/lib/{scarpe → shoes/drawables}/edit_line.rb +6 -6
  31. data/lib/shoes/drawables/flow.rb +22 -0
  32. data/lib/{scarpe → shoes/drawables}/image.rb +7 -13
  33. data/lib/shoes/drawables/line.rb +20 -0
  34. data/lib/shoes/drawables/link.rb +34 -0
  35. data/lib/shoes/drawables/list_box.rb +56 -0
  36. data/lib/shoes/drawables/para.rb +118 -0
  37. data/lib/shoes/drawables/progress.rb +14 -0
  38. data/lib/shoes/drawables/radio.rb +33 -0
  39. data/lib/shoes/drawables/rect.rb +17 -0
  40. data/lib/shoes/drawables/shape.rb +36 -0
  41. data/lib/shoes/drawables/slot.rb +87 -0
  42. data/lib/{scarpe → shoes/drawables}/span.rb +8 -7
  43. data/lib/{scarpe → shoes/drawables}/stack.rb +10 -4
  44. data/lib/shoes/drawables/star.rb +50 -0
  45. data/lib/shoes/drawables/subscription_item.rb +93 -0
  46. data/lib/shoes/drawables/text_drawable.rb +63 -0
  47. data/lib/shoes/drawables/video.rb +16 -0
  48. data/lib/shoes/drawables/widget.rb +69 -0
  49. data/lib/shoes/drawables.rb +31 -0
  50. data/lib/shoes/errors.rb +28 -0
  51. data/lib/shoes/log.rb +71 -0
  52. data/lib/shoes/ruby_extensions.rb +15 -0
  53. data/lib/shoes/spacing.rb +9 -0
  54. data/lib/shoes-spec.rb +93 -0
  55. data/lib/shoes.rb +93 -11
  56. metadata +67 -557
  57. data/.rubocop.yml +0 -85
  58. data/.ruby-version +0 -1
  59. data/.vscode/extensions.json +0 -5
  60. data/.yardopts +0 -12
  61. data/CHANGELOG.md +0 -19
  62. data/CODE_OF_CONDUCT.md +0 -84
  63. data/CONTRIBUTING.md +0 -20
  64. data/LICENSE.txt +0 -21
  65. data/README.md +0 -178
  66. data/bin/console +0 -15
  67. data/bin/setup +0 -8
  68. data/dev.yml +0 -7
  69. data/docs/static/PKGBUILD +0 -47
  70. data/docs/static/Shoes.icns +0 -0
  71. data/docs/static/avatar.png +0 -0
  72. data/docs/static/code_highlighter.js +0 -188
  73. data/docs/static/code_highlighter_ruby.js +0 -26
  74. data/docs/static/icon-debug.png +0 -0
  75. data/docs/static/icon-error.png +0 -0
  76. data/docs/static/icon-info.png +0 -0
  77. data/docs/static/icon-warn.png +0 -0
  78. data/docs/static/listbox_button1.png +0 -0
  79. data/docs/static/listbox_button2.png +0 -0
  80. data/docs/static/man-app.png +0 -0
  81. data/docs/static/man-builds.png +0 -0
  82. data/docs/static/man-builds1.png +0 -0
  83. data/docs/static/man-editor-notepad.png +0 -0
  84. data/docs/static/man-editor-osx.png +0 -0
  85. data/docs/static/man-ele-background.png +0 -0
  86. data/docs/static/man-ele-border.png +0 -0
  87. data/docs/static/man-ele-button.png +0 -0
  88. data/docs/static/man-ele-check.png +0 -0
  89. data/docs/static/man-ele-editbox.png +0 -0
  90. data/docs/static/man-ele-editline.png +0 -0
  91. data/docs/static/man-ele-image.png +0 -0
  92. data/docs/static/man-ele-listbox.png +0 -0
  93. data/docs/static/man-ele-progress.png +0 -0
  94. data/docs/static/man-ele-radio.png +0 -0
  95. data/docs/static/man-ele-shape.png +0 -0
  96. data/docs/static/man-ele-textblock.png +0 -0
  97. data/docs/static/man-ele-video.png +0 -0
  98. data/docs/static/man-intro-dmg.png +0 -0
  99. data/docs/static/man-intro-exe.png +0 -0
  100. data/docs/static/man-look-tiger.png +0 -0
  101. data/docs/static/man-look-ubuntu.png +0 -0
  102. data/docs/static/man-look-vista.png +0 -0
  103. data/docs/static/man-run-osx.png +0 -0
  104. data/docs/static/man-run-vista.png +0 -0
  105. data/docs/static/man-run-xp.png +0 -0
  106. data/docs/static/man-shot1.png +0 -0
  107. data/docs/static/manual-en.txt +0 -3529
  108. data/docs/static/manual-ja.txt +0 -2829
  109. data/docs/static/manual.css +0 -171
  110. data/docs/static/manual.md +0 -3528
  111. data/docs/static/menu-corner1.png +0 -0
  112. data/docs/static/menu-corner2.png +0 -0
  113. data/docs/static/menu-gray.png +0 -0
  114. data/docs/static/menu-left.png +0 -0
  115. data/docs/static/menu-right.png +0 -0
  116. data/docs/static/menu-top.png +0 -0
  117. data/docs/static/shoes-dmg.jpg +0 -0
  118. data/docs/static/shoes-icon-blue.png +0 -0
  119. data/docs/static/shoes-icon.png +0 -0
  120. data/docs/static/shoes-manual-apps.gif +0 -0
  121. data/docs/static/shoes_main_window.png +0 -0
  122. data/docs/static/stripe.png +0 -0
  123. data/docs/static/stubs/blank.exe +0 -0
  124. data/docs/static/stubs/blank.hfz +0 -0
  125. data/docs/static/stubs/blank.run +0 -375
  126. data/docs/static/stubs/cocoa-install +0 -0
  127. data/docs/static/stubs/sh-install +0 -49
  128. data/docs/static/stubs/shoes-stub-inject.exe +0 -0
  129. data/docs/static/stubs/shoes-stub.exe +0 -0
  130. data/docs/static/tutor-back.png +0 -0
  131. data/docs/yard/catscradle.md +0 -44
  132. data/docs/yard/template/default/fulldoc/html/setup.rb +0 -13
  133. data/docs/yard/template/default/layout/html/setup.rb +0 -9
  134. data/examples/backdround_with_image.rb +0 -16
  135. data/examples/bloopsaphone/working/1901_by_Aanand_Prasad.rb +0 -478
  136. data/examples/bloopsaphone/working/b1.rb +0 -64
  137. data/examples/bloopsaphone/working/b2.rb +0 -36
  138. data/examples/bloopsaphone/working/bloops_test.rb +0 -41
  139. data/examples/bloopsaphone/working/bloopsaphone_theme_song_by_why.rb +0 -31
  140. data/examples/bloopsaphone/working/feepogram.rb +0 -67
  141. data/examples/bloopsaphone/working/simpsons_theme_song_by_why.rb +0 -14
  142. data/examples/bloopsaphone/working/tune_cheeky_drat.rb +0 -210
  143. data/examples/button.rb +0 -10
  144. data/examples/button_alert.rb +0 -6
  145. data/examples/button_go_away.rb +0 -6
  146. data/examples/button_with_position_and_size.rb +0 -7
  147. data/examples/coffee.rb +0 -14
  148. data/examples/download.rb +0 -5
  149. data/examples/download_and_show_image.rb +0 -28
  150. data/examples/edit_box.rb +0 -8
  151. data/examples/edit_line.rb +0 -8
  152. data/examples/fill.rb +0 -25
  153. data/examples/flow.rb +0 -11
  154. data/examples/fonts.rb +0 -6
  155. data/examples/gen.rb +0 -140
  156. data/examples/get_headers.rb +0 -10
  157. data/examples/hello_world.rb +0 -3
  158. data/examples/highlander.rb +0 -87
  159. data/examples/image/clickable_image.rb +0 -5
  160. data/examples/image/image.rb +0 -3
  161. data/examples/image/image_size.rb +0 -7
  162. data/examples/image/image_with_position_and_size.rb +0 -3
  163. data/examples/info.rb +0 -9
  164. data/examples/legacy/not_checked/expert/colours.rb +0 -105
  165. data/examples/legacy/not_checked/expert/curve-animation.rb +0 -31
  166. data/examples/legacy/not_checked/expert/curve-control-point.rb +0 -51
  167. data/examples/legacy/not_checked/expert/custom-list-box.rb +0 -53
  168. data/examples/legacy/not_checked/expert/definr.rb +0 -23
  169. data/examples/legacy/not_checked/expert/funnies.rb +0 -56
  170. data/examples/legacy/not_checked/expert/minesweeper.rb +0 -267
  171. data/examples/legacy/not_checked/expert/othello.rb +0 -318
  172. data/examples/legacy/not_checked/expert/pong.rb +0 -62
  173. data/examples/legacy/not_checked/expert/tankspank.rb +0 -385
  174. data/examples/legacy/not_checked/expert/tooltips.rb +0 -45
  175. data/examples/legacy/not_checked/expert/url.rb +0 -37
  176. data/examples/legacy/not_checked/expert/video-player.rb +0 -256
  177. data/examples/legacy/not_checked/good/_why-stories.rb +0 -44
  178. data/examples/legacy/not_checked/good/_why-stories.yaml +0 -387
  179. data/examples/legacy/not_checked/good/arc.rb +0 -37
  180. data/examples/legacy/not_checked/good/cardflip.rb +0 -141
  181. data/examples/legacy/not_checked/good/clock.rb +0 -51
  182. data/examples/legacy/not_checked/good/console.rb +0 -21
  183. data/examples/legacy/not_checked/good/follow.rb +0 -26
  184. data/examples/legacy/not_checked/good/image-rotate.rb +0 -14
  185. data/examples/legacy/not_checked/good/paris.svg +0 -7236
  186. data/examples/legacy/not_checked/good/path-animation.rb +0 -46
  187. data/examples/legacy/not_checked/good/plots.rb +0 -100
  188. data/examples/legacy/not_checked/good/reminder.rb +0 -174
  189. data/examples/legacy/not_checked/good/svgview.rb +0 -113
  190. data/examples/legacy/not_checked/good/vjot.rb +0 -56
  191. data/examples/legacy/not_checked/shoes-contrib/.gitignore +0 -2
  192. data/examples/legacy/not_checked/shoes-contrib/README.md +0 -34
  193. data/examples/legacy/not_checked/shoes-contrib/animation/animate-ovals.rb +0 -21
  194. data/examples/legacy/not_checked/shoes-contrib/animation/flowers.rb +0 -59
  195. data/examples/legacy/not_checked/shoes-contrib/animation/happy-trails.rb +0 -31
  196. data/examples/legacy/not_checked/shoes-contrib/animation/mice-satellites.rb +0 -27
  197. data/examples/legacy/not_checked/shoes-contrib/animation/oval-motion.rb +0 -12
  198. data/examples/legacy/not_checked/shoes-contrib/animation/pink-bubbles.rb +0 -34
  199. data/examples/legacy/not_checked/shoes-contrib/animation/pulsate.rb +0 -18
  200. data/examples/legacy/not_checked/shoes-contrib/animation/rotating-star.rb +0 -18
  201. data/examples/legacy/not_checked/shoes-contrib/app/download-and-save.rb +0 -11
  202. data/examples/legacy/not_checked/shoes-contrib/app/download.rb +0 -10
  203. data/examples/legacy/not_checked/shoes-contrib/app/get-google.rb +0 -11
  204. data/examples/legacy/not_checked/shoes-contrib/app/mouse-detection.rb +0 -7
  205. data/examples/legacy/not_checked/shoes-contrib/app/resizeable-false.rb +0 -6
  206. data/examples/legacy/not_checked/shoes-contrib/art/bubble-bullseye.rb +0 -23
  207. data/examples/legacy/not_checked/shoes-contrib/art/faded.rb +0 -17
  208. data/examples/legacy/not_checked/shoes-contrib/art/fill-oval.rb +0 -5
  209. data/examples/legacy/not_checked/shoes-contrib/art/mask.rb +0 -15
  210. data/examples/legacy/not_checked/shoes-contrib/art/oval-gradient.rb +0 -6
  211. data/examples/legacy/not_checked/shoes-contrib/art/star-gradient.rb +0 -4
  212. data/examples/legacy/not_checked/shoes-contrib/basic/basic-edit-box.rb +0 -8
  213. data/examples/legacy/not_checked/shoes-contrib/basic/basic-new-window.rb +0 -8
  214. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-image.rb +0 -8
  215. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-shape.rb +0 -8
  216. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval.rb +0 -6
  217. data/examples/legacy/not_checked/shoes-contrib/basic/class-book.rb +0 -43
  218. data/examples/legacy/not_checked/shoes-contrib/basic/class-book.yaml +0 -387
  219. data/examples/legacy/not_checked/shoes-contrib/basic/clock.rb +0 -6
  220. data/examples/legacy/not_checked/shoes-contrib/basic/edit-stack +0 -14
  221. data/examples/legacy/not_checked/shoes-contrib/basic/gradient-shoes.rb +0 -7
  222. data/examples/legacy/not_checked/shoes-contrib/basic/list_box-shape-report.rb +0 -19
  223. data/examples/legacy/not_checked/shoes-contrib/basic/rect-arrow.rb +0 -7
  224. data/examples/legacy/not_checked/shoes-contrib/basic/scribble.rb +0 -8
  225. data/examples/legacy/not_checked/shoes-contrib/basic/search.rb +0 -32
  226. data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +0 -16
  227. data/examples/legacy/not_checked/shoes-contrib/basic/url-shoes-subclassing.rb +0 -24
  228. data/examples/legacy/not_checked/shoes-contrib/browser.rb +0 -21
  229. data/examples/legacy/not_checked/shoes-contrib/elements/background-column.rb +0 -3
  230. data/examples/legacy/not_checked/shoes-contrib/elements/background.rb +0 -4
  231. data/examples/legacy/not_checked/shoes-contrib/elements/basic-fps.rb +0 -6
  232. data/examples/legacy/not_checked/shoes-contrib/elements/border-cat.rb +0 -6
  233. data/examples/legacy/not_checked/shoes-contrib/elements/button-block.rb +0 -8
  234. data/examples/legacy/not_checked/shoes-contrib/elements/check-mate.rb +0 -15
  235. data/examples/legacy/not_checked/shoes-contrib/elements/common-styles.rb +0 -13
  236. data/examples/legacy/not_checked/shoes-contrib/elements/displace-animation.rb +0 -13
  237. data/examples/legacy/not_checked/shoes-contrib/elements/edit_box-character-count.rb +0 -7
  238. data/examples/legacy/not_checked/shoes-contrib/elements/edit_line-character-count.rb +0 -7
  239. data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +0 -3
  240. data/examples/legacy/not_checked/shoes-contrib/elements/list_box-select-class.rb +0 -13
  241. data/examples/legacy/not_checked/shoes-contrib/elements/list_box.rb +0 -6
  242. data/examples/legacy/not_checked/shoes-contrib/elements/move-flow-animate.rb +0 -13
  243. data/examples/legacy/not_checked/shoes-contrib/elements/phat-button.rb +0 -7
  244. data/examples/legacy/not_checked/shoes-contrib/elements/popup.rb +0 -7
  245. data/examples/legacy/not_checked/shoes-contrib/elements/progress-bar.rb +0 -10
  246. data/examples/legacy/not_checked/shoes-contrib/elements/radio-dreamcast-favs.rb +0 -17
  247. data/examples/legacy/not_checked/shoes-contrib/elements/timer.rb +0 -6
  248. data/examples/legacy/not_checked/shoes-contrib/elements/width-introspec.rb +0 -8
  249. data/examples/legacy/not_checked/shoes-contrib/events/background-hover.rb +0 -11
  250. data/examples/legacy/not_checked/shoes-contrib/events/motion-detect.rb +0 -9
  251. data/examples/legacy/not_checked/shoes-contrib/events/pressed-key.rb +0 -6
  252. data/examples/legacy/not_checked/shoes-contrib/expert/expert-funnies.rb +0 -51
  253. data/examples/legacy/not_checked/shoes-contrib/expert/expert-irb.rb +0 -112
  254. data/examples/legacy/not_checked/shoes-contrib/expert/expert-othello.rb +0 -319
  255. data/examples/legacy/not_checked/shoes-contrib/good/good-arc.rb +0 -37
  256. data/examples/legacy/not_checked/shoes-contrib/good/good-clock.rb +0 -51
  257. data/examples/legacy/not_checked/shoes-contrib/good/good-follow.rb +0 -26
  258. data/examples/legacy/not_checked/shoes-contrib/good/good-reminder.rb +0 -174
  259. data/examples/legacy/not_checked/shoes-contrib/good/good-vjot.rb +0 -56
  260. data/examples/legacy/not_checked/shoes-contrib/kernel/ask.rb +0 -4
  261. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_color.rb +0 -4
  262. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_open_file.rb +0 -4
  263. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_save_file.rb +0 -7
  264. data/examples/legacy/not_checked/shoes-contrib/kernel/confirm.rb +0 -3
  265. data/examples/legacy/not_checked/shoes-contrib/kernel/debug.rb +0 -4
  266. data/examples/legacy/not_checked/shoes-contrib/kernel/exit.rb +0 -5
  267. data/examples/legacy/not_checked/shoes-contrib/kernel/font.rb +0 -5
  268. data/examples/legacy/not_checked/shoes-contrib/kernel/fonts.rb +0 -3
  269. data/examples/legacy/not_checked/shoes-contrib/manipulation/append-slot.rb +0 -9
  270. data/examples/legacy/not_checked/shoes-contrib/manipulation/clear-slot.rb +0 -6
  271. data/examples/legacy/not_checked/shoes-contrib/manipulation/prepend-slot.rb +0 -6
  272. data/examples/legacy/not_checked/shoes-contrib/manipulation/roll.rb +0 -17
  273. data/examples/legacy/not_checked/shoes-contrib/position/gutter-margin.rb +0 -5
  274. data/examples/legacy/not_checked/shoes-contrib/position/stack-width.rb +0 -3
  275. data/examples/legacy/not_checked/shoes-contrib/simple/simple-accordion.rb +0 -75
  276. data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-shapes.rb +0 -17
  277. data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-text.rb +0 -13
  278. data/examples/legacy/not_checked/shoes-contrib/simple/simple-arc.rb +0 -23
  279. data/examples/legacy/not_checked/shoes-contrib/simple/simple-bounce.rb +0 -24
  280. data/examples/legacy/not_checked/shoes-contrib/simple/simple-calc.rb +0 -70
  281. data/examples/legacy/not_checked/shoes-contrib/simple/simple-chipmunk.rb +0 -26
  282. data/examples/legacy/not_checked/shoes-contrib/simple/simple-control-sizes.rb +0 -24
  283. data/examples/legacy/not_checked/shoes-contrib/simple/simple-curve.rb +0 -26
  284. data/examples/legacy/not_checked/shoes-contrib/simple/simple-dialogs.rb +0 -29
  285. data/examples/legacy/not_checked/shoes-contrib/simple/simple-downloader.rb +0 -27
  286. data/examples/legacy/not_checked/shoes-contrib/simple/simple-draw.rb +0 -13
  287. data/examples/legacy/not_checked/shoes-contrib/simple/simple-editor.rb +0 -28
  288. data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.rb +0 -28
  289. data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.shy +0 -0
  290. data/examples/legacy/not_checked/shoes-contrib/simple/simple-mask.rb +0 -21
  291. data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu.rb +0 -31
  292. data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu1.rb +0 -35
  293. data/examples/legacy/not_checked/shoes-contrib/simple/simple-rubygems.rb +0 -29
  294. data/examples/legacy/not_checked/shoes-contrib/simple/simple-slide.rb +0 -45
  295. data/examples/legacy/not_checked/shoes-contrib/simple/simple-sphere.rb +0 -28
  296. data/examples/legacy/not_checked/shoes-contrib/simple/simple-sqlite3.rb +0 -13
  297. data/examples/legacy/not_checked/shoes-contrib/simple/simple-timer.rb +0 -13
  298. data/examples/legacy/not_checked/shoes-contrib/simple/simple-video.rb +0 -13
  299. data/examples/legacy/not_checked/shoes-contrib/styles/alignment.rb +0 -4
  300. data/examples/legacy/not_checked/shoes-contrib/styles/attachment.rb +0 -5
  301. data/examples/legacy/not_checked/shoes-contrib/styles/emphasis.rb +0 -3
  302. data/examples/legacy/not_checked/shoes-contrib/styles/gradient-angle.rb +0 -3
  303. data/examples/legacy/not_checked/shoes-contrib/styles/para-methods.rb +0 -5
  304. data/examples/legacy/not_checked/shoes-contrib/styles/para-red-underlined.rb +0 -3
  305. data/examples/legacy/not_checked/shoes-contrib/styles/para-style-method.rb +0 -4
  306. data/examples/legacy/not_checked/shoes-dep-samples/expert-game-of-life.rb +0 -243
  307. data/examples/legacy/not_checked/shoes-dep-samples/expert-othello.rb +0 -319
  308. data/examples/legacy/not_checked/shoes-dep-samples/good-clock.rb +0 -51
  309. data/examples/legacy/not_checked/shoes-dep-samples/good-follow.rb +0 -26
  310. data/examples/legacy/not_checked/shoes-dep-samples/good-reminder.rb +0 -174
  311. data/examples/legacy/not_checked/shoes-dep-samples/good-vjot.rb +0 -56
  312. data/examples/legacy/not_checked/shoes-dep-samples/simple-accordion.rb +0 -75
  313. data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-shapes.rb +0 -17
  314. data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-text.rb +0 -13
  315. data/examples/legacy/not_checked/shoes-dep-samples/simple-arc.rb +0 -23
  316. data/examples/legacy/not_checked/shoes-dep-samples/simple-bounce.rb +0 -24
  317. data/examples/legacy/not_checked/shoes-dep-samples/simple-calc.rb +0 -70
  318. data/examples/legacy/not_checked/shoes-dep-samples/simple-chipmunk.rb +0 -26
  319. data/examples/legacy/not_checked/shoes-dep-samples/simple-control-sizes.rb +0 -24
  320. data/examples/legacy/not_checked/shoes-dep-samples/simple-curve.rb +0 -26
  321. data/examples/legacy/not_checked/shoes-dep-samples/simple-dialogs.rb +0 -29
  322. data/examples/legacy/not_checked/shoes-dep-samples/simple-draw.rb +0 -13
  323. data/examples/legacy/not_checked/shoes-dep-samples/simple-editor.rb +0 -28
  324. data/examples/legacy/not_checked/shoes-dep-samples/simple-form.rb +0 -28
  325. data/examples/legacy/not_checked/shoes-dep-samples/simple-form.shy +0 -0
  326. data/examples/legacy/not_checked/shoes-dep-samples/simple-mask.rb +0 -21
  327. data/examples/legacy/not_checked/shoes-dep-samples/simple-menu.rb +0 -31
  328. data/examples/legacy/not_checked/shoes-dep-samples/simple-menu1.rb +0 -35
  329. data/examples/legacy/not_checked/shoes-dep-samples/simple-rubygems.rb +0 -29
  330. data/examples/legacy/not_checked/shoes-dep-samples/simple-slide.rb +0 -45
  331. data/examples/legacy/not_checked/shoes-dep-samples/simple-sphere.rb +0 -28
  332. data/examples/legacy/not_checked/shoes-dep-samples/simple-sqlite3.rb +0 -13
  333. data/examples/legacy/not_checked/shoes-dep-samples/simple-timer.rb +0 -13
  334. data/examples/legacy/not_checked/shoes-dep-samples/simple-video.rb +0 -13
  335. data/examples/legacy/not_checked/shoes3-tests/AnemicCinema1926marcelDuchampCut.mp4 +0 -0
  336. data/examples/legacy/not_checked/shoes3-tests/button/button.rb +0 -53
  337. data/examples/legacy/not_checked/shoes3-tests/cache/cache.rb +0 -41
  338. data/examples/legacy/not_checked/shoes3-tests/combo/combo.rb +0 -24
  339. data/examples/legacy/not_checked/shoes3-tests/curl/bare.rb +0 -34
  340. data/examples/legacy/not_checked/shoes3-tests/curl/downloader.rb +0 -40
  341. data/examples/legacy/not_checked/shoes3-tests/curl/m1.rb +0 -11
  342. data/examples/legacy/not_checked/shoes3-tests/curl/m2.rb +0 -12
  343. data/examples/legacy/not_checked/shoes3-tests/curl/m3.rb +0 -11
  344. data/examples/legacy/not_checked/shoes3-tests/curl/m4.rb +0 -5
  345. data/examples/legacy/not_checked/shoes3-tests/curl/typ.rb +0 -30
  346. data/examples/legacy/not_checked/shoes3-tests/cursor/c1.rb +0 -21
  347. data/examples/legacy/not_checked/shoes3-tests/decoration.rb +0 -14
  348. data/examples/legacy/not_checked/shoes3-tests/dialogs/ask.rb +0 -6
  349. data/examples/legacy/not_checked/shoes3-tests/dialogs/confirm.rb +0 -6
  350. data/examples/legacy/not_checked/shoes3-tests/editbox/editbox.rb +0 -36
  351. data/examples/legacy/not_checked/shoes3-tests/editline/editline.rb +0 -27
  352. data/examples/legacy/not_checked/shoes3-tests/events/button.rb +0 -32
  353. data/examples/legacy/not_checked/shoes3-tests/events/button.yaml +0 -40
  354. data/examples/legacy/not_checked/shoes3-tests/events/capture.rb +0 -57
  355. data/examples/legacy/not_checked/shoes3-tests/events/chipmunk.yaml +0 -47
  356. data/examples/legacy/not_checked/shoes3-tests/events/event0.rb +0 -8
  357. data/examples/legacy/not_checked/shoes3-tests/events/event1.rb +0 -51
  358. data/examples/legacy/not_checked/shoes3-tests/events/event1.yaml +0 -26
  359. data/examples/legacy/not_checked/shoes3-tests/events/event2.rb +0 -46
  360. data/examples/legacy/not_checked/shoes3-tests/events/event3.rb +0 -44
  361. data/examples/legacy/not_checked/shoes3-tests/events/event4.rb +0 -65
  362. data/examples/legacy/not_checked/shoes3-tests/events/event5.rb +0 -17
  363. data/examples/legacy/not_checked/shoes3-tests/events/event6.rb +0 -51
  364. data/examples/legacy/not_checked/shoes3-tests/events/replay.rb +0 -60
  365. data/examples/legacy/not_checked/shoes3-tests/gapp/fullscreen.rb +0 -38
  366. data/examples/legacy/not_checked/shoes3-tests/gapp/icon.rb +0 -56
  367. data/examples/legacy/not_checked/shoes3-tests/gapp/mon1.rb +0 -46
  368. data/examples/legacy/not_checked/shoes3-tests/gapp/settings1.rb +0 -22
  369. data/examples/legacy/not_checked/shoes3-tests/gapp/title1.rb +0 -34
  370. data/examples/legacy/not_checked/shoes3-tests/indian.m4a +0 -0
  371. data/examples/legacy/not_checked/shoes3-tests/menus/event.rb +0 -33
  372. data/examples/legacy/not_checked/shoes3-tests/menus/menu1.rb +0 -8
  373. data/examples/legacy/not_checked/shoes3-tests/menus/menu2.rb +0 -25
  374. data/examples/legacy/not_checked/shoes3-tests/menus/menu3.rb +0 -103
  375. data/examples/legacy/not_checked/shoes3-tests/menus/menu4.rb +0 -41
  376. data/examples/legacy/not_checked/shoes3-tests/menus/tests.txt +0 -42
  377. data/examples/legacy/not_checked/shoes3-tests/opacity.rb +0 -13
  378. data/examples/legacy/not_checked/shoes3-tests/plot/^IRX.R +0 -5219
  379. data/examples/legacy/not_checked/shoes3-tests/plot/^SPX +0 -5219
  380. data/examples/legacy/not_checked/shoes3-tests/plot/cstest.rb +0 -51
  381. data/examples/legacy/not_checked/shoes3-tests/plot/gr1.rb +0 -73
  382. data/examples/legacy/not_checked/shoes3-tests/plot/gr2.rb +0 -40
  383. data/examples/legacy/not_checked/shoes3-tests/plot/gr3.rb +0 -47
  384. data/examples/legacy/not_checked/shoes3-tests/plot/gr4.rb +0 -35
  385. data/examples/legacy/not_checked/shoes3-tests/plot/gr5.rb +0 -31
  386. data/examples/legacy/not_checked/shoes3-tests/plot/gr6.rb +0 -35
  387. data/examples/legacy/not_checked/shoes3-tests/plot/gr7.rb +0 -37
  388. data/examples/legacy/not_checked/shoes3-tests/plot/grcsv.rb +0 -219
  389. data/examples/legacy/not_checked/shoes3-tests/plot/manual.rb +0 -40
  390. data/examples/legacy/not_checked/shoes3-tests/progress/progress.rb +0 -29
  391. data/examples/legacy/not_checked/shoes3-tests/radio/clear.rb +0 -20
  392. data/examples/legacy/not_checked/shoes3-tests/radio/group.rb +0 -18
  393. data/examples/legacy/not_checked/shoes3-tests/radio/multiple.rb +0 -32
  394. data/examples/legacy/not_checked/shoes3-tests/radio/nogroup.rb +0 -9
  395. data/examples/legacy/not_checked/shoes3-tests/simpletest.svg +0 -14
  396. data/examples/legacy/not_checked/shoes3-tests/spinner.rb +0 -15
  397. data/examples/legacy/not_checked/shoes3-tests/svg.rb +0 -208
  398. data/examples/legacy/not_checked/shoes3-tests/switch/switch.rb +0 -28
  399. data/examples/legacy/not_checked/shoes3-tests/systray/back.rb +0 -20
  400. data/examples/legacy/not_checked/shoes3-tests/systray/note.rb +0 -17
  401. data/examples/legacy/not_checked/shoes3-tests/terminal/cursor.rb +0 -27
  402. data/examples/legacy/not_checked/shoes3-tests/terminal/ed.rb +0 -65
  403. data/examples/legacy/not_checked/shoes3-tests/terminal/el.rb +0 -50
  404. data/examples/legacy/not_checked/shoes3-tests/terminal/logattr.rb +0 -31
  405. data/examples/legacy/not_checked/shoes3-tests/tests_color.rb +0 -138
  406. data/examples/legacy/not_checked/shoes3-tests/tests_svg.rb +0 -228
  407. data/examples/legacy/not_checked/shoes3-tests/tests_video_vlc.rb +0 -186
  408. data/examples/legacy/not_checked/shoes3-tests/tooltips.rb +0 -20
  409. data/examples/legacy/not_checked/shoes3-tests/video_vlc.rb +0 -242
  410. data/examples/legacy/not_checked/shoes3-tests/wheel/wheel1.rb +0 -21
  411. data/examples/legacy/not_checked/simple/accordion.rb +0 -81
  412. data/examples/legacy/not_checked/simple/anim-shapes.rb +0 -17
  413. data/examples/legacy/not_checked/simple/anim-text.rb +0 -13
  414. data/examples/legacy/not_checked/simple/arc.rb +0 -23
  415. data/examples/legacy/not_checked/simple/bounce.rb +0 -24
  416. data/examples/legacy/not_checked/simple/chipmunk.rb +0 -26
  417. data/examples/legacy/not_checked/simple/control-sizes.rb +0 -24
  418. data/examples/legacy/not_checked/simple/curve-control-points.rb +0 -24
  419. data/examples/legacy/not_checked/simple/curve.rb +0 -26
  420. data/examples/legacy/not_checked/simple/dialogs.rb +0 -29
  421. data/examples/legacy/not_checked/simple/downloader.rb +0 -40
  422. data/examples/legacy/not_checked/simple/downloader1.rb +0 -31
  423. data/examples/legacy/not_checked/simple/draw.rb +0 -13
  424. data/examples/legacy/not_checked/simple/editor.rb +0 -28
  425. data/examples/legacy/not_checked/simple/form.rb +0 -30
  426. data/examples/legacy/not_checked/simple/image.rb +0 -21
  427. data/examples/legacy/not_checked/simple/info.rb +0 -78
  428. data/examples/legacy/not_checked/simple/mask.rb +0 -21
  429. data/examples/legacy/not_checked/simple/mask2.rb +0 -27
  430. data/examples/legacy/not_checked/simple/menu.rb +0 -31
  431. data/examples/legacy/not_checked/simple/menu1.rb +0 -35
  432. data/examples/legacy/not_checked/simple/slide.rb +0 -45
  433. data/examples/legacy/not_checked/simple/sphere.rb +0 -28
  434. data/examples/legacy/not_checked/superleg.rb +0 -244
  435. data/examples/legacy/working/shoes-contrib/basic/a-poem.rb +0 -24
  436. data/examples/legacy/working/shoes-contrib/basic/basic-blocks-instances.rb +0 -7
  437. data/examples/legacy/working/shoes-contrib/basic/basic-blocks.rb +0 -7
  438. data/examples/legacy/working/shoes-contrib/basic/basic-slot.rb +0 -8
  439. data/examples/legacy/working/shoes-contrib/basic/intro.rb +0 -20
  440. data/examples/legacy/working/shoes-contrib/basic/two-column.rb +0 -12
  441. data/examples/legacy/working/shoes-contrib/elements/edit_box.rb +0 -6
  442. data/examples/legacy/working/shoes-contrib/kernel/alert.rb +0 -3
  443. data/examples/legacy/working/simple/calc.rb +0 -71
  444. data/examples/legacy/working/simple/sqlite3.rb +0 -27
  445. data/examples/legacy/working/simple/timer.rb +0 -13
  446. data/examples/line.rb +0 -5
  447. data/examples/link.rb +0 -20
  448. data/examples/list_box.rb +0 -8
  449. data/examples/local_fonts.rb +0 -4
  450. data/examples/local_images.rb +0 -4
  451. data/examples/motion_events.rb +0 -20
  452. data/examples/para/collection_of_arguments.rb +0 -9
  453. data/examples/para/hello_world.rb +0 -5
  454. data/examples/para/hide_and_show.rb +0 -9
  455. data/examples/para/rainbow.rb +0 -11
  456. data/examples/para/rainbow_2.rb +0 -11
  457. data/examples/para/sizes.rb +0 -11
  458. data/examples/para/sizes_2.rb +0 -12
  459. data/examples/para/strong.rb +0 -3
  460. data/examples/para_text_widgets.rb +0 -4
  461. data/examples/parse_xl_funnies.rb +0 -58
  462. data/examples/pirate.png +0 -0
  463. data/examples/raw_flow.rb +0 -11
  464. data/examples/ruby_racer.rb +0 -50
  465. data/examples/selfitude.rb +0 -18
  466. data/examples/shapes/arc.rb +0 -8
  467. data/examples/shapes/shapes.rb +0 -8
  468. data/examples/shapes/shapes_fill.rb +0 -10
  469. data/examples/shapes/star.rb +0 -5
  470. data/examples/shoes_school.rb +0 -66
  471. data/examples/shoes_splorer.rb +0 -150
  472. data/examples/simple_slides.rb +0 -73
  473. data/examples/skip_ci/parrot.rb +0 -22
  474. data/examples/skip_ci/say.rb +0 -20
  475. data/examples/sleepless.rb +0 -26
  476. data/examples/slots.rb +0 -10
  477. data/examples/spacing.rb +0 -18
  478. data/examples/span.rb +0 -6
  479. data/examples/stack/background.rb +0 -35
  480. data/examples/stack/border.rb +0 -11
  481. data/examples/stack/gradients.rb +0 -6
  482. data/examples/stack/raw_stack.rb +0 -8
  483. data/examples/stack/stack.rb +0 -27
  484. data/examples/text_change.rb +0 -4
  485. data/examples/text_sizes.rb +0 -10
  486. data/examples/timmy.rb +0 -109
  487. data/examples/title_and_resize.rb +0 -3
  488. data/examples/video.rb +0 -10
  489. data/exe/scarpe +0 -107
  490. data/fonts/Pacifico.ttf +0 -0
  491. data/lib/scarpe/alert.rb +0 -19
  492. data/lib/scarpe/arc.rb +0 -49
  493. data/lib/scarpe/base64.rb +0 -27
  494. data/lib/scarpe/button.rb +0 -35
  495. data/lib/scarpe/cats_cradle.rb +0 -255
  496. data/lib/scarpe/fill.rb +0 -23
  497. data/lib/scarpe/flow.rb +0 -18
  498. data/lib/scarpe/font.rb +0 -14
  499. data/lib/scarpe/glibui/README.md +0 -34
  500. data/lib/scarpe/glibui/alert.rb +0 -65
  501. data/lib/scarpe/glibui/app.rb +0 -27
  502. data/lib/scarpe/glibui/background.rb +0 -18
  503. data/lib/scarpe/glibui/border.rb +0 -22
  504. data/lib/scarpe/glibui/button.rb +0 -38
  505. data/lib/scarpe/glibui/dimensions.rb +0 -22
  506. data/lib/scarpe/glibui/document_root.rb +0 -33
  507. data/lib/scarpe/glibui/edit_box.rb +0 -44
  508. data/lib/scarpe/glibui/edit_line.rb +0 -43
  509. data/lib/scarpe/glibui/flow.rb +0 -33
  510. data/lib/scarpe/glibui/html.rb +0 -77
  511. data/lib/scarpe/glibui/image.rb +0 -36
  512. data/lib/scarpe/glibui/link.rb +0 -29
  513. data/lib/scarpe/glibui/local_display.rb +0 -62
  514. data/lib/scarpe/glibui/para.rb +0 -84
  515. data/lib/scarpe/glibui/spacing.rb +0 -41
  516. data/lib/scarpe/glibui/stack.rb +0 -33
  517. data/lib/scarpe/glibui/text_widget.rb +0 -30
  518. data/lib/scarpe/glibui/widget.rb +0 -81
  519. data/lib/scarpe/glibui.rb +0 -29
  520. data/lib/scarpe/libui/alert.rb +0 -9
  521. data/lib/scarpe/libui/button.rb +0 -18
  522. data/lib/scarpe/libui/colors.rb +0 -157
  523. data/lib/scarpe/libui/core.rb +0 -66
  524. data/lib/scarpe/libui/flow.rb +0 -16
  525. data/lib/scarpe/libui/libui.rb +0 -45
  526. data/lib/scarpe/libui/notepad.md +0 -26
  527. data/lib/scarpe/libui/para.rb +0 -154
  528. data/lib/scarpe/libui/stack.rb +0 -34
  529. data/lib/scarpe/line.rb +0 -25
  530. data/lib/scarpe/link.rb +0 -25
  531. data/lib/scarpe/list_box.rb +0 -25
  532. data/lib/scarpe/logger.rb +0 -159
  533. data/lib/scarpe/para.rb +0 -92
  534. data/lib/scarpe/promises.rb +0 -405
  535. data/lib/scarpe/shape.rb +0 -20
  536. data/lib/scarpe/slot.rb +0 -7
  537. data/lib/scarpe/spacing.rb +0 -9
  538. data/lib/scarpe/star.rb +0 -47
  539. data/lib/scarpe/subscription_item.rb +0 -60
  540. data/lib/scarpe/unit_test_helpers.rb +0 -236
  541. data/lib/scarpe/version.rb +0 -5
  542. data/lib/scarpe/video.rb +0 -15
  543. data/lib/scarpe/widgets.rb +0 -35
  544. data/lib/scarpe/wv/alert.rb +0 -65
  545. data/lib/scarpe/wv/app.rb +0 -104
  546. data/lib/scarpe/wv/arc.rb +0 -57
  547. data/lib/scarpe/wv/background.rb +0 -27
  548. data/lib/scarpe/wv/border.rb +0 -24
  549. data/lib/scarpe/wv/button.rb +0 -50
  550. data/lib/scarpe/wv/control_interface.rb +0 -147
  551. data/lib/scarpe/wv/control_interface_test.rb +0 -234
  552. data/lib/scarpe/wv/dimensions.rb +0 -22
  553. data/lib/scarpe/wv/document_root.rb +0 -8
  554. data/lib/scarpe/wv/edit_box.rb +0 -44
  555. data/lib/scarpe/wv/edit_line.rb +0 -43
  556. data/lib/scarpe/wv/fill.rb +0 -30
  557. data/lib/scarpe/wv/flow.rb +0 -24
  558. data/lib/scarpe/wv/font.rb +0 -36
  559. data/lib/scarpe/wv/html.rb +0 -108
  560. data/lib/scarpe/wv/image.rb +0 -41
  561. data/lib/scarpe/wv/line.rb +0 -38
  562. data/lib/scarpe/wv/link.rb +0 -29
  563. data/lib/scarpe/wv/list_box.rb +0 -50
  564. data/lib/scarpe/wv/para.rb +0 -90
  565. data/lib/scarpe/wv/shape.rb +0 -35
  566. data/lib/scarpe/wv/shape_helper.rb +0 -44
  567. data/lib/scarpe/wv/slot.rb +0 -81
  568. data/lib/scarpe/wv/spacing.rb +0 -41
  569. data/lib/scarpe/wv/span.rb +0 -66
  570. data/lib/scarpe/wv/stack.rb +0 -24
  571. data/lib/scarpe/wv/star.rb +0 -64
  572. data/lib/scarpe/wv/subscription_item.rb +0 -50
  573. data/lib/scarpe/wv/text_widget.rb +0 -30
  574. data/lib/scarpe/wv/video.rb +0 -42
  575. data/lib/scarpe/wv/web_wrangler.rb +0 -683
  576. data/lib/scarpe/wv/webview_local_display.rb +0 -73
  577. data/lib/scarpe/wv/webview_relay_display.rb +0 -185
  578. data/lib/scarpe/wv/widget.rb +0 -185
  579. data/lib/scarpe/wv/wv_display_worker.rb +0 -65
  580. data/lib/scarpe/wv.rb +0 -43
  581. data/lib/scarpe/wv_local.rb +0 -6
  582. data/lib/scarpe/wv_relay.rb +0 -6
  583. data/lib/scarpe.rb +0 -29
  584. data/lib/shoes/text_widget.rb +0 -52
  585. data/lib/shoes/widget.rb +0 -209
  586. data/logger/debug_web_wrangler.json +0 -4
  587. data/logger/scarpe_wv_test.json +0 -4
  588. data/scarpe-0.2.0.gem +0 -0
  589. data/scarpe.gemspec +0 -44
  590. data/scarpegen.rb +0 -193
  591. data/sig/scarpe.rbs +0 -4
  592. data/templates/basic_class_template.erb +0 -38
  593. data/templates/class_template_with_event_bind.erb +0 -27
  594. data/templates/class_template_with_shapes.erb +0 -43
  595. data/templates/example_template.erb +0 -3
  596. data/templates/module_template.erb +0 -12
  597. data/templates/webview_template.erb +0 -27
data/lib/shoes/app.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Shoes
4
- class App < Shoes::Widget
5
- include Scarpe::Log
3
+ class Shoes
4
+ class App < Shoes::Drawable
5
+ include Shoes::Log
6
6
 
7
7
  class << self
8
8
  attr_accessor :instance
@@ -10,42 +10,61 @@ module Shoes
10
10
 
11
11
  attr_reader :document_root
12
12
 
13
- display_properties :title, :width, :height, :resizable, :debug
13
+ shoes_styles :title, :width, :height, :resizable
14
+
15
+ CUSTOM_EVENT_LOOP_TYPES = ["displaylib", "return", "wait"]
14
16
 
15
17
  def initialize(
16
- title: "Scarpe!",
18
+ title: "Shoes!",
17
19
  width: 480,
18
20
  height: 420,
19
21
  resizable: true,
20
- debug: ENV["SCARPE_DEBUG"] ? true : false,
21
22
  &app_code_body
22
23
  )
24
+ log_init("Shoes::App")
25
+
23
26
  if Shoes::App.instance
24
27
  @log.error("Trying to create a second Shoes::App in the same process! Fail!")
25
- raise "Cannot create multiple Shoes::App objects!"
28
+ raise Shoes::Errors::TooManyInstancesError, "Cannot create multiple Shoes::App objects!"
26
29
  else
27
30
  Shoes::App.instance = self
28
31
  end
29
32
 
30
- log_init("Shoes::App")
31
-
32
33
  @do_shutdown = false
34
+ @event_loop_type = "displaylib" # the default
33
35
 
34
36
  super
35
37
 
36
- # This creates the DocumentRoot, including its corresponding display widget
37
- @document_root = Scarpe::DocumentRoot.new
38
+ # The draw context tracks current settings like fill and stroke,
39
+ # plus potentially other current state that changes from drawable
40
+ # to drawable and slot to slot.
41
+ @draw_context = {
42
+ "fill" => "",
43
+ "stroke" => "",
44
+ "rotate" => 0,
45
+ }
46
+
47
+ # This creates the DocumentRoot, including its corresponding display drawable
48
+ @document_root = Shoes::DocumentRoot.new
38
49
 
39
50
  @slots = []
40
51
 
41
- # Now create the App display widget
42
- create_display_widget
52
+ # Now create the App display drawable
53
+ create_display_drawable
43
54
 
44
55
  # Set up testing events *after* Display Service basic objects exist
45
56
  if ENV["SCARPE_APP_TEST"]
46
57
  test_code = File.read ENV["SCARPE_APP_TEST"]
47
58
  if test_code != ""
48
- self.instance_eval test_code
59
+ @test_obj = Object.new
60
+ @test_obj.instance_eval test_code
61
+ end
62
+ end
63
+
64
+ if ENV["SHOES_SPEC_TEST"]
65
+ test_code = File.read ENV["SHOES_SPEC_TEST"]
66
+ unless test_code.empty?
67
+ Shoes::Spec.instance.run_shoes_spec_test_code test_code
49
68
  end
50
69
  end
51
70
 
@@ -59,9 +78,15 @@ module Shoes
59
78
  self.destroy(send_event: false)
60
79
  end
61
80
 
81
+ @watch_for_event_loop = bind_shoes_event(event_name: "custom_event_loop") do |loop_type|
82
+ raise(Shoes::Errors::InvalidAttributeValueError, "Unknown event loop type: #{loop_type.inspect}!") unless CUSTOM_EVENT_LOOP_TYPES.include?(loop_type)
83
+
84
+ @event_loop_type = loop_type
85
+ end
86
+
62
87
  Signal.trap("INT") do
63
- @log.warning("App interrupted by signal, stopping...")
64
- puts "\nStopping Scarpe app..."
88
+ @log.warn("App interrupted by signal, stopping...")
89
+ puts "\nStopping Shoes app..."
65
90
  destroy
66
91
  end
67
92
  end
@@ -73,9 +98,9 @@ module Shoes
73
98
  ::Shoes::App.instance.with_slot(@document_root, &@app_code_body)
74
99
  end
75
100
 
76
- # "Container" widgets like flows, stacks, masks and the document root
77
- # are considered "slots" in Scarpe parlance. When a new slot is created,
78
- # we push it here in order to track what widgets are found in that slot.
101
+ # "Container" drawables like flows, stacks, masks and the document root
102
+ # are considered "slots" in Shoes parlance. When a new slot is created,
103
+ # we push it here in order to track what drawables are found in that slot.
79
104
  def push_slot(slot)
80
105
  @slots.push(slot)
81
106
  end
@@ -99,14 +124,62 @@ module Shoes
99
124
  pop_slot
100
125
  end
101
126
 
102
- # This isn't supposed to return. The display service should take control
127
+ # We use method_missing for drawable-creating methods like "button".
128
+ # The parent's method_missing will auto-create Shoes style getters and setters.
129
+ # This is similar to the method_missing in Shoes::Slot, but different in
130
+ # where the new drawable appears.
131
+ def method_missing(name, *args, **kwargs, &block)
132
+ klass = ::Shoes::Drawable.drawable_class_by_name(name)
133
+ return super unless klass
134
+
135
+ ::Shoes::App.define_method(name) do |*args, **kwargs, &block|
136
+ # Look up the Shoes drawable and create it...
137
+ drawable_instance = klass.new(*args, **kwargs, &block)
138
+
139
+ unless klass.ancestors.include?(::Shoes::TextDrawable)
140
+ # Create this drawable in the current app slot
141
+ drawable_instance.set_parent ::Shoes::App.instance.current_slot
142
+ end
143
+
144
+ drawable_instance
145
+ end
146
+
147
+ send(name, *args, **kwargs, &block)
148
+ end
149
+
150
+ def current_draw_context
151
+ @draw_context.dup
152
+ end
153
+
154
+ # This usually doesn't return. The display service may take control
103
155
  # of the main thread. Local Webview even stops any background threads.
156
+ # However, some display libraries don't want to shut down and don't
157
+ # want to (and/or can't) take control of the event loop.
104
158
  def run
105
159
  if @do_shutdown
106
160
  $stderr.puts "Destroy has already been signaled, but we just called Shoes::App.run!"
107
161
  return
108
162
  end
163
+
164
+ # The display lib can send us an event to customise the event loop handling.
165
+ # But it must do so before the "run" event returns.
109
166
  send_shoes_event(event_name: "run")
167
+
168
+ case @event_loop_type
169
+ when "wait"
170
+ # Display lib wants us to busy-wait instead of it.
171
+ until @do_shutdown
172
+ Shoes::DisplayService.dispatch_event("heartbeat", nil)
173
+ end
174
+ when "displaylib"
175
+ # If run event returned, that means we're done.
176
+ destroy
177
+ when "return"
178
+ # We can just return to the main event loop. But we shouldn't call destroy.
179
+ # Presumably some event loop *outside* our event loop is handling things.
180
+ else
181
+ raise Shoes::Errors::InvalidAttributeValueError, "Internal error! Incorrect event loop type: #{@event_loop_type.inspect}!"
182
+ end
110
183
  end
111
184
 
112
185
  def destroy(send_event: true)
@@ -114,55 +187,75 @@ module Shoes
114
187
  send_shoes_event(event_name: "destroy") if send_event
115
188
  end
116
189
 
117
- def all_widgets
190
+ def all_drawables
118
191
  out = []
119
192
 
120
193
  to_add = @document_root.children
121
194
  until to_add.empty?
122
195
  out.concat(to_add)
123
- to_add = to_add.flat_map(&:children).compact
196
+ to_add = to_add.flat_map { |w| w.respond_to?(:children) ? w.children : [] }.compact
124
197
  end
125
198
 
126
199
  out
127
200
  end
128
201
 
129
- # We can add various ways to find widgets here.
202
+ # We can add various ways to find drawables here.
130
203
  # These are sort of like Shoes selectors, used for testing.
131
- def find_widgets_by(*specs)
132
- widgets = all_widgets
204
+ def find_drawables_by(*specs)
205
+ drawables = all_drawables
133
206
  specs.each do |spec|
134
- if spec.is_a?(Class)
135
- widgets.select! { |w| spec === w }
136
- elsif spec.is_a?(Symbol)
207
+ if spec == Shoes::App
208
+ drawables = [Shoes::App.instance]
209
+ elsif spec.is_a?(Class)
210
+ drawables.select! { |w| spec === w }
211
+ elsif spec.is_a?(Symbol) || spec.is_a?(String)
137
212
  s = spec.to_s
138
213
  case s[0]
139
214
  when "$"
140
215
  begin
141
216
  # I'm not finding a global_variable_get or similar...
142
217
  global_value = eval s
143
- widgets &= [global_value]
218
+ drawables &= [global_value]
144
219
  rescue
145
- raise "Error getting global variable: #{spec.inspect}"
220
+ raise Shoes::Errors::InvalidAttributeValueError, "Error getting global variable: #{spec.inspect}"
146
221
  end
147
222
  when "@"
148
- if app.instance_variables.include?(spec)
149
- widgets &= [self.instance_variable_get(spec)]
223
+ if Shoes::App.instance.instance_variables.include?(spec.to_sym)
224
+ drawables &= [self.instance_variable_get(spec)]
150
225
  else
151
- raise "Can't find top-level instance variable: #{spec.inspect}!"
226
+ raise Shoes::Errors::InvalidAttributeValueError, "Can't find top-level instance variable: #{spec.inspect}!"
152
227
  end
153
228
  else
229
+ if s.start_with?("id:")
230
+ find_id = Integer(s[3..-1])
231
+ drawable = Shoes::Drawable.drawable_by_id(find_id)
232
+ drawables &= [drawable]
233
+ else
234
+ raise Shoes::Errors::InvalidAttributeValueError, "Don't know how to find drawables by #{spec.inspect}!"
235
+ end
154
236
  end
155
237
  else
156
- raise("Don't know how to find widgets by #{spec.inspect}!")
238
+ raise(Shoes::Errors::InvalidAttributeValueError, "Don't know how to find drawables by #{spec.inspect}!")
157
239
  end
158
240
  end
159
- widgets
241
+ drawables
160
242
  end
161
243
  end
162
244
  end
163
245
 
164
- # DSL methods
165
- class Shoes::App
246
+ # Event handler DSLs get defined in both App and Slot - same code, slightly different results
247
+ events = [:motion, :hover, :leave, :click, :release, :keypress, :animate, :every, :timer]
248
+ events.each do |event|
249
+ Shoes::App.define_method(event) do |*args, &block|
250
+ subscription_item(args:, shoes_api_name: event.to_s, &block)
251
+ end
252
+ Shoes::Slot.define_method(event) do |*args, &block|
253
+ subscription_item(args:, shoes_api_name: event.to_s, &block)
254
+ end
255
+ end
256
+
257
+ # These methods will need to be defined on Slots too, but probably need a rework in general.
258
+ class Shoes::App < Shoes::Drawable
166
259
  def background(...)
167
260
  current_slot.background(...)
168
261
  end
@@ -171,17 +264,46 @@ class Shoes::App
171
264
  current_slot.border(...)
172
265
  end
173
266
 
174
- def motion(&block)
175
- subscription_item(shoes_api_name: "motion", &block)
267
+ # Draw context methods
268
+
269
+ def fill(color)
270
+ @draw_context["fill"] = color
271
+ end
272
+
273
+ def nofill
274
+ @draw_context["fill"] = ""
176
275
  end
177
276
 
178
- def hover(&block)
179
- subscription_item(shoes_api_name: "hover", &block)
277
+ def stroke(color)
278
+ @draw_context["stroke"] = color
279
+ end
280
+
281
+ def nostroke
282
+ @draw_context["stroke"] = ""
283
+ end
284
+
285
+ # Shape DSL methods
286
+
287
+ def move_to(x, y)
288
+ raise(Shoes::Errors::InvalidAttributeValueError, "Pass only Numeric arguments to move_to!") unless x.is_a?(Numeric) && y.is_a?(Numeric)
289
+
290
+ if current_slot.is_a?(::Shoes::Shape)
291
+ current_slot.add_shape_command(["move_to", x, y])
292
+ end
293
+ end
294
+
295
+ def line_to(x, y)
296
+ raise(Shoes::Errors::InvalidAttributeValueError, "Pass only Numeric arguments to line_to!") unless x.is_a?(Numeric) && y.is_a?(Numeric)
297
+
298
+ if current_slot.is_a?(::Shoes::Shape)
299
+ current_slot.add_shape_command(["line_to", x, y])
300
+ end
180
301
  end
181
302
 
182
- def click(&block)
183
- subscription_item(shoes_api_name: "click", &block)
303
+ def rotate(angle)
304
+ @draw_context["rotate"] = angle
184
305
  end
306
+ # Not implemented yet: curve_to, arc_to
185
307
 
186
308
  alias_method :info, :puts
187
309
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
3
+ class Shoes
4
4
  module Background
5
5
  def self.included(includer)
6
- includer.display_property(:background_color)
6
+ includer.shoes_style(:background_color)
7
7
  end
8
8
 
9
9
  # NOTE: this needs to be passed through in order for the styling to work
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
3
+ class Shoes
4
4
  module Border
5
5
  def self.included(includer)
6
- includer.display_properties :border_color, :options
6
+ includer.shoes_styles :border_color, :options
7
7
  end
8
8
 
9
9
  # Considering a signature like this:
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shoes has a number of built-in methods that are intended to be available everywhere,
4
+ # in every Shoes and non-Shoes class, for every Shoes app.
5
+ module Shoes::Builtins
6
+ # Register the given font with Shoes so that text that wants it can use it.
7
+ # Also add it to the FONTS constant.
8
+ #
9
+ # @param font_file_or_url [String] the filename or URL for the font
10
+ # @return [void]
11
+ def font(font_file_or_url)
12
+ shoes_builtin("font", font_file_or_url)
13
+
14
+ font_name = File.basename(font_file_or_url, ".*")
15
+ Shoes::FONTS << font_name
16
+ end
17
+
18
+ def ask(message_string)
19
+ shoes_builtin("ask", message_string)
20
+ end
21
+
22
+ def alert(message)
23
+ shoes_builtin("alert", message)
24
+ end
25
+
26
+ def ask_color(title_bar)
27
+ shoes_builtin("ask_color", title_bar)
28
+ end
29
+
30
+ def ask_open_file()
31
+ shoes_builtin("ask_open_file")
32
+ end
33
+
34
+ def ask_save_file()
35
+ shoes_builtin("ask_save_file")
36
+ end
37
+
38
+ def ask_open_folder()
39
+ shoes_builtin("ask_open_folder")
40
+ end
41
+
42
+ def ask_save_folder()
43
+ shoes_builtin("ask_save_folder")
44
+ end
45
+
46
+ def confirm(question)
47
+ shoes_builtin("confirm", question)
48
+ end
49
+
50
+ # TO ADD: debug, error, info, warn
51
+ # TO VERIFY OR ADD: gradient, gray, rgb
52
+
53
+ private
54
+
55
+ def shoes_builtin(cmd_name, *args)
56
+ Shoes::DisplayService.dispatch_event("builtin", nil, cmd_name, args)
57
+ nil
58
+ end
59
+ end
60
+
61
+ module Kernel
62
+ include Shoes::Builtins
63
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "log"
4
+ # require "scarpe/components/modular_logger"
5
+
6
+ class Shoes
7
+ class Changelog
8
+ # include Shoes::Log
9
+
10
+ def initialize
11
+ #TODO : refer to https://github.com/scarpe-team/scarpe/pull/400
12
+ # and figure out how to use scarpe logger here without getting duplicate or nil error
13
+ # Shoes::Log.instance = Scarpe::Components::ModularLogImpl.new
14
+ # log_init("Changelog")
15
+ end
16
+
17
+ def get_latest_release_info
18
+ root_dir = File.dirname(__FILE__, 4) # this duplicates constants.rb, but how to share?
19
+
20
+ git_dir = "#{root_dir}/.git"
21
+ revision = nil
22
+ if File.exist?(git_dir)
23
+ revision = `git rev-parse HEAD`.chomp
24
+ end
25
+
26
+ changelog_file = "#{root_dir}/CHANGELOG.md"
27
+ if File.exist?(changelog_file)
28
+ changelog_content = File.read(changelog_file)
29
+ release_name_pattern = /^## \[(\d+\.\d+\.\d+)\] - (\d{4}-\d{2}-\d{2}) - (\w+)$/m
30
+ release_matches = changelog_content.scan(release_name_pattern)
31
+ latest_release = release_matches.max_by { |version, _date, _name| Gem::Version.new(version) }
32
+
33
+ if latest_release
34
+ #puts "Found release #{latest_release[0]} in CHANGELOG.md"
35
+ # @log.debug("Found release #{latest_release[0]} in CHANGELOG.md") # Logger isn't initialized yet
36
+ version_parts = latest_release[0].split(".").map(&:to_i)
37
+ rel_id = ("%02d%02d%02d" % version_parts).to_i
38
+
39
+ return({
40
+ RELEASE_NAME: latest_release[2],
41
+ RELEASE_BUILD_DATE: latest_release[1],
42
+ RELEASE_ID: rel_id,
43
+ REVISION: revision,
44
+ })
45
+ end
46
+ end
47
+
48
+ puts "No release found in CHANGELOG.md"
49
+ { RELEASE_NAME: nil, RELEASE_BUILD_DATE: nil, RELEASE_ID: nil, REVISION: revision }
50
+ end
51
+ end
52
+ end
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
3
+ class Shoes
4
4
  module Colors
5
+ extend self
6
+
5
7
  COLORS = {
6
8
  aliceblue: [240, 248, 255],
7
9
  antiquewhite: [250, 235, 215],
@@ -1,26 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tmpdir"
4
-
5
- module Shoes
3
+ require_relative "changelog"
4
+ class Shoes
6
5
  module Constants
7
6
  def self.find_lib_dir
7
+ begin
8
+ require "tmpdir"
9
+ rescue LoadError
10
+ return nil
11
+ end
8
12
  homes = [
9
13
  [ENV["LOCALAPPDATA"], "Shoes"],
10
14
  [ENV["APPDATA"], "Shoes"],
11
15
  [ENV["HOME"], ".shoes"],
12
16
  [Dir.tmpdir, "shoes"],
13
17
  ]
18
+
14
19
  top, file = homes.detect { |home_top, _| home_top && File.exist?(home_top) }
15
20
  File.join(top, file)
16
21
  end
17
22
 
23
+ # A temp dir for Shoes app files
18
24
  LIB_DIR = find_lib_dir
19
25
 
26
+ # the Shoes library dir
27
+ DIR = File.dirname(__FILE__, 4)
28
+
20
29
  # Math constants from Shoes3
21
30
  RAD2PI = 0.01745329251994329577
22
31
  TWO_PI = 6.28318530717958647693
23
32
  HALF_PI = 1.57079632679489661923
24
33
  PI = 3.14159265358979323846
34
+
35
+ # This should be set up by the Display Service when it loads
36
+ FONTS = []
25
37
  end
38
+
39
+ # Access and assign the release constants
40
+ changelog_instance = Shoes::Changelog.new
41
+ RELEASE_INFO = changelog_instance.get_latest_release_info
42
+ RELEASE_NAME = RELEASE_INFO[:RELEASE_NAME]
43
+ RELEASE_ID = RELEASE_INFO[:RELEASE_ID]
44
+ RELEASE_BUILD_DATE = RELEASE_INFO[:RELEASE_BUILD_DATE]
45
+ RELEASE_TYPE = "LOOSE_SHOES" # This isn't really a thing any more
46
+ REVISION = RELEASE_INFO[:REVISION]
26
47
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Scarpe Shoes apps operate in multiple layers. A Shoes widget tree exists as fairly
4
- # plain, simple Ruby objects. And then a display-service widget tree integrates with
5
- # the display technology, initially Webview. This lets us use Ruby as our API while
6
- # not tying it too closely to the limitations of Webview.
3
+ # Lacci Shoes apps operate in multiple layers. A Shoes drawable tree exists as fairly
4
+ # plain, simple Ruby objects. And then a display-service drawable tree integrates with
5
+ # the display technology. This lets us use Ruby as our API while
6
+ # not tying it too closely to the limitations of Webview, WASM, LibUI, etc.
7
7
  #
8
8
  # ## Choosing Display Services
9
9
  #
10
- # Before running a Scarpe app, you can set SCARPE_DISPLAY_SERVICE. If you
10
+ # Before running a Lacci app, you can set SCARPE_DISPLAY_SERVICE. If you
11
11
  # set it to "whatever_service", Scarpe will require "scarpe/whatever_service",
12
12
  # which can be supplied by the Scarpe gem or another Scarpe-based gem.
13
13
  # Currently leaving the environment variable empty is equivalent to requesting
@@ -15,24 +15,22 @@
15
15
  #
16
16
  # ## Events
17
17
  #
18
- # Events are a lot of what tie the Shoes widgets and the display service together.
18
+ # Events are a lot of what tie the Shoes drawables and the display service together.
19
19
  #
20
- # Scarpe widgets *expect* to operate in a fairly "hands off" mode where they record
20
+ # Shoes drawables *expect* to operate in a fairly "hands off" mode where they record
21
21
  # to an event queue to send to the display service, and the display service records
22
22
  # events to send back.
23
23
  #
24
24
  # When a Shoes handler takes an action (e.g. some_para.replace(),) the relevant
25
25
  # call will be dispatched as a :display event, to be sent to the display service.
26
26
  # And when a display-side event occurs (e.g. user pushes a button,) it will be
27
- # dispatched as a :shoes event, to be sent to the Shoes tree of widgets.
27
+ # dispatched as a :shoes event, to be sent to the Shoes tree of drawables.
28
28
  #
29
- module Shoes
29
+ class Shoes
30
30
  class DisplayService
31
31
  class << self
32
32
  # This is in the eigenclass/metaclass, *not* instances of DisplayService
33
- include Scarpe::Log
34
-
35
- attr_accessor :json_debug_serialize
33
+ include Shoes::Log
36
34
 
37
35
  # An event_target may be nil, to indicate there is no target.
38
36
  def dispatch_event(event_name, event_target, *args, **kwargs)
@@ -46,7 +44,8 @@ module Shoes
46
44
 
47
45
  @log.debug("Dispatch event: #{event_name.inspect} T: #{event_target.inspect} A: #{args.inspect} KW: #{kwargs.inspect}")
48
46
 
49
- if DisplayService.json_debug_serialize
47
+ # When true, this makes sure all events and properties are 100% strings, no symbols.
48
+ if ENV["SCARPE_DEBUG"]
50
49
  args = JSON.parse JSON.dump(args)
51
50
  new_kw = {}
52
51
  kwargs.each do |k, v|
@@ -129,22 +128,32 @@ module Shoes
129
128
 
130
129
  # These methods are an interface to DisplayService objects.
131
130
 
132
- def create_display_widget_for(widget_class_name, widget_id, properties)
131
+ def create_display_drawable_for(drawable_class_name, drawable_id, properties, is_widget:)
133
132
  raise "Override in DisplayService implementation!"
134
133
  end
135
134
 
136
- def set_widget_pairing(id, display_widget)
137
- @display_widget_for ||= {}
138
- @display_widget_for[id] = display_widget
135
+ def set_drawable_pairing(id, display_drawable)
136
+ if id.nil?
137
+ raise Shoes::Errors::BadLinkableIdError, "Linkable ID may not be nil!"
138
+ end
139
+
140
+ @display_drawable_for ||= {}
141
+ if @display_drawable_for[id]
142
+ raise Shoes::Errors::DuplicateCreateDrawableError, "There is already a drawable for #{id.inspect}! Not setting a new one."
143
+ end
144
+
145
+ @display_drawable_for[id] = display_drawable
146
+ nil
139
147
  end
140
148
 
141
- def query_display_widget_for(id, nil_ok: false)
142
- display_widget = @display_widget_for[id]
143
- unless display_widget || nil_ok
144
- raise "Could not find display widget for linkable ID #{id.inspect}!"
149
+ def query_display_drawable_for(id, nil_ok: false)
150
+ @display_drawable_for ||= {}
151
+ display_drawable = @display_drawable_for[id]
152
+ unless display_drawable || nil_ok
153
+ raise "Could not find display drawable for linkable ID #{id.inspect}!"
145
154
  end
146
155
 
147
- display_widget
156
+ display_drawable
148
157
  end
149
158
 
150
159
  def destroy
@@ -164,6 +173,8 @@ module Shoes
164
173
 
165
174
  def initialize(linkable_id: object_id)
166
175
  @linkable_id = linkable_id
176
+ @subscriptions = {}
177
+ @display_drawable_for ||= {}
167
178
  end
168
179
 
169
180
  def send_self_event(*args, event_name:, **kwargs)
@@ -175,11 +186,22 @@ module Shoes
175
186
  end
176
187
 
177
188
  def bind_shoes_event(event_name:, target: nil, &handler)
178
- DisplayService.subscribe_to_event(event_name, target, &handler)
189
+ sub = DisplayService.subscribe_to_event(event_name, target, &handler)
190
+ @subscriptions[sub] = true
191
+ sub
179
192
  end
180
193
 
181
194
  def unsub_shoes_event(unsub_id)
195
+ unless @subscriptions[unsub_id]
196
+ $stderr.puts "Unsubscribing from event that isn't in subscriptions! #{unsub_id.inspect}"
197
+ end
182
198
  DisplayService.unsub_from_events(unsub_id)
199
+ @subscriptions.delete unsub_id
200
+ end
201
+
202
+ def unsub_all_shoes_events
203
+ @subscriptions.keys.each { |k| DisplayService.unsub_from_events(k) }
204
+ @subscriptions.clear
183
205
  end
184
206
  end
185
207
  end