scarpe 0.3.0 → 0.5.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 (297) hide show
  1. checksums.yaml +4 -4
  2. data/.cursor/rules/commit-style-preferences.mdc +72 -0
  3. data/.cursor/rules/component_context.mdc +82 -0
  4. data/.cursor/rules/debug-failed-tests.mdc +100 -0
  5. data/.cursor/rules/display_service_context.mdc +80 -0
  6. data/.cursor/rules/event_handling_context.mdc +100 -0
  7. data/.cursor/rules/git-pager-handling.mdc +64 -0
  8. data/.cursor/rules/lacci-context.mdc +52 -0
  9. data/.cursor/rules/scarpe_design_context.mdc +46 -0
  10. data/.cursor/rules/shoes_compatibility_context.mdc +75 -0
  11. data/.cursor/rules/timeout_context.mdc +78 -0
  12. data/.cursor/rules/update_lacci_and_wv.mdc +8 -0
  13. data/.cursor/rules/what_is_scarpe.mdc +22 -0
  14. data/.cursor/rules/writing-new-rules.mdc +73 -0
  15. data/CHANGELOG.md +46 -5
  16. data/CLAUDE.md +223 -0
  17. data/Gemfile +2 -2
  18. data/Gemfile.lock +85 -55
  19. data/LICENSE.txt +7 -1
  20. data/README.md +80 -20
  21. data/Rakefile +73 -14
  22. data/docs/SCARPE_FEATURES.md +38 -0
  23. data/docs/_config.yml +13 -0
  24. data/docs/calzini_components_and_updates.md +78 -0
  25. data/docs/display_service_separation.md +39 -0
  26. data/docs/documentation.md +43 -0
  27. data/docs/event_loops.md +66 -0
  28. data/docs/image.png +0 -0
  29. data/docs/index.md +118 -0
  30. data/docs/lacci.md +121 -0
  31. data/docs/scarpe_shoes_incompatibilities.md +71 -0
  32. data/docs/shoes_and_display_events.md +55 -0
  33. data/docs/shoes_implementations.md +79 -0
  34. data/docs/static/manual.md +5 -0
  35. data/docs/static/scarpe-logo.png +0 -0
  36. data/docs/timeouts_and_handlers.md +66 -0
  37. data/docs/web_archaeology.md +76 -0
  38. data/examples/Edit_box_Styles.rb +8 -0
  39. data/examples/Kerning.rb +7 -0
  40. data/examples/background_with_image.rb +14 -5
  41. data/examples/bloopsaphone/working/feepogram.rb +1 -1
  42. data/examples/bloopsaphone/working/le_dance_des_rubis.rb +135 -0
  43. data/examples/bloopsaphone/working/pixel_dreams_in_ruby.rb +131 -0
  44. data/examples/bloopsaphone/working/type_rebellion.rb +157 -0
  45. data/examples/border.rb +11 -0
  46. data/examples/check.rb +2 -0
  47. data/examples/download_and_show_image.rb +3 -0
  48. data/examples/flags/finland.rb +15 -0
  49. data/examples/flags/italy.rb +11 -0
  50. data/examples/flags/mauritius.rb +14 -0
  51. data/examples/font_family.rb +17 -0
  52. data/examples/font_shorthand.rb +9 -0
  53. data/examples/gen.rb +4 -0
  54. data/examples/internal_link_navigation.rb +19 -0
  55. data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
  56. data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
  57. data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
  58. data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
  59. data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
  60. data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
  61. data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
  62. data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
  63. data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
  64. data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
  65. data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
  66. data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
  67. data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
  68. data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
  69. data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
  70. data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
  71. data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
  72. data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
  73. data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
  74. data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
  75. data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
  76. data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
  77. data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
  78. data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
  79. data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
  80. data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
  81. data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
  82. data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
  83. data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
  84. data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
  85. data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
  86. data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
  87. data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
  88. data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
  89. data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
  90. data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
  91. data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
  92. data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
  93. data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
  94. data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
  95. data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
  96. data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
  97. data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
  98. data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
  99. data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
  100. data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
  101. data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
  102. data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
  103. data/examples/legacy/working/shoes_manual/animate.rb +7 -0
  104. data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
  105. data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
  106. data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
  107. data/examples/legacy/working/shoes_manual/download.rb +12 -0
  108. data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
  109. data/examples/legacy/working/shoes_manual/editline.rb +7 -0
  110. data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
  111. data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
  112. data/examples/legacy/working/shoes_manual/image.rb +5 -0
  113. data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
  114. data/examples/legacy/working/shoes_manual/message.rb +18 -0
  115. data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
  116. data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
  117. data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
  118. data/examples/legacy/working/shoes_manual/stack.rb +7 -0
  119. data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
  120. data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
  121. data/examples/legacy/working/shoes_manual/width.rb +4 -0
  122. data/examples/local_assets/multi_image.rb +5 -0
  123. data/examples/local_assets/small.png +0 -0
  124. data/examples/local_fonts.rb +3 -0
  125. data/examples/margin.rb +13 -0
  126. data/examples/margin_check.rb +27 -0
  127. data/examples/oval-with-kwargs.rb +3 -0
  128. data/examples/oval.rb +26 -0
  129. data/examples/page_navigation_single_app.rb +42 -0
  130. data/examples/para_font_styles.rb +17 -0
  131. data/examples/para_font_variant.rb +6 -0
  132. data/examples/para_fontweight.rb +13 -0
  133. data/examples/parse_xl_funnies.rb +3 -0
  134. data/examples/rect.rb +1 -1
  135. data/examples/scarpe_ext.rb +3 -0
  136. data/examples/shapes/star.rb +1 -3
  137. data/examples/shoes_subclass_app.rb +25 -0
  138. data/examples/spacing.rb +1 -1
  139. data/examples/span.rb +4 -2
  140. data/examples/url_routing_example.rb +67 -0
  141. data/lacci/Gemfile +0 -2
  142. data/lacci/Gemfile.lock +4 -32
  143. data/lacci/lacci.gemspec +3 -3
  144. data/lacci/lib/lacci/scarpe_cli.rb +0 -1
  145. data/lacci/lib/lacci/version.rb +1 -1
  146. data/lacci/lib/scarpe/niente/app.rb +12 -1
  147. data/lacci/lib/scarpe/niente/display_service.rb +5 -1
  148. data/lacci/lib/scarpe/niente/drawable.rb +2 -0
  149. data/lacci/lib/scarpe/niente/shoes_spec.rb +10 -5
  150. data/lacci/lib/scarpe/niente.rb +15 -2
  151. data/lacci/lib/shoes/app.rb +204 -105
  152. data/lacci/lib/shoes/constants.rb +24 -2
  153. data/lacci/lib/shoes/display_service.rb +43 -4
  154. data/lacci/lib/shoes/drawable.rb +326 -36
  155. data/lacci/lib/shoes/drawables/arc.rb +4 -26
  156. data/lacci/lib/shoes/drawables/arrow.rb +3 -23
  157. data/lacci/lib/shoes/drawables/border.rb +28 -0
  158. data/lacci/lib/shoes/drawables/button.rb +5 -21
  159. data/lacci/lib/shoes/drawables/check.rb +7 -3
  160. data/lacci/lib/shoes/drawables/document_root.rb +4 -4
  161. data/lacci/lib/shoes/drawables/edit_box.rb +6 -5
  162. data/lacci/lib/shoes/drawables/edit_line.rb +5 -4
  163. data/lacci/lib/shoes/drawables/flow.rb +4 -6
  164. data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
  165. data/lacci/lib/shoes/drawables/image.rb +2 -2
  166. data/lacci/lib/shoes/drawables/line.rb +3 -6
  167. data/lacci/lib/shoes/drawables/link.rb +16 -9
  168. data/lacci/lib/shoes/drawables/list_box.rb +8 -5
  169. data/lacci/lib/shoes/drawables/oval.rb +48 -0
  170. data/lacci/lib/shoes/drawables/para.rb +106 -18
  171. data/lacci/lib/shoes/drawables/progress.rb +2 -1
  172. data/lacci/lib/shoes/drawables/radio.rb +5 -3
  173. data/lacci/lib/shoes/drawables/rect.rb +7 -6
  174. data/lacci/lib/shoes/drawables/shape.rb +4 -3
  175. data/lacci/lib/shoes/drawables/slot.rb +102 -9
  176. data/lacci/lib/shoes/drawables/stack.rb +7 -12
  177. data/lacci/lib/shoes/drawables/star.rb +9 -31
  178. data/lacci/lib/shoes/drawables/text_drawable.rb +93 -34
  179. data/lacci/lib/shoes/drawables/video.rb +3 -2
  180. data/lacci/lib/shoes/drawables/widget.rb +9 -4
  181. data/lacci/lib/shoes/drawables.rb +2 -1
  182. data/lacci/lib/shoes/errors.rb +13 -3
  183. data/lacci/lib/shoes/margin_helper.rb +79 -0
  184. data/lacci/lib/shoes.rb +98 -20
  185. data/lacci/test/.gitignore +1 -0
  186. data/lacci/test/test_draw_context.rb +167 -0
  187. data/lacci/test/test_font_helper.rb +57 -0
  188. data/lacci/test/test_helper.rb +31 -4
  189. data/lacci/test/test_lacci.rb +93 -6
  190. data/lacci/test/test_margin_helper.rb +82 -0
  191. data/lacci/test/test_niente_test_infra.rb +40 -0
  192. data/lacci/test/test_oval.rb +82 -0
  193. data/lacci/test/test_parenting.rb +140 -0
  194. data/lacci/test/test_shoes_errors.rb +15 -13
  195. data/lacci/test/test_text_drawables.rb +23 -0
  196. data/lib/scarpe/assets.rb +19 -0
  197. data/lib/scarpe/cats_cradle.rb +57 -98
  198. data/lib/scarpe/shoes_spec.rb +24 -44
  199. data/lib/scarpe/version.rb +1 -1
  200. data/lib/scarpe/wv/app.rb +1 -0
  201. data/lib/scarpe/wv/arc.rb +0 -4
  202. data/lib/scarpe/wv/border.rb +15 -0
  203. data/lib/scarpe/wv/control_interface.rb +2 -10
  204. data/lib/scarpe/wv/document_root.rb +2 -2
  205. data/lib/scarpe/wv/drawable.rb +6 -40
  206. data/lib/scarpe/wv/edit_box.rb +4 -1
  207. data/lib/scarpe/wv/edit_line.rb +4 -1
  208. data/lib/scarpe/wv/image.rb +2 -5
  209. data/lib/scarpe/wv/link.rb +4 -2
  210. data/lib/scarpe/wv/oval.rb +13 -0
  211. data/lib/scarpe/wv/para.rb +1 -0
  212. data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
  213. data/lib/scarpe/wv/shape.rb +10 -5
  214. data/lib/scarpe/wv/text_drawable.rb +72 -14
  215. data/lib/scarpe/wv/web_wrangler.rb +33 -11
  216. data/lib/scarpe/wv/webview_local_display.rb +6 -2
  217. data/lib/scarpe/wv.rb +16 -2
  218. data/scarpe-components/Gemfile +4 -3
  219. data/scarpe-components/Gemfile.lock +6 -37
  220. data/scarpe-components/README.md +2 -2
  221. data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
  222. data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
  223. data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
  224. data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
  225. data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
  226. data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
  227. data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
  228. data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
  229. data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
  230. data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
  231. data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
  232. data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
  233. data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
  234. data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
  235. data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
  236. data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
  237. data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
  238. data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
  239. data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
  240. data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
  241. data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
  242. data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
  243. data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
  244. data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
  245. data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
  246. data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
  247. data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
  248. data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
  249. data/scarpe-components/lib/scarpe/components/base64.rb +22 -0
  250. data/scarpe-components/lib/scarpe/components/calzini/{art_widgets.rb → art_drawables.rb} +42 -18
  251. data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
  252. data/scarpe-components/lib/scarpe/components/calzini/button.rb +6 -8
  253. data/scarpe-components/lib/scarpe/components/calzini/misc.rb +14 -16
  254. data/scarpe-components/lib/scarpe/components/calzini/para.rb +218 -11
  255. data/scarpe-components/lib/scarpe/components/calzini/slots.rb +16 -60
  256. data/scarpe-components/lib/scarpe/components/calzini.rb +88 -1
  257. data/scarpe-components/lib/scarpe/components/errors.rb +4 -0
  258. data/scarpe-components/lib/scarpe/components/html.rb +4 -1
  259. data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +11 -3
  260. data/scarpe-components/lib/scarpe/components/minitest_result.rb +41 -0
  261. data/scarpe-components/lib/scarpe/components/port_helpers.rb +30 -0
  262. data/scarpe-components/lib/scarpe/components/print_logger.rb +17 -2
  263. data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
  264. data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +1 -1
  265. data/scarpe-components/lib/scarpe/components/tiranti.rb +42 -100
  266. data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +3 -1
  267. data/scarpe-components/lib/scarpe/components/version.rb +1 -1
  268. data/scarpe-components/scarpe-components.gemspec +1 -1
  269. data/scarpe-components/test/assets/big-image.png +0 -0
  270. data/scarpe-components/test/assets/big-stylesheet.css +497 -0
  271. data/scarpe-components/test/assets/little-image.png +0 -0
  272. data/scarpe-components/test/assets/little-stylesheet.css +1 -0
  273. data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +7 -7
  274. data/scarpe-components/test/calzini/test_calzini_button.rb +7 -5
  275. data/scarpe-components/test/calzini/test_calzini_misc.rb +9 -9
  276. data/scarpe-components/test/calzini/test_calzini_para.rb +6 -9
  277. data/scarpe-components/test/calzini/test_calzini_slots.rb +12 -57
  278. data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +83 -18
  279. data/scarpe-components/test/calzini/test_various.rb +133 -0
  280. data/scarpe-components/test/test_asset_server.rb +72 -0
  281. data/scarpe-components/test/test_components.rb +31 -2
  282. data/scarpe-components/test/test_helper.rb +0 -1
  283. data/scarpe-components/test/test_minitest_result.rb +7 -0
  284. data/scarpe-components/test/test_port_helpers.rb +12 -0
  285. data/scarpe-components/test/test_segmented_app_files.rb +2 -0
  286. data/tasks/check_html_fixtures.rb +140 -0
  287. data/tasks/regenerate_html_fixtures.rb +104 -0
  288. data/templates/class_template_with_shapes.erb +0 -11
  289. metadata +225 -39
  290. data/.rubocop.yml +0 -88
  291. data/lacci/lib/scarpe/niente/logger.rb +0 -29
  292. data/lacci/lib/shoes/drawables/span.rb +0 -27
  293. data/lacci/lib/shoes/spacing.rb +0 -9
  294. data/lib/scarpe/evented_assertions.rb +0 -121
  295. data/lib/scarpe/wv/span.rb +0 -44
  296. data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +0 -65
  297. /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
