scarpe 0.1.0 → 0.2.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 (530) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +80 -9
  3. data/.ruby-version +1 -0
  4. data/.vscode/extensions.json +5 -0
  5. data/.yardopts +3 -0
  6. data/CHANGELOG.md +14 -0
  7. data/CONTRIBUTING.md +20 -0
  8. data/Gemfile +14 -2
  9. data/README.md +138 -18
  10. data/Rakefile +2 -3
  11. data/dev.yml +7 -0
  12. data/docs/static/PKGBUILD +47 -0
  13. data/docs/static/Shoes.icns +0 -0
  14. data/docs/static/avatar.png +0 -0
  15. data/docs/static/code_highlighter.js +188 -0
  16. data/docs/static/code_highlighter_ruby.js +26 -0
  17. data/docs/static/icon-debug.png +0 -0
  18. data/docs/static/icon-error.png +0 -0
  19. data/docs/static/icon-info.png +0 -0
  20. data/docs/static/icon-warn.png +0 -0
  21. data/docs/static/listbox_button1.png +0 -0
  22. data/docs/static/listbox_button2.png +0 -0
  23. data/docs/static/man-app.png +0 -0
  24. data/docs/static/man-builds.png +0 -0
  25. data/docs/static/man-builds1.png +0 -0
  26. data/docs/static/man-editor-notepad.png +0 -0
  27. data/docs/static/man-editor-osx.png +0 -0
  28. data/docs/static/man-ele-background.png +0 -0
  29. data/docs/static/man-ele-border.png +0 -0
  30. data/docs/static/man-ele-button.png +0 -0
  31. data/docs/static/man-ele-check.png +0 -0
  32. data/docs/static/man-ele-editbox.png +0 -0
  33. data/docs/static/man-ele-editline.png +0 -0
  34. data/docs/static/man-ele-image.png +0 -0
  35. data/docs/static/man-ele-listbox.png +0 -0
  36. data/docs/static/man-ele-progress.png +0 -0
  37. data/docs/static/man-ele-radio.png +0 -0
  38. data/docs/static/man-ele-shape.png +0 -0
  39. data/docs/static/man-ele-textblock.png +0 -0
  40. data/docs/static/man-ele-video.png +0 -0
  41. data/docs/static/man-intro-dmg.png +0 -0
  42. data/docs/static/man-intro-exe.png +0 -0
  43. data/docs/static/man-look-tiger.png +0 -0
  44. data/docs/static/man-look-ubuntu.png +0 -0
  45. data/docs/static/man-look-vista.png +0 -0
  46. data/docs/static/man-run-osx.png +0 -0
  47. data/docs/static/man-run-vista.png +0 -0
  48. data/docs/static/man-run-xp.png +0 -0
  49. data/docs/static/man-shot1.png +0 -0
  50. data/docs/static/manual-en.txt +3529 -0
  51. data/docs/static/manual-ja.txt +2829 -0
  52. data/docs/static/manual.css +171 -0
  53. data/docs/static/manual.md +3528 -0
  54. data/docs/static/menu-corner1.png +0 -0
  55. data/docs/static/menu-corner2.png +0 -0
  56. data/docs/static/menu-gray.png +0 -0
  57. data/docs/static/menu-left.png +0 -0
  58. data/docs/static/menu-right.png +0 -0
  59. data/docs/static/menu-top.png +0 -0
  60. data/docs/static/shoes-dmg.jpg +0 -0
  61. data/docs/static/shoes-icon-blue.png +0 -0
  62. data/docs/static/shoes-icon.png +0 -0
  63. data/docs/static/shoes-manual-apps.gif +0 -0
  64. data/docs/static/shoes_main_window.png +0 -0
  65. data/docs/static/stripe.png +0 -0
  66. data/docs/static/stubs/blank.exe +0 -0
  67. data/docs/static/stubs/blank.hfz +0 -0
  68. data/docs/static/stubs/blank.run +375 -0
  69. data/docs/static/stubs/cocoa-install +0 -0
  70. data/docs/static/stubs/sh-install +49 -0
  71. data/docs/static/stubs/shoes-stub-inject.exe +0 -0
  72. data/docs/static/stubs/shoes-stub.exe +0 -0
  73. data/docs/static/tutor-back.png +0 -0
  74. data/examples/bloopsaphone/working/1901_by_Aanand_Prasad.rb +478 -0
  75. data/examples/bloopsaphone/working/b1.rb +64 -0
  76. data/examples/bloopsaphone/working/b2.rb +36 -0
  77. data/examples/bloopsaphone/working/bloops_test.rb +41 -0
  78. data/examples/bloopsaphone/working/bloopsaphone_theme_song_by_why.rb +31 -0
  79. data/examples/bloopsaphone/working/feepogram.rb +67 -0
  80. data/examples/bloopsaphone/working/simpsons_theme_song_by_why.rb +14 -0
  81. data/examples/bloopsaphone/working/tune_cheeky_drat.rb +210 -0
  82. data/examples/button.rb +6 -5
  83. data/examples/button_alert.rb +6 -0
  84. data/examples/button_go_away.rb +6 -0
  85. data/examples/button_with_position_and_size.rb +7 -0
  86. data/examples/coffee.rb +14 -0
  87. data/examples/download.rb +5 -0
  88. data/examples/edit_box.rb +10 -0
  89. data/examples/edit_line.rb +8 -0
  90. data/examples/fill.rb +25 -0
  91. data/examples/flow.rb +11 -0
  92. data/examples/fonts.rb +6 -0
  93. data/examples/gen.rb +140 -0
  94. data/examples/hello_world.rb +2 -4
  95. data/examples/highlander.rb +87 -0
  96. data/examples/image/clickable_image.rb +5 -0
  97. data/examples/{image.rb → image/image.rb} +2 -4
  98. data/examples/image/image_size.rb +7 -0
  99. data/examples/image/image_with_position_and_size.rb +3 -0
  100. data/examples/info.rb +9 -0
  101. data/examples/legacy/not_checked/expert/colours.rb +105 -0
  102. data/examples/legacy/not_checked/expert/curve-animation.rb +31 -0
  103. data/examples/legacy/not_checked/expert/curve-control-point.rb +51 -0
  104. data/examples/legacy/not_checked/expert/custom-list-box.rb +53 -0
  105. data/examples/legacy/not_checked/expert/definr.rb +23 -0
  106. data/examples/legacy/not_checked/expert/funnies.rb +56 -0
  107. data/examples/legacy/not_checked/expert/minesweeper.rb +267 -0
  108. data/examples/legacy/not_checked/expert/othello.rb +318 -0
  109. data/examples/legacy/not_checked/expert/pong.rb +62 -0
  110. data/examples/legacy/not_checked/expert/tankspank.rb +385 -0
  111. data/examples/legacy/not_checked/expert/tooltips.rb +45 -0
  112. data/examples/legacy/not_checked/expert/url.rb +37 -0
  113. data/examples/legacy/not_checked/expert/video-player.rb +256 -0
  114. data/examples/legacy/not_checked/good/_why-stories.rb +44 -0
  115. data/examples/legacy/not_checked/good/_why-stories.yaml +387 -0
  116. data/examples/legacy/not_checked/good/arc.rb +37 -0
  117. data/examples/legacy/not_checked/good/cardflip.rb +141 -0
  118. data/examples/legacy/not_checked/good/clock.rb +51 -0
  119. data/examples/legacy/not_checked/good/console.rb +21 -0
  120. data/examples/legacy/not_checked/good/follow.rb +26 -0
  121. data/examples/legacy/not_checked/good/image-rotate.rb +14 -0
  122. data/examples/legacy/not_checked/good/paris.svg +7236 -0
  123. data/examples/legacy/not_checked/good/path-animation.rb +46 -0
  124. data/examples/legacy/not_checked/good/plots.rb +100 -0
  125. data/examples/legacy/not_checked/good/reminder.rb +174 -0
  126. data/examples/legacy/not_checked/good/svgview.rb +113 -0
  127. data/examples/legacy/not_checked/good/vjot.rb +56 -0
  128. data/examples/legacy/not_checked/shoes-contrib/.gitignore +2 -0
  129. data/examples/legacy/not_checked/shoes-contrib/README.md +34 -0
  130. data/examples/legacy/not_checked/shoes-contrib/animation/animate-ovals.rb +21 -0
  131. data/examples/legacy/not_checked/shoes-contrib/animation/flowers.rb +59 -0
  132. data/examples/legacy/not_checked/shoes-contrib/animation/happy-trails.rb +31 -0
  133. data/examples/legacy/not_checked/shoes-contrib/animation/mice-satellites.rb +27 -0
  134. data/examples/legacy/not_checked/shoes-contrib/animation/oval-motion.rb +12 -0
  135. data/examples/legacy/not_checked/shoes-contrib/animation/pink-bubbles.rb +34 -0
  136. data/examples/legacy/not_checked/shoes-contrib/animation/pulsate.rb +18 -0
  137. data/examples/legacy/not_checked/shoes-contrib/animation/rotating-star.rb +18 -0
  138. data/examples/legacy/not_checked/shoes-contrib/app/download-and-save.rb +11 -0
  139. data/examples/legacy/not_checked/shoes-contrib/app/download.rb +10 -0
  140. data/examples/legacy/not_checked/shoes-contrib/app/get-google.rb +11 -0
  141. data/examples/legacy/not_checked/shoes-contrib/app/mouse-detection.rb +7 -0
  142. data/examples/legacy/not_checked/shoes-contrib/app/resizeable-false.rb +6 -0
  143. data/examples/legacy/not_checked/shoes-contrib/art/bubble-bullseye.rb +23 -0
  144. data/examples/legacy/not_checked/shoes-contrib/art/faded.rb +17 -0
  145. data/examples/legacy/not_checked/shoes-contrib/art/fill-oval.rb +5 -0
  146. data/examples/legacy/not_checked/shoes-contrib/art/mask.rb +15 -0
  147. data/examples/legacy/not_checked/shoes-contrib/art/oval-gradient.rb +6 -0
  148. data/examples/legacy/not_checked/shoes-contrib/art/star-gradient.rb +4 -0
  149. data/examples/legacy/not_checked/shoes-contrib/basic/basic-edit-box.rb +8 -0
  150. data/examples/legacy/not_checked/shoes-contrib/basic/basic-new-window.rb +8 -0
  151. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-image.rb +8 -0
  152. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval-shape.rb +8 -0
  153. data/examples/legacy/not_checked/shoes-contrib/basic/basic-oval.rb +6 -0
  154. data/examples/legacy/not_checked/shoes-contrib/basic/class-book.rb +43 -0
  155. data/examples/legacy/not_checked/shoes-contrib/basic/class-book.yaml +387 -0
  156. data/examples/legacy/not_checked/shoes-contrib/basic/clock.rb +6 -0
  157. data/examples/legacy/not_checked/shoes-contrib/basic/edit-stack +14 -0
  158. data/examples/legacy/not_checked/shoes-contrib/basic/gradient-shoes.rb +7 -0
  159. data/examples/legacy/not_checked/shoes-contrib/basic/list_box-shape-report.rb +19 -0
  160. data/examples/legacy/not_checked/shoes-contrib/basic/rect-arrow.rb +7 -0
  161. data/examples/legacy/not_checked/shoes-contrib/basic/scribble.rb +8 -0
  162. data/examples/legacy/not_checked/shoes-contrib/basic/search.rb +32 -0
  163. data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +16 -0
  164. data/examples/legacy/not_checked/shoes-contrib/basic/url-shoes-subclassing.rb +24 -0
  165. data/examples/legacy/not_checked/shoes-contrib/browser.rb +21 -0
  166. data/examples/legacy/not_checked/shoes-contrib/elements/background-column.rb +3 -0
  167. data/examples/legacy/not_checked/shoes-contrib/elements/background.rb +4 -0
  168. data/examples/legacy/not_checked/shoes-contrib/elements/basic-fps.rb +6 -0
  169. data/examples/legacy/not_checked/shoes-contrib/elements/border-cat.rb +6 -0
  170. data/examples/legacy/not_checked/shoes-contrib/elements/button-block.rb +8 -0
  171. data/examples/legacy/not_checked/shoes-contrib/elements/check-mate.rb +15 -0
  172. data/examples/legacy/not_checked/shoes-contrib/elements/common-styles.rb +13 -0
  173. data/examples/legacy/not_checked/shoes-contrib/elements/displace-animation.rb +13 -0
  174. data/examples/legacy/not_checked/shoes-contrib/elements/edit_box-character-count.rb +7 -0
  175. data/examples/legacy/not_checked/shoes-contrib/elements/edit_line-character-count.rb +7 -0
  176. data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +3 -0
  177. data/examples/legacy/not_checked/shoes-contrib/elements/list_box-select-class.rb +13 -0
  178. data/examples/legacy/not_checked/shoes-contrib/elements/list_box.rb +6 -0
  179. data/examples/legacy/not_checked/shoes-contrib/elements/move-flow-animate.rb +13 -0
  180. data/examples/legacy/not_checked/shoes-contrib/elements/phat-button.rb +7 -0
  181. data/examples/legacy/not_checked/shoes-contrib/elements/popup.rb +7 -0
  182. data/examples/legacy/not_checked/shoes-contrib/elements/progress-bar.rb +10 -0
  183. data/examples/legacy/not_checked/shoes-contrib/elements/radio-dreamcast-favs.rb +17 -0
  184. data/examples/legacy/not_checked/shoes-contrib/elements/timer.rb +6 -0
  185. data/examples/legacy/not_checked/shoes-contrib/elements/width-introspec.rb +8 -0
  186. data/examples/legacy/not_checked/shoes-contrib/events/background-hover.rb +11 -0
  187. data/examples/legacy/not_checked/shoes-contrib/events/motion-detect.rb +9 -0
  188. data/examples/legacy/not_checked/shoes-contrib/events/pressed-key.rb +6 -0
  189. data/examples/legacy/not_checked/shoes-contrib/expert/expert-funnies.rb +51 -0
  190. data/examples/legacy/not_checked/shoes-contrib/expert/expert-irb.rb +112 -0
  191. data/examples/legacy/not_checked/shoes-contrib/expert/expert-othello.rb +319 -0
  192. data/examples/legacy/not_checked/shoes-contrib/good/good-arc.rb +37 -0
  193. data/examples/legacy/not_checked/shoes-contrib/good/good-clock.rb +51 -0
  194. data/examples/legacy/not_checked/shoes-contrib/good/good-follow.rb +26 -0
  195. data/examples/legacy/not_checked/shoes-contrib/good/good-reminder.rb +174 -0
  196. data/examples/legacy/not_checked/shoes-contrib/good/good-vjot.rb +56 -0
  197. data/examples/legacy/not_checked/shoes-contrib/kernel/ask.rb +4 -0
  198. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_color.rb +4 -0
  199. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_open_file.rb +4 -0
  200. data/examples/legacy/not_checked/shoes-contrib/kernel/ask_save_file.rb +7 -0
  201. data/examples/legacy/not_checked/shoes-contrib/kernel/confirm.rb +3 -0
  202. data/examples/legacy/not_checked/shoes-contrib/kernel/debug.rb +4 -0
  203. data/examples/legacy/not_checked/shoes-contrib/kernel/exit.rb +5 -0
  204. data/examples/legacy/not_checked/shoes-contrib/kernel/font.rb +5 -0
  205. data/examples/legacy/not_checked/shoes-contrib/kernel/fonts.rb +3 -0
  206. data/examples/legacy/not_checked/shoes-contrib/manipulation/append-slot.rb +9 -0
  207. data/examples/legacy/not_checked/shoes-contrib/manipulation/clear-slot.rb +6 -0
  208. data/examples/legacy/not_checked/shoes-contrib/manipulation/prepend-slot.rb +6 -0
  209. data/examples/legacy/not_checked/shoes-contrib/manipulation/roll.rb +17 -0
  210. data/examples/legacy/not_checked/shoes-contrib/position/gutter-margin.rb +5 -0
  211. data/examples/legacy/not_checked/shoes-contrib/position/stack-width.rb +3 -0
  212. data/examples/legacy/not_checked/shoes-contrib/simple/simple-accordion.rb +75 -0
  213. data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-shapes.rb +17 -0
  214. data/examples/legacy/not_checked/shoes-contrib/simple/simple-anim-text.rb +13 -0
  215. data/examples/legacy/not_checked/shoes-contrib/simple/simple-arc.rb +23 -0
  216. data/examples/legacy/not_checked/shoes-contrib/simple/simple-bounce.rb +24 -0
  217. data/examples/legacy/not_checked/shoes-contrib/simple/simple-calc.rb +70 -0
  218. data/examples/legacy/not_checked/shoes-contrib/simple/simple-chipmunk.rb +26 -0
  219. data/examples/legacy/not_checked/shoes-contrib/simple/simple-control-sizes.rb +24 -0
  220. data/examples/legacy/not_checked/shoes-contrib/simple/simple-curve.rb +26 -0
  221. data/examples/legacy/not_checked/shoes-contrib/simple/simple-dialogs.rb +29 -0
  222. data/examples/legacy/not_checked/shoes-contrib/simple/simple-downloader.rb +27 -0
  223. data/examples/legacy/not_checked/shoes-contrib/simple/simple-draw.rb +13 -0
  224. data/examples/legacy/not_checked/shoes-contrib/simple/simple-editor.rb +28 -0
  225. data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.rb +28 -0
  226. data/examples/legacy/not_checked/shoes-contrib/simple/simple-form.shy +0 -0
  227. data/examples/legacy/not_checked/shoes-contrib/simple/simple-mask.rb +21 -0
  228. data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu.rb +31 -0
  229. data/examples/legacy/not_checked/shoes-contrib/simple/simple-menu1.rb +35 -0
  230. data/examples/legacy/not_checked/shoes-contrib/simple/simple-rubygems.rb +29 -0
  231. data/examples/legacy/not_checked/shoes-contrib/simple/simple-slide.rb +45 -0
  232. data/examples/legacy/not_checked/shoes-contrib/simple/simple-sphere.rb +28 -0
  233. data/examples/legacy/not_checked/shoes-contrib/simple/simple-sqlite3.rb +13 -0
  234. data/examples/legacy/not_checked/shoes-contrib/simple/simple-timer.rb +13 -0
  235. data/examples/legacy/not_checked/shoes-contrib/simple/simple-video.rb +13 -0
  236. data/examples/legacy/not_checked/shoes-contrib/styles/alignment.rb +4 -0
  237. data/examples/legacy/not_checked/shoes-contrib/styles/attachment.rb +5 -0
  238. data/examples/legacy/not_checked/shoes-contrib/styles/emphasis.rb +3 -0
  239. data/examples/legacy/not_checked/shoes-contrib/styles/gradient-angle.rb +3 -0
  240. data/examples/legacy/not_checked/shoes-contrib/styles/para-methods.rb +5 -0
  241. data/examples/legacy/not_checked/shoes-contrib/styles/para-red-underlined.rb +3 -0
  242. data/examples/legacy/not_checked/shoes-contrib/styles/para-style-method.rb +4 -0
  243. data/examples/legacy/not_checked/shoes-dep-samples/expert-game-of-life.rb +243 -0
  244. data/examples/legacy/not_checked/shoes-dep-samples/expert-othello.rb +319 -0
  245. data/examples/legacy/not_checked/shoes-dep-samples/good-clock.rb +51 -0
  246. data/examples/legacy/not_checked/shoes-dep-samples/good-follow.rb +26 -0
  247. data/examples/legacy/not_checked/shoes-dep-samples/good-reminder.rb +174 -0
  248. data/examples/legacy/not_checked/shoes-dep-samples/good-vjot.rb +56 -0
  249. data/examples/legacy/not_checked/shoes-dep-samples/simple-accordion.rb +75 -0
  250. data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-shapes.rb +17 -0
  251. data/examples/legacy/not_checked/shoes-dep-samples/simple-anim-text.rb +13 -0
  252. data/examples/legacy/not_checked/shoes-dep-samples/simple-arc.rb +23 -0
  253. data/examples/legacy/not_checked/shoes-dep-samples/simple-bounce.rb +24 -0
  254. data/examples/legacy/not_checked/shoes-dep-samples/simple-calc.rb +70 -0
  255. data/examples/legacy/not_checked/shoes-dep-samples/simple-chipmunk.rb +26 -0
  256. data/examples/legacy/not_checked/shoes-dep-samples/simple-control-sizes.rb +24 -0
  257. data/examples/legacy/not_checked/shoes-dep-samples/simple-curve.rb +26 -0
  258. data/examples/legacy/not_checked/shoes-dep-samples/simple-dialogs.rb +29 -0
  259. data/examples/legacy/not_checked/shoes-dep-samples/simple-draw.rb +13 -0
  260. data/examples/legacy/not_checked/shoes-dep-samples/simple-editor.rb +28 -0
  261. data/examples/legacy/not_checked/shoes-dep-samples/simple-form.rb +28 -0
  262. data/examples/legacy/not_checked/shoes-dep-samples/simple-form.shy +0 -0
  263. data/examples/legacy/not_checked/shoes-dep-samples/simple-mask.rb +21 -0
  264. data/examples/legacy/not_checked/shoes-dep-samples/simple-menu.rb +31 -0
  265. data/examples/legacy/not_checked/shoes-dep-samples/simple-menu1.rb +35 -0
  266. data/examples/legacy/not_checked/shoes-dep-samples/simple-rubygems.rb +29 -0
  267. data/examples/legacy/not_checked/shoes-dep-samples/simple-slide.rb +45 -0
  268. data/examples/legacy/not_checked/shoes-dep-samples/simple-sphere.rb +28 -0
  269. data/examples/legacy/not_checked/shoes-dep-samples/simple-sqlite3.rb +13 -0
  270. data/examples/legacy/not_checked/shoes-dep-samples/simple-timer.rb +13 -0
  271. data/examples/legacy/not_checked/shoes-dep-samples/simple-video.rb +13 -0
  272. data/examples/legacy/not_checked/shoes3-tests/AnemicCinema1926marcelDuchampCut.mp4 +0 -0
  273. data/examples/legacy/not_checked/shoes3-tests/button/button.rb +53 -0
  274. data/examples/legacy/not_checked/shoes3-tests/cache/cache.rb +41 -0
  275. data/examples/legacy/not_checked/shoes3-tests/combo/combo.rb +24 -0
  276. data/examples/legacy/not_checked/shoes3-tests/curl/bare.rb +34 -0
  277. data/examples/legacy/not_checked/shoes3-tests/curl/downloader.rb +40 -0
  278. data/examples/legacy/not_checked/shoes3-tests/curl/m1.rb +11 -0
  279. data/examples/legacy/not_checked/shoes3-tests/curl/m2.rb +12 -0
  280. data/examples/legacy/not_checked/shoes3-tests/curl/m3.rb +11 -0
  281. data/examples/legacy/not_checked/shoes3-tests/curl/m4.rb +5 -0
  282. data/examples/legacy/not_checked/shoes3-tests/curl/typ.rb +30 -0
  283. data/examples/legacy/not_checked/shoes3-tests/cursor/c1.rb +21 -0
  284. data/examples/legacy/not_checked/shoes3-tests/decoration.rb +14 -0
  285. data/examples/legacy/not_checked/shoes3-tests/dialogs/ask.rb +6 -0
  286. data/examples/legacy/not_checked/shoes3-tests/dialogs/confirm.rb +6 -0
  287. data/examples/legacy/not_checked/shoes3-tests/editbox/editbox.rb +36 -0
  288. data/examples/legacy/not_checked/shoes3-tests/editline/editline.rb +27 -0
  289. data/examples/legacy/not_checked/shoes3-tests/events/button.rb +32 -0
  290. data/examples/legacy/not_checked/shoes3-tests/events/button.yaml +40 -0
  291. data/examples/legacy/not_checked/shoes3-tests/events/capture.rb +57 -0
  292. data/examples/legacy/not_checked/shoes3-tests/events/chipmunk.yaml +47 -0
  293. data/examples/legacy/not_checked/shoes3-tests/events/event0.rb +8 -0
  294. data/examples/legacy/not_checked/shoes3-tests/events/event1.rb +51 -0
  295. data/examples/legacy/not_checked/shoes3-tests/events/event1.yaml +26 -0
  296. data/examples/legacy/not_checked/shoes3-tests/events/event2.rb +46 -0
  297. data/examples/legacy/not_checked/shoes3-tests/events/event3.rb +44 -0
  298. data/examples/legacy/not_checked/shoes3-tests/events/event4.rb +65 -0
  299. data/examples/legacy/not_checked/shoes3-tests/events/event5.rb +17 -0
  300. data/examples/legacy/not_checked/shoes3-tests/events/event6.rb +51 -0
  301. data/examples/legacy/not_checked/shoes3-tests/events/replay.rb +60 -0
  302. data/examples/legacy/not_checked/shoes3-tests/gapp/fullscreen.rb +38 -0
  303. data/examples/legacy/not_checked/shoes3-tests/gapp/icon.rb +56 -0
  304. data/examples/legacy/not_checked/shoes3-tests/gapp/mon1.rb +46 -0
  305. data/examples/legacy/not_checked/shoes3-tests/gapp/settings1.rb +22 -0
  306. data/examples/legacy/not_checked/shoes3-tests/gapp/title1.rb +34 -0
  307. data/examples/legacy/not_checked/shoes3-tests/indian.m4a +0 -0
  308. data/examples/legacy/not_checked/shoes3-tests/menus/event.rb +33 -0
  309. data/examples/legacy/not_checked/shoes3-tests/menus/menu1.rb +8 -0
  310. data/examples/legacy/not_checked/shoes3-tests/menus/menu2.rb +25 -0
  311. data/examples/legacy/not_checked/shoes3-tests/menus/menu3.rb +103 -0
  312. data/examples/legacy/not_checked/shoes3-tests/menus/menu4.rb +41 -0
  313. data/examples/legacy/not_checked/shoes3-tests/menus/tests.txt +42 -0
  314. data/examples/legacy/not_checked/shoes3-tests/opacity.rb +13 -0
  315. data/examples/legacy/not_checked/shoes3-tests/plot/^IRX.R +5219 -0
  316. data/examples/legacy/not_checked/shoes3-tests/plot/^SPX +5219 -0
  317. data/examples/legacy/not_checked/shoes3-tests/plot/cstest.rb +51 -0
  318. data/examples/legacy/not_checked/shoes3-tests/plot/gr1.rb +73 -0
  319. data/examples/legacy/not_checked/shoes3-tests/plot/gr2.rb +40 -0
  320. data/examples/legacy/not_checked/shoes3-tests/plot/gr3.rb +47 -0
  321. data/examples/legacy/not_checked/shoes3-tests/plot/gr4.rb +35 -0
  322. data/examples/legacy/not_checked/shoes3-tests/plot/gr5.rb +31 -0
  323. data/examples/legacy/not_checked/shoes3-tests/plot/gr6.rb +35 -0
  324. data/examples/legacy/not_checked/shoes3-tests/plot/gr7.rb +37 -0
  325. data/examples/legacy/not_checked/shoes3-tests/plot/grcsv.rb +219 -0
  326. data/examples/legacy/not_checked/shoes3-tests/plot/manual.rb +40 -0
  327. data/examples/legacy/not_checked/shoes3-tests/progress/progress.rb +29 -0
  328. data/examples/legacy/not_checked/shoes3-tests/radio/clear.rb +20 -0
  329. data/examples/legacy/not_checked/shoes3-tests/radio/group.rb +18 -0
  330. data/examples/legacy/not_checked/shoes3-tests/radio/multiple.rb +32 -0
  331. data/examples/legacy/not_checked/shoes3-tests/radio/nogroup.rb +9 -0
  332. data/examples/legacy/not_checked/shoes3-tests/simpletest.svg +14 -0
  333. data/examples/legacy/not_checked/shoes3-tests/spinner.rb +15 -0
  334. data/examples/legacy/not_checked/shoes3-tests/svg.rb +208 -0
  335. data/examples/legacy/not_checked/shoes3-tests/switch/switch.rb +28 -0
  336. data/examples/legacy/not_checked/shoes3-tests/systray/back.rb +20 -0
  337. data/examples/legacy/not_checked/shoes3-tests/systray/note.rb +17 -0
  338. data/examples/legacy/not_checked/shoes3-tests/terminal/cursor.rb +27 -0
  339. data/examples/legacy/not_checked/shoes3-tests/terminal/ed.rb +65 -0
  340. data/examples/legacy/not_checked/shoes3-tests/terminal/el.rb +50 -0
  341. data/examples/legacy/not_checked/shoes3-tests/terminal/logattr.rb +31 -0
  342. data/examples/legacy/not_checked/shoes3-tests/tests_color.rb +138 -0
  343. data/examples/legacy/not_checked/shoes3-tests/tests_svg.rb +228 -0
  344. data/examples/legacy/not_checked/shoes3-tests/tests_video_vlc.rb +186 -0
  345. data/examples/legacy/not_checked/shoes3-tests/tooltips.rb +20 -0
  346. data/examples/legacy/not_checked/shoes3-tests/video_vlc.rb +242 -0
  347. data/examples/legacy/not_checked/shoes3-tests/wheel/wheel1.rb +21 -0
  348. data/examples/legacy/not_checked/simple/accordion.rb +81 -0
  349. data/examples/legacy/not_checked/simple/anim-shapes.rb +17 -0
  350. data/examples/legacy/not_checked/simple/anim-text.rb +13 -0
  351. data/examples/legacy/not_checked/simple/arc.rb +23 -0
  352. data/examples/legacy/not_checked/simple/bounce.rb +24 -0
  353. data/examples/legacy/not_checked/simple/chipmunk.rb +26 -0
  354. data/examples/legacy/not_checked/simple/control-sizes.rb +24 -0
  355. data/examples/legacy/not_checked/simple/curve-control-points.rb +24 -0
  356. data/examples/legacy/not_checked/simple/curve.rb +26 -0
  357. data/examples/legacy/not_checked/simple/dialogs.rb +29 -0
  358. data/examples/legacy/not_checked/simple/downloader.rb +40 -0
  359. data/examples/legacy/not_checked/simple/downloader1.rb +31 -0
  360. data/examples/legacy/not_checked/simple/draw.rb +13 -0
  361. data/examples/legacy/not_checked/simple/editor.rb +28 -0
  362. data/examples/legacy/not_checked/simple/form.rb +30 -0
  363. data/examples/legacy/not_checked/simple/image.rb +21 -0
  364. data/examples/legacy/not_checked/simple/info.rb +78 -0
  365. data/examples/legacy/not_checked/simple/mask.rb +21 -0
  366. data/examples/legacy/not_checked/simple/mask2.rb +27 -0
  367. data/examples/legacy/not_checked/simple/menu.rb +31 -0
  368. data/examples/legacy/not_checked/simple/menu1.rb +35 -0
  369. data/examples/legacy/not_checked/simple/slide.rb +45 -0
  370. data/examples/legacy/not_checked/simple/sphere.rb +28 -0
  371. data/examples/legacy/not_checked/superleg.rb +244 -0
  372. data/examples/legacy/working/shoes-contrib/basic/a-poem.rb +24 -0
  373. data/examples/legacy/working/shoes-contrib/basic/basic-blocks-instances.rb +7 -0
  374. data/examples/legacy/working/shoes-contrib/basic/basic-blocks.rb +7 -0
  375. data/examples/legacy/working/shoes-contrib/basic/basic-slot.rb +8 -0
  376. data/examples/legacy/working/shoes-contrib/basic/intro.rb +20 -0
  377. data/examples/legacy/working/shoes-contrib/basic/two-column.rb +12 -0
  378. data/examples/legacy/working/shoes-contrib/elements/edit_box.rb +6 -0
  379. data/examples/legacy/working/shoes-contrib/kernel/alert.rb +3 -0
  380. data/examples/legacy/working/simple/calc.rb +71 -0
  381. data/examples/legacy/working/simple/sqlite3.rb +27 -0
  382. data/examples/legacy/working/simple/timer.rb +13 -0
  383. data/examples/line.rb +5 -0
  384. data/examples/link.rb +20 -0
  385. data/examples/list_box.rb +8 -0
  386. data/examples/para/collection_of_arguments.rb +9 -0
  387. data/examples/para/hello_world.rb +5 -0
  388. data/examples/para/hide_and_show.rb +9 -0
  389. data/examples/para/rainbow.rb +11 -0
  390. data/examples/para/rainbow_2.rb +11 -0
  391. data/examples/para/sizes.rb +11 -0
  392. data/examples/para/sizes_2.rb +12 -0
  393. data/examples/para/strong.rb +3 -0
  394. data/examples/para_text_widgets.rb +4 -0
  395. data/examples/pirate.png +0 -0
  396. data/examples/raw_flow.rb +11 -0
  397. data/examples/ruby_racer.rb +52 -0
  398. data/examples/shapes/arc.rb +8 -0
  399. data/examples/shapes/shapes.rb +8 -0
  400. data/examples/shapes/shapes_fill.rb +10 -0
  401. data/examples/shapes/star.rb +5 -0
  402. data/examples/shoes_school.rb +68 -0
  403. data/examples/shoes_splorer.rb +150 -0
  404. data/examples/simple_slides.rb +73 -0
  405. data/examples/skip_ci/parrot.rb +22 -0
  406. data/examples/skip_ci/say.rb +20 -0
  407. data/examples/sleepless.rb +26 -0
  408. data/examples/slots.rb +2 -4
  409. data/examples/spacing.rb +18 -0
  410. data/examples/span.rb +6 -0
  411. data/examples/stack/background.rb +35 -0
  412. data/examples/stack/border.rb +11 -0
  413. data/examples/stack/gradients.rb +6 -0
  414. data/examples/stack/raw_stack.rb +8 -0
  415. data/examples/stack/stack.rb +27 -0
  416. data/examples/text_change.rb +4 -0
  417. data/examples/text_sizes.rb +10 -0
  418. data/examples/timmy.rb +109 -0
  419. data/examples/title_and_resize.rb +3 -0
  420. data/exe/scarpe +108 -0
  421. data/lib/constants.rb +5 -0
  422. data/lib/scarpe/alert.rb +19 -0
  423. data/lib/scarpe/app.rb +78 -0
  424. data/lib/scarpe/arc.rb +49 -0
  425. data/lib/scarpe/background.rb +14 -0
  426. data/lib/scarpe/border.rb +16 -0
  427. data/lib/scarpe/button.rb +26 -18
  428. data/lib/scarpe/colors.rb +215 -0
  429. data/lib/scarpe/display_service.rb +189 -0
  430. data/lib/scarpe/document_root.rb +20 -0
  431. data/lib/scarpe/edit_box.rb +24 -0
  432. data/lib/scarpe/edit_line.rb +16 -30
  433. data/lib/scarpe/fill.rb +23 -0
  434. data/lib/scarpe/flow.rb +18 -15
  435. data/lib/scarpe/glibui/README.md +34 -0
  436. data/lib/scarpe/glibui/alert.rb +65 -0
  437. data/lib/scarpe/glibui/app.rb +27 -0
  438. data/lib/scarpe/glibui/background.rb +18 -0
  439. data/lib/scarpe/glibui/border.rb +22 -0
  440. data/lib/scarpe/glibui/button.rb +38 -0
  441. data/lib/scarpe/glibui/dimensions.rb +22 -0
  442. data/lib/scarpe/glibui/document_root.rb +33 -0
  443. data/lib/scarpe/glibui/edit_box.rb +44 -0
  444. data/lib/scarpe/glibui/edit_line.rb +43 -0
  445. data/lib/scarpe/glibui/flow.rb +33 -0
  446. data/lib/scarpe/glibui/html.rb +77 -0
  447. data/lib/scarpe/glibui/image.rb +36 -0
  448. data/lib/scarpe/glibui/link.rb +29 -0
  449. data/lib/scarpe/glibui/local_display.rb +62 -0
  450. data/lib/scarpe/glibui/para.rb +84 -0
  451. data/lib/scarpe/glibui/spacing.rb +41 -0
  452. data/lib/scarpe/glibui/stack.rb +33 -0
  453. data/lib/scarpe/glibui/text_widget.rb +30 -0
  454. data/lib/scarpe/glibui/widget.rb +81 -0
  455. data/lib/scarpe/glibui.rb +29 -0
  456. data/lib/scarpe/image.rb +28 -9
  457. data/lib/scarpe/libui/alert.rb +9 -0
  458. data/lib/scarpe/libui/button.rb +18 -0
  459. data/lib/scarpe/libui/colors.rb +157 -0
  460. data/lib/scarpe/libui/core.rb +66 -0
  461. data/lib/scarpe/libui/flow.rb +16 -0
  462. data/lib/scarpe/libui/libui.rb +45 -0
  463. data/lib/scarpe/libui/notepad.md +26 -0
  464. data/lib/scarpe/libui/para.rb +154 -0
  465. data/lib/scarpe/libui/stack.rb +34 -0
  466. data/lib/scarpe/line.rb +25 -0
  467. data/lib/scarpe/link.rb +25 -0
  468. data/lib/scarpe/list_box.rb +25 -0
  469. data/lib/scarpe/logger.rb +155 -0
  470. data/lib/scarpe/para.rb +84 -12
  471. data/lib/scarpe/promises.rb +387 -0
  472. data/lib/scarpe/shape.rb +19 -0
  473. data/lib/scarpe/spacing.rb +9 -0
  474. data/lib/scarpe/span.rb +26 -0
  475. data/lib/scarpe/stack.rb +66 -12
  476. data/lib/scarpe/star.rb +47 -0
  477. data/lib/scarpe/text_widget.rb +42 -0
  478. data/lib/scarpe/unit_test_helpers.rb +163 -0
  479. data/lib/scarpe/version.rb +2 -2
  480. data/lib/scarpe/widget.rb +198 -0
  481. data/lib/scarpe/widgets.rb +30 -0
  482. data/lib/scarpe/wv/alert.rb +65 -0
  483. data/lib/scarpe/wv/app.rb +85 -0
  484. data/lib/scarpe/wv/arc.rb +57 -0
  485. data/lib/scarpe/wv/background.rb +18 -0
  486. data/lib/scarpe/wv/border.rb +22 -0
  487. data/lib/scarpe/wv/button.rb +50 -0
  488. data/lib/scarpe/wv/control_interface.rb +153 -0
  489. data/lib/scarpe/wv/control_interface_test.rb +253 -0
  490. data/lib/scarpe/wv/dimensions.rb +22 -0
  491. data/lib/scarpe/wv/document_root.rb +50 -0
  492. data/lib/scarpe/wv/edit_box.rb +44 -0
  493. data/lib/scarpe/wv/edit_line.rb +43 -0
  494. data/lib/scarpe/wv/fill.rb +30 -0
  495. data/lib/scarpe/wv/flow.rb +32 -0
  496. data/lib/scarpe/wv/html.rb +107 -0
  497. data/lib/scarpe/wv/image.rb +36 -0
  498. data/lib/scarpe/wv/line.rb +38 -0
  499. data/lib/scarpe/wv/link.rb +29 -0
  500. data/lib/scarpe/wv/list_box.rb +50 -0
  501. data/lib/scarpe/wv/para.rb +90 -0
  502. data/lib/scarpe/wv/shape.rb +34 -0
  503. data/lib/scarpe/wv/shape_helper.rb +44 -0
  504. data/lib/scarpe/wv/spacing.rb +41 -0
  505. data/lib/scarpe/wv/span.rb +66 -0
  506. data/lib/scarpe/wv/stack.rb +42 -0
  507. data/lib/scarpe/wv/star.rb +64 -0
  508. data/lib/scarpe/wv/text_widget.rb +30 -0
  509. data/lib/scarpe/wv/web_wrangler.rb +679 -0
  510. data/lib/scarpe/wv/webview_local_display.rb +72 -0
  511. data/lib/scarpe/wv/webview_relay_display.rb +185 -0
  512. data/lib/scarpe/wv/widget.rb +181 -0
  513. data/lib/scarpe/wv/wv_display_worker.rb +65 -0
  514. data/lib/scarpe/wv.rb +39 -0
  515. data/lib/scarpe/wv_local.rb +6 -0
  516. data/lib/scarpe/wv_relay.rb +6 -0
  517. data/lib/scarpe.rb +35 -27
  518. data/logger/debug_web_wrangler.json +4 -0
  519. data/logger/scarpe_wv_test.json +4 -0
  520. data/scarpegen.rb +193 -0
  521. data/sig/scarpe.rbs +1 -1
  522. data/templates/basic_class_template.erb +38 -0
  523. data/templates/class_template_with_event_bind.erb +27 -0
  524. data/templates/class_template_with_shapes.erb +43 -0
  525. data/templates/example_template.erb +3 -0
  526. data/templates/module_template.erb +12 -0
  527. data/templates/webview_template.erb +30 -0
  528. metadata +586 -9
  529. data/lib/scarpe/container.rb +0 -10
  530. data/lib/scarpe/internal_app.rb +0 -46
