whirled_peas 0.3.0 → 0.7.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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +38 -0
  4. data/README.md +549 -85
  5. data/Rakefile +28 -3
  6. data/examples/intro.rb +52 -0
  7. data/examples/scrolling.rb +53 -0
  8. data/exe/whirled_peas +7 -0
  9. data/lib/whirled_peas.rb +12 -36
  10. data/lib/whirled_peas/command_line.rb +255 -0
  11. data/lib/whirled_peas/config.rb +21 -0
  12. data/lib/whirled_peas/errors.rb +7 -0
  13. data/lib/whirled_peas/frame.rb +0 -5
  14. data/lib/whirled_peas/frame/consumer.rb +30 -0
  15. data/lib/whirled_peas/frame/debug_consumer.rb +30 -0
  16. data/lib/whirled_peas/frame/event_loop.rb +69 -38
  17. data/lib/whirled_peas/frame/producer.rb +36 -19
  18. data/lib/whirled_peas/graphics.rb +19 -0
  19. data/lib/whirled_peas/graphics/box_painter.rb +101 -0
  20. data/lib/whirled_peas/graphics/canvas.rb +118 -0
  21. data/lib/whirled_peas/graphics/composer.rb +80 -0
  22. data/lib/whirled_peas/graphics/container_coords.rb +72 -0
  23. data/lib/whirled_peas/graphics/container_dimensions.rb +93 -0
  24. data/lib/whirled_peas/graphics/container_painter.rb +272 -0
  25. data/lib/whirled_peas/graphics/debugger.rb +52 -0
  26. data/lib/whirled_peas/graphics/grid_painter.rb +69 -0
  27. data/lib/whirled_peas/graphics/mock_screen.rb +26 -0
  28. data/lib/whirled_peas/graphics/painter.rb +23 -0
  29. data/lib/whirled_peas/graphics/renderer.rb +26 -0
  30. data/lib/whirled_peas/graphics/screen.rb +70 -0
  31. data/lib/whirled_peas/graphics/text_dimensions.rb +15 -0
  32. data/lib/whirled_peas/graphics/text_painter.rb +40 -0
  33. data/lib/whirled_peas/settings.rb +5 -0
  34. data/lib/whirled_peas/settings/alignment.rb +24 -0
  35. data/lib/whirled_peas/settings/bg_color.rb +24 -0
  36. data/lib/whirled_peas/settings/border.rb +101 -0
  37. data/lib/whirled_peas/settings/box_settings.rb +8 -0
  38. data/lib/whirled_peas/settings/color.rb +68 -0
  39. data/lib/whirled_peas/settings/container_settings.rb +223 -0
  40. data/lib/whirled_peas/settings/debugger.rb +96 -0
  41. data/lib/whirled_peas/settings/display_flow.rb +27 -0
  42. data/lib/whirled_peas/settings/element_settings.rb +61 -0
  43. data/lib/whirled_peas/settings/grid_settings.rb +19 -0
  44. data/lib/whirled_peas/settings/margin.rb +8 -0
  45. data/lib/whirled_peas/settings/padding.rb +8 -0
  46. data/lib/whirled_peas/settings/position.rb +15 -0
  47. data/lib/whirled_peas/settings/scrollbar.rb +15 -0
  48. data/lib/whirled_peas/settings/sizing.rb +19 -0
  49. data/lib/whirled_peas/settings/spacing.rb +58 -0
  50. data/lib/whirled_peas/settings/text_color.rb +21 -0
  51. data/lib/whirled_peas/settings/text_settings.rb +15 -0
  52. data/lib/whirled_peas/settings/vert_alignment.rb +24 -0
  53. data/lib/whirled_peas/utils.rb +5 -0
  54. data/lib/whirled_peas/utils/ansi.rb +53 -0
  55. data/lib/whirled_peas/utils/formatted_string.rb +64 -0
  56. data/lib/whirled_peas/utils/title_font.rb +75 -0
  57. data/lib/whirled_peas/version.rb +1 -1
  58. data/screen_test/elements/box.frame +1 -0
  59. data/screen_test/elements/box.rb +20 -0
  60. data/screen_test/elements/grid.frame +1 -0
  61. data/screen_test/elements/grid.rb +13 -0
  62. data/screen_test/elements/screen_overflow_x.frame +1 -0
  63. data/screen_test/elements/screen_overflow_x.rb +9 -0
  64. data/screen_test/elements/screen_overflow_y.frame +1 -0
  65. data/screen_test/elements/screen_overflow_y.rb +9 -0
  66. data/screen_test/elements/text.frame +1 -0
  67. data/screen_test/elements/text.rb +9 -0
  68. data/screen_test/elements/text_multiline.frame +1 -0
  69. data/screen_test/elements/text_multiline.rb +9 -0
  70. data/screen_test/settings/align/box_around.frame +1 -0
  71. data/screen_test/settings/align/box_around.rb +16 -0
  72. data/screen_test/settings/align/box_between.frame +1 -0
  73. data/screen_test/settings/align/box_between.rb +16 -0
  74. data/screen_test/settings/align/box_center.frame +1 -0
  75. data/screen_test/settings/align/box_center.rb +21 -0
  76. data/screen_test/settings/align/box_default.frame +1 -0
  77. data/screen_test/settings/align/box_default.rb +20 -0
  78. data/screen_test/settings/align/box_evenly.frame +1 -0
  79. data/screen_test/settings/align/box_evenly.rb +16 -0
  80. data/screen_test/settings/align/box_left.frame +1 -0
  81. data/screen_test/settings/align/box_left.rb +21 -0
  82. data/screen_test/settings/align/box_right.frame +1 -0
  83. data/screen_test/settings/align/box_right.rb +21 -0
  84. data/screen_test/settings/align/children_center.frame +1 -0
  85. data/screen_test/settings/align/children_center.rb +15 -0
  86. data/screen_test/settings/align/children_left.frame +1 -0
  87. data/screen_test/settings/align/children_left.rb +15 -0
  88. data/screen_test/settings/align/children_right.frame +1 -0
  89. data/screen_test/settings/align/children_right.rb +15 -0
  90. data/screen_test/settings/align/grid_center.frame +1 -0
  91. data/screen_test/settings/align/grid_center.rb +18 -0
  92. data/screen_test/settings/align/grid_default.frame +1 -0
  93. data/screen_test/settings/align/grid_default.rb +17 -0
  94. data/screen_test/settings/align/grid_left.frame +1 -0
  95. data/screen_test/settings/align/grid_left.rb +18 -0
  96. data/screen_test/settings/align/grid_right.frame +1 -0
  97. data/screen_test/settings/align/grid_right.rb +18 -0
  98. data/screen_test/settings/ansi/bold.frame +1 -0
  99. data/screen_test/settings/ansi/bold.rb +14 -0
  100. data/screen_test/settings/ansi/color.frame +1 -0
  101. data/screen_test/settings/ansi/color.rb +37 -0
  102. data/screen_test/settings/ansi/underline.frame +1 -0
  103. data/screen_test/settings/ansi/underline.rb +14 -0
  104. data/screen_test/settings/border.frame +1 -0
  105. data/screen_test/settings/border.rb +13 -0
  106. data/screen_test/settings/flow/box_b2t.frame +1 -0
  107. data/screen_test/settings/flow/box_b2t.rb +26 -0
  108. data/screen_test/settings/flow/box_l2r.frame +1 -0
  109. data/screen_test/settings/flow/box_l2r.rb +26 -0
  110. data/screen_test/settings/flow/box_r2l.frame +1 -0
  111. data/screen_test/settings/flow/box_r2l.rb +26 -0
  112. data/screen_test/settings/flow/box_t2b.frame +1 -0
  113. data/screen_test/settings/flow/box_t2b.rb +26 -0
  114. data/screen_test/settings/flow/grid_b2t.frame +1 -0
  115. data/screen_test/settings/flow/grid_b2t.rb +14 -0
  116. data/screen_test/settings/flow/grid_l2r.frame +1 -0
  117. data/screen_test/settings/flow/grid_l2r.rb +14 -0
  118. data/screen_test/settings/flow/grid_r2l.frame +1 -0
  119. data/screen_test/settings/flow/grid_r2l.rb +14 -0
  120. data/screen_test/settings/flow/grid_t2b.frame +1 -0
  121. data/screen_test/settings/flow/grid_t2b.rb +14 -0
  122. data/screen_test/settings/height/box.frame +1 -0
  123. data/screen_test/settings/height/box.rb +13 -0
  124. data/screen_test/settings/height/box_border_sizing.frame +1 -0
  125. data/screen_test/settings/height/box_border_sizing.rb +15 -0
  126. data/screen_test/settings/height/grid.frame +1 -0
  127. data/screen_test/settings/height/grid.rb +14 -0
  128. data/screen_test/settings/height/overflow_box.frame +1 -0
  129. data/screen_test/settings/height/overflow_box.rb +13 -0
  130. data/screen_test/settings/height/overflow_box_l2r.frame +1 -0
  131. data/screen_test/settings/height/overflow_box_l2r.rb +17 -0
  132. data/screen_test/settings/height/overflow_box_t2b.frame +1 -0
  133. data/screen_test/settings/height/overflow_box_t2b.rb +16 -0
  134. data/screen_test/settings/height/overflow_grid.frame +1 -0
  135. data/screen_test/settings/height/overflow_grid.rb +16 -0
  136. data/screen_test/settings/margin.frame +1 -0
  137. data/screen_test/settings/margin.rb +16 -0
  138. data/screen_test/settings/padding.frame +1 -0
  139. data/screen_test/settings/padding.rb +13 -0
  140. data/screen_test/settings/position/box_left.frame +1 -0
  141. data/screen_test/settings/position/box_left.rb +17 -0
  142. data/screen_test/settings/position/box_left_negative.frame +1 -0
  143. data/screen_test/settings/position/box_left_negative.rb +17 -0
  144. data/screen_test/settings/position/box_top.frame +1 -0
  145. data/screen_test/settings/position/box_top.rb +17 -0
  146. data/screen_test/settings/position/box_top_negative.frame +1 -0
  147. data/screen_test/settings/position/box_top_negative.rb +17 -0
  148. data/screen_test/settings/position/grid_left.frame +1 -0
  149. data/screen_test/settings/position/grid_left.rb +18 -0
  150. data/screen_test/settings/position/grid_left_negative.frame +1 -0
  151. data/screen_test/settings/position/grid_left_negative.rb +18 -0
  152. data/screen_test/settings/position/grid_top.frame +1 -0
  153. data/screen_test/settings/position/grid_top.rb +18 -0
  154. data/screen_test/settings/position/grid_top_negative.frame +1 -0
  155. data/screen_test/settings/position/grid_top_negative.rb +18 -0
  156. data/screen_test/settings/scroll/horiz_box.frame +1 -0
  157. data/screen_test/settings/scroll/horiz_box.rb +17 -0
  158. data/screen_test/settings/scroll/horiz_box_align_center.rb +18 -0
  159. data/screen_test/settings/scroll/horiz_box_align_right.rb +18 -0
  160. data/screen_test/settings/scroll/vert_box.frame +1 -0
  161. data/screen_test/settings/scroll/vert_box.rb +20 -0
  162. data/screen_test/settings/title_font.frame +1 -0
  163. data/screen_test/settings/title_font.rb +12 -0
  164. data/screen_test/settings/valign/box_around.frame +1 -0
  165. data/screen_test/settings/valign/box_around.rb +17 -0
  166. data/screen_test/settings/valign/box_between.frame +1 -0
  167. data/screen_test/settings/valign/box_between.rb +17 -0
  168. data/screen_test/settings/valign/box_bottom.frame +1 -0
  169. data/screen_test/settings/valign/box_bottom.rb +17 -0
  170. data/screen_test/settings/valign/box_default.frame +1 -0
  171. data/screen_test/settings/valign/box_default.rb +16 -0
  172. data/screen_test/settings/valign/box_evenly.frame +1 -0
  173. data/screen_test/settings/valign/box_evenly.rb +17 -0
  174. data/screen_test/settings/valign/box_middle.frame +1 -0
  175. data/screen_test/settings/valign/box_middle.rb +17 -0
  176. data/screen_test/settings/valign/box_top.frame +1 -0
  177. data/screen_test/settings/valign/box_top.rb +17 -0
  178. data/screen_test/settings/valign/grid_bottom.frame +1 -0
  179. data/screen_test/settings/valign/grid_bottom.rb +15 -0
  180. data/screen_test/settings/valign/grid_default.frame +1 -0
  181. data/screen_test/settings/valign/grid_default.rb +14 -0
  182. data/screen_test/settings/valign/grid_middle.frame +1 -0
  183. data/screen_test/settings/valign/grid_middle.rb +15 -0
  184. data/screen_test/settings/valign/grid_top.frame +1 -0
  185. data/screen_test/settings/valign/grid_top.rb +15 -0
  186. data/screen_test/settings/width/box_border_sizing.frame +1 -0
  187. data/screen_test/settings/width/box_border_sizing.rb +15 -0
  188. data/screen_test/settings/width/box_content.frame +1 -0
  189. data/screen_test/settings/width/box_content.rb +15 -0
  190. data/screen_test/settings/width/box_default.frame +1 -0
  191. data/screen_test/settings/width/box_default.rb +14 -0
  192. data/screen_test/settings/width/grid.frame +1 -0
  193. data/screen_test/settings/width/grid.rb +14 -0
  194. data/screen_test/settings/width/overflow_align_center.frame +1 -0
  195. data/screen_test/settings/width/overflow_align_center.rb +14 -0
  196. data/screen_test/settings/width/overflow_align_right.frame +1 -0
  197. data/screen_test/settings/width/overflow_align_right.rb +14 -0
  198. data/screen_test/settings/width/overflow_box.frame +1 -0
  199. data/screen_test/settings/width/overflow_box.rb +13 -0
  200. data/screen_test/settings/width/overflow_box_l2r.frame +1 -0
  201. data/screen_test/settings/width/overflow_box_l2r.rb +16 -0
  202. data/screen_test/settings/width/overflow_box_t2b.frame +1 -0
  203. data/screen_test/settings/width/overflow_box_t2b.rb +17 -0
  204. data/screen_test/settings/width/overflow_grid.frame +1 -0
  205. data/screen_test/settings/width/overflow_grid.rb +14 -0
  206. data/tools/whirled_peas/tools/screen_tester.rb +233 -0
  207. data/whirled_peas.gemspec +4 -1
  208. metadata +215 -17
  209. data/lib/whirled_peas/ui.rb +0 -7
  210. data/lib/whirled_peas/ui/ansi.rb +0 -103
  211. data/lib/whirled_peas/ui/canvas.rb +0 -68
  212. data/lib/whirled_peas/ui/color.rb +0 -101
  213. data/lib/whirled_peas/ui/element.rb +0 -224
  214. data/lib/whirled_peas/ui/painter.rb +0 -283
  215. data/lib/whirled_peas/ui/screen.rb +0 -60
  216. data/lib/whirled_peas/ui/settings.rb +0 -523
  217. data/sandbox/auto.rb +0 -13
  218. data/sandbox/box.rb +0 -19
  219. data/sandbox/grid.rb +0 -13
  220. data/sandbox/sandbox.rb +0 -17
  221. data/sandbox/text.rb +0 -33
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.3.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Collier
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-21 00:00:00.000000000 Z
11
+ date: 2021-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -38,10 +38,25 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby_figlet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.6'
41
55
  description:
