shoes 4.0.0.pre1 → 4.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +84 -32
  3. data/Gemfile +22 -1
  4. data/README.md +28 -13
  5. data/Rakefile +7 -210
  6. data/bin/ruby-shoes +2 -2
  7. data/ext/install/shoes.bat +4 -1
  8. data/lib/shoes.rb +1 -121
  9. data/lib/shoes/{cli.rb → ui/cli.rb} +7 -1
  10. data/lib/shoes/{help.rb → ui/help.rb} +2 -2
  11. data/lib/shoes/{manual.rb → ui/manual.rb} +1 -1
  12. data/lib/shoes/version.rb +1 -1
  13. data/manifests/common.rb +34 -0
  14. data/manifests/shoes.rb +44 -0
  15. data/samples/Gemfile +3 -0
  16. data/samples/Gemfile.lock +35 -0
  17. data/samples/README +16 -5
  18. data/samples/boom.rb +239 -0
  19. data/samples/clicky.rb +24 -0
  20. data/samples/flow.rb +63 -0
  21. data/samples/gray.rb +11 -0
  22. data/samples/nks_booklist.rb +24 -0
  23. data/samples/nks_breadsticks.rb +7 -0
  24. data/samples/nks_dancing_circle.rb +13 -0
  25. data/samples/nks_dictionary.rb +23 -0
  26. data/samples/nks_edit_box.rb +4 -0
  27. data/samples/nks_edit_line.rb +6 -0
  28. data/samples/nks_notes.rb +16 -0
  29. data/samples/nks_self.rb +6 -0
  30. data/samples/nks_text_sizes.rb +10 -0
  31. data/samples/nks_trurl.rb +5 -0
  32. data/samples/packaging/package_me.rb +6 -0
  33. data/samples/present.rb +27 -0
  34. data/samples/progress.rb +10 -0
  35. data/samples/sample31.rb +1 -1
  36. data/samples/simple-calc.rb +1 -1
  37. data/samples/simple-tictactoe.rb +238 -0
  38. data/samples/simple-visibility.rb +11 -0
  39. data/samples/simple-widget.rb +9 -0
  40. data/samples/swt-raw.rb +20 -0
  41. data/samples/troll.rb +22 -0
  42. data/shoes.gemspec +10 -22
  43. data/snapshots/sample56.png +0 -0
  44. data/static/manual-en.txt +16 -7
  45. data/tasks/changelog.rb +92 -0
  46. data/tasks/gem.rb +38 -0
  47. data/tasks/rspec.rb +106 -0
  48. data/tasks/sample.rb +66 -0
  49. data/tasks/yard.rb +13 -0
  50. metadata +55 -488
  51. data/.gitignore +0 -53
  52. data/.rspec +0 -3
  53. data/.ruby-gemset +0 -1
  54. data/.ruby-version +0 -1
  55. data/.travis.yml +0 -31
  56. data/bin/shoes +0 -59
  57. data/bin/shoes.bat +0 -6
  58. data/fonts/Coolvetica.ttf +0 -0
  59. data/fonts/Lacuna.ttf +0 -0
  60. data/lib/ext/highlighter.rb +0 -2
  61. data/lib/ext/highlighter/common.rb +0 -197
  62. data/lib/ext/highlighter/lang/ruby.rb +0 -316
  63. data/lib/ext/highlighter/markup.rb +0 -222
  64. data/lib/rubygems_plugin.rb +0 -19
  65. data/lib/shoes/animation.rb +0 -55
  66. data/lib/shoes/app.rb +0 -320
  67. data/lib/shoes/arc.rb +0 -35
  68. data/lib/shoes/background.rb +0 -30
  69. data/lib/shoes/border.rb +0 -33
  70. data/lib/shoes/builtin_methods.rb +0 -73
  71. data/lib/shoes/button.rb +0 -32
  72. data/lib/shoes/check_button.rb +0 -43
  73. data/lib/shoes/color.rb +0 -375
  74. data/lib/shoes/common/background_element.rb +0 -9
  75. data/lib/shoes/common/changeable.rb +0 -34
  76. data/lib/shoes/common/clickable.rb +0 -17
  77. data/lib/shoes/common/common_methods.rb +0 -70
  78. data/lib/shoes/common/fill.rb +0 -21
  79. data/lib/shoes/common/registration.rb +0 -33
  80. data/lib/shoes/common/state.rb +0 -18
  81. data/lib/shoes/common/stroke.rb +0 -28
  82. data/lib/shoes/common/style.rb +0 -34
  83. data/lib/shoes/common/style_normalizer.rb +0 -16
  84. data/lib/shoes/configuration.rb +0 -96
  85. data/lib/shoes/dialog.rb +0 -27
  86. data/lib/shoes/dimension.rb +0 -237
  87. data/lib/shoes/dimensions.rb +0 -194
  88. data/lib/shoes/download.rb +0 -117
  89. data/lib/shoes/dsl.rb +0 -478
  90. data/lib/shoes/font.rb +0 -49
  91. data/lib/shoes/gradient.rb +0 -18
  92. data/lib/shoes/image.rb +0 -33
  93. data/lib/shoes/image_pattern.rb +0 -10
  94. data/lib/shoes/input_box.rb +0 -68
  95. data/lib/shoes/key_event.rb +0 -17
  96. data/lib/shoes/line.rb +0 -38
  97. data/lib/shoes/link.rb +0 -49
  98. data/lib/shoes/link_hover.rb +0 -5
  99. data/lib/shoes/list_box.rb +0 -44
  100. data/lib/shoes/logger.rb +0 -66
  101. data/lib/shoes/logger/ruby.rb +0 -18
  102. data/lib/shoes/mock.rb +0 -30
  103. data/lib/shoes/mock/animation.rb +0 -8
  104. data/lib/shoes/mock/app.rb +0 -44
  105. data/lib/shoes/mock/arc.rb +0 -8
  106. data/lib/shoes/mock/background.rb +0 -10
  107. data/lib/shoes/mock/border.rb +0 -7
  108. data/lib/shoes/mock/button.rb +0 -10
  109. data/lib/shoes/mock/check.rb +0 -24
  110. data/lib/shoes/mock/common_methods.rb +0 -11
  111. data/lib/shoes/mock/dialog.rb +0 -13
  112. data/lib/shoes/mock/download.rb +0 -18
  113. data/lib/shoes/mock/font.rb +0 -17
  114. data/lib/shoes/mock/image.rb +0 -12
  115. data/lib/shoes/mock/image_pattern.rb +0 -9
  116. data/lib/shoes/mock/input_box.rb +0 -23
  117. data/lib/shoes/mock/keypress.rb +0 -8
  118. data/lib/shoes/mock/keyrelease.rb +0 -8
  119. data/lib/shoes/mock/line.rb +0 -14
  120. data/lib/shoes/mock/link.rb +0 -11
  121. data/lib/shoes/mock/list_box.rb +0 -16
  122. data/lib/shoes/mock/oval.rb +0 -11
  123. data/lib/shoes/mock/progress.rb +0 -10
  124. data/lib/shoes/mock/radio.rb +0 -26
  125. data/lib/shoes/mock/rect.rb +0 -13
  126. data/lib/shoes/mock/shape.rb +0 -19
  127. data/lib/shoes/mock/slot.rb +0 -14
  128. data/lib/shoes/mock/sound.rb +0 -8
  129. data/lib/shoes/mock/star.rb +0 -13
  130. data/lib/shoes/mock/text_block.rb +0 -29
  131. data/lib/shoes/mock/timer.rb +0 -8
  132. data/lib/shoes/oval.rb +0 -28
  133. data/lib/shoes/point.rb +0 -43
  134. data/lib/shoes/progress.rb +0 -26
  135. data/lib/shoes/radio.rb +0 -15
  136. data/lib/shoes/rect.rb +0 -28
  137. data/lib/shoes/renamed_delegate.rb +0 -15
  138. data/lib/shoes/shape.rb +0 -175
  139. data/lib/shoes/slot.rb +0 -232
  140. data/lib/shoes/slot_contents.rb +0 -56
  141. data/lib/shoes/sound.rb +0 -16
  142. data/lib/shoes/span.rb +0 -16
  143. data/lib/shoes/star.rb +0 -49
  144. data/lib/shoes/swt.rb +0 -114
  145. data/lib/shoes/swt/animation.rb +0 -46
  146. data/lib/shoes/swt/app.rb +0 -300
  147. data/lib/shoes/swt/arc.rb +0 -70
  148. data/lib/shoes/swt/background.rb +0 -31
  149. data/lib/shoes/swt/border.rb +0 -37
  150. data/lib/shoes/swt/button.rb +0 -18
  151. data/lib/shoes/swt/check.rb +0 -14
  152. data/lib/shoes/swt/check_button.rb +0 -19
  153. data/lib/shoes/swt/color.rb +0 -45
  154. data/lib/shoes/swt/common/child.rb +0 -16
  155. data/lib/shoes/swt/common/clear.rb +0 -24
  156. data/lib/shoes/swt/common/clickable.rb +0 -62
  157. data/lib/shoes/swt/common/container.rb +0 -28
  158. data/lib/shoes/swt/common/fill.rb +0 -37
  159. data/lib/shoes/swt/common/painter.rb +0 -83
  160. data/lib/shoes/swt/common/painter_updates_position.rb +0 -12
  161. data/lib/shoes/swt/common/resource.rb +0 -14
  162. data/lib/shoes/swt/common/selection_listener.rb +0 -14
  163. data/lib/shoes/swt/common/stroke.rb +0 -41
  164. data/lib/shoes/swt/common/toggle.rb +0 -13
  165. data/lib/shoes/swt/common/update_position.rb +0 -15
  166. data/lib/shoes/swt/dialog.rb +0 -89
  167. data/lib/shoes/swt/disposed_protection.rb +0 -23
  168. data/lib/shoes/swt/download.rb +0 -24
  169. data/lib/shoes/swt/fitted_text_layout.rb +0 -94
  170. data/lib/shoes/swt/fitted_text_layout_collection.rb +0 -108
  171. data/lib/shoes/swt/font.rb +0 -32
  172. data/lib/shoes/swt/gradient.rb +0 -77
  173. data/lib/shoes/swt/image.rb +0 -130
  174. data/lib/shoes/swt/image_pattern.rb +0 -19
  175. data/lib/shoes/swt/input_box.rb +0 -73
  176. data/lib/shoes/swt/key_listener.rb +0 -145
  177. data/lib/shoes/swt/line.rb +0 -57
  178. data/lib/shoes/swt/link.rb +0 -37
  179. data/lib/shoes/swt/link_segment.rb +0 -108
  180. data/lib/shoes/swt/list_box.rb +0 -49
  181. data/lib/shoes/swt/mouse_move_listener.rb +0 -61
  182. data/lib/shoes/swt/oval.rb +0 -53
  183. data/lib/shoes/swt/progress.rb +0 -35
  184. data/lib/shoes/swt/radio.rb +0 -29
  185. data/lib/shoes/swt/radio_group.rb +0 -54
  186. data/lib/shoes/swt/rect.rb +0 -31
  187. data/lib/shoes/swt/rect_painter.rb +0 -23
  188. data/lib/shoes/swt/redrawing_aspect.rb +0 -122
  189. data/lib/shoes/swt/shape.rb +0 -101
  190. data/lib/shoes/swt/shoes_layout.rb +0 -43
  191. data/lib/shoes/swt/slot.rb +0 -25
  192. data/lib/shoes/swt/sound.rb +0 -119
  193. data/lib/shoes/swt/star.rb +0 -51
  194. data/lib/shoes/swt/swt_button.rb +0 -49
  195. data/lib/shoes/swt/text_block.rb +0 -133
  196. data/lib/shoes/swt/text_block_cursor_painter.rb +0 -112
  197. data/lib/shoes/swt/text_block_fitter.rb +0 -180
  198. data/lib/shoes/swt/text_block_painter.rb +0 -49
  199. data/lib/shoes/swt/text_font_factory.rb +0 -27
  200. data/lib/shoes/swt/text_style_factory.rb +0 -88
  201. data/lib/shoes/swt/timer.rb +0 -19
  202. data/lib/shoes/swt/tooling/leak_hunter.rb +0 -84
  203. data/lib/shoes/text.rb +0 -14
  204. data/lib/shoes/text_block.rb +0 -162
  205. data/lib/shoes/timer.rb +0 -10
  206. data/lib/shoes/url.rb +0 -47
  207. data/lib/shoes/widget.rb +0 -73
  208. data/lib/support/jl1.0.1.jar +0 -0
  209. data/lib/support/jogg-0.0.7.jar +0 -0
  210. data/lib/support/jorbis-0.0.15.jar +0 -0
  211. data/lib/support/log4j-1.2.16.jar +0 -0
  212. data/lib/support/mp3spi1.9.5.jar +0 -0
  213. data/lib/support/tritonus_share.jar +0 -0
  214. data/lib/support/vorbisspi1.0.3.jar +0 -0
  215. data/samples/good-clock-adjusted.rb +0 -49
  216. data/spec/async_helper.rb +0 -21
  217. data/spec/code_coverage.rb +0 -11
  218. data/spec/shoes/animation_spec.rb +0 -65
  219. data/spec/shoes/app_spec.rb +0 -411
  220. data/spec/shoes/arc_spec.rb +0 -53
  221. data/spec/shoes/background_spec.rb +0 -48
  222. data/spec/shoes/border_spec.rb +0 -43
  223. data/spec/shoes/builtin_methods_spec.rb +0 -84
  224. data/spec/shoes/button_spec.rb +0 -41
  225. data/spec/shoes/check_spec.rb +0 -31
  226. data/spec/shoes/cli_spec.rb +0 -16
  227. data/spec/shoes/color_spec.rb +0 -396
  228. data/spec/shoes/common/style_normalizer_spec.rb +0 -28
  229. data/spec/shoes/common/style_spec.rb +0 -58
  230. data/spec/shoes/configuration_spec.rb +0 -37
  231. data/spec/shoes/constants_spec.rb +0 -38
  232. data/spec/shoes/dialog_spec.rb +0 -163
  233. data/spec/shoes/dimension_spec.rb +0 -381
  234. data/spec/shoes/dimensions_spec.rb +0 -831
  235. data/spec/shoes/download_spec.rb +0 -133
  236. data/spec/shoes/flow_spec.rb +0 -92
  237. data/spec/shoes/font_spec.rb +0 -38
  238. data/spec/shoes/framework_learning_spec.rb +0 -30
  239. data/spec/shoes/helpers/fake_element.rb +0 -11
  240. data/spec/shoes/helpers/sample17_helper.rb +0 -66
  241. data/spec/shoes/image_spec.rb +0 -45
  242. data/spec/shoes/images/shoe.jpg +0 -0
  243. data/spec/shoes/input_box_spec.rb +0 -44
  244. data/spec/shoes/integration_spec.rb +0 -20
  245. data/spec/shoes/keypress_spec.rb +0 -11
  246. data/spec/shoes/keyrelease_spec.rb +0 -12
  247. data/spec/shoes/line_spec.rb +0 -47
  248. data/spec/shoes/link_spec.rb +0 -89
  249. data/spec/shoes/list_box_spec.rb +0 -63
  250. data/spec/shoes/logger/ruby_spec.rb +0 -9
  251. data/spec/shoes/logger_spec.rb +0 -45
  252. data/spec/shoes/oval_spec.rb +0 -20
  253. data/spec/shoes/point_spec.rb +0 -51
  254. data/spec/shoes/progress_spec.rb +0 -40
  255. data/spec/shoes/radio_spec.rb +0 -28
  256. data/spec/shoes/rect_spec.rb +0 -38
  257. data/spec/shoes/renamed_delegate_spec.rb +0 -70
  258. data/spec/shoes/shape_spec.rb +0 -54
  259. data/spec/shoes/shared_examples/button.rb +0 -6
  260. data/spec/shoes/shared_examples/changeable.rb +0 -26
  261. data/spec/shoes/shared_examples/clickable.rb +0 -5
  262. data/spec/shoes/shared_examples/common_methods.rb +0 -42
  263. data/spec/shoes/shared_examples/dimensions.rb +0 -32
  264. data/spec/shoes/shared_examples/dsl.rb +0 -42
  265. data/spec/shoes/shared_examples/dsl/animate.rb +0 -29
  266. data/spec/shoes/shared_examples/dsl/arc.rb +0 -45
  267. data/spec/shoes/shared_examples/dsl/background.rb +0 -26
  268. data/spec/shoes/shared_examples/dsl/border.rb +0 -10
  269. data/spec/shoes/shared_examples/dsl/cap.rb +0 -6
  270. data/spec/shoes/shared_examples/dsl/check.rb +0 -11
  271. data/spec/shoes/shared_examples/dsl/edit_box.rb +0 -8
  272. data/spec/shoes/shared_examples/dsl/edit_line.rb +0 -8
  273. data/spec/shoes/shared_examples/dsl/editable_element.rb +0 -29
  274. data/spec/shoes/shared_examples/dsl/fill.rb +0 -27
  275. data/spec/shoes/shared_examples/dsl/flow.rb +0 -15
  276. data/spec/shoes/shared_examples/dsl/gradient.rb +0 -52
  277. data/spec/shoes/shared_examples/dsl/image.rb +0 -21
  278. data/spec/shoes/shared_examples/dsl/line.rb +0 -9
  279. data/spec/shoes/shared_examples/dsl/nofill.rb +0 -6
  280. data/spec/shoes/shared_examples/dsl/nostroke.rb +0 -6
  281. data/spec/shoes/shared_examples/dsl/oval.rb +0 -60
  282. data/spec/shoes/shared_examples/dsl/pattern.rb +0 -34
  283. data/spec/shoes/shared_examples/dsl/progress.rb +0 -7
  284. data/spec/shoes/shared_examples/dsl/rect.rb +0 -92
  285. data/spec/shoes/shared_examples/dsl/rgb.rb +0 -26
  286. data/spec/shoes/shared_examples/dsl/shape.rb +0 -21
  287. data/spec/shoes/shared_examples/dsl/star.rb +0 -48
  288. data/spec/shoes/shared_examples/dsl/stroke.rb +0 -30
  289. data/spec/shoes/shared_examples/dsl/strokewidth.rb +0 -19
  290. data/spec/shoes/shared_examples/dsl/style.rb +0 -32
  291. data/spec/shoes/shared_examples/dsl/text_elements.rb +0 -81
  292. data/spec/shoes/shared_examples/dsl_app_context.rb +0 -8
  293. data/spec/shoes/shared_examples/hover_leave.rb +0 -11
  294. data/spec/shoes/shared_examples/parent.rb +0 -6
  295. data/spec/shoes/shared_examples/shared_element_method.rb +0 -52
  296. data/spec/shoes/shared_examples/slot.rb +0 -272
  297. data/spec/shoes/shared_examples/state.rb +0 -19
  298. data/spec/shoes/shared_examples/style.rb +0 -24
  299. data/spec/shoes/slot_spec.rb +0 -60
  300. data/spec/shoes/sound_spec.rb +0 -15
  301. data/spec/shoes/span_spec.rb +0 -94
  302. data/spec/shoes/spec_helper.rb +0 -1
  303. data/spec/shoes/stack_spec.rb +0 -53
  304. data/spec/shoes/star_spec.rb +0 -30
  305. data/spec/shoes/text_block_spec.rb +0 -242
  306. data/spec/shoes/url_spec.rb +0 -66
  307. data/spec/shoes/widget_spec.rb +0 -34
  308. data/spec/shoes_spec.rb +0 -44
  309. data/spec/spec_helper.rb +0 -16
  310. data/spec/swt_shoes/animation_spec.rb +0 -86
  311. data/spec/swt_shoes/app_spec.rb +0 -75
  312. data/spec/swt_shoes/arc_spec.rb +0 -101
  313. data/spec/swt_shoes/background_spec.rb +0 -56
  314. data/spec/swt_shoes/border_spec.rb +0 -51
  315. data/spec/swt_shoes/button_spec.rb +0 -101
  316. data/spec/swt_shoes/check_spec.rb +0 -28
  317. data/spec/swt_shoes/color_spec.rb +0 -67
  318. data/spec/swt_shoes/common/painter_spec.rb +0 -29
  319. data/spec/swt_shoes/configuration_spec.rb +0 -12
  320. data/spec/swt_shoes/dialog_spec.rb +0 -106
  321. data/spec/swt_shoes/disposed_protection_spec.rb +0 -49
  322. data/spec/swt_shoes/fitted_text_layout_collection_spec.rb +0 -174
  323. data/spec/swt_shoes/fitted_text_layout_spec.rb +0 -130
  324. data/spec/swt_shoes/flow_spec.rb +0 -26
  325. data/spec/swt_shoes/font_spec.rb +0 -33
  326. data/spec/swt_shoes/gradient_spec.rb +0 -20
  327. data/spec/swt_shoes/image_pattern_spec.rb +0 -19
  328. data/spec/swt_shoes/image_spec.rb +0 -100
  329. data/spec/swt_shoes/input_box_spec.rb +0 -110
  330. data/spec/swt_shoes/integration_spec.rb +0 -18
  331. data/spec/swt_shoes/key_listener_spec.rb +0 -320
  332. data/spec/swt_shoes/line_spec.rb +0 -43
  333. data/spec/swt_shoes/link_segment_spec.rb +0 -103
  334. data/spec/swt_shoes/link_spec.rb +0 -59
  335. data/spec/swt_shoes/list_box_spec.rb +0 -51
  336. data/spec/swt_shoes/minimal.png +0 -0
  337. data/spec/swt_shoes/mouse_move_listener_spec.rb +0 -129
  338. data/spec/swt_shoes/oval_spec.rb +0 -51
  339. data/spec/swt_shoes/progress_spec.rb +0 -44
  340. data/spec/swt_shoes/radio_group_spec.rb +0 -73
  341. data/spec/swt_shoes/radio_spec.rb +0 -56
  342. data/spec/swt_shoes/rect_painter_spec.rb +0 -45
  343. data/spec/swt_shoes/rect_spec.rb +0 -19
  344. data/spec/swt_shoes/shape_spec.rb +0 -81
  345. data/spec/swt_shoes/shared_examples/button.rb +0 -24
  346. data/spec/swt_shoes/shared_examples/clearable.rb +0 -32
  347. data/spec/swt_shoes/shared_examples/clickable.rb +0 -60
  348. data/spec/swt_shoes/shared_examples/movable.rb +0 -36
  349. data/spec/swt_shoes/shared_examples/paintable_spec.rb +0 -7
  350. data/spec/swt_shoes/shared_examples/painter.rb +0 -83
  351. data/spec/swt_shoes/shared_examples/pattern.rb +0 -32
  352. data/spec/swt_shoes/shared_examples/swt_app_context.rb +0 -17
  353. data/spec/swt_shoes/shared_examples/togglable.rb +0 -15
  354. data/spec/swt_shoes/shell_control_listener_spec.rb +0 -23
  355. data/spec/swt_shoes/sound.rb +0 -10
  356. data/spec/swt_shoes/spec_helper.rb +0 -31
  357. data/spec/swt_shoes/star_spec.rb +0 -47
  358. data/spec/swt_shoes/text_block_cursor_painter_spec.rb +0 -202
  359. data/spec/swt_shoes/text_block_fitter_spec.rb +0 -181
  360. data/spec/swt_shoes/text_block_painter_spec.rb +0 -221
  361. data/spec/swt_shoes/text_block_spec.rb +0 -183