@@ -0,0 +1,131 @@
1
+ require_relative 'feepogram'
2
+
3
+ bloops = Bloops.new
4
+ bloops.tempo = 160 # Slower tempo for dreamy feel
5
+
6
+ song = Feepogram.new(bloops) do
7
+ # Soft percussion
8
+ sound :soft_kick, Bloops::SINE do |s|
9
+ s.volume = 0.3
10
+ s.punch = 0.15
11
+ s.sustain = 0.1
12
+ s.decay = 0.3
13
+ end
14
+
15
+ sound :chimes, Bloops::SINE do |s|
16
+ s.volume = 0.35
17
+ s.punch = 0.1
18
+ s.sustain = 0.8
19
+ s.decay = 0.6
20
+ s.slide = 0.1
21
+ end
22
+
23
+ # Main melody instrument
24
+ sound :crystal, Bloops::SQUARE do |s|
25
+ s.volume = 0.45
26
+ s.punch = 0.1
27
+ s.sustain = 0.4
28
+ s.decay = 0.3
29
+ s.phase = 0.3
30
+ end
31
+
32
+ # Sparkly accent notes
33
+ sound :sparkle, Bloops::SQUARE do |s|
34
+ s.volume = 0.25
35
+ s.punch = 0.1
36
+ s.sustain = 0.1
37
+ s.decay = 0.4
38
+ s.phase = 0.2
39
+ s.lpf = 0.6
40
+ end
41
+
42
+ # Warm bass pad
43
+ sound :dream_pad, Bloops::SINE do |s|
44
+ s.volume = 0.25
45
+ s.sustain = 0.6
46
+ s.decay = 0.4
47
+ s.slide = 0.1
48
+ s.lpf = 0.4
49
+ end
50
+
51
+ def gentle_rhythm
52
+ soft_kick " c 4 4 4 " * 8
53
+ chimes " 4 c6 4 c6 " * 4
54
+ end
55
+
56
+ def dream_bass
57
+ dream_pad %{
58
+ 2:c3 2:g3
59
+ 2:a3 2:e3
60
+ 2:f3 2:c3
61
+ 2:g3 2:e3
62
+ }
63
+ end
64
+
65
+ def main_melody
66
+ crystal %{
67
+ c5 4 g5 4 e5 4 c6 g5
68
+ a5 4 e5 4 c5 4 g5 4
69
+ f5 4 c6 4 a5 4 f5 e5
70
+ g5 4 e5 4 c5 4 4 4
71
+ }
72
+ end
73
+
74
+ def sparkle_accent
75
+ sparkle %{
76
+ 4 4 c7 4 4 4 e7 4
77
+ 4 4 g6 4 4 4 c7 4
78
+ 4 4 a6 4 4 4 f7 4
79
+ 4 4 e7 4 4 4 g6 4
80
+ }
81
+ end
82
+
83
+ def title_theme
84
+ phrase do
85
+ dream_bass
86
+ gentle_rhythm
87
+ end
88
+
89
+ phrase do
90
+ dream_bass
91
+ gentle_rhythm
92
+ main_melody
93
+ end
94
+
95
+ phrase do
96
+ dream_bass
97
+ gentle_rhythm
98
+ main_melody
99
+ sparkle_accent
100
+ end
101
+ end
102
+
103
+ def peaceful_bridge
104
+ phrase do
105
+ dream_pad %{
106
+ 4:c4 4:e4
107
+ 4:f4 4:g4
108
+ }
109
+ sparkle " c6 e6 g6 c7 " * 4
110
+ end
111
+ end
112
+
113
+ def outro_fade
114
+ phrase do
115
+ dream_bass
116
+ crystal %{
117
+ c6 g5 e5 c5
118
+ 4 4 4 4
119
+ }
120
+ sparkle " c7 g6 e6 c6 "
121
+ end
122
+ end
123
+
124
+ # The composition
125
+ 2.times { title_theme }
126
+ peaceful_bridge
127
+ title_theme
128
+ outro_fade
129
+ end
130
+
131
+ song.play
@@ -0,0 +1,157 @@
1
+ require_relative 'feepogram'
2
+
3
+ bloops = Bloops.new
4
+ bloops.tempo = 360 # Fast and furious!
5
+
6
+ song = Feepogram.new(bloops) do
7
+ # The mighty kick of rebellion
8
+ sound :boss_kick, Bloops::SQUARE do |s|
9
+ s.volume = 0.8
10
+ s.punch = 0.8
11
+ s.sustain = 0.2
12
+ s.decay = 0.1
13
+ s.phase = 0.2
14
+ end
15
+
16
+ # The snare of defiance
17
+ sound :battle_snare, Bloops::NOISE do |s|
18
+ s.volume = 0.7
19
+ s.punch = 0.6
20
+ s.sustain = 0.1
21
+ s.decay = 0.2
22
+ s.freq = 0.5
23
+ end
24
+
25
+ # The relentless type checker
26
+ sound :type_checker, Bloops::SAWTOOTH do |s|
27
+ s.volume = 0.6
28
+ s.punch = 0.4
29
+ s.sustain = 0.2
30
+ s.decay = 0.1
31
+ s.slide = -0.3 # Menacing downward slide
32
+ end
33
+
34
+ # The sword of dynamic typing
35
+ sound :ruby_sword, Bloops::SQUARE do |s|
36
+ s.volume = 0.6
37
+ s.punch = 0.5
38
+ s.sustain = 0.15
39
+ s.decay = 0.2
40
+ s.phase = 0.3
41
+ s.freq = 0.8
42
+ end
43
+
44
+ # Duck typing power-up
45
+ sound :duck_power, Bloops::SAWTOOTH do |s|
46
+ s.volume = 0.5
47
+ s.punch = 0.3
48
+ s.sustain = 0.4
49
+ s.decay = 0.2
50
+ s.slide = 0.2
51
+ end
52
+
53
+ # The battle cry
54
+ sound :battle_cry, Bloops::SQUARE do |s|
55
+ s.volume = 0.7
56
+ s.punch = 0.5
57
+ s.sustain = 0.3
58
+ s.decay = 0.2
59
+ s.phase = 0.4
60
+ end
61
+
62
+ def intense_beat
63
+ boss_kick " c 4 c 4 c c 4 c " * 4
64
+ battle_snare " 4 c 4 c 4 c c c " * 4
65
+ end
66
+
67
+ def type_checker_attack
68
+ type_checker %{
69
+ c4 c4 g3 g3 c4 c4 g3 g3
70
+ a3 a3 e3 e3 a3 a3 e3 e3
71
+ f3 f3 c3 c3 f3 f3 c3 c3
72
+ g3 g3 d3 d3 g3 g3 d3 d3
73
+ }
74
+ end
75
+
76
+ def ruby_counter_attack
77
+ ruby_sword %{
78
+ c5 g5 c6 g5 c5 g5 c6 g5
79
+ a5 e6 a6 e6 a5 e6 a6 e6
80
+ f5 c6 f6 c6 f5 c6 f6 c6
81
+ g5 d6 g6 d6 g5 d6 g6 d6
82
+ }
83
+ end
84
+
85
+ def duck_typing_combo
86
+ duck_power %{
87
+ 8:c6 8:d6 8:e6 8:f6 8:g6 8:a6 8:b6 c7
88
+ 8:c7 8:b6 8:a6 8:g6 8:f6 8:e6 8:d6 c6
89
+ 8:a5 8:b5 8:c6 8:d6 8:e6 8:f6 8:g6 a6
90
+ 8:a6 8:g6 8:f6 8:e6 8:d6 8:c6 8:b5 a5
91
+ }
92
+ end
93
+
94
+ def battle_cry_melody
95
+ battle_cry %{
96
+ c5 4 g5 4 c6 4 g5 c5
97
+ a5 4 e5 4 a5 4 e5 a4
98
+ f5 4 c6 4 f6 4 c6 f5
99
+ g5 4 d6 4 g6 4 d6 g5
100
+ }
101
+ end
102
+
103
+ def intro_phase
104
+ 2.times do
105
+ phrase do
106
+ intense_beat
107
+ type_checker_attack
108
+ end
109
+ end
110
+ end
111
+
112
+ def battle_phase
113
+ 2.times do
114
+ phrase do
115
+ intense_beat
116
+ type_checker_attack
117
+ ruby_counter_attack
118
+ end
119
+ end
120
+ end
121
+
122
+ def power_up_phase
123
+ phrase do
124
+ intense_beat
125
+ duck_typing_combo
126
+ battle_cry_melody
127
+ end
128
+ end
129
+
130
+ def final_stand
131
+ phrase do
132
+ intense_beat
133
+ type_checker_attack
134
+ ruby_counter_attack
135
+ duck_typing_combo
136
+ battle_cry_melody
137
+ end
138
+ end
139
+
140
+ def victory_outro
141
+ phrase do
142
+ boss_kick " c 4 4 4 "
143
+ ruby_sword " c6 e6 g6 c7 "
144
+ battle_cry " 1:c6 "
145
+ end
146
+ end
147
+
148
+ # The epic battle unfolds!
149
+ intro_phase
150
+ battle_phase
151
+ power_up_phase
152
+ battle_phase
153
+ final_stand
154
+ victory_outro
155
+ end
156
+
157
+ song.play
@@ -0,0 +1,11 @@
1
+ Shoes.app(width: 300, height: 50) do
2
+ stack height: 50 do
3
+ para "Border is on top of text"
4
+ border yellow, strokewidth: 4
5
+ end
6
+
7
+ stack do
8
+ para "This border is also on top of text"
9
+ border blue, strokewidth: 4
10
+ end
11
+ end
data/examples/check.rb CHANGED
@@ -5,6 +5,8 @@ Shoes.app do
5
5
  flow { check; para "Kin-Dza-Dza by Georgi Danelia" }