42
56
  email:
43
57
  - tcollier@gmail.com
44
- executables: []
58
+ executables:
59
+ - whirled_peas
45
60
  extensions: []
46
61
  extra_rdoc_files: []
47
62
  files:
@@ -56,25 +71,208 @@ files:
56
71
  - Rakefile
57
72
  - bin/console
58
73
  - bin/setup
74
+ - examples/intro.rb
75
+ - examples/scrolling.rb
76
+ - exe/whirled_peas
59
77
  - lib/whirled_peas.rb
78
+ - lib/whirled_peas/command_line.rb
79
+ - lib/whirled_peas/config.rb
80
+ - lib/whirled_peas/errors.rb
60
81
  - lib/whirled_peas/frame.rb
82
+ - lib/whirled_peas/frame/consumer.rb
83
+ - lib/whirled_peas/frame/debug_consumer.rb
61
84
  - lib/whirled_peas/frame/event_loop.rb
62
85
  - lib/whirled_peas/frame/producer.rb
86
+ - lib/whirled_peas/graphics.rb
87
+ - lib/whirled_peas/graphics/box_painter.rb
88
+ - lib/whirled_peas/graphics/canvas.rb
89
+ - lib/whirled_peas/graphics/composer.rb
90
+ - lib/whirled_peas/graphics/container_coords.rb
91
+ - lib/whirled_peas/graphics/container_dimensions.rb
92
+ - lib/whirled_peas/graphics/container_painter.rb
93
+ - lib/whirled_peas/graphics/debugger.rb
94
+ - lib/whirled_peas/graphics/grid_painter.rb
95
+ - lib/whirled_peas/graphics/mock_screen.rb
96
+ - lib/whirled_peas/graphics/painter.rb
97
+ - lib/whirled_peas/graphics/renderer.rb
98
+ - lib/whirled_peas/graphics/screen.rb
99
+ - lib/whirled_peas/graphics/text_dimensions.rb
100
+ - lib/whirled_peas/graphics/text_painter.rb
63
101
  - lib/whirled_peas/null_logger.rb