@@ -1,194 +0,0 @@
1
- # Dimensions is a central class that most Shoes classes use to represent their
2
- # dimensions, e.g. where they are and how much space they are taking up there.
3
- # All the different position types might be confusing. So here is a little list:
4
- #
5
- # Position (left, top, right, bottom)
6
- # plain (left, top, right, bottom)
7
- # An offset relative to the parent (parents mostly are slots e.g.
8
- # flows/stacks), e.g it isn't fully positioned/doesn't flow anymore when set
9
- #
10
- # absolute (absolute_left, absolute_top, absolute_right, absolute_bottom)
11
- # The absolute position of an element in the app, set by positioning code (in
12
- # slot.rb). Might not be the beginning of the element as it also takes margins
13
- # into account, so it could be the beginning of the margin. Is also used in
14
- # the positioning code.
15
- #
16
- # element_* (element_left, element_top, element_right, element_bottom)
17
- # Derived from absolute_* but shows the real position of the object, e.g. it
18
- # adds the margins to absolute_* (mostly used by backend drawing code).
19
- #
20
- # Space taken up (width/height)
21
- # plain (width, height)
22
- # The whole space taken up by this element with margins and everything. Used
23
- # for positioning/by the user.
24
- #
25
- # element_* (element_width, element_height)
26
- # Just the space taken up by the element itself without margins.
27
- # Used by drawing.
28
- #
29
- # Note that this is NOT how margins work in the CSS box model. We derive for
30
- # reasons mentioned in this comment/thread:
31
- # https://github.com/shoes/shoes4/pull/467#issuecomment-27655355
32
-
33
- class Shoes
34
- class Dimensions
35
- extend RenamedDelegate
36
-
37
- attr_writer :width, :height, :margin_left, :margin_right, :margin_top,
38
- :margin_bottom, :top, :left, :right, :bottom
39
- attr_reader :parent, :x_dimension, :y_dimension
40
- attr_accessor :absolute_left, :absolute_top,
41
- :displace_left, :displace_top
42
- protected :parent # we shall not mess with parent,see #495
43
-
44
-
45
- # in case you wonder about the -1... it is used to adjust the right and
46
- # bottom values. Because right is not left + width but rather left + width -1
47
- # Let me give you an example:
48
- # Say left is 20 and we have a width of 100 then the right must be 119,
49
- # because you have to take pixel number 20 into account so 20..119 is 100
50
- # while 20..120 is 101. E.g.:
51
- # (20..119).size => 100
52
- PIXEL_COUNTING_ADJUSTMENT = -1
53
-
54
- def initialize(parent, left_or_hash = nil, top = nil, width = nil,
55
- height = nil, opts = {})
56
- @parent = parent
57
- if hash_as_argument?(left_or_hash)
58
- init_with_hash(left_or_hash)
59
- else
60
- init_with_arguments(left_or_hash, top, width, height, opts)
61
- end
62
- end
63
-
64
- def absolute_x_position?
65
- x_dimension.absolute_position?
66
- end
67
-
68
- def absolute_y_position?
69
- y_dimension.absolute_position?
70
- end
71
-
72
- def absolutely_positioned?
73
- absolute_x_position? || absolute_y_position?
74
- end
75
-
76
- def positioned?
77
- x_dimension.positioned? && y_dimension.positioned?
78
- end
79
-
80
- def in_bounds?(x, y)
81
- x_dimension.in_bounds?(x) && y_dimension.in_bounds?(y)
82
- end
83
-
84
- def margin
85
- [margin_left, margin_top, margin_right, margin_bottom]
86
- end
87
-
88
- def margin=(margin)
89
- margin = [margin, margin, margin, margin] unless margin.is_a? Array
90
- self.margin_left, self.margin_top,
91
- self.margin_right, self.margin_bottom = margin
92
- end
93
-
94
- # used by positioning code in slot and there to be overwritten if something
95
- # does not need to be positioned like a background or so
96
- def needs_to_be_positioned?
97
- true
98
- end
99
-
100
- def takes_up_space?
101
- true
102
- end
103
-
104
- def self.setup_delegations
105
- methods_to_rename = Dimension.public_instance_methods false
106
- renamed_delegate_to :x_dimension, methods_to_rename, 'start' => 'left',
107
- 'end' => 'right',
108
- 'extent' => 'width'
109
- renamed_delegate_to :y_dimension, methods_to_rename, 'start' => 'top',
110
- 'end' => 'bottom',
111
- 'extent' => 'height'
112
- end
113
-
114
- setup_delegations
115
-
116
- private
117
- def hash_as_argument?(left)
118
- left.respond_to? :fetch
119
- end
120
-
121
- def init_with_hash(hash)
122
- init_with_arguments hash.fetch(:left, nil), hash.fetch(:top, nil),
123
- hash.fetch(:width, nil), hash.fetch(:height, nil),
124
- hash
125
- end
126
-
127
- def init_with_arguments(left, top, width, height, opts)
128
- @left_top_as_center = opts.fetch(:center, false)
129
- init_x_and_y_dimensions
130
- general_options opts # order important for redrawing
131
- self.displace_left = opts.fetch(:displace_left, nil)
132
- self.displace_top = opts.fetch(:displace_top, nil)
133
- self.left = left
134
- self.top = top
135
- self.width = width
136
- self.height = height
137
- end
138
-
139
- def init_x_and_y_dimensions
140
- parent_x_dimension = @parent? @parent.x_dimension : nil
141
- parent_y_dimension = @parent? @parent.y_dimension : nil
142
- @x_dimension = Dimension.new parent_x_dimension, @left_top_as_center
143
- @y_dimension = Dimension.new parent_y_dimension, @left_top_as_center
144
- end
145
-
146
- def general_options(opts)
147
- self.right = opts[:right]
148
- self.bottom = opts[:bottom]
149
- init_margins opts
150
- end
151
-
152
- def init_margins(opts)
153
- self.margin = opts[:margin]
154
- self.margin_left = opts.fetch(:margin_left, margin_left)
155
- self.margin_top = opts.fetch(:margin_top, margin_top)
156
- self.margin_right = opts.fetch(:margin_right, margin_right)
157
- self.margin_bottom = opts.fetch(:margin_bottom, margin_bottom)
158
- end
159
- end
160
-
161
- # for objects that do not depend on their parent (get 1.04 as real values)
162
- class AbsoluteDimensions < Dimensions
163
- def initialize(*args)
164
- super(nil, *args)
165
- end
166
- end
167
-
168
- # for objects that are more defined by their parents, delegates method calls
169
- # to crucial methods to the parent if the instance variable isn't set
170
- class ParentDimensions < Dimensions
171
- def init_x_and_y_dimensions
172
- @x_dimension = ParentDimension.new @parent.x_dimension,
173
- @left_top_as_center
174
- @y_dimension = ParentDimension.new @parent.y_dimension,
175
- @left_top_as_center
176
- end
177
- end
178
-
179
- # depends on a #dimensions method being present that returns a Dimensions object
180
- module DimensionsDelegations
181
- extend Forwardable
182
-
183
- DELEGATED_METHODS = Dimensions.public_instance_methods false
184
-
185
- def_delegators :dimensions, *DELEGATED_METHODS
186
- end
187
-
188
- # depends on a #dsl method to forward to (e.g. for backend objects)
189
- module BackendDimensionsDelegations
190
- extend Forwardable
191
-
192
- def_delegators :dsl, *DimensionsDelegations::DELEGATED_METHODS
193
- end
194
- end
@@ -1,117 +0,0 @@
1
- class Shoes
2
- class HttpResponse
3
- # Struct might be better?
4
- attr_accessor :headers, :body, :status
5
- def initalize
6
- @headers = {}
7
- @body = ''
8
- @status = []
9
- end
10
- end
11
-
12
- class Download
13
-
14
- attr_reader :progress, :response, :content_length, :gui, :transferred
15
- UPDATE_STEPS = 100
16
-
17
- def initialize(app, parent, url, opts = {}, &blk)
18
- @opts = opts
19
- @blk = blk
20
- @gui = Shoes.configuration.backend_for(self)
21
-
22
- @response = HttpResponse.new
23
- @finished = false
24
- @transferred = 0
25
- @content_length = 1 # non zero initialized to avoid Zero Div Errors
26
- start_download url
27
- end
28
-
29
- def started?
30
- @started
31
- end
32
-
33
- def finished?
34
- @finished
35
- end
36
-
37
- # needed for the specs (jay multi threading and specs)
38
- def join_thread
39
- @thread.join
40
- end
41
-
42
- def percent
43
- @transferred * 100 / @content_length
44
- end
45
-
46
- def abort
47
- @thread.exit if @thread
48
- end
49
-
50
- # shoes 3 compatibility
51
- def length
52
- @content_length
53
- end
54
-
55
- private
56
- def start_download(url)
57
- require 'open-uri'
58
- @thread = Thread.new do
59
- uri_opts = {}
60
- uri_opts[:content_length_proc] = content_length_proc
61
- uri_opts[:progress_proc] = progress_proc if @opts[:progress]
62
-
63
- open url, uri_opts do |download_data|
64
- @response.body = download_data.read
65
- @response.status = download_data.status
66
- @response.headers = download_data.meta
67
- save_to_file(@opts[:save]) if @opts[:save]
68
- finish_download download_data
69
- end
70
- end
71
- end
72
-
73
- def content_length_proc
74
- lambda do |content_length|
75
- download_started(content_length)
76
- eval_block(@opts[:progress], self) if @opts[:progress]
77
- end
78
- end
79
-
80
- def progress_proc
81
- lambda do |size|
82
- if !content_length.nil? &&
83
- (size - self.transferred) > (content_length / UPDATE_STEPS) &&
84
- !@gui.busy?
85
- @gui.busy = true
86
- eval_block(@opts[:progress], self)
87
- @transferred = size
88
- end
89
- end
90
- end
91
-
92
- def finish_download(download_data)
93
- @finished = true
94
-
95
- #In case backend didn't catch the 100%
96
- @transferred = @content_length
97
- eval_block(@opts[:progress], self) if @opts[:progress]
98
-
99
- #:finish and block are the same
100
- eval_block(@blk, self) if @blk
101
- eval_block(@opts[:finish], self) if @opts[:finish]
102
- end
103
-
104
- def eval_block(blk, result)
105
- @gui.eval_block(blk, result)
106
- end
107
-
108
- def save_to_file(file_path)
109
- open(file_path, 'wb') { |fw| fw.print @response.body }
110
- end
111
-
112
- def download_started(content_length)
113
- @content_length = content_length
114
- @started = true
115
- end
116
- end
117
- end
@@ -1,478 +0,0 @@
1
- class Shoes
2
- # Methods for creating and manipulating Shoes elements
3
- #
4
- # Requirements
5
- #
6
- # Including classes must provide:
7
- #
8
- # @__app__
9
- #
10
- # which provides
11
- # #style: a hash of styles
12
- # #element_styles: a hash of {Class => styles}, where styles is
13
- # a hash of default styles for elements of Class,
14
- module DSL
15
- include Common::Style
16
- include Color::DSLHelpers
17
-
18
- # Set default style for elements of a particular class, or for all
19
- # elements, or return the current defaults for all elements
20
- #
21
- # @overload style(klass, styles)
22
- # Set default style for elements of a particular class
23
- # @param [Class] klass a Shoes element class
24
- # @param [Hash] styles default styles for elements of klass
25
- # @example
26
- # style Para, :text_size => 42, :stroke => green
27
- #
28
- # @overload style(styles)
29
- # Set default style for all elements
30
- # @param [Hash] styles default style for all elements
31
- # @example
32
- # style :stroke => alicewhite, :fill => black
33
- #
34
- # @overload style()
35
- # @return [Hash] the default style for all elements
36
- def style(klass_or_styles = nil, styles = {})
37
- if klass_or_styles.kind_of? Class
38
- klass = klass_or_styles
39
- @__app__.element_styles[klass] = styles
40
- else
41
- @__app__.style(klass_or_styles)
42
- end
43
- end
44
-
45
- private
46
-
47
- def style_normalizer
48
- @style_normalizer ||= Common::StyleNormalizer.new
49
- end
50
-
51
- def pop_style(opts)
52
- opts.last.class == Hash ? opts.pop : {}
53
- end
54
-
55
- # Default styles for elements of klass
56
- def style_for_element(klass, styles = {})
57
- @__app__.element_styles.fetch(klass, {}).merge(styles)
58
- end
59
-
60
- def normalize_style_for_element(clazz, texts)
61
- style = style_normalizer.normalize(pop_style(texts))
62
- style_for_element(clazz, style)
63
- end
64
-
65
- def create(element, *args, &blk)
66
- element.new(@__app__, @__app__.current_slot, *args, &blk)
67
- end
68
-
69
- public
70
-
71
- def image(path, opts={}, &blk)
72
- create Shoes::Image, path, opts, blk
73
- end
74
-
75
- def border(color, opts = {}, &blk)
76
- create Shoes::Border, pattern(color), opts, blk
77
- end
78
-
79
- def background(color, opts = {}, &blk)
80
- create Shoes::Background, pattern(color), style_normalizer.normalize(opts), blk
81
- end
82
-
83
- def edit_line(*args, &blk)
84
- style = pop_style(args)
85
- text = args.first || ''
86
- create Shoes::EditLine, text, style, blk
87
- end
88
-
89
- def edit_box(*args, &blk)
90
- style = pop_style(args)
91
- text = args.first || ''
92
- create Shoes::EditBox, text, style, blk
93
- end
94
-
95
- def progress(opts = {}, &blk)
96
- create Shoes::Progress, opts, blk
97
- end
98
-
99
- def check(opts = {}, &blk)
100
- create Shoes::Check, opts, blk
101
- end
102
-
103
- def radio(*args, &blk)
104
- style = pop_style(args)
105
- group = args.first
106
- create Shoes::Radio, group, style, blk
107
- end
108
-
109
- def list_box(opts = {}, &blk)
110
- create Shoes::ListBox, opts, blk
111
- end
112
-
113
- def flow(opts = {}, &blk)
114
- create Shoes::Flow, opts, &blk
115
- end
116
-
117
- def stack(opts = {}, &blk)
118
- create Shoes::Stack, opts, &blk
119
- end
120
-
121
- def button(text, opts={}, &blk)
122
- create Shoes::Button, text, opts, blk
123
- end
124
-
125
- # Creates an animation that runs the given block of code.
126
- #
127
- # @overload animate &blk
128
- # @param [Proc] blk Code to run for each animation frame
129
- # @return [Shoes::Animation]
130
- # Defaults to framerate of 24 frames per second
131
- # @example
132
- # # 24 frames per second
133
- # animate do
134
- # # animation code
135
- # end
136
- # @overload animate(framerate, &blk)
137
- # @param [Integer] framerate Frames per second
138
- # @param [Proc] blk Code to run for each animation frame
139
- # @return [Shoes::Animation]
140
- # @example
141
- # # 10 frames per second
142
- # animate 10 do
143
- # # animation code
144
- # end
145
- # @overload animate(opts = {}, &blk)
146
- # @param [Hash] opts Animation options
147
- # @param [Proc] blk Code to run for each animation frame
148
- # @option opts [Integer] :framerate Frames per second
149
- # @return [Shoes::Animation]
150
- # @example
151
- # # 10 frames per second
152
- # animate :framerate => 10 do
153
- # # animation code
154
- # end
155
- #
156
- def animate(opts = {}, &blk)
157
- opts = {:framerate => opts} unless opts.is_a? Hash
158
- Shoes::Animation.new @__app__, opts, blk
159
- end
160
-
161
- def every(n=1, &blk)
162
- animate 1.0/n, &blk
163
- end
164
-
165
- def timer(n=1, &blk)
166
- n *= 1000
167
- Timer.new @__app__, n, &blk
168
- end
169
-
170
- # similar controls as Shoes::Video (#video)
171
- def sound(soundfile, opts = {}, &blk)
172
- Shoes::Sound.new @__app__, soundfile, opts, &blk
173
- end
174
-
175
- # Creates an arc at (left, top)
176
- #
177
- # @param [Integer] left the x-coordinate of the top-left corner
178
- # @param [Integer] top the y-coordinate of the top-left corner
179
- # @param [Integer] width width of the arc's ellipse
180
- # @param [Integer] height height of the arc's ellipse
181
- # @param [Float] angle1 angle in radians marking the beginning of the arc segment
182
- # @param [Float] angle2 angle in radians marking the end of the arc segment
183
- # @param [Hash] opts Arc style options
184
- # @option opts [Boolean] wedge (false)
185
- # @option opts [Boolean] center (false) is (left, top) the center of the rectangle?
186
- def arc(left, top, width, height, angle1, angle2, opts = {})
187
- arc_style = style_normalizer.normalize(opts)
188
- create Shoes::Arc, left, top, width, height, angle1, angle2, style.merge(arc_style)
189
- end
190
-
191
- # Draws a line from point A (x1,y1) to point B (x2,y2)
192
- #
193
- # @param [Integer] x1 The x-value of point A
194
- # @param [Integer] y1 The y-value of point A
195
- # @param [Integer] x2 The x-value of point B
196
- # @param [Integer] y2 The y-value of point B
197
- # @param [Hash] opts Style options
198
- def line(x1, y1, x2, y2, opts = {})
199
- create Shoes::Line, Shoes::Point.new(x1, y1), Shoes::Point.new(x2, y2), style.merge(opts)
200
- end
201
-
202
- # Creates an oval at (left, top)
203
- #
204
- # @overload oval(left, top, diameter)
205
- # Creates a circle at (left, top), with the given diameter
206
- # @param [Integer] left the x-coordinate of the top-left corner
207
- # @param [Integer] top the y-coordinate of the top-left corner
208
- # @param [Integer] diameter the diameter
209
- # @overload oval(left, top, width, height)
210
- # Creates an oval at (left, top), with the given width and height
211
- # @param [Integer] left the x-coordinate of the top-left corner
212
- # @param [Integer] top the y-coordinate of the top-left corner
213
- # @param [Integer] width the width
214
- # @param [Integer] height the height
215
- # @overload oval(styles)
216
- # Creates an oval using values from the styles Hash.
217
- # @param [Hash] styles
218
- # @option styles [Integer] left (0) the x-coordinate of the top-left corner
219
- # @option styles [Integer] top (0) the y-coordinate of the top-left corner
220
- # @option styles [Integer] width (0) the width
221
- # @option styles [Integer] height (0) the height
222
- # @option styles [Integer] top (0) the y-coordinate of the top-left corner
223
- # @option styles [Boolean] center (false) is (left, top) the center of the oval
224
- def oval(*opts, &blk)
225
- oval_style = style_normalizer.normalize pop_style(opts)
226
- case opts.length
227
- when 3
228
- left, top, width = opts
229
- height = width
230
- when 4
231
- left, top, width, height = opts
232
- when 0
233
- left = oval_style[:left] || 0
234
- top = oval_style[:top] || 0
235
- width = oval_style[:diameter] || oval_style[:width] ||
236
- (oval_style[:radius] || 0) * 2
237
- height = oval_style[:height] || width
238
- else
239
- message = <<EOS
240
- Wrong number of arguments. Must be one of:
241
- - oval(left, top, diameter, [opts])
242
- - oval(left, top, width, height, [opts])
243
- - oval(styles)
244
- EOS
245
- raise ArgumentError, message
246
- end
247
- create Shoes::Oval, left, top, width, height, style.merge(oval_style), &blk
248
- end
249
-
250
- # Creates a rectangle
251
- #
252
- # @overload rect(left, top, side, styles)
253
- # Creates a square at (left, top), with sides of the given length
254
- # @param [Integer] left the x-coordinate of the top-left corner
255
- # @param [Integer] top the y-coordinate of the top-left corner
256
- # @param [Integer] side the length of a side
257
- # @overload rect(left, top, width, height, rounded = 0, styles)
258
- # Creates a rectangle at (left, top), with the given width and height
259
- # @param [Integer] left the x-coordinate of the top-left corner
260
- # @param [Integer] top the y-coordinate of the top-left corner
261
- # @param [Integer] width the width
262
- # @param [Integer] height the height
263
- # @overload rect(styles)
264
- # Creates a rectangle using values from the styles Hash.
265
- # @param [Hash] styles
266
- # @option styles [Integer] left (0) the x-coordinate of the top-left corner
267
- # @option styles [Integer] top (0) the y-coordinate of the top-left corner
268
- # @option styles [Integer] width (0) the width
269
- # @option styles [Integer] height (0) the height
270
- # @option styles [Integer] top (0) the y-coordinate of the top-left corner
271
- # @option styles [Boolean] center (false) is (left, top) the center of the rectangle?
272
- def rect(*args, &blk)
273
- opts = style_normalizer.normalize pop_style(args)
274
- case args.length
275
- when 3
276
- left, top, width = args
277
- height = width
278
- opts[:curve] ||= 0
279
- when 4
280
- left, top, width, height = args
281
- opts[:curve] ||= 0
282
- when 5
283
- left, top, width, height, opts[:curve] = args
284
- when 0
285
- left = opts[:left] || 0
286
- top = opts[:top] || 0
287
- width = opts[:width] || 0
288
- height = opts[:height] || width
289
- opts[:curve] ||= 0
290
- else
291
- message = <<EOS
292
- Wrong number of arguments. Must be one of:
293
- - rect(left, top, side, [opts])
294
- - rect(left, top, width, height, [opts])
295
- - rect(left, top, width, height, curve, [opts])
296
- - rect(styles)
297
- EOS
298
- raise ArgumentError, message
299
- end
300
- create Shoes::Rect, left, top, width, height, style.merge(opts), &blk
301
- end
302
-
303
- def star(left, top, points = 10, outer = 100.0, inner = 50.0, opts = {}, &blk)
304
- opts = style_normalizer.normalize opts
305
- create Shoes::Star, left, top, points, outer, inner, opts, &blk
306
- end
307
-
308
- # Creates a new Shoes::Shape object
309
- def shape(shape_style = {}, &blk)
310
- Shoes::Shape.new(@__app__, @__app__.style.merge(shape_style), blk)
311
- end
312
-
313
- # Sets the current stroke color
314
- #
315
- # Arguments
316
- #
317
- # color - a Shoes::Color
318
- def stroke(color)
319
- @__app__.style[:stroke] = pattern(color)
320
- end
321
-
322
- def nostroke
323
- @__app__.style[:stroke] = nil
324
- end
325
-
326
- # Sets the stroke width, in pixels
327
- def strokewidth(width)
328
- @__app__.style[:strokewidth] = width
329
- end
330
-
331
- # Sets the current fill color
332
- #
333
- # @param [Shoes::Color,Shoes::Gradient] pattern the pattern to set as fill
334
- def fill(pattern)
335
- @__app__.style[:fill] = pattern(pattern)
336
- end
337
-
338
- def nofill
339
- @__app__.style[:fill] = nil
340
- end
341
-
342
- # Sets the current line cap style
343
- def cap(line_cap)
344
- @__app__.style[:cap] = line_cap
345
- end
346
-
347
-
348
-
349
- # Text blocks
350
- # normally constants belong to the top, I put them here because they are
351
- # only used here.
352
- FONT_SIZES = {
353
- banner: 48,
354
- title: 34,
355
- subtitle: 26,
356
- tagline: 18,
357
- caption: 14,
358
- para: 12,
359
- inscription: 10
360
- }.freeze
361
-
362
- %w[banner title subtitle tagline caption para inscription].each do |method|
363
- define_method method do |*texts|
364
- opts = texts.last.class == Hash ? texts.pop : {}
365
- klass = Shoes.const_get(method.capitalize)
366
- create klass, texts, FONT_SIZES[method.to_sym], style_for_element(klass, opts)
367
- end
368
- end
369
-
370
- TEXT_STYLES = {
371
- code: { font: "Lucida Console" },
372
- del: { strikethrough: true },
373
- em: { emphasis: true },
374
- ins: { underline: true },
375
- sub: { rise: -10, size_modifier: 0.8 },
376
- sup: { rise: 10, size_modifier: 0.8 },
377
- strong: { weight: true },
378
- }
379
-
380
- TEXT_STYLES.keys.each do |method|
381
- define_method method do |*texts|
382
- style = style_normalizer.normalize(pop_style(texts))
383
- opts = TEXT_STYLES[method].merge(style)
384
- Shoes::Span.new texts, opts
385
- end
386
- end
387
-
388
- def fg(*texts, color)
389
- Shoes::Span.new texts, { stroke: pattern(color) }
390
- end
391
-
392
- def bg(*texts, color)
393
- Shoes::Span.new texts, { fill: pattern(color) }
394
- end
395
-
396
- def link(*texts, &blk)
397
- opts = normalize_style_for_element(Shoes::Link, texts)
398
- create Shoes::Link, texts, opts, &blk
399
- end
400
-
401
- def span(*texts)
402
- opts = normalize_style_for_element(Shoes::Span, texts)
403
- Shoes::Span.new texts, opts
404
- end
405
-
406
- def mouse
407
- [@__app__.mouse_button, @__app__.mouse_pos[0], @__app__.mouse_pos[1]]
408
- end
409
-
410
- def motion(&blk)
411
- @__app__.mouse_motion << blk
412
- end
413
-
414
- def resize(&blk)
415
- @__app__.add_resize_callback blk
416
- end
417
-
418
- # hover and leave just delegate to the current slot as hover and leave
419
- # are just defined for slots but self is always the app.
420
- def hover(&blk)
421
- @__app__.current_slot.hover(blk)
422
- end
423
-
424
- def leave(&blk)
425
- @__app__.current_slot.leave(blk)
426
- end
427
-
428
- def keypress(&blk)
429
- Shoes::Keypress.new @__app__, &blk
430
- end
431
-
432
- def keyrelease(&blk)
433
- Shoes::Keyrelease.new @__app__, &blk
434
- end
435
-
436
- def append(&blk)
437
- blk.call if blk
438
- end
439
-
440
- def visit(url)
441
- match_data = nil
442
- url_data = Shoes::URL.urls.find {|page, _| match_data = page.match url}
443
- if url_data
444
- action_proc = url_data[1]
445
- url_argument = match_data[1]
446
- clear do
447
- @__app__.location = url
448
- action_proc.call self, url_argument
449
- end
450
- end
451
- timer(0.01) { @__app__.top_slot.contents_alignment }
452
- end
453
-
454
- def scroll_top
455
- @__app__.scroll_top
456
- end
457
-
458
- def scroll_top=(n)
459
- @__app__.scroll_top = n
460
- end
461
-
462
- def clipboard
463
- @__app__.clipboard
464
- end
465
-
466
- def clipboard=(str)
467
- @__app__.clipboard = str
468
- end
469
-
470
- def download(name, args={}, &blk)
471
- create Shoes::Download, name, args, &blk
472
- end
473
-
474
- def gutter
475
- @__app__.gutter
476
- end
477
- end
478
- end