6
6
  flow { check; para "Children of Heaven by Majid Majidi" }
7
7
  @btn = check; para "The White Balloon by Jafar Panahi"
8
+ @p = para ""
9
+ @btn.click { @p.replace("Clicked! Yay!") }
8
10
  flow do
9
11
  button "Mark me" do
10
12
  @btn.checked = true
@@ -1,3 +1,6 @@
1
+ # html_ci: false
2
+ # This is due to a button rendering issue
3
+
1
4
  Shoes.app do
2
5
  stack do
3
6
  title "Downloading Google image", size: 16
@@ -0,0 +1,15 @@
1
+ Shoes.app(title: "Finland", width: 360, height: 220, ) do
2
+ background blue
3
+ stack width: 100, height: 80 do
4
+ background white
5
+ end
6
+ stack width: 100, height: 80, top: 140, left: 0 do
7
+ background white
8
+ end
9
+ stack width: 200, height: 80, top: 0, left: 160 do
10
+ background white
11
+ end
12
+ stack width: 200, height: 80, top: 140, left: 160 do
13
+ background white
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ Shoes.app(height: 300) do
2
+ stack width: 0.33, height: 1.0 do
3
+ background green
4
+ end
5
+ stack width: 0.34, height: 1.0 do
6
+ background white
7
+ end
8
+ stack width: 0.33, height: 1.0 do
9
+ background red
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ Shoes.app(title: "Mauritius", height: 300) do
2
+ stack width: 1.0, height: 0.25 do
3
+ background red
4
+ end
5
+ stack width: 1.0, height: 0.25 do
6
+ background blue
7
+ end
8
+ stack width: 1.0, height: 0.25 do
9
+ background yellow
10
+ end
11
+ stack width: 1.0, height: 0.25 do
12
+ background green
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ Shoes.app do
2
+
3
+ para "This is arial" ,size:"40px" , font:"arial"
4
+
5
+ para "This is time new roman" , size:"40px", font:"'Times New Roman'"
6
+
7
+ para "this is cursive", font: "cursive", size:"40px"
8
+
9
+ para "this is pacifico", font: "'Monaco'", size:"40px"
10
+
11
+ para "this is pacifico with quotes which is same", font: "Monaco", size:"40px"
12
+
13
+ para "This is helvetica", font: "Helvetica", size:"40px"
14
+
15
+ para "This is 'Trebuchet MS'", font: "'Trebuchet MS'", size:"40px"
16
+
17
+ end
@@ -0,0 +1,9 @@
1
+ Shoes.app do
2
+
3
+ para "The family is not in font so it will change but size won't" , font:"italic bold 30px" , family:"cursive", size: 20
4
+
5
+ para "because only things things who aren't present in font " , font:"bold", size: "16px"
6
+
7
+ para "will be used as their specific property", font: "cursive italic 20px ", font_weight:"bold"
8
+
9
+ end
data/examples/gen.rb CHANGED
@@ -1,4 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
3
+ # html_ci: false
4
+ # This is due to a button rendering issue
5
+
2
6
  require 'erb'