data/examples/timmy.rb ADDED
@@ -0,0 +1,109 @@
1
+ # Timmy 1
2
+
3
+ # Shoes.app do
4
+ # para "You've downloaded a virus!"
5
+ # end
6
+
7
+ # Timmy 2
8
+
9
+ # Shoes.app title: "Cookies Recipe", height: 1000, width: 1000 do
10
+ # banner "You've downloaded a virus!", :align => "center"
11
+ # end
12
+
13
+ # Timmy 3
14
+
15
+ # Shoes.app title: "Cookies Recipe", height: 1000, width: 1000 do
16
+ # background "black"
17
+ # @header = banner "You've downloaded a virus!", align: "center", stroke: red
18
+
19
+ # flow height: "30%" do
20
+ # stack width: "100%" do
21
+ # background "white"
22
+ # title "You thought this was a recipe for cookies, but it was me, your arch nemesis!\n\n", align: "center"
23
+ # para "I have taken over your computer and will not give it back until you pay me $1,000,000.",
24
+ # align: "center",
25
+ # size: 30
26
+ # end
27
+ # end
28
+ # flow height: "20%" do
29
+ # stack width: "100%" do
30
+ # background "white"
31
+ # para "Pay me now or I will delete all your files!\n",
32
+ # "Courtesy, your friends in the Mafia",
33
+ # align: "center", size: 30
34
+ # banner "💰", align: "center"
35
+ # end
36
+ # end
37
+ # flow height: "45%" do
38
+ # border "black", strokewidth: 10
39
+ # background "black"
40
+ # stack width: "33.33%" do
41
+ # background "green"
42
+ # end
43
+ # stack width: "33.33%" do
44
+ # background "white"
45
+ # end
46
+ # stack width: "33.33%" do
47
+ # background "red"
48
+ # end
49
+ # end
50
+ # end
51
+
52
+
53
+ # Timmy 4 (more interactive)
54
+ # Timmy hasn't quite learned about variables yet, so he's using global variables.
55
+
56
+ Shoes.app title: "Cookies Recipe", height: 1000, width: 1000 do
57
+ $main_background = background "black"
58
+ $header = banner "You've downloaded a virus!", align: "center", stroke: red
59
+
60
+ flow height: "30%" do
61
+ stack width: "100%" do
62
+ background "white"
63
+ $header_one = title "You thought this was a recipe for cookies, but it was me, your arch nemesis!\n\n", align: "center"
64
+ $header_two = para "I have taken over your computer and will not give it back until you pay me $1,000,000.",
65
+ align: "center",
66
+ size: 30
67
+ end
68
+ end
69
+ flow height: "30%" do
70
+ stack width: "33.33%" do
71
+ background "blue"
72
+ star 230, 100, 6, 150, 50
73
+ end
74
+ stack width: "33.33%" do
75
+ background "white"
76
+ $body_one = para "Pay me now or I will delete all your files!\n",
77
+ "Courtesy, the Pirates of the Highlands 🏴‍☠️",
78
+ align: "center", size: 30
79
+ $body_two = banner "💰", align: "center"
80
+ end
81
+ stack width: "33.33%" do
82
+ background "blue"
83
+ star 230, 100, 6, 150, 50
84
+ end
85
+ end
86
+ flow height: "30%" do
87
+ stack width: "33.33%" do
88
+ $pirate_image = image "https://i.imgur.com/mIaqQaF.png"
89
+ end
90
+ stack width: "33.33%" do
91
+ @push = button "Pay up 💸", width: 335, height: 300, size: 80 do
92
+ $header.replace "Just kidding Grandma! I love you! ❤️❤️❤️"
93
+ $header.stroke = white
94
+ $body_one.replace "I'm sorry for scaring you. I hope you have a great day!"
95
+ $body_two.replace "🍪"
96
+ $header_one.replace "❤️"
97
+ $header_two.replace ""
98
+ $pirate_image.replace "https://media.tenor.com/ZVJxuXJOczIAAAAd/kazoo-kid.gif"
99
+ $pirate_image_two.replace "https://media.tenor.com/ZVJxuXJOczIAAAAd/kazoo-kid.gif"
100
+ @push.text = "🍪"
101
+ end
102
+ end
103
+ stack width: "33.33%" do
104
+ $pirate_image_two = image "https://i.imgur.com/mIaqQaF.png"
105
+ end
106
+ end
107
+ end
108
+
109
+
@@ -0,0 +1,3 @@
1
+ Shoes.app(title: "Schwad's app!", width: 1000, height: 800) do
2
+ para "Boy howdy! Now we're talking!"
3
+ end
data/exe/scarpe ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # We need to not use syntactic features of very recent Rubies in this file, so that it parses
4
+ # correctly in earlier Rubies and can successfully give the version-check error.
5
+ if RUBY_VERSION[0..2] < "3.2"
6
+ STDERR.puts("Scarpe requires Ruby 3.2 or higher!")
7
+ exit(-1)
8
+ end
9
+
10
+ def print_usage
11
+ puts <<USAGE
12
+ Usage: scarpe [OPTIONS] <scarpe app file> # Same as "scarpe run"
13
+ scarpe [OPTIONS] run <scarpe app file>
14
+ scarpe [OPTIONS] env # print Scarpe environment settings
15
+ scarpe -v # print the Scarpe gem version and exit
16
+ Options:
17
+ --dev Use development local scarpe, not an installed gem
18
+ --debug Turn on application debug mode
19
+ USAGE
20
+ end
21
+
22
+ def env_or_default(env_var, default_val)
23
+ "#{env_var}: #{ENV[env_var] || default_val}"
24
+ end
25
+
26
+ def env_or_none(env_var)
27
+ env_or_default(env_var, "(none)")
28
+ end
29
+
30
+ def print_env
31
+ puts <<~SCARPE_ENV
32
+ Scarpe environment:
33
+ #{env_or_default("SCARPE_DISPLAY_SERVICE", "(default)wv_local")}
34
+ #{env_or_default("SCARPE_LOG_CONFIG", "(default)#{Scarpe::Log::DEFAULT_LOG_CONFIG.inspect}")}
35
+ Scarpe::WV environment:
36
+ #{env_or_none("SCARPE_TEST_CONTROL")}
37
+ #{env_or_none("SCARPE_TEST_RESULTS")}
38
+ #{env_or_none("SCARPE_DEBUG")}
39
+ Ruby and shell environment:
40
+ RUBY_DESCRIPTION: #{RUBY_DESCRIPTION.inspect}
41
+ RUBY_PLATFORM: #{RUBY_PLATFORM.inspect}
42
+ RUBY_ENGINE: #{RUBY_ENGINE.inspect}
43
+ #{env_or_none("SHELL")}
44
+ #{env_or_none("PATH")}
45
+ #{env_or_none("LD_LIBRARY_PATH")}
46
+ #{env_or_none("DYLD_LIBRARY_PATH")}
47
+ #{env_or_none("GEM_ROOT")}
48
+ #{env_or_none("GEM_HOME")}
49
+ #{env_or_none("GEM_PATH")}
50
+ SCARPE_ENV
51
+ end
52
+
53
+ # --dev option applies to all actions
54
+ use_dev = ARGV.delete("--dev") ? true : false
55
+ use_debug = ARGV.delete("--debug") ? true : false
56
+
57
+ verb = "run"
58
+ verb_target = nil
59
+
60
+ case ARGV[0]
61
+ when "-v"
62
+ # This will be fine, pass it through.
63
+ verb = "-v"
64
+ when "env"
65
+ if ARGV.length != 1
66
+ print_usage
67
+ exit -1
68
+ end
69
+
70
+ verb = "env"
71
+ when "run"
72
+ if ARGV.length != 2
73
+ print_usage
74
+ exit -1
75
+ end
76
+ verb_target = ARGV[1]
77
+ else
78
+ # Default to run
79
+ if ARGV.length != 1
80
+ print_usage
81
+ exit -1
82
+ end
83
+ verb_target = ARGV[0]
84
+ end
85
+
86
+ if use_debug
87
+ ENV['SCARPE_DEBUG'] = 'true'
88
+ end
89
+ if use_dev
90
+ dev_path = File.expand_path("../lib", __dir__)
91
+ $LOAD_PATH.prepend dev_path
92
+ end
93
+ # We mustn't require Scarpe sooner than this so that the --dev setting is respected
94
+ require "scarpe"
95
+
96
+ Shoes = Scarpe unless defined?(Shoes)
97
+
98
+ case verb
99
+ when "-v"
100
+ puts "Scarpe #{Scarpe::VERSION}"
101
+ when "run"
102
+ # Run the Scarpe app file
103
+ load ARGV[0]
104
+ when "env"
105
+ print_env
106
+ else
107
+ raise "Internal error! Unknown ./exe/scarpe verb!"
108
+ end
data/lib/constants.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Constants
4
+ LIB_DIR = File.join(Dir.home, "Desktop")
5
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ class Alert < Scarpe::Widget
5
+ display_property :text
6
+
7
+ def initialize(text)
8
+ @text = text
9
+
10
+ super
11
+
12
+ bind_self_event("click") do
13
+ destroy_self
14
+ end
15
+
16
+ create_display_widget
17
+ end
18
+ end
19
+ end
data/lib/scarpe/app.rb ADDED
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ class App < Scarpe::Widget
5
+ class << self
6
+ attr_accessor :next_test_code
7
+ end
8
+ include Scarpe::Log
9
+
10
+ display_properties :title, :width, :height, :resizable, :debug
11
+
12
+ def initialize(
13
+ title: "Scarpe!",
14
+ width: 480,
15
+ height: 420,
16
+ resizable: true,
17
+ debug: ENV["SCARPE_DEBUG"] ? true : false,
18
+ test_code: nil,
19
+ &app_code_body
20
+ )
21
+ log_init("Scarpe::App")
22
+
23
+ @do_shutdown = false
24
+
25
+ if Scarpe::App.next_test_code
26
+ test_code = Scarpe::App.next_test_code
27
+ Scarpe::App.next_test_code = nil
28
+ end
29
+
30
+ super
31
+
32
+ test_code&.call(self)
33
+
34
+ # This creates the DocumentRoot, including its corresponding display widget
35
+ @document_root = Scarpe::DocumentRoot.new
36
+
37
+ create_display_widget
38
+
39
+ @app_code_body = app_code_body
40
+
41
+ # Try to de-dup as much as possible and not send repeat or multiple
42
+ # destroy events
43
+ @watch_for_destroy = bind_shoes_event(event_name: "destroy") do
44
+ DisplayService.unsub_from_events(@watch_for_destroy) if @watch_for_destroy
45
+ @watch_for_destroy = nil
46
+ self.destroy(send_event: false)
47
+ end
48
+
49
+ Signal.trap("INT") do
50
+ @log.warning("App interrupted by signal, stopping...")
51
+ puts "\nStopping Scarpe app..."
52
+ destroy
53
+ end
54
+ end
55
+
56
+ def init
57
+ send_shoes_event(event_name: "init")
58
+ return if @do_shutdown
59
+
60
+ @document_root.instance_eval(&@app_code_body)
61
+ end
62
+
63
+ # This isn't supposed to return. The display service should take control
64
+ # of the main thread. Local Webview even stops any background threads.
65
+ def run
66
+ if @do_shutdown
67
+ $stderr.puts "Destroy has already been signaled, but we just called Shoes::App.run!"
68
+ return
69
+ end
70
+ send_shoes_event(event_name: "run")
71
+ end
72
+
73
+ def destroy(send_event: true)
74
+ @do_shutdown = true
75
+ send_shoes_event(event_name: "destroy") if send_event
76
+ end
77
+ end
78
+ end
data/lib/scarpe/arc.rb ADDED
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ class InvalidAttributeValueError < Scarpe::Error; end
5
+
6
+ class Arc < Scarpe::Widget
7
+ display_properties :left, :top, :width, :height, :angle1, :angle2
8
+
9
+ def initialize(*args)
10
+ @left, @top, @width, @height, @angle1, @angle2 = args
11
+
12
+ @left = convert_to_integer(@left, "left")
13
+ @top = convert_to_integer(@top, "top")
14
+ @width = convert_to_integer(@width, "width")
15
+ @height = convert_to_integer(@height, "height")
16
+ @angle1 = convert_to_float(@angle1, "angle1")
17
+ @angle2 = convert_to_float(@angle2, "angle2")
18
+
19
+ super()
20
+ create_display_widget
21
+ end
22
+
23
+ private
24
+
25
+ def convert_to_integer(value, attribute_name)
26
+ begin
27
+ value = Integer(value)
28
+ raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
29
+
30
+ value
31
+ rescue ArgumentError
32
+ error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
33
+ raise InvalidAttributeValueError, error_message
34
+ end
35
+ end
36
+
37
+ def convert_to_float(value, attribute_name)
38
+ begin
39
+ value = Float(value)
40
+ raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
41
+
42
+ value
43
+ rescue ArgumentError
44
+ error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
45
+ raise InvalidAttributeValueError, error_message
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ module Background
5
+ def self.included(includer)
6
+ includer.display_property(:background_color)
7
+ end
8
+
9
+ # NOTE: this needs to be passed through in order for the styling to work
10
+ def background(color, options = {})
11
+ self.background_color = color
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ module Border
5
+ def self.included(includer)
6
+ includer.display_properties :border_color, :options
7
+ end
8
+
9
+ # Considering a signature like this:
10
+ # border "#00D0FF", :strokewidth => 3, :curve => 12
11
+ def border(color, options = {})
12
+ self.border_color = color
13
+ self.options = options
14
+ end
15
+ end
16
+ end
data/lib/scarpe/button.rb CHANGED
@@ -1,27 +1,35 @@
1
- module Scarpe
2
- class Button
3
- def initialize(app, text, &block)
4
- @app = app
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ class Button < Scarpe::Widget
5
+ include Scarpe::Log
6
+ display_properties :text, :width, :height, :top, :left, :color, :padding_top, :padding_bottom, :text_color, :size, :font_size
7
+
8
+ def initialize(text, width: nil, height: nil, top: nil, left: nil, color: nil, padding_top: nil, padding_bottom: nil, size: 12, text_color: nil,
9
+ font_size: nil, & block)
10
+
11
+ log_init("Button")
12
+
13
+ # Properties passed as positional args, not keywords, don't get auto-set
5
14
  @text = text
