whirled_peas 0.4.1 → 0.8.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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +37 -0
  5. data/README.md +529 -156
  6. data/Rakefile +9 -3
  7. data/bin/reset_cursor +11 -0
  8. data/bin/screen_test +68 -0
  9. data/examples/intro.rb +52 -0
  10. data/examples/scrolling.rb +54 -0
  11. data/lib/whirled_peas.rb +6 -12
  12. data/lib/whirled_peas/animator.rb +5 -0
  13. data/lib/whirled_peas/animator/debug_consumer.rb +17 -0
  14. data/lib/whirled_peas/animator/easing.rb +72 -0
  15. data/lib/whirled_peas/animator/frame.rb +5 -0
  16. data/lib/whirled_peas/animator/frameset.rb +33 -0
  17. data/lib/whirled_peas/animator/producer.rb +35 -0
  18. data/lib/whirled_peas/animator/renderer_consumer.rb +31 -0
  19. data/lib/whirled_peas/command.rb +5 -0
  20. data/lib/whirled_peas/command/base.rb +86 -0
  21. data/lib/whirled_peas/command/config_command.rb +44 -0
  22. data/lib/whirled_peas/command/debug.rb +21 -0
  23. data/lib/whirled_peas/command/fonts.rb +22 -0
  24. data/lib/whirled_peas/command/frame_command.rb +34 -0
  25. data/lib/whirled_peas/command/frames.rb +24 -0
  26. data/lib/whirled_peas/command/help.rb +38 -0
  27. data/lib/whirled_peas/command/play.rb +108 -0
  28. data/lib/whirled_peas/command/record.rb +57 -0
  29. data/lib/whirled_peas/command/still.rb +29 -0
  30. data/lib/whirled_peas/command_line.rb +23 -228
  31. data/lib/whirled_peas/config.rb +56 -6
  32. data/lib/whirled_peas/device.rb +5 -0
  33. data/lib/whirled_peas/device/null_device.rb +8 -0
  34. data/lib/whirled_peas/device/output_file.rb +19 -0
  35. data/lib/whirled_peas/device/screen.rb +26 -0
  36. data/lib/whirled_peas/errors.rb +2 -0
  37. data/lib/whirled_peas/graphics.rb +19 -0
  38. data/lib/whirled_peas/graphics/box_painter.rb +101 -0
  39. data/lib/whirled_peas/graphics/canvas.rb +118 -0
  40. data/lib/whirled_peas/graphics/composer.rb +80 -0
  41. data/lib/whirled_peas/graphics/container_coords.rb +72 -0
  42. data/lib/whirled_peas/graphics/container_dimensions.rb +93 -0
  43. data/lib/whirled_peas/graphics/container_painter.rb +363 -0
  44. data/lib/whirled_peas/graphics/debugger.rb +52 -0
  45. data/lib/whirled_peas/graphics/grid_painter.rb +69 -0
  46. data/lib/whirled_peas/graphics/mock_screen.rb +26 -0
  47. data/lib/whirled_peas/graphics/painter.rb +33 -0
  48. data/lib/whirled_peas/graphics/renderer.rb +32 -0
  49. data/lib/whirled_peas/graphics/text_dimensions.rb +15 -0
  50. data/lib/whirled_peas/graphics/text_painter.rb +40 -0
  51. data/lib/whirled_peas/settings.rb +5 -0
  52. data/lib/whirled_peas/settings/alignment.rb +24 -0
  53. data/lib/whirled_peas/settings/bg_color.rb +24 -0
  54. data/lib/whirled_peas/settings/border.rb +101 -0
  55. data/lib/whirled_peas/settings/box_settings.rb +8 -0
  56. data/lib/whirled_peas/settings/color.rb +68 -0
  57. data/lib/whirled_peas/settings/container_settings.rb +223 -0
  58. data/lib/whirled_peas/settings/debugger.rb +96 -0
  59. data/lib/whirled_peas/settings/display_flow.rb +27 -0
  60. data/lib/whirled_peas/settings/element_settings.rb +61 -0
  61. data/lib/whirled_peas/settings/grid_settings.rb +19 -0
  62. data/lib/whirled_peas/settings/margin.rb +8 -0
  63. data/lib/whirled_peas/settings/padding.rb +8 -0
  64. data/lib/whirled_peas/settings/position.rb +15 -0
  65. data/lib/whirled_peas/settings/scrollbar.rb +15 -0
  66. data/lib/whirled_peas/settings/sizing.rb +19 -0
  67. data/lib/whirled_peas/settings/spacing.rb +58 -0
  68. data/lib/whirled_peas/settings/text_color.rb +21 -0
  69. data/lib/whirled_peas/settings/text_settings.rb +15 -0
  70. data/lib/whirled_peas/settings/vert_alignment.rb +24 -0
  71. data/lib/whirled_peas/utils/ansi.rb +19 -56
  72. data/lib/whirled_peas/utils/file_handler.rb +57 -0
  73. data/lib/whirled_peas/utils/formatted_string.rb +64 -0
  74. data/lib/whirled_peas/utils/title_font.rb +1 -1
  75. data/lib/whirled_peas/version.rb +1 -1
  76. data/screen_test/elements/box.frame +1 -0
  77. data/screen_test/elements/box.rb +20 -0
  78. data/screen_test/elements/grid.frame +1 -0
  79. data/screen_test/elements/grid.rb +13 -0
  80. data/screen_test/elements/screen_overflow_x.frame +1 -0
  81. data/screen_test/elements/screen_overflow_x.rb +9 -0
  82. data/screen_test/elements/screen_overflow_y.frame +1 -0
  83. data/screen_test/elements/screen_overflow_y.rb +9 -0
  84. data/screen_test/elements/text.frame +1 -0
  85. data/screen_test/elements/text.rb +9 -0
  86. data/screen_test/elements/text_multiline.frame +1 -0
  87. data/screen_test/elements/text_multiline.rb +9 -0
  88. data/screen_test/settings/align/box_around.frame +1 -0
  89. data/screen_test/settings/align/box_around.rb +16 -0
  90. data/screen_test/settings/align/box_between.frame +1 -0
  91. data/screen_test/settings/align/box_between.rb +16 -0
  92. data/screen_test/settings/align/box_center.frame +1 -0
  93. data/screen_test/settings/align/box_center.rb +21 -0
  94. data/screen_test/settings/align/box_default.frame +1 -0
  95. data/screen_test/settings/align/box_default.rb +20 -0
  96. data/screen_test/settings/align/box_evenly.frame +1 -0
  97. data/screen_test/settings/align/box_evenly.rb +16 -0
  98. data/screen_test/settings/align/box_left.frame +1 -0
  99. data/screen_test/settings/align/box_left.rb +21 -0
  100. data/screen_test/settings/align/box_right.frame +1 -0
  101. data/screen_test/settings/align/box_right.rb +21 -0
  102. data/screen_test/settings/align/children_center.frame +1 -0
  103. data/screen_test/settings/align/children_center.rb +15 -0
  104. data/screen_test/settings/align/children_left.frame +1 -0
  105. data/screen_test/settings/align/children_left.rb +15 -0
  106. data/screen_test/settings/align/children_right.frame +1 -0
  107. data/screen_test/settings/align/children_right.rb +15 -0
  108. data/screen_test/settings/align/grid_center.frame +1 -0
  109. data/screen_test/settings/align/grid_center.rb +18 -0
  110. data/screen_test/settings/align/grid_default.frame +1 -0
  111. data/screen_test/settings/align/grid_default.rb +17 -0
  112. data/screen_test/settings/align/grid_left.frame +1 -0
  113. data/screen_test/settings/align/grid_left.rb +18 -0
  114. data/screen_test/settings/align/grid_right.frame +1 -0
  115. data/screen_test/settings/align/grid_right.rb +18 -0
  116. data/screen_test/settings/ansi/bold.frame +1 -0
  117. data/screen_test/settings/ansi/bold.rb +14 -0
  118. data/screen_test/settings/ansi/color.frame +1 -0
  119. data/screen_test/settings/ansi/color.rb +37 -0
  120. data/screen_test/settings/ansi/underline.frame +1 -0
  121. data/screen_test/settings/ansi/underline.rb +14 -0
  122. data/screen_test/settings/border.frame +1 -0
  123. data/screen_test/settings/border.rb +13 -0
  124. data/screen_test/settings/flow/box_b2t.frame +1 -0
  125. data/screen_test/settings/flow/box_b2t.rb +26 -0
  126. data/screen_test/settings/flow/box_l2r.frame +1 -0
  127. data/screen_test/settings/flow/box_l2r.rb +26 -0
  128. data/screen_test/settings/flow/box_r2l.frame +1 -0
  129. data/screen_test/settings/flow/box_r2l.rb +26 -0
  130. data/screen_test/settings/flow/box_t2b.frame +1 -0
  131. data/screen_test/settings/flow/box_t2b.rb +26 -0
  132. data/screen_test/settings/flow/grid_b2t.frame +1 -0
  133. data/screen_test/settings/flow/grid_b2t.rb +14 -0
  134. data/screen_test/settings/flow/grid_l2r.frame +1 -0
  135. data/screen_test/settings/flow/grid_l2r.rb +14 -0
  136. data/screen_test/settings/flow/grid_r2l.frame +1 -0
  137. data/screen_test/settings/flow/grid_r2l.rb +14 -0
  138. data/screen_test/settings/flow/grid_t2b.frame +1 -0
  139. data/screen_test/settings/flow/grid_t2b.rb +14 -0
  140. data/screen_test/settings/height/box.frame +1 -0
  141. data/screen_test/settings/height/box.rb +13 -0
  142. data/screen_test/settings/height/box_border_sizing.frame +1 -0
  143. data/screen_test/settings/height/box_border_sizing.rb +15 -0
  144. data/screen_test/settings/height/grid.frame +1 -0
  145. data/screen_test/settings/height/grid.rb +14 -0
  146. data/screen_test/settings/height/overflow_box.frame +1 -0
  147. data/screen_test/settings/height/overflow_box.rb +13 -0
  148. data/screen_test/settings/height/overflow_box_l2r.frame +1 -0
  149. data/screen_test/settings/height/overflow_box_l2r.rb +17 -0
  150. data/screen_test/settings/height/overflow_box_t2b.frame +1 -0
  151. data/screen_test/settings/height/overflow_box_t2b.rb +16 -0
  152. data/screen_test/settings/height/overflow_grid.frame +1 -0
  153. data/screen_test/settings/height/overflow_grid.rb +16 -0
  154. data/screen_test/settings/margin.frame +1 -0
  155. data/screen_test/settings/margin.rb +16 -0
  156. data/screen_test/settings/padding.frame +1 -0
  157. data/screen_test/settings/padding.rb +13 -0
  158. data/screen_test/settings/position/box_left.frame +1 -0
  159. data/screen_test/settings/position/box_left.rb +17 -0
  160. data/screen_test/settings/position/box_left_negative.frame +1 -0
  161. data/screen_test/settings/position/box_left_negative.rb +17 -0
  162. data/screen_test/settings/position/box_top.frame +1 -0
  163. data/screen_test/settings/position/box_top.rb +17 -0
  164. data/screen_test/settings/position/box_top_negative.frame +1 -0
  165. data/screen_test/settings/position/box_top_negative.rb +17 -0
  166. data/screen_test/settings/position/grid_left.frame +1 -0
  167. data/screen_test/settings/position/grid_left.rb +18 -0
  168. data/screen_test/settings/position/grid_left_negative.frame +1 -0
  169. data/screen_test/settings/position/grid_left_negative.rb +18 -0
  170. data/screen_test/settings/position/grid_top.frame +1 -0
  171. data/screen_test/settings/position/grid_top.rb +18 -0
  172. data/screen_test/settings/position/grid_top_negative.frame +1 -0
  173. data/screen_test/settings/position/grid_top_negative.rb +18 -0
  174. data/screen_test/settings/scroll/horiz_box.frame +1 -0
  175. data/screen_test/settings/scroll/horiz_box.rb +17 -0
  176. data/screen_test/settings/scroll/horiz_box_align_center.rb +18 -0
  177. data/screen_test/settings/scroll/horiz_box_align_right.rb +18 -0
  178. data/screen_test/settings/scroll/vert_box.frame +1 -0
  179. data/screen_test/settings/scroll/vert_box.rb +20 -0
  180. data/screen_test/settings/title_font.frame +1 -0
  181. data/screen_test/settings/title_font.rb +12 -0
  182. data/screen_test/settings/valign/box_around.frame +1 -0
  183. data/screen_test/settings/valign/box_around.rb +17 -0
  184. data/screen_test/settings/valign/box_between.frame +1 -0
  185. data/screen_test/settings/valign/box_between.rb +17 -0
  186. data/screen_test/settings/valign/box_bottom.frame +1 -0
  187. data/screen_test/settings/valign/box_bottom.rb +17 -0
  188. data/screen_test/settings/valign/box_default.frame +1 -0
  189. data/screen_test/settings/valign/box_default.rb +16 -0
  190. data/screen_test/settings/valign/box_evenly.frame +1 -0
  191. data/screen_test/settings/valign/box_evenly.rb +17 -0
  192. data/screen_test/settings/valign/box_middle.frame +1 -0
  193. data/screen_test/settings/valign/box_middle.rb +17 -0
  194. data/screen_test/settings/valign/box_top.frame +1 -0
  195. data/screen_test/settings/valign/box_top.rb +17 -0
  196. data/screen_test/settings/valign/grid_bottom.frame +1 -0
  197. data/screen_test/settings/valign/grid_bottom.rb +15 -0
  198. data/screen_test/settings/valign/grid_default.frame +1 -0
  199. data/screen_test/settings/valign/grid_default.rb +14 -0
  200. data/screen_test/settings/valign/grid_middle.frame +1 -0
  201. data/screen_test/settings/valign/grid_middle.rb +15 -0
  202. data/screen_test/settings/valign/grid_top.frame +1 -0
  203. data/screen_test/settings/valign/grid_top.rb +15 -0
  204. data/screen_test/settings/width/box_border_sizing.frame +1 -0
  205. data/screen_test/settings/width/box_border_sizing.rb +15 -0
  206. data/screen_test/settings/width/box_content.frame +1 -0
  207. data/screen_test/settings/width/box_content.rb +15 -0
  208. data/screen_test/settings/width/box_default.frame +1 -0
  209. data/screen_test/settings/width/box_default.rb +14 -0
  210. data/screen_test/settings/width/grid.frame +1 -0
  211. data/screen_test/settings/width/grid.rb +14 -0
  212. data/screen_test/settings/width/overflow_align_center.frame +1 -0
  213. data/screen_test/settings/width/overflow_align_center.rb +14 -0
  214. data/screen_test/settings/width/overflow_align_right.frame +1 -0
  215. data/screen_test/settings/width/overflow_align_right.rb +14 -0
  216. data/screen_test/settings/width/overflow_box.frame +1 -0
  217. data/screen_test/settings/width/overflow_box.rb +13 -0
  218. data/screen_test/settings/width/overflow_box_l2r.frame +1 -0
  219. data/screen_test/settings/width/overflow_box_l2r.rb +16 -0
  220. data/screen_test/settings/width/overflow_box_t2b.frame +1 -0
  221. data/screen_test/settings/width/overflow_box_t2b.rb +17 -0
  222. data/screen_test/settings/width/overflow_grid.frame +1 -0
  223. data/screen_test/settings/width/overflow_grid.rb +14 -0
  224. data/tools/whirled_peas/tools/screen_tester.rb +285 -0
  225. metadata +213 -15
  226. data/bin/title_fonts +0 -6
  227. data/lib/whirled_peas/frame.rb +0 -7
  228. data/lib/whirled_peas/frame/event_loop.rb +0 -91
  229. data/lib/whirled_peas/frame/print_consumer.rb +0 -33
  230. data/lib/whirled_peas/frame/producer.rb +0 -61
  231. data/lib/whirled_peas/template.rb +0 -5
  232. data/lib/whirled_peas/template/element.rb +0 -230
  233. data/lib/whirled_peas/template/settings.rb +0 -530
  234. data/lib/whirled_peas/ui.rb +0 -5
  235. data/lib/whirled_peas/ui/canvas.rb +0 -68
  236. data/lib/whirled_peas/ui/painter.rb +0 -287
  237. data/lib/whirled_peas/ui/screen.rb +0 -63
  238. data/lib/whirled_peas/utils/color.rb +0 -101
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whirled_peas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Collier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-22 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -70,30 +70,228 @@ files:
70
70
  - README.md