64
- - lib/whirled_peas/ui.rb
65
- - lib/whirled_peas/ui/ansi.rb
66
- - lib/whirled_peas/ui/canvas.rb
67
- - lib/whirled_peas/ui/color.rb
68
- - lib/whirled_peas/ui/element.rb
69
- - lib/whirled_peas/ui/painter.rb
70
- - lib/whirled_peas/ui/screen.rb
71
- - lib/whirled_peas/ui/settings.rb
102
+ - lib/whirled_peas/settings.rb
103
+ - lib/whirled_peas/settings/alignment.rb
104
+ - lib/whirled_peas/settings/bg_color.rb
105
+ - lib/whirled_peas/settings/border.rb
106
+ - lib/whirled_peas/settings/box_settings.rb
107
+ - lib/whirled_peas/settings/color.rb
108
+ - lib/whirled_peas/settings/container_settings.rb
109
+ - lib/whirled_peas/settings/debugger.rb
110
+ - lib/whirled_peas/settings/display_flow.rb
111
+ - lib/whirled_peas/settings/element_settings.rb
112
+ - lib/whirled_peas/settings/grid_settings.rb
113
+ - lib/whirled_peas/settings/margin.rb
114
+ - lib/whirled_peas/settings/padding.rb
115
+ - lib/whirled_peas/settings/position.rb
116
+ - lib/whirled_peas/settings/scrollbar.rb
117
+ - lib/whirled_peas/settings/sizing.rb
118
+ - lib/whirled_peas/settings/spacing.rb
119
+ - lib/whirled_peas/settings/text_color.rb
120
+ - lib/whirled_peas/settings/text_settings.rb
121
+ - lib/whirled_peas/settings/vert_alignment.rb
122
+ - lib/whirled_peas/utils.rb
123
+ - lib/whirled_peas/utils/ansi.rb
124
+ - lib/whirled_peas/utils/formatted_string.rb
125
+ - lib/whirled_peas/utils/title_font.rb
72
126
  - lib/whirled_peas/version.rb