3
7
 
4
8
  class ScarpeGenerator
@@ -0,0 +1,19 @@
1
+ # Test for internal link navigation (issue #569)
2
+ # link(click: "/path") should trigger visit() internally
3
+
4
+ Shoes.app width: 400, height: 300, title: "Internal Link Test" do
5
+ page(:index) do
6
+ title "Page 1"
7
+ para "This is the first page."
8
+ para link("Go to Page 2", click: "/page2")
9
+ end
10
+
11
+ page(:page2) do
12
+ title "Page 2"
13
+ para "You navigated here internally!"
14
+ para link("Back to Page 1", click: "/index")
15
+ end
16
+
17
+ # Start on the index page
18
+ visit(:index)
19
+ end
@@ -0,0 +1,10 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ @slot = stack { para 'Good Morning' }
4
+ timer 3 do
5
+ @slot.append do
6
+ title "Breaking News"
7
+ tagline "Astronauts arrested for space shuttle DUI."
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ s = stack width: 200, height: 200 do
4
+ background red
5
+ hover do
6
+ s.clear { background blue }
7
+ end
8
+ leave do
9
+ s.clear { background red }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ background black
4
+ background white, width: 50
5
+ end
@@ -0,0 +1,8 @@
1
+ #!ruby
2
+ Shoes.app(title: "White Circle",
3
+ width: 200, height: 200, resizable: false) {
4
+ background black
5
+ fill white
6
+ oval top: 20, left: 20, radius: 160
7
+ }
8
+
@@ -0,0 +1,9 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ stack width: 60 do
4
+ border black, strokewidth: 5
5
+ stack width: 50 do
6
+ para "=^.^=", stroke: green
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ if Shoes::FONTS.include? "Helvetica"
2
+ alert "Helvetica is available on this system."
3
+ else
4
+ alert "You do not have the Helvetica font."
5
+ end
@@ -0,0 +1,2 @@
1
+ #!ruby
2
+ ask("Please, enter your name:")
@@ -0,0 +1,5 @@
1
+ #!ruby
2
+ backcolor = ask_color("Pick a background")
3
+ Shoes.app do
4
+ background backcolor
5
+ end
@@ -0,0 +1,5 @@
1
+ #!ruby
2
+ filename = ask_open_file
3
+ Shoes.app do
4
+ para File.read(filename)
5
+ end
@@ -0,0 +1,2 @@
1
+ #!ruby
2
+ save_to = ask_save_folder
@@ -0,0 +1,4 @@
1
+ #!ruby
2
+ if confirm("Draw a circle?")
3
+ Shoes.app{ oval top: 0, left: 0, radius: 50 }
4
+ end
@@ -0,0 +1,2 @@
1
+ #!ruby
2
+ debug("Running Shoes on " + RUBY_PLATFORM)
@@ -0,0 +1,3 @@
1
+ #!ruby
2
+
3
+ info("You just ran the info example on Shoes #{Shoes::RELEASE_NAME}.")
@@ -0,0 +1,9 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ button "OK!" do
4
+ append { para "Well okay then." }
5
+ end
6
+ button "Are you sure?" do
7
+ append { para "Your confidence is inspiring." }
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ @slot = stack { para "Old text" }
4
+ timer 3 do
5
+ @slot.clear { para "Brand new text" }
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ stack do
4
+ title "GET Google", size: 16
5
+ @status = para "One moment..."
6
+
7
+ download "http://www.google.com/search?q=shoes",
8
+ method: "GET" do |dump|
9
+ @status.text = dump.response.body
10
+ end
11
+ para 'Hii'
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ flow margin: 12 do
4
+ # Set up three buttons
5
+ button "One"
6
+ @two = button "Two"
7
+ button "Three"
8
+
9
+ # Bounce the second button
10
+ animate do |i|
11
+ @two.displace(0, (Math.sin(i) * 6).to_i)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ edit_box do |e|
4
+ @counter.text = e.text.size
5
+ end
6
+ @counter = strong("0")
7
+ para @counter, " characters"
8
+ end
@@ -0,0 +1,5 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ fill "static/avatar.png"
4
+ star 200, 200, 5
5
+ end
@@ -0,0 +1,7 @@
1
+ Shoes.app do
2
+ para "てすと (te-su-to)", font: case RUBY_PLATFORM
3
+ when /mingw/; "MS UI Gothic"
4
+ when /darwin/; "AppleGothic, Arial"
5
+ else "Arial"
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ stack margin_right: 20 + gutter do
4
+ para "Insert fat and ratified declaration of independence here..."
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ image "https://en.wikipedia.org/wiki/Hackety_Hack#/media/File:Hackety-Star-Title.png"
4
+ end
@@ -0,0 +1,7 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ @info = para "NO KEY is PRESSED."
4
+ keypress do |k|
5
+ @info.replace "#{k.inspect} was PRESSED."
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ para "Choose a fruit:"
4
+ list_box items: ["Grapes", "Pears", "Apricots"],
5
+ width: 120, choose: "Apricots" do |list|
6
+ @fruit.text = list.text
7
+ end
8
+
9
+ @fruit = para "No fruit selected"
10
+ end
@@ -0,0 +1,10 @@
1
+ #!ruby
2
+ Shoes.app width: 200, height: 200 do
3
+ background black
4
+ fill white
5
+ @circ = oval 0, 0, 100, 100
6
+
7
+ motion do |top, left|
8
+ @circ.move top - 50, left - 50
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ @p = para
4
+ animate do
5
+ button, left, top = self.mouse
6
+ @p.replace "mouse: #{button}, #{left}, #{top}"
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ flow margin: 12 do
4
+ # Set up three buttons
5
+ button "One"
6
+ @two = button "Two"
7
+ button "Three"
8
+
9
+ # Bounce the second button
10
+ animate do |i|
11
+ @two.move(40, 40 + (Math.sin(i) * 6).to_i)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ Shoes.app do
2
+ fill black(0.1)
3
+ shape do
4
+ 100.times do |i|
5
+ oval i, i, i * 2
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ #!ruby
2
+ Shoes.app do
3
+ stroke blue
4
+ strokewidth 4
5
+ fill black
6
+ oval 10, 10, 50
7
+ end