71
71
  - Rakefile
72
72
  - bin/console
73
+ - bin/reset_cursor
74
+ - bin/screen_test
73
75
  - bin/setup
74
- - bin/title_fonts
76
+ - examples/intro.rb
77
+ - examples/scrolling.rb
75
78
  - exe/whirled_peas
76
79
  - lib/whirled_peas.rb
80
+ - lib/whirled_peas/animator.rb
81
+ - lib/whirled_peas/animator/debug_consumer.rb
82
+ - lib/whirled_peas/animator/easing.rb
83
+ - lib/whirled_peas/animator/frame.rb
84
+ - lib/whirled_peas/animator/frameset.rb
85
+ - lib/whirled_peas/animator/producer.rb
86
+ - lib/whirled_peas/animator/renderer_consumer.rb
87
+ - lib/whirled_peas/command.rb
88
+ - lib/whirled_peas/command/base.rb
89
+ - lib/whirled_peas/command/config_command.rb
90
+ - lib/whirled_peas/command/debug.rb
91
+ - lib/whirled_peas/command/fonts.rb
92
+ - lib/whirled_peas/command/frame_command.rb
93
+ - lib/whirled_peas/command/frames.rb
94
+ - lib/whirled_peas/command/help.rb
95
+ - lib/whirled_peas/command/play.rb
96
+ - lib/whirled_peas/command/record.rb
97
+ - lib/whirled_peas/command/still.rb
77
98
  - lib/whirled_peas/command_line.rb