15
+ @color = color
16
+
6
17
  @block = block
7
- @app.append(render)
8
- end
9
18
 
10
- def function_name
11
- object_id
19
+ super
20
+
21
+ # Bind to a handler named "click"
22
+ bind_self_event("click") do
23
+ @log.debug("Button clicked, calling handler") if @block
24
+ @block&.call
25
+ end
26
+
27
+ create_display_widget
12
28
  end
13
29
 
30
+ # Set the click handler
14
31
  def click(&block)
15
32
  @block = block
16
33
  end
17
-
18
- def render
19
- @app.bind(function_name) do
20
- if @block
21
- @block.call
22
- end
23
- end
24
- "<button id=#{object_id} onclick='scarpeHandler(#{function_name})'>#{@text}</button>"
25
- end
26
34
  end
27
- end
35
+ end
@@ -0,0 +1,215 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Scarpe
4
+ module Colors
5
+ COLORS = {
6
+ aliceblue: [240, 248, 255],
7
+ antiquewhite: [250, 235, 215],
8
+ aqua: [0, 255, 255],
9
+ aquamarine: [127, 255, 212],
10
+ azure: [240, 255, 255],
11
+ beige: [245, 245, 220],
12
+ bisque: [255, 228, 196],
13
+ black: [0, 0, 0],
14
+ blanchedalmond: [255, 235, 205],
15
+ blue: [0, 0, 255],
16
+ blueviolet: [138, 43, 226],
17
+ brown: [165, 42, 42],
18
+ burlywood: [222, 184, 135],
19
+ cadetblue: [95, 158, 160],
20
+ chartreuse: [127, 255, 0],
21
+ chocolate: [210, 105, 30],
22
+ coral: [255, 127, 80],
23
+ cornflowerblue: [100, 149, 237],
24
+ cornsilk: [255, 248, 220],
25
+ crimson: [220, 20, 60],
26
+ cyan: [0, 255, 255],
27
+ darkblue: [0, 0, 139],
28
+ darkcyan: [0, 139, 139],
29
+ darkgoldenrod: [184, 134, 11],
30
+ darkgray: [169, 169, 169],
31
+ darkgreen: [0, 100, 0],
32
+ darkkhaki: [189, 183, 107],
33
+ darkmagenta: [139, 0, 139],
34
+ darkolivegreen: [85, 107, 47],
35
+ darkorange: [255, 140, 0],
36
+ darkorchid: [153, 50, 204],
37
+ darkred: [139, 0, 0],
38
+ darksalmon: [233, 150, 122],
39
+ darkseagreen: [143, 188, 143],
40
+ darkslateblue: [72, 61, 139],
41
+ darkslategray: [47, 79, 79],
42
+ darkturquoise: [0, 206, 209],
43
+ darkviolet: [148, 0, 211],
44
+ deeppink: [255, 20, 147],
45
+ deepskyblue: [0, 191, 255],
46
+ dimgray: [105, 105, 105],
47
+ dodgerblue: [30, 144, 255],
48
+ firebrick: [178, 34, 34],
49
+ floralwhite: [255, 250, 240],
50
+ forestgreen: [34, 139, 34],
51
+ fuchsia: [255, 0, 255],
52
+ gainsboro: [220, 220, 220],
53
+ ghostwhite: [248, 248, 255],
54
+ gold: [255, 215, 0],
55
+ goldenrod: [218, 165, 32],
56
+ green: [0, 128, 0],
57
+ greenyellow: [173, 255, 47],
58
+ honeydew: [240, 255, 240],
59
+ hotpink: [255, 105, 180],
60
+ indianred: [205, 92, 92],
61
+ indigo: [75, 0, 130],
62
+ ivory: [255, 255, 240],
63
+ khaki: [240, 230, 140],
64
+ lavender: [230, 230, 250],
65
+ lavenderblush: [255, 240, 245],
66
+ lawngreen: [124, 252, 0],
67
+ lemonchiffon: [255, 250, 205],
68
+ lightblue: [173, 216, 230],
69
+ lightcoral: [240, 128, 128],
70
+ lightcyan: [224, 255, 255],
71
+ lightgoldenrodyellow: [250, 250, 210],
72
+ lightgreen: [144, 238, 144],
73
+ lightgrey: [211, 211, 211],
74
+ lightpink: [255, 182, 193],
75
+ lightsalmon: [255, 160, 122],
76
+ lightseagreen: [32, 178, 170],
77
+ lightskyblue: [135, 206, 250],
78
+ lightslategray: [119, 136, 153],
79
+ lightsteelblue: [176, 196, 222],
80
+ lightyellow: [255, 255, 224],
81
+ lime: [0, 255, 0],
82
+ limegreen: [50, 205, 50],
83
+ linen: [250, 240, 230],
84
+ magenta: [255, 0, 255],
85
+ maroon: [128, 0, 0],
86
+ mediumaquamarine: [102, 205, 170],
87
+ mediumblue: [0, 0, 205],
88
+ mediumorchid: [186, 85, 211],
89
+ mediumpurple: [147, 112, 219],
90
+ mediumseagreen: [60, 179, 113],
91
+ mediumslateblue: [123, 104, 238],
92
+ mediumspringgreen: [0, 250, 154],
93
+ mediumturquoise: [72, 209, 204],
94
+ mediumvioletred: [199, 21, 133],
95
+ midnightblue: [25, 25, 112],
96
+ mintcream: [245, 255, 250],
97
+ mistyrose: [255, 228, 225],
98
+ moccasin: [255, 228, 181],
99
+ navajowhite: [255, 222, 173],
100
+ navy: [0, 0, 128],
101
+ oldlace: [253, 245, 230],
102
+ olive: [128, 128, 0],
103
+ olivedrab: [107, 142, 35],
104
+ orange: [255, 165, 0],
105
+ orangered: [255, 69, 0],
106
+ orchid: [218, 112, 214],
107
+ palegoldenrod: [238, 232, 170],
108
+ palegreen: [152, 251, 152],
109
+ paleturquoise: [175, 238, 238],
110
+ palevioletred: [219, 112, 147],
111
+ papayawhip: [255, 239, 213],
112
+ peachpuff: [255, 218, 185],
113
+ peru: [205, 133, 63],
114
+ pink: [255, 192, 203],
115
+ plum: [221, 160, 221],
116
+ powderblue: [176, 224, 230],
117
+ purple: [128, 0, 128],
118
+ red: [255, 0, 0],
119
+ rosybrown: [188, 143, 143],
120
+ royalblue: [65, 105, 225],
121
+ saddlebrown: [139, 69, 19],
122
+ salmon: [250, 128, 114],
123
+ sandybrown: [244, 164, 96],
124
+ seagreen: [46, 139, 87],
125
+ seashell: [255, 245, 238],
126
+ sienna: [160, 82, 45],
127
+ silver: [192, 192, 192],
128
+ skyblue: [135, 206, 235],
129
+ slateblue: [106, 90, 205],
130
+ slategray: [112, 128, 144],
131
+ snow: [255, 250, 250],
132
+ springgreen: [0, 255, 127],
133
+ steelblue: [70, 130, 180],
134
+ tan: [210, 180, 140],
135
+ teal: [0, 128, 128],
136
+ thistle: [216, 191, 216],
137
+ tomato: [255, 99, 71],
138
+ turquoise: [64, 224, 208],
139
+ violet: [238, 130, 238],
140
+ wheat: [245, 222, 179],
141
+ white: [255, 255, 255],
142
+ whitesmoke: [245, 245, 245],
143
+ yellow: [255, 255, 0],
144
+ yellowgreen: [154, 205, 50],
145
+ }
146
+ private_constant :COLORS
147
+
148
+ class << self
149
+ def included(base)
150
+ COLORS.each do |color, rgb|
151
+ base.define_method(color) do |alpha = 255|
152
+ rgb + [alpha]
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ # https://github.com/shoes/shoes3/blob/b856f28795112ecb64bc8f891ac166675f059beb/static/manual-en.txt#L839-L847
159
+ def gray(darkness = 128, alpha = nil)
160
+ alpha ||= (darkness.is_a?(Integer) ? 255 : 1.0)
161
+ [darkness, darkness, darkness, alpha]
162
+ end
163
+
164
+ # Shoes allows RGB values to be Floats between 0 and 1 or Integers between 0 and 255
165
+ def rgb(r, g, b, a = nil)
166
+ if r.is_a?(Float)
167
+ [r, g, b, a || 1.0]
168
+ elsif r.is_a?(Integer)
169
+ [r, g, b, a || 255]
170
+ else
171
+ raise("RGB values should be Float or Integer!")
172
+ end
173
+ end
174
+
175
+ def to_rgb(color)
176
+ case color
177
+ when nil
178
+ nil
179
+ when Array
180
+ color # Already an RGB array
181
+ when Symbol
182
+ if COLORS[color]
183
+ rgb(*COLORS[color])
184
+ else
185
+ raise("Unrecognised color name: #{color}")
186
+ end
187
+ when String
188
+ if color[0] == "#"
189
+ if color.length == 4
190
+ r = color[1].to_i(16)
191
+ g = color[2].to_i(16)
192
+ b = color[3].to_i(16)
193
+ rgb(16 * r, 16 * g, 16 * b)
194
+ elsif color.length == 7
195
+ r = color[1..2].to_i(16)
196
+ g = color[3..4].to_i(16)
197
+ b = color[5..6].to_i(16)
198
+ rgb(r, g, b)
199
+ else
200
+ raise("Don't know how to convert #{color.inspect} to RGB! (wrong number of digits)")
201
+ end
202
+ else
203
+ rgb_value = COLORS[color.to_sym]
204
+ if rgb_value
205
+ rgb(*rgb_value)
206
+ else
207
+ raise("Unrecognised color name: #{color}")
208
+ end
209
+ end
210
+ else
211
+ raise("Don't know how to convert #{color.inspect} to RGB!")
212
+ end
213
+ end
214
+ end
215
+ end