73
- - sandbox/auto.rb
74
- - sandbox/box.rb
75
- - sandbox/grid.rb
76
- - sandbox/sandbox.rb
77
- - sandbox/text.rb
127
+ - screen_test/elements/box.frame
128
+ - screen_test/elements/box.rb
129
+ - screen_test/elements/grid.frame
130
+ - screen_test/elements/grid.rb
131
+ - screen_test/elements/screen_overflow_x.frame
132
+ - screen_test/elements/screen_overflow_x.rb
133
+ - screen_test/elements/screen_overflow_y.frame
134
+ - screen_test/elements/screen_overflow_y.rb
135
+ - screen_test/elements/text.frame
136
+ - screen_test/elements/text.rb
137
+ - screen_test/elements/text_multiline.frame
138
+ - screen_test/elements/text_multiline.rb
139
+ - screen_test/settings/align/box_around.frame
140
+ - screen_test/settings/align/box_around.rb
141
+ - screen_test/settings/align/box_between.frame
142
+ - screen_test/settings/align/box_between.rb
143
+ - screen_test/settings/align/box_center.frame
144
+ - screen_test/settings/align/box_center.rb
145
+ - screen_test/settings/align/box_default.frame
146
+ - screen_test/settings/align/box_default.rb
147
+ - screen_test/settings/align/box_evenly.frame
148
+ - screen_test/settings/align/box_evenly.rb
149
+ - screen_test/settings/align/box_left.frame
150
+ - screen_test/settings/align/box_left.rb
151
+ - screen_test/settings/align/box_right.frame
152
+ - screen_test/settings/align/box_right.rb
153
+ - screen_test/settings/align/children_center.frame
154
+ - screen_test/settings/align/children_center.rb
155
+ - screen_test/settings/align/children_left.frame
156
+ - screen_test/settings/align/children_left.rb
157
+ - screen_test/settings/align/children_right.frame
158
+ - screen_test/settings/align/children_right.rb
159
+ - screen_test/settings/align/grid_center.frame
160
+ - screen_test/settings/align/grid_center.rb
161
+ - screen_test/settings/align/grid_default.frame
162
+ - screen_test/settings/align/grid_default.rb
163
+ - screen_test/settings/align/grid_left.frame
164
+ - screen_test/settings/align/grid_left.rb
165
+ - screen_test/settings/align/grid_right.frame
166
+ - screen_test/settings/align/grid_right.rb
167
+ - screen_test/settings/ansi/bold.frame
168
+ - screen_test/settings/ansi/bold.rb
169
+ - screen_test/settings/ansi/color.frame
170
+ - screen_test/settings/ansi/color.rb
171
+ - screen_test/settings/ansi/underline.frame
172
+ - screen_test/settings/ansi/underline.rb
173
+ - screen_test/settings/border.frame
174
+ - screen_test/settings/border.rb
175
+ - screen_test/settings/flow/box_b2t.frame
176
+ - screen_test/settings/flow/box_b2t.rb
177
+ - screen_test/settings/flow/box_l2r.frame
178
+ - screen_test/settings/flow/box_l2r.rb
179
+ - screen_test/settings/flow/box_r2l.frame
180
+ - screen_test/settings/flow/box_r2l.rb
181
+ - screen_test/settings/flow/box_t2b.frame
182
+ - screen_test/settings/flow/box_t2b.rb
183
+ - screen_test/settings/flow/grid_b2t.frame
184
+ - screen_test/settings/flow/grid_b2t.rb
185
+ - screen_test/settings/flow/grid_l2r.frame
186
+ - screen_test/settings/flow/grid_l2r.rb
187
+ - screen_test/settings/flow/grid_r2l.frame
188
+ - screen_test/settings/flow/grid_r2l.rb
189
+ - screen_test/settings/flow/grid_t2b.frame
190
+ - screen_test/settings/flow/grid_t2b.rb
191
+ - screen_test/settings/height/box.frame
192
+ - screen_test/settings/height/box.rb
193
+ - screen_test/settings/height/box_border_sizing.frame
194
+ - screen_test/settings/height/box_border_sizing.rb
195
+ - screen_test/settings/height/grid.frame
196
+ - screen_test/settings/height/grid.rb
197
+ - screen_test/settings/height/overflow_box.frame
198
+ - screen_test/settings/height/overflow_box.rb
199
+ - screen_test/settings/height/overflow_box_l2r.frame
200
+ - screen_test/settings/height/overflow_box_l2r.rb
201
+ - screen_test/settings/height/overflow_box_t2b.frame
202
+ - screen_test/settings/height/overflow_box_t2b.rb
203
+ - screen_test/settings/height/overflow_grid.frame
204
+ - screen_test/settings/height/overflow_grid.rb
205
+ - screen_test/settings/margin.frame
206
+ - screen_test/settings/margin.rb
207
+ - screen_test/settings/padding.frame
208
+ - screen_test/settings/padding.rb
209
+ - screen_test/settings/position/box_left.frame
210
+ - screen_test/settings/position/box_left.rb
211
+ - screen_test/settings/position/box_left_negative.frame
212
+ - screen_test/settings/position/box_left_negative.rb
213
+ - screen_test/settings/position/box_top.frame
214
+ - screen_test/settings/position/box_top.rb
215
+ - screen_test/settings/position/box_top_negative.frame
216
+ - screen_test/settings/position/box_top_negative.rb
217
+ - screen_test/settings/position/grid_left.frame
218
+ - screen_test/settings/position/grid_left.rb
219
+ - screen_test/settings/position/grid_left_negative.frame
220
+ - screen_test/settings/position/grid_left_negative.rb
221
+ - screen_test/settings/position/grid_top.frame
222
+ - screen_test/settings/position/grid_top.rb
223
+ - screen_test/settings/position/grid_top_negative.frame
224
+ - screen_test/settings/position/grid_top_negative.rb
225
+ - screen_test/settings/scroll/horiz_box.frame
226
+ - screen_test/settings/scroll/horiz_box.rb
227
+ - screen_test/settings/scroll/horiz_box_align_center.rb
228
+ - screen_test/settings/scroll/horiz_box_align_right.rb
229
+ - screen_test/settings/scroll/vert_box.frame
230
+ - screen_test/settings/scroll/vert_box.rb
231
+ - screen_test/settings/title_font.frame
232
+ - screen_test/settings/title_font.rb
233
+ - screen_test/settings/valign/box_around.frame
234
+ - screen_test/settings/valign/box_around.rb
235
+ - screen_test/settings/valign/box_between.frame
236
+ - screen_test/settings/valign/box_between.rb
237
+ - screen_test/settings/valign/box_bottom.frame
238
+ - screen_test/settings/valign/box_bottom.rb
239
+ - screen_test/settings/valign/box_default.frame
240
+ - screen_test/settings/valign/box_default.rb
241
+ - screen_test/settings/valign/box_evenly.frame
242
+ - screen_test/settings/valign/box_evenly.rb
243
+ - screen_test/settings/valign/box_middle.frame
244
+ - screen_test/settings/valign/box_middle.rb
245
+ - screen_test/settings/valign/box_top.frame
246
+ - screen_test/settings/valign/box_top.rb
247
+ - screen_test/settings/valign/grid_bottom.frame
248
+ - screen_test/settings/valign/grid_bottom.rb
249
+ - screen_test/settings/valign/grid_default.frame
250
+ - screen_test/settings/valign/grid_default.rb
251
+ - screen_test/settings/valign/grid_middle.frame
252
+ - screen_test/settings/valign/grid_middle.rb
253
+ - screen_test/settings/valign/grid_top.frame
254
+ - screen_test/settings/valign/grid_top.rb
255
+ - screen_test/settings/width/box_border_sizing.frame
256
+ - screen_test/settings/width/box_border_sizing.rb
257
+ - screen_test/settings/width/box_content.frame
258
+ - screen_test/settings/width/box_content.rb
259
+ - screen_test/settings/width/box_default.frame
260
+ - screen_test/settings/width/box_default.rb
261
+ - screen_test/settings/width/grid.frame
262
+ - screen_test/settings/width/grid.rb
263
+ - screen_test/settings/width/overflow_align_center.frame
264
+ - screen_test/settings/width/overflow_align_center.rb
265
+ - screen_test/settings/width/overflow_align_right.frame
266
+ - screen_test/settings/width/overflow_align_right.rb
267
+ - screen_test/settings/width/overflow_box.frame
268
+ - screen_test/settings/width/overflow_box.rb
269
+ - screen_test/settings/width/overflow_box_l2r.frame
270
+ - screen_test/settings/width/overflow_box_l2r.rb
271
+ - screen_test/settings/width/overflow_box_t2b.frame
272
+ - screen_test/settings/width/overflow_box_t2b.rb
273
+ - screen_test/settings/width/overflow_grid.frame
274
+ - screen_test/settings/width/overflow_grid.rb
275
+ - tools/whirled_peas/tools/screen_tester.rb
78
276
  - whirled_peas.gemspec
