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
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "net/http"
4
- require "openssl"
5
- require "nokogiri"
6
-
7
- module Shoes
8
- class Widget
3
+ class Shoes
4
+ class Drawable
9
5
  class ResponseWrapper
10
6
  attr_reader :response
11
7
 
@@ -23,10 +19,14 @@ module Shoes
23
19
  end
24
20
 
25
21
  def download(url, method: "GET", save: nil, styles: {}, &block)
22
+ require "net/http"
23
+ require "openssl"
24
+ require "nokogiri"
25
+
26
26
  @block = block
27
27
 
28
28
  Thread.new do
29
- logger = Scarpe::Logger.logger("Shoes::App#download")
29
+ logger = Shoes::Log.logger("Shoes::App#download")
30
30
  begin
31
31
  uri = URI(url)
32
32
  response = perform_request(uri, method, styles)
@@ -0,0 +1,380 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Shoes
4
+ # Shoes::Drawable
5
+ #
6
+ # This is the display-service portable Shoes Drawable interface. Visible Shoes
7
+ # drawables like buttons inherit from this. Compound drawables made of multiple
8
+ # different smaller Drawables inherit from it in their various apps or libraries.
9
+ # The Shoes Drawable helps build a Shoes-side drawable tree, with parents and
10
+ # children. Any API that applies to all drawables (e.g. remove) should be
11
+ # defined here.
12
+ #
13
+ class Drawable < Shoes::Linkable
14
+ include Shoes::Log
15
+ include Shoes::Colors
16
+
17
+ # All Drawables have these so they go in Shoes::Drawable and are inherited
18
+ @shoes_events = ["parent", "destroy", "prop_change"]
19
+
20
+ class << self
21
+ attr_accessor :drawable_classes
22
+ attr_accessor :drawable_default_styles
23
+ attr_accessor :widget_classes
24
+
25
+ def inherited(subclass)
26
+ Shoes::Drawable.drawable_classes ||= []
27
+ Shoes::Drawable.drawable_classes << subclass
28
+
29
+ Shoes::Drawable.drawable_default_styles ||= {}
30
+ Shoes::Drawable.drawable_default_styles[subclass] = {}
31
+
32
+ Shoes::Drawable.widget_classes ||= []
33
+ if subclass < Shoes::Widget
34
+ Shoes::Drawable.widget_classes << subclass.name
35
+ end
36
+
37
+ super
38
+ end
39
+
40
+ def dsl_name
41
+ n = name.split("::").last.chomp("Drawable")
42
+ n.gsub(/(.)([A-Z])/, '\1_\2').downcase
43
+ end
44
+
45
+ def drawable_class_by_name(name)
46
+ drawable_classes.detect { |k| k.dsl_name == name.to_s }
47
+ end
48
+
49
+ def is_widget_class?(name)
50
+ !!Shoes::Drawable.widget_classes.intersect?([name.to_s])
51
+ end
52
+
53
+ def validate_as(prop_name, value)
54
+ prop_name = prop_name.to_s
55
+ hashes = shoes_style_hashes
56
+
57
+ h = hashes.detect { |hash| hash[:name] == prop_name }
58
+ raise(Shoes::Errors::NoSuchStyleError, "Can't find property #{prop_name.inspect} in #{self} property list: #{hashes.inspect}!") unless h
59
+
60
+ return value if h[:validator].nil?
61
+
62
+ h[:validator].call(value)
63
+ end
64
+
65
+ # Return a list of Shoes events for this class.
66
+ #
67
+ # @return Array[String] the list of event names
68
+ def get_shoes_events
69
+ if @shoes_events.nil?
70
+ raise UnknownEventsForClass, "Drawable type #{self.class} hasn't defined its list of Shoes events!"
71
+ end
72
+
73
+ @shoes_events
74
+ end
75
+
76
+ # Set the list of Shoes event names that are allowed for this class.
77
+ #
78
+ # @param args [Array] an array of event names, which will be coerced to Strings
79
+ # @return [void]
80
+ def shoes_events(*args)
81
+ @shoes_events ||= args.map(&:to_s) + self.superclass.get_shoes_events
82
+ end
83
+
84
+ # Assign a new Shoes Drawable ID number, starting from 1.
85
+ # This allows non-overlapping small integer IDs for Shoes
86
+ # linkable IDs - the number part of making it clear what
87
+ # widget you're talking about.
88
+ def allocate_drawable_id
89
+ @drawable_id_counter ||= 0
90
+ @drawable_id_counter += 1
91
+ @drawable_id_counter
92
+ end
93
+
94
+ def register_drawable_id(id, drawable)
95
+ @drawables_by_id ||= {}
96
+ @drawables_by_id[id] = drawable
97
+ end
98
+
99
+ def unregister_drawable_id(id)
100
+ @drawables_by_id ||= {}
101
+ @drawables_by_id.delete(id)
102
+ end
103
+
104
+ def drawable_by_id(id, none_ok: false)
105
+ val = @drawables_by_id[id]
106
+ unless val || none_ok
107
+ raise "No Drawable Found! #{@drawables_by_id.inspect}"
108
+ end
109
+
110
+ val
111
+ end
112
+
113
+ private
114
+
115
+ def linkable_properties
116
+ @linkable_properties ||= []
117
+ end
118
+
119
+ def linkable_properties_hash
120
+ @linkable_properties_hash ||= {}
121
+ end
122
+
123
+ public
124
+
125
+ # Shoes styles in Shoes Linkables are automatically sync'd with the display side objects.
126
+ # If a block is passed to shoes_style, that's the validation for the property. It should
127
+ # convert a given value to a valid value for the property or throw an exception.
128
+ def shoes_style(name, &validator)
129
+ name = name.to_s
130
+
131
+ return if linkable_properties_hash[name]
132
+
133
+ linkable_properties << { name: name, validator: }
134
+ linkable_properties_hash[name] = true
135
+ end
136
+
137
+ # Add these names as Shoes styles
138
+ def shoes_styles(*names)
139
+ names.each { |n| shoes_style(n) }
140
+ end
141
+
142
+ def shoes_style_names
143
+ parent_prop_names = self != Shoes::Drawable ? self.superclass.shoes_style_names : []
144
+
145
+ parent_prop_names | linkable_properties.map { |prop| prop[:name] }
146
+ end
147
+
148
+ def shoes_style_hashes
149
+ parent_hashes = self != Shoes::Drawable ? self.superclass.shoes_style_hashes : []
150
+
151
+ parent_hashes + linkable_properties
152
+ end
153
+
154
+ def shoes_style_name?(name)
155
+ linkable_properties_hash[name.to_s] ||
156
+ (self != Shoes::Drawable && superclass.shoes_style_name?(name))
157
+ end
158
+ end
159
+
160
+ # Shoes uses a "hidden" style property for hide/show
161
+ shoes_style :hidden
162
+
163
+ attr_reader :debug_id
164
+
165
+ def initialize(*args, **kwargs)
166
+ log_init("Shoes::#{self.class.name}")
167
+
168
+ default_styles = Shoes::Drawable.drawable_default_styles[self.class]
169
+
170
+ self.class.shoes_style_names.each do |prop|
171
+ prop_sym = prop.to_sym
172
+ if kwargs.key?(prop_sym)
173
+ val = self.class.validate_as(prop, kwargs[prop_sym])
174
+ instance_variable_set("@" + prop, val)
175
+ elsif default_styles.key?(prop_sym)
176
+ val = self.class.validate_as(prop, default_styles[prop_sym])
177
+ instance_variable_set("@" + prop, val)
178
+ end
179
+ end
180
+
181
+ super(linkable_id: Shoes::Drawable.allocate_drawable_id)
182
+ Shoes::Drawable.register_drawable_id(self.linkable_id, self)
183
+
184
+ generate_debug_id
185
+ end
186
+
187
+ # Calling stack.app or drawable.app will execute the block
188
+ # with the Shoes::App as self, and with that stack or
189
+ # flow as the current slot.
190
+ #
191
+ # @incompatibility In Shoes Classic this is the only way
192
+ # to change self, while Scarpe will also change self
193
+ # with the other Slot Manipulation methods: #clear,
194
+ # #append, #prepend, #before and #after.
195
+ #
196
+ # @return [Shoes::App] the Shoes app
197
+ # @yield the block to call with the Shoes App as self
198
+ def app(&block)
199
+ Shoes::App.instance.with_slot(self, &block) if block_given?
200
+ Shoes::App.instance
201
+ end
202
+
203
+ private
204
+
205
+ def generate_debug_id
206
+ cl = caller_locations(3)
207
+ da = cl.detect { |loc| !loc.path.include?("lacci/lib/shoes") }
208
+ @drawable_defined_at = "#{File.basename(da.path)}:#{da.lineno}"
209
+
210
+ class_name = self.class.name.split("::")[-1]
211
+
212
+ @debug_id = "#{class_name}##{@linkable_id}(#{@drawable_defined_at})"
213
+ end
214
+
215
+ public
216
+
217
+ def inspect
218
+ "#<#{debug_id} " +
219
+ " @parent=#{@parent ? @parent.debug_id : "(none)"} " +
220
+ "@children=#{@children ? @children.map(&:debug_id) : "(none)"} properties=#{shoes_style_values.inspect}>"
221
+ end
222
+
223
+ private
224
+
225
+ def validate_event_name(event_name)
226
+ unless self.class.get_shoes_events.include?(event_name.to_s)
227
+ raise Shoes::UnregisteredShoesEvent, "Drawable #{self.inspect} tried to bind Shoes event #{event_name}, which is not in #{evetns.inspect}!"
228
+ end
229
+ end
230
+
231
+ def bind_self_event(event_name, &block)
232
+ raise(Shoes::Errors::NoLinkableIdError, "Drawable has no linkable_id! #{inspect}") unless linkable_id
233
+
234
+ validate_event_name(event_name)
235
+
236
+ bind_shoes_event(event_name: event_name, target: linkable_id, &block)
237
+ end
238
+
239
+ def bind_no_target_event(event_name, &block)
240
+ validate_event_name(event_name)
241
+
242
+ bind_shoes_event(event_name:, &block)
243
+ end
244
+
245
+ public
246
+
247
+ def event(event_name, *args, **kwargs)
248
+ validate_event_name(event_name)
249
+
250
+ send_shoes_event(*args, **kwargs, event_name:, target: linkable_id)
251
+ end
252
+
253
+ def shoes_style_values
254
+ all_property_names = self.class.shoes_style_names
255
+
256
+ properties = {}
257
+ all_property_names.each do |prop|
258
+ properties[prop] = instance_variable_get("@" + prop)
259
+ end
260
+ properties["shoes_linkable_id"] = self.linkable_id
261
+ properties
262
+ end
263
+
264
+ def style(*args, **kwargs)
265
+ if args.empty? && kwargs.empty?
266
+ # Just called as .style()
267
+ shoes_style_values
268
+ elsif args.empty?
269
+ # This is called to set one or more Shoes styles
270
+ prop_names = self.class.shoes_style_names
271
+ unknown_styles = kwargs.keys.select { |k| !prop_names.include?(k.to_s) }
272
+ unless unknown_styles.empty?
273
+ raise Shoes::Errors::NoSuchStyleError, "Unknown styles for drawable type #{self.class.name}: #{unknown_styles.join(", ")}"
274
+ end
275
+
276
+ kwargs.each do |name, val|
277
+ instance_variable_set("@#{name}", val)
278
+ end
279
+ elsif args.length == 1 && args[0] < Shoes::Drawable
280
+ # Shoes supports calling .style with a Shoes class, e.g. .style(Shoes::Button, displace_left: 5)
281
+ kwargs.each do |name, val|
282
+ Shoes::Drawable.drawable_default_styles[args[0]][name.to_sym] = val
283
+ end
284
+ else
285
+ raise Shoes::Errors::InvalidAttributeValueError, "Unexpected arguments to style! args: #{args.inspect}, keyword args: #{kwargs.inspect}"
286
+ end
287
+ end
288
+
289
+ private
290
+
291
+ def create_display_drawable
292
+ klass_name = self.class.name.delete_prefix("Scarpe::").delete_prefix("Shoes::")
293
+
294
+ is_widget = Shoes::Drawable.is_widget_class?(klass_name)
295
+
296
+ # Should we send an event so this can be discovered from someplace other than
297
+ # the DisplayService?
298
+ ::Shoes::DisplayService.display_service.create_display_drawable_for(klass_name, self.linkable_id, shoes_style_values, is_widget:)
299
+ end
300
+
301
+ public
302
+
303
+ attr_reader :parent
304
+ attr_reader :destroyed
305
+
306
+ def set_parent(new_parent)
307
+ @parent&.remove_child(self)
308
+ new_parent&.add_child(self)
309
+ @parent = new_parent
310
+ send_shoes_event(new_parent.linkable_id, event_name: "parent", target: linkable_id)
311
+ end
312
+
313
+ # Removes the element from the Shoes::Drawable tree and removes all event subscriptions
314
+ def destroy
315
+ @parent&.remove_child(self)
316
+ @parent = nil
317
+ @destroyed = true
318
+ unsub_all_shoes_events
319
+ send_shoes_event(event_name: "destroy", target: linkable_id)
320
+ Shoes::Drawable.unregister_drawable_id(linkable_id)
321
+ end
322
+ alias_method :remove, :destroy
323
+
324
+ # Hide the drawable.
325
+ def hide
326
+ self.hidden = true
327
+ end
328
+
329
+ # Show the drawable.
330
+ def show
331
+ self.hidden = false
332
+ end
333
+
334
+ # Hide the drawable if it is currently shown. Show it if it is currently hidden.
335
+ def toggle
336
+ self.hidden = !self.hidden
337
+ end
338
+
339
+ # We use method_missing to auto-create Shoes style getters and setters.
340
+ def method_missing(name, *args, **kwargs, &block)
341
+ name_s = name.to_s
342
+
343
+ if name_s[-1] == "="
344
+ prop_name = name_s[0..-2]
345
+ if self.class.shoes_style_name?(prop_name)
346
+ self.class.define_method(name) do |new_value|
347
+ raise(Shoes::Errors::NoLinkableIdError, "Trying to set Shoes styles in an object with no linkable ID! #{inspect}") unless linkable_id
348
+
349
+ new_value = self.class.validate_as(prop_name, new_value)
350
+ instance_variable_set("@" + prop_name, new_value)
351
+ send_shoes_event({ prop_name => new_value }, event_name: "prop_change", target: linkable_id)
352
+ end
353
+
354
+ return self.send(name, *args, **kwargs, &block)
355
+ end
356
+ end
357
+
358
+ if self.class.shoes_style_name?(name_s)
359
+ self.class.define_method(name) do
360
+ raise(Shoes::Errors::NoLinkableIdError, "Trying to get Shoes styles in an object with no linkable ID! #{inspect}") unless linkable_id
361
+
362
+ instance_variable_get("@" + name_s)
363
+ end
364
+
365
+ return self.send(name, *args, **kwargs, &block)
366
+ end
367
+
368
+ super(name, *args, **kwargs, &block)
369
+ end
370
+
371
+ def respond_to_missing?(name, include_private = false)
372
+ name_s = name.to_s
373
+ return true if self.class.shoes_style_name?(name_s)
374
+ return true if self.class.shoes_style_name?(name_s[0..-2]) && name_s[-1] == "="
375
+ return true if Drawable.drawable_class_by_name(name_s)
376
+
377
+ super
378
+ end
379
+ end
380
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Shoes
4
+ class Arc < Shoes::Drawable
5
+ shoes_style :draw_context
6
+ shoes_events # No Arc-specific events yet
7
+
8
+ [:left, :top, :width, :height].each do |prop|
9
+ shoes_style(prop) { |val| convert_to_integer(val, prop) }
10
+ end
11
+
12
+ [:angle1, :angle2].each do |prop|
13
+ shoes_style(prop) { |val| convert_to_float(val, prop) }
14
+ end
15
+
16
+ def initialize(*args)
17
+ @draw_context = Shoes::App.instance.current_draw_context
18
+
19
+ super
20
+ self.left, self.top, self.width, self.height, self.angle1, self.angle2 = args
21
+
22
+ create_display_drawable
23
+ end
24
+
25
+ def self.convert_to_integer(value, attribute_name)
26
+ begin
27
+ value = Integer(value)
28
+ raise Shoes::Errors::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 Shoes::Errors::InvalidAttributeValueError, error_message
34
+ end
35
+ end
36
+
37
+ def self.convert_to_float(value, attribute_name)
38
+ begin
39
+ value = Float(value)
40
+ raise Shoes::Errors::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 Shoes::Errors::InvalidAttributeValueError, error_message
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Shoes
4
+ class Arrow < Shoes::Drawable
5
+ shoes_style :draw_context
6
+ shoes_events # No Arrow-specific events yet
7
+
8
+ [:left, :top, :width].each do |prop|
9
+ shoes_style(prop) { |val| val.is_a?(Hash) ? val : convert_to_integer(val, prop) }
10
+ end
11
+
12
+ def initialize(*args)
13
+ @draw_context = Shoes::App.instance.current_draw_context
14
+
15
+ super
16
+
17
+ if args.length == 1 && args[0].is_a?(Hash)
18
+ options = args[0]
19
+ self.left = options[:left]
20
+ self.top = options[:top]
21
+ self.width = options[:width]
22
+ else
23
+ self.left, self.top, self.width = args
24
+ end
25
+
26
+ create_display_drawable
27
+ end
28
+
29
+ def self.convert_to_integer(value, attribute_name)
30
+ begin
31
+ value = Integer(value)
32
+ raise Shoes::Errors::InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
33
+
34
+ value
35
+ rescue ArgumentError
36
+ error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
37
+ raise Shoes::Errors::InvalidAttributeValueError, error_message
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Shoes
4
+ class Button < Shoes::Drawable
5
+ include Shoes::Log
6
+ shoes_styles :text, :width, :height, :top, :left, :color, :padding_top, :padding_bottom, :text_color, :size, :font_size, :tooltip
7
+ shoes_events :click, :hover
8
+
9
+ # Creates a new Button object.
10
+ #
11
+ # @param text [String] The text displayed on the button.
12
+ # @param width [Integer] The requested width of the button in pixels.
13
+ # @param height [Integer] The requested height of the button in pixels.
14
+ # @param top [Integer] The position of the top edge of the button relative to its parent widget.
15
+ # @param left [Integer] The position of the left edge of the button relative to its parent widget.
16
+ # @param size [Integer] The font size of the button text.
17
+ # @param color [String] The background color of the button.
18
+ # @param padding_top [Integer] The padding above the button text.
19
+ # @param padding_bottom [Integer] The padding below the button text.
20
+ # @param text_color [String] The color of the button text.
21
+ # @yield A block of code to be executed when the button is clicked.
22
+ # @return [Shoes::Button] the button object
23
+ #
24
+ # @example
25
+ # Shoes.app do
26
+ # @push = button "Push me"
27
+ # @note = para "Nothing pushed so far"
28
+ # @push.click {
29
+ # @note.replace(
30
+ # "Aha! Click! ",
31
+ # link("Go back") { @note.replace("Nothing pushed so far") }
32
+ # )
33
+ # }
34
+ # end
35
+ def initialize(text, width: nil, height: nil, top: nil, left: nil, color: nil, padding_top: nil, padding_bottom: nil, size: 12, text_color: nil,
36
+ font_size: nil, tooltip: nil, &block)
37
+
38
+ log_init("Button")
39
+
40
+ # Properties passed as positional args, not keywords, don't get auto-set
41
+ @text = text
42
+ @block = block
43
+
44
+ super
45
+
46
+ # Bind to a handler named "click"
47
+ bind_self_event("click") do
48
+ @log.debug("Button clicked, calling handler") if @block
49
+ @block&.call
50
+ end
51
+
52
+ bind_self_event("hover") do
53
+ @hover&.call
54
+ end
55
+
56
+ create_display_drawable
57
+ end
58
+
59
+ # Set the click handler
60
+ #
61
+ # @yield A block to be called when the button is clicked.
62
+ def click(&block)
63
+ @block = block
64
+ end
65
+
66
+ # Set the hover handler
67
+ #
68
+ # @yield A block to be called when the cursor moves to be over the button.
69
+ def hover(&block)
70
+ @hover = block
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Shoes
4
+ class Check < Shoes::Drawable
5
+ shoes_styles :checked
6
+ shoes_events :click
7
+
8
+ def initialize(checked = nil, &block)
9
+ @block = block
10
+ super
11
+
12
+ bind_self_event("click") { click }
13
+ create_display_drawable
14
+ end
15
+
16
+ def click(&block)
17
+ @block = block
18
+ self.checked = !checked?
19
+ end
20
+
21
+ def checked?
22
+ @checked ? true : false
23
+ end
24
+
25
+ def checked(value)
26
+ self.checked = value
27
+ end
28
+ end
29
+ end
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class DocumentRoot < Scarpe::Flow
3
+ class Shoes
4
+ class DocumentRoot < Shoes::Flow
5
+ shoes_events # No DocumentRoot-specific events yet
6
+
5
7
  def initialize