78
99
  - lib/whirled_peas/config.rb
100
+ - lib/whirled_peas/device.rb
101
+ - lib/whirled_peas/device/null_device.rb
102
+ - lib/whirled_peas/device/output_file.rb
103
+ - lib/whirled_peas/device/screen.rb
79
104
  - lib/whirled_peas/errors.rb
80
- - lib/whirled_peas/frame.rb
81
- - lib/whirled_peas/frame/event_loop.rb
82
- - lib/whirled_peas/frame/print_consumer.rb
83
- - lib/whirled_peas/frame/producer.rb
105
+ - lib/whirled_peas/graphics.rb
106
+ - lib/whirled_peas/graphics/box_painter.rb
107
+ - lib/whirled_peas/graphics/canvas.rb
108
+ - lib/whirled_peas/graphics/composer.rb
109
+ - lib/whirled_peas/graphics/container_coords.rb
110
+ - lib/whirled_peas/graphics/container_dimensions.rb
111
+ - lib/whirled_peas/graphics/container_painter.rb
112
+ - lib/whirled_peas/graphics/debugger.rb
113
+ - lib/whirled_peas/graphics/grid_painter.rb
114
+ - lib/whirled_peas/graphics/mock_screen.rb
115
+ - lib/whirled_peas/graphics/painter.rb
116
+ - lib/whirled_peas/graphics/renderer.rb
117
+ - lib/whirled_peas/graphics/text_dimensions.rb
118
+ - lib/whirled_peas/graphics/text_painter.rb
84
119
  - lib/whirled_peas/null_logger.rb