79
277
  homepage: https://github.com/tcollier/whirled_peas
80
278
  licenses:
@@ -1,7 +0,0 @@
1
- require_relative 'ui/element'
2
- require_relative 'ui/screen'
3
-
4
- module WhirledPeas
5
- module UI
6
- end
7
- end
@@ -1,103 +0,0 @@
1
- module WhirledPeas
2
- module UI
3
- # Helper module for working with ANSI escape codes. The most useful ANSI escape codes
4
- # relate to text formatting.
5
- #
6
- # @see https://en.wikipedia.org/wiki/ANSI_escape_code
7
- module Ansi
8
- ESC = "\033"
9
-
10
- # Text formatting constants
11
- BOLD = 1
12
- UNDERLINE = 4
13
-
14
- # Text and background color constants
15
- BLACK = 30
16
- RED = 31
17
- GREEN = 32
18
- YELLOW = 33
19
- BLUE = 34
20
- MAGENTA = 35
21
- CYAN = 36
22
- WHITE = 37
23
-
24
- END_FORMATTING = 0
25
- private_constant :END_FORMATTING
26
-
27
- class << self
28
- def cursor_pos(top: 0, left: 0)
29
- "#{ESC}[#{top + 1};#{left + 1}H"
30
- end
31
-
32
- def cursor_visible(visible)
33
- visible ? "#{ESC}[?25h" : "#{ESC}[?25l"
34
- end
35
-
36
- def clear_down
37
- "#{ESC}[J"
38
- end
39
-
40
- # Format the string with the ANSI escapes codes for the given integer codes
41
- #
42
- # @param str [String] the string to format
43
- # @param codes [Array<Integer>] the integer part of the ANSI escape code (see
44
- # constants in this module for codes and meanings)
45
- def format(str, codes)
46
- if str.empty? || codes.length == 0
47
- str
48
- else
49
- start_formatting = codes.map(&method(:esc_seq)).join
50
- "#{start_formatting}#{str}#{esc_seq(END_FORMATTING)}"
51
- end
52
- end
53
-
54
- def clear
55
- esc_seq(END_FORMATTING)
56
- end
57
-
58
- # If the string has unclosed formatting, add the end formatting characters to
59
- # the end of the string
60
- def close_formatting(str)
61
- codes = str.scan(/#{ESC}\[(\d+)m/)
62
- if codes.length > 0 && codes.last[0] != END_FORMATTING.to_s
63
- "#{str}#{esc_seq(END_FORMATTING)}"
64
- else
65
- str
66
- end
67
- end
68
-
69
- # Return a substring of the input string that preservse the formatting
70
- #
71
- # @param str [String] the (possibly formatted) string
72
- # @param first_visible_character [Integer] the index of the first character to
73
- # include in the substring (ignoring all hidden formatting characters)
74
- # @param num_visible_chars [Integer] the maximum number of visible characters to
75
- # include in the substring (ignoring all hidden formatting characters)
76
- def substring(str, first_visible_character, num_visible_chars)
77
- substr = ''
78
- is_visible = true
79
- visible_index = 0
80
- substr_visible_len = 0
81
- str.chars.each do |char|
82
- in_substring = (visible_index >= first_visible_character)
83
- is_visible = false if is_visible && char == ESC
84
- visible_index += 1 if is_visible
85
- if !is_visible || in_substring
86
- substr += char
87
- substr_visible_len += 1 if is_visible
88
- end
89
- is_visible = true if !is_visible && char == 'm'
90
- break if substr_visible_len == num_visible_chars
91
- end
92
- close_formatting(substr)
93
- end
94
-
95
- private
96
-
97
- def esc_seq(code)
98
- "#{ESC}[#{code}m"
99
- end
100
- end
101
- end
102
- end
103
- end
@@ -1,68 +0,0 @@
1
- require_relative 'ansi'
2
-
3
- module WhirledPeas
4
- module UI
5
- # Canvas represent the area of the screen a painter can paint on.
6
- class Canvas
7
- # A Stroke is a single line, formatted string of characters that is painted at
8
- # a given position on a Canvas. This class is not meant to be instantiated
9
- # directly. Instead, use Canvas#stroke to create a new Stroke.
10
- class Stroke
11
- attr_reader :left, :top, :chars
12
-
13
- def initialize(left, top, chars)
14
- @left = left
15
- @top = top
16
- @chars = chars
17
- end
18
-
19
- def hash
20
- [left, top, chars].hash
21
- end
22
-
23
- def ==(other)
24
- other.is_a?(self.class) && self.hash == other.hash
25
- end
26
-
27
- def inspect
28
- "Stroke(left=#{left}, top=#{top}, chars=#{chars})"
29
- end
30
-
31
- alias_method :eq?, :==
32
- end
33
- private_constant :Stroke
34
-
35
- EMPTY_STROKE = Stroke.new(nil, nil, nil)
36
-
37
- attr_reader :left, :top, :width, :height
38
-
39
- def initialize(left, top, width, height)
40
- @left = left
41
- @top = top
42
- @width = width
43
- @height = height
44
- end
45
-
46
- # Return a new Stroke instance, verifying only characters within the canvas
47
- # are included in the stroke.
48
- def stroke(left, top, chars)
49
- if left >= self.left + self.width || left + chars.length <= self.left
50
- EMPTY_STROKE
51
- elsif top < self.top || top >= self.top + self.height
52
- EMPTY_STROKE
53
- else
54
- if left < self.left
55
- chars = chars[self.left - left..-1]
56
- left = self.left
57
- end
58
- num_chars = [self.left + self.width, left + chars.length].min - left
59
- Stroke.new(left, top, Ansi.substring(chars, 0, num_chars))
60
- end
61
- end
62
-
63
- def inspect
64
- "Canvas(left=#{left}, top=#{top}, width=#{width}, height=#{height})"
65
- end
66
- end
67
- end
68
- end
@@ -1,101 +0,0 @@
1
- require_relative 'ansi'
2
-
3
- module WhirledPeas
4
- module UI
5
- # An abstract class that encapsulates colors for a specific use case
6
- class Color
7
- # The ANSI codes for bright colors are offset by this much from their
8
- # standard versions
9
- BRIGHT_OFFSET = 60
10
- private_constant :BRIGHT_OFFSET
11
-
12
- # Validate the `color` argument is either (1) nil, (2) a valid Color constant in
13
- # this class or (3) a symbol that maps to valid Color constant. E.g. if there
14
- # is a RED constant in an implementing class, then :red or :bright_red are
15
- # valid values for `color`
16
- #
17
- # @param color [Color|Symbol]
18
- # @return [Color|Symbol] the value passed in if valid, otherwise an ArgumentError
19
- # is raised.
20
- def self.validate!(color)
21
- return unless color
22
- if color.is_a?(Symbol)
23
- error_message = "Unsupported #{self.name.split('::').last}: #{color.inspect}"
24
- match = color.to_s.match(/^(bright_)?(\w+)$/)
25
- begin
26
- color = self.const_get(match[2].upcase)
27
- raise ArgumentError, error_message unless color.is_a?(Color)
28
- if match[1]
29
- raise ArgumentError, error_message if color.bright?
30
- color.bright
31
- else
32
- color
33
- end
34
- rescue NameError
35
- raise ArgumentError, error_message
36
- end
37
- else
38
- color
39
- end
40
- end
41
-
42
- def initialize(code, bright=false)
43
- @code = code
44
- @bright = bright
45
- end
46
-
47
- def bright?
48
- @bright
49
- end
50
-
51
- def bright
52
- bright? ? self : self.class.new(@code + BRIGHT_OFFSET, true)
53
- end
54
-
55
- def hash
56
- [@code, @bright].hash
57
- end
58
-
59
- def ==(other)
60
- other.is_a?(self.class) && self.hash == other.hash
61
- end
62
- alias_method :eq?, :==
63
-
64
- def to_s
65
- @code.to_s
66
- end
67
-
68
- def inspect
69
- "#{self.class.name.split('::').last}(code=#{@code}, bright=#{@bright})"
70
- end
71
- end
72
- private_constant :Color
73
-
74
- class BgColor < Color
75
- BG_OFFSET = 10
76
- private_constant :BG_OFFSET
77
-
78
- BLACK = new(Ansi::BLACK + BG_OFFSET)
79
- RED = new(Ansi::RED + BG_OFFSET)
80
- GREEN = new(Ansi::GREEN + BG_OFFSET)
81
- YELLOW = new(Ansi::YELLOW + BG_OFFSET)
82
- BLUE = new(Ansi::BLUE + BG_OFFSET)
83
- MAGENTA = new(Ansi::MAGENTA + BG_OFFSET)
84
- CYAN = new(Ansi::CYAN + BG_OFFSET)
85
- WHITE = new(Ansi::WHITE + BG_OFFSET)
86
- GRAY = BLACK.bright
87
- end
88
-
89
- class TextColor < Color
90
- BLACK = new(Ansi::BLACK)
91
- RED = new(Ansi::RED)
92
- GREEN = new(Ansi::GREEN)
93
- YELLOW = new(Ansi::YELLOW)
94
- BLUE = new(Ansi::BLUE)
95
- MAGENTA = new(Ansi::MAGENTA)
96
- CYAN = new(Ansi::CYAN)
97
- WHITE = new(Ansi::WHITE)
98
- GRAY = BLACK.bright
99
- end
100
- end
101
- end