6
8
  @height = "100%"
7
9
  @width = @margin = @padding = nil
8
10
  @options = {}
9
11
 
10
12
  super
11
-
12
- create_display_widget
13
13
  end
14
14
 
15
15
  # The default inspect string can be absolutely huge in console output, and it's frequently printed.
16
16
  def inspect
17
- "<Scarpe::DocumentRoot>"
17
+ "<Shoes::DocumentRoot>"
18
18
  end
19
19
  end
20
20
  end
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class EditBox < Shoes::Widget
5
- display_properties :text, :height, :width
3
+ class Shoes
4
+ class EditBox < Shoes::Drawable
5
+ shoes_styles :text, :height, :width
6
+ shoes_events :change
6
7
 
7
8
  def initialize(text = "", height: nil, width: nil, &block)
9
+ super
8
10
  @text = text
9
11
  @callback = block
10
12
 
11
- super
12
-
13
13
  bind_self_event("change") do |new_text|
14
14
  self.text = new_text
15
15
  @callback&.call(self)
16
16
  end
17
17
 
18
- create_display_widget
18
+ create_display_drawable
19
19
  end
20
20
 
21
21
  def change(&block)
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Scarpe
4
- class EditLine < Shoes::Widget
5
- display_properties :text, :width
3
+ class Shoes
4
+ class EditLine < Shoes::Drawable
5
+ shoes_styles :text, :width
6
+ shoes_events :change
6
7
 
7
8
  def initialize(text = "", width: nil, &block)
9
+ super
8
10
  @block = block
9
11
  @text = text
10
12
 
11
- super
12
-
13
13
  bind_self_event("change") do |new_text|
14
14
  self.text = new_text
15
15
  @block&.call(new_text)
16
16
  end
17
17
 
18
- create_display_widget
18
+ create_display_drawable
19
19
  end
20
20
 
21
21
  def change(&block)