85
- - lib/whirled_peas/template.rb
86
- - lib/whirled_peas/template/element.rb
87
- - lib/whirled_peas/template/settings.rb
88
- - lib/whirled_peas/ui.rb
89
- - lib/whirled_peas/ui/canvas.rb
90
- - lib/whirled_peas/ui/painter.rb
91
- - lib/whirled_peas/ui/screen.rb
120
+ - lib/whirled_peas/settings.rb
121
+ - lib/whirled_peas/settings/alignment.rb
122
+ - lib/whirled_peas/settings/bg_color.rb
123
+ - lib/whirled_peas/settings/border.rb
124
+ - lib/whirled_peas/settings/box_settings.rb
125
+ - lib/whirled_peas/settings/color.rb
126
+ - lib/whirled_peas/settings/container_settings.rb
127
+ - lib/whirled_peas/settings/debugger.rb
128
+ - lib/whirled_peas/settings/display_flow.rb
129
+ - lib/whirled_peas/settings/element_settings.rb
130
+ - lib/whirled_peas/settings/grid_settings.rb
131
+ - lib/whirled_peas/settings/margin.rb
132
+ - lib/whirled_peas/settings/padding.rb
133
+ - lib/whirled_peas/settings/position.rb
134
+ - lib/whirled_peas/settings/scrollbar.rb
135
+ - lib/whirled_peas/settings/sizing.rb
136
+ - lib/whirled_peas/settings/spacing.rb
137
+ - lib/whirled_peas/settings/text_color.rb
138
+ - lib/whirled_peas/settings/text_settings.rb
139
+ - lib/whirled_peas/settings/vert_alignment.rb
92
140
  - lib/whirled_peas/utils.rb
93
141
  - lib/whirled_peas/utils/ansi.rb
94
- - lib/whirled_peas/utils/color.rb
142
+ - lib/whirled_peas/utils/file_handler.rb
143
+ - lib/whirled_peas/utils/formatted_string.rb
95
144
  - lib/whirled_peas/utils/title_font.rb
96
145
  - lib/whirled_peas/version.rb
146
+ - screen_test/elements/box.frame
147
+ - screen_test/elements/box.rb
148
+ - screen_test/elements/grid.frame
149
+ - screen_test/elements/grid.rb
150
+ - screen_test/elements/screen_overflow_x.frame
151
+ - screen_test/elements/screen_overflow_x.rb
152
+ - screen_test/elements/screen_overflow_y.frame
153
+ - screen_test/elements/screen_overflow_y.rb
154
+ - screen_test/elements/text.frame
155
+ - screen_test/elements/text.rb
156
+ - screen_test/elements/text_multiline.frame
157
+ - screen_test/elements/text_multiline.rb
158
+ - screen_test/settings/align/box_around.frame
159
+ - screen_test/settings/align/box_around.rb
160
+ - screen_test/settings/align/box_between.frame
161
+ - screen_test/settings/align/box_between.rb
162
+ - screen_test/settings/align/box_center.frame
163
+ - screen_test/settings/align/box_center.rb
164
+ - screen_test/settings/align/box_default.frame
165
+ - screen_test/settings/align/box_default.rb
166
+ - screen_test/settings/align/box_evenly.frame
167
+ - screen_test/settings/align/box_evenly.rb
168
+ - screen_test/settings/align/box_left.frame
169
+ - screen_test/settings/align/box_left.rb
170
+ - screen_test/settings/align/box_right.frame
171
+ - screen_test/settings/align/box_right.rb
172
+ - screen_test/settings/align/children_center.frame
173
+ - screen_test/settings/align/children_center.rb
174
+ - screen_test/settings/align/children_left.frame
175
+ - screen_test/settings/align/children_left.rb
176
+ - screen_test/settings/align/children_right.frame
177
+ - screen_test/settings/align/children_right.rb
178
+ - screen_test/settings/align/grid_center.frame
179
+ - screen_test/settings/align/grid_center.rb
180
+ - screen_test/settings/align/grid_default.frame
181
+ - screen_test/settings/align/grid_default.rb
182
+ - screen_test/settings/align/grid_left.frame
183
+ - screen_test/settings/align/grid_left.rb
184
+ - screen_test/settings/align/grid_right.frame
185
+ - screen_test/settings/align/grid_right.rb
186
+ - screen_test/settings/ansi/bold.frame
187
+ - screen_test/settings/ansi/bold.rb
188
+ - screen_test/settings/ansi/color.frame
189
+ - screen_test/settings/ansi/color.rb
190
+ - screen_test/settings/ansi/underline.frame
191
+ - screen_test/settings/ansi/underline.rb
192
+ - screen_test/settings/border.frame
193
+ - screen_test/settings/border.rb
194
+ - screen_test/settings/flow/box_b2t.frame
195
+ - screen_test/settings/flow/box_b2t.rb
196
+ - screen_test/settings/flow/box_l2r.frame
197
+ - screen_test/settings/flow/box_l2r.rb
198
+ - screen_test/settings/flow/box_r2l.frame
199
+ - screen_test/settings/flow/box_r2l.rb
200
+ - screen_test/settings/flow/box_t2b.frame
201
+ - screen_test/settings/flow/box_t2b.rb
202
+ - screen_test/settings/flow/grid_b2t.frame
203
+ - screen_test/settings/flow/grid_b2t.rb
204
+ - screen_test/settings/flow/grid_l2r.frame
205
+ - screen_test/settings/flow/grid_l2r.rb
206
+ - screen_test/settings/flow/grid_r2l.frame
207
+ - screen_test/settings/flow/grid_r2l.rb
208
+ - screen_test/settings/flow/grid_t2b.frame
209
+ - screen_test/settings/flow/grid_t2b.rb
210
+ - screen_test/settings/height/box.frame
211
+ - screen_test/settings/height/box.rb
212
+ - screen_test/settings/height/box_border_sizing.frame
213
+ - screen_test/settings/height/box_border_sizing.rb
214
+ - screen_test/settings/height/grid.frame
215
+ - screen_test/settings/height/grid.rb
216
+ - screen_test/settings/height/overflow_box.frame
217
+ - screen_test/settings/height/overflow_box.rb
218
+ - screen_test/settings/height/overflow_box_l2r.frame
219
+ - screen_test/settings/height/overflow_box_l2r.rb
220
+ - screen_test/settings/height/overflow_box_t2b.frame
221
+ - screen_test/settings/height/overflow_box_t2b.rb
222
+ - screen_test/settings/height/overflow_grid.frame
223
+ - screen_test/settings/height/overflow_grid.rb
224
+ - screen_test/settings/margin.frame
225
+ - screen_test/settings/margin.rb
226
+ - screen_test/settings/padding.frame
227
+ - screen_test/settings/padding.rb
228
+ - screen_test/settings/position/box_left.frame
229
+ - screen_test/settings/position/box_left.rb
230
+ - screen_test/settings/position/box_left_negative.frame
231
+ - screen_test/settings/position/box_left_negative.rb
232
+ - screen_test/settings/position/box_top.frame
233
+ - screen_test/settings/position/box_top.rb
234
+ - screen_test/settings/position/box_top_negative.frame
235
+ - screen_test/settings/position/box_top_negative.rb
236
+ - screen_test/settings/position/grid_left.frame
237
+ - screen_test/settings/position/grid_left.rb
238
+ - screen_test/settings/position/grid_left_negative.frame
239
+ - screen_test/settings/position/grid_left_negative.rb
240
+ - screen_test/settings/position/grid_top.frame
241
+ - screen_test/settings/position/grid_top.rb
242
+ - screen_test/settings/position/grid_top_negative.frame
243
+ - screen_test/settings/position/grid_top_negative.rb
244
+ - screen_test/settings/scroll/horiz_box.frame
245
+ - screen_test/settings/scroll/horiz_box.rb
246
+ - screen_test/settings/scroll/horiz_box_align_center.rb
247
+ - screen_test/settings/scroll/horiz_box_align_right.rb
248
+ - screen_test/settings/scroll/vert_box.frame
249
+ - screen_test/settings/scroll/vert_box.rb
250
+ - screen_test/settings/title_font.frame
251
+ - screen_test/settings/title_font.rb
252
+ - screen_test/settings/valign/box_around.frame
253
+ - screen_test/settings/valign/box_around.rb
254
+ - screen_test/settings/valign/box_between.frame
255
+ - screen_test/settings/valign/box_between.rb
256
+ - screen_test/settings/valign/box_bottom.frame
257
+ - screen_test/settings/valign/box_bottom.rb
258
+ - screen_test/settings/valign/box_default.frame
259
+ - screen_test/settings/valign/box_default.rb
260
+ - screen_test/settings/valign/box_evenly.frame
261
+ - screen_test/settings/valign/box_evenly.rb
262
+ - screen_test/settings/valign/box_middle.frame
263
+ - screen_test/settings/valign/box_middle.rb
264
+ - screen_test/settings/valign/box_top.frame
265
+ - screen_test/settings/valign/box_top.rb
266
+ - screen_test/settings/valign/grid_bottom.frame
267
+ - screen_test/settings/valign/grid_bottom.rb
268
+ - screen_test/settings/valign/grid_default.frame
269
+ - screen_test/settings/valign/grid_default.rb
270
+ - screen_test/settings/valign/grid_middle.frame
271
+ - screen_test/settings/valign/grid_middle.rb
272
+ - screen_test/settings/valign/grid_top.frame
273
+ - screen_test/settings/valign/grid_top.rb
274
+ - screen_test/settings/width/box_border_sizing.frame
275
+ - screen_test/settings/width/box_border_sizing.rb
276
+ - screen_test/settings/width/box_content.frame
277
+ - screen_test/settings/width/box_content.rb
278
+ - screen_test/settings/width/box_default.frame
279
+ - screen_test/settings/width/box_default.rb
280
+ - screen_test/settings/width/grid.frame
281
+ - screen_test/settings/width/grid.rb
282
+ - screen_test/settings/width/overflow_align_center.frame
283
+ - screen_test/settings/width/overflow_align_center.rb
284
+ - screen_test/settings/width/overflow_align_right.frame
285
+ - screen_test/settings/width/overflow_align_right.rb
286
+ - screen_test/settings/width/overflow_box.frame
287
+ - screen_test/settings/width/overflow_box.rb
288
+ - screen_test/settings/width/overflow_box_l2r.frame
289
+ - screen_test/settings/width/overflow_box_l2r.rb
290
+ - screen_test/settings/width/overflow_box_t2b.frame
291
+ - screen_test/settings/width/overflow_box_t2b.rb
292
+ - screen_test/settings/width/overflow_grid.frame
293
+ - screen_test/settings/width/overflow_grid.rb
294
+ - tools/whirled_peas/tools/screen_tester.rb
97
295
  - whirled_peas.gemspec
98
296
  homepage: https://github.com/tcollier/whirled_peas
99
297
  licenses:
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'whirled_peas'
5
-
6
- WhirledPeas.print_title_fonts
@@ -1,7 +0,0 @@
1
- module WhirledPeas
2
- module Frame
3
- EOF = '__EOF__'
4
- end
5
-
6
- private_constant :Frame
7
- end
@@ -1,91 +0,0 @@
1
- require_relative '../null_logger'
2
- require_relative '../ui/screen'
3
-
4
- module WhirledPeas
5
- module Frame
6
- class EventLoop
7
- LOGGER_ID = 'EVENT LOOP'
8
-
9
- def initialize(template_factory, loading_template_factory, refresh_rate, logger=NullLogger.new)
10
- @template_factory = template_factory
11
- @loading_template_factory = loading_template_factory
12
- @queue = Queue.new
13
- @frame_duration = 1.0 / refresh_rate
14
- @logger = logger
15
- end
16
-
17
- def enqueue(name, duration, args)
18
- # If duration is nil, set it to the duration of a single frame
19
- queue.push([name, duration || frame_duration, args])
20
- end
21
-
22
- def running?
23
- @running
24
- end
25
-
26
- def start(screen=UI::Screen.new)
27
- wait_for_content(screen)
28
- play_content(screen)
29
- rescue
30
- logger.warn(LOGGER_ID) { 'Exiting with error' }
31
- raise
32
- ensure
33
- # We may have exited due to an EOF or a raised exception, set state so that
34
- # instance reflects actual state.
35
- @running = false
36
- screen.finalize if screen
37
- end
38
-
39
- def stop
40
- logger.info(LOGGER_ID) { 'Stopping...' }
41
- enqueue(Frame::EOF, nil, {})
42
- @running = false
43
- end
44
-
45
- private
46
-
47
- attr_reader :template_factory, :loading_template_factory, :queue, :frame_duration, :logger
48
-
49
- def wait_for_content(screen)
50
- if loading_template_factory
51
- play_loading_screen(screen)
52
- else
53
- sleep(frame_duration) while queue.empty?
54
- end
55
- end
56
-
57
- def play_loading_screen(screen)
58
- while queue.empty?
59
- screen.paint(loading_template_factory.build)
60
- sleep(frame_duration)
61
- end
62
- end
63
-
64
- def play_content(screen)
65
- @running = true
66
- template = nil
67
- frame_until = Time.new(0) # Tell the loop to immediately pick up a new frame
68
- while running?
69
- frame_start = Time.now
70
- next_frame_at = frame_start + frame_duration
71
- if frame_until > frame_start
72
- # While we're still displaying the previous frame, refresh the screen
73
- screen.refresh
74
- elsif !queue.empty?
75
- name, duration, args = queue.pop
76
- if name == Frame::EOF
77
- @running = false
78
- else
79
- frame_until = frame_start + duration
80
- template = template_factory.build(name, args)
81
- screen.paint(template)
82
- end
83
- else
84
- wait_for_content(screen)
85
- end
86
- sleep([0, next_frame_at - Time.now].max)
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,33 +0,0 @@
1
- require_relative '../null_logger'
2
-
3
- module WhirledPeas
4
- module Frame
5
- class PrintConsumer
6
- LOGGER_ID = 'EVENT LOOP'
7
-
8
- def initialize(logger=NullLogger.new)
9
- @logger = logger
10
- end
11
-
12
- def enqueue(name, duration, args)
13
- if name == Frame::EOF
14
- puts "EOF frame detected"
15
- else
16
- displayed_for = duration ? "#{duration} second(s)" : '1 frame'
17
- args_str = args.empty? ? '' : " (#{args.inspect})"
18
- puts "Frame '#{name}' displayed for #{displayed_for}#{args_str}"
19
- end
20
- end
21
-
22
- def start
23
- end
24
-
25
- def stop
26
- end
27
-
28
- private
29
-
30
- attr_reader :logger
31
- end
32
- end
33
- end
@@ -1,61 +0,0 @@
1
- require 'socket'
2
- require 'json'
3
-
4
- require_relative '../null_logger'
5
-
6
- module WhirledPeas
7
- module Frame
8
- class Producer
9
- LOGGER_ID = 'PRODUCER'
10
-
11
- # Manages the EventLoop lifecycle and yields a Producer to send frames to the
12
- # EventLoop
13
- def self.produce(consumer, logger=NullLogger.new)
14
- producer = new(consumer, logger)
15
- consumer_thread = Thread.new do
16
- Thread.current.report_on_exception = false
17
- consumer.start
18
- end
19
- yield producer
20
- producer.send_frame(Frame::EOF)
21
- producer.flush
22
- rescue => e
23
- consumer.stop if consumer
24
- logger.warn(LOGGER_ID) { 'Exited with error' }
25
- logger.error(LOGGER_ID) { e }
26
- raise
27
- ensure
28
- consumer_thread.join if consumer_thread
29
- end
30
-
31
- def initialize(consumer, logger=NullLogger.new)
32
- @consumer = consumer
33
- @logger = logger
34
- @queue = Queue.new
35
- end
36
-
37
- # Buffer a frame to be played for the given duration. `#flush` must be called
38
- # for frames to get pushed to the EventLoop.
39
- #
40
- # @param name [String] name of frame, which is passed to #build of the
41
- # TemplateFactory
42
- # @param duration [Float|Integer] duration in seconds the frame should be,
43
- # displayed (default is nil, which results in a duration of a single refresh
44
- # cycle)
45
- # @param args [Hash] key/value pair of arguments, which is passed to #build of
46
- # the TemplateFactory
47
- def send_frame(name, duration: nil, args: {})
48
- queue.push([name, duration, args])
49
- end
50
-
51
- # Send any buffered frames to the EventLoop
52
- def flush
53
- consumer.enqueue(*queue.pop) while !queue.empty?
54
- end
55
-
56
- private
57
-
58
- attr_reader :consumer, :logger, :queue
59
- end
60
- end
61
- end