whirled_peas 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +62 -29
  5. data/Rakefile +3 -2
  6. data/examples/intro.rb +52 -0
  7. data/examples/scrolling.rb +53 -0
  8. data/lib/whirled_peas.rb +2 -8
  9. data/lib/whirled_peas/command_line.rb +25 -33
  10. data/lib/whirled_peas/graphics/box_painter.rb +9 -1
  11. data/lib/whirled_peas/graphics/composer.rb +80 -0
  12. data/lib/whirled_peas/graphics/container_coords.rb +18 -8
  13. data/lib/whirled_peas/graphics/container_dimensions.rb +17 -7
  14. data/lib/whirled_peas/graphics/container_painter.rb +151 -33
  15. data/lib/whirled_peas/graphics/debugger.rb +10 -1
  16. data/lib/whirled_peas/graphics/grid_painter.rb +14 -2
  17. data/lib/whirled_peas/graphics/mock_screen.rb +1 -1
  18. data/lib/whirled_peas/graphics/painter.rb +1 -6
  19. data/lib/whirled_peas/graphics/renderer.rb +1 -29
  20. data/lib/whirled_peas/graphics/screen.rb +8 -3
  21. data/lib/whirled_peas/graphics/text_painter.rb +6 -4
  22. data/lib/whirled_peas/settings/container_settings.rb +11 -0
  23. data/lib/whirled_peas/settings/debugger.rb +9 -0
  24. data/lib/whirled_peas/settings/grid_settings.rb +4 -0
  25. data/lib/whirled_peas/settings/scrollbar.rb +15 -0
  26. data/lib/whirled_peas/version.rb +1 -1
  27. data/screen_test/rendered/elements/box.frame +1 -1
  28. data/screen_test/rendered/elements/grid.frame +1 -1
  29. data/screen_test/rendered/elements/screen_overflow.frame +1 -0
  30. data/screen_test/rendered/elements/text.frame +1 -1
  31. data/screen_test/rendered/elements/text_multiline.frame +1 -1
  32. data/screen_test/rendered/settings/align/box.frame +1 -1
  33. data/screen_test/rendered/settings/align/box.rb +14 -10
  34. data/screen_test/rendered/settings/align/children_center.frame +1 -1
  35. data/screen_test/rendered/settings/align/children_left.frame +1 -1
  36. data/screen_test/rendered/settings/align/children_right.frame +1 -1
  37. data/screen_test/rendered/settings/align/grid.frame +1 -1
  38. data/screen_test/rendered/settings/ansi/bold.frame +1 -1
  39. data/screen_test/rendered/settings/ansi/color.frame +1 -1
  40. data/screen_test/rendered/settings/ansi/underline.frame +1 -1
  41. data/screen_test/rendered/settings/border.frame +1 -1
  42. data/screen_test/rendered/settings/flow/box_b2t.frame +1 -0
  43. data/screen_test/rendered/settings/flow/box_b2t.rb +24 -0
  44. data/screen_test/rendered/settings/flow/{l2r.frame → box_l2r.frame} +1 -1
  45. data/screen_test/rendered/settings/flow/{l2r.rb → box_l2r.rb} +0 -0
  46. data/screen_test/rendered/settings/flow/box_r2l.frame +1 -0
  47. data/screen_test/rendered/settings/flow/box_r2l.rb +24 -0
  48. data/screen_test/rendered/settings/flow/{t2b.frame → box_t2b.frame} +1 -1
  49. data/screen_test/rendered/settings/flow/{t2b.rb → box_t2b.rb} +0 -0
  50. data/screen_test/rendered/settings/flow/grid_b2t.frame +1 -0
  51. data/screen_test/rendered/settings/flow/grid_b2t.rb +14 -0
  52. data/screen_test/rendered/settings/flow/grid_l2r.frame +1 -0
  53. data/screen_test/rendered/settings/flow/grid_l2r.rb +14 -0
  54. data/screen_test/rendered/settings/flow/grid_r2l.frame +1 -0
  55. data/screen_test/rendered/settings/flow/grid_r2l.rb +14 -0
  56. data/screen_test/rendered/settings/flow/grid_t2b.frame +1 -0
  57. data/screen_test/rendered/settings/flow/grid_t2b.rb +14 -0
  58. data/screen_test/rendered/settings/height/box.frame +1 -1
  59. data/screen_test/rendered/settings/height/grid.frame +1 -1
  60. data/screen_test/rendered/settings/height/overflow_box.frame +1 -1
  61. data/screen_test/rendered/settings/height/overflow_box_l2r.frame +1 -1
  62. data/screen_test/rendered/settings/height/overflow_box_t2b.frame +1 -1
  63. data/screen_test/rendered/settings/height/overflow_grid.frame +1 -1
  64. data/screen_test/rendered/settings/margin.frame +1 -1
  65. data/screen_test/rendered/settings/padding.frame +1 -1
  66. data/screen_test/rendered/settings/position/box_left.frame +1 -1
  67. data/screen_test/rendered/settings/position/box_left_negative.frame +1 -1
  68. data/screen_test/rendered/settings/position/box_top.frame +1 -1
  69. data/screen_test/rendered/settings/position/box_top_negative.frame +1 -1
  70. data/screen_test/rendered/settings/position/grid_left.frame +1 -1
  71. data/screen_test/rendered/settings/position/grid_left_negative.frame +1 -1
  72. data/screen_test/rendered/settings/position/grid_top.frame +1 -1
  73. data/screen_test/rendered/settings/position/grid_top_negative.frame +1 -1
  74. data/screen_test/rendered/settings/scroll/horiz_box.frame +1 -0
  75. data/screen_test/rendered/settings/scroll/horiz_box.rb +15 -0
  76. data/screen_test/rendered/settings/scroll/vert_box.frame +1 -0
  77. data/screen_test/rendered/settings/scroll/vert_box.rb +18 -0
  78. data/screen_test/rendered/settings/title_font.frame +1 -1
  79. data/screen_test/rendered/settings/width/box.frame +1 -1
  80. data/screen_test/rendered/settings/width/grid.frame +1 -1
  81. data/screen_test/rendered/settings/width/overflow_box.frame +1 -1
  82. data/screen_test/rendered/settings/width/overflow_box_l2r.frame +1 -1
  83. data/screen_test/rendered/settings/width/overflow_box_t2b.frame +1 -1
  84. data/screen_test/rendered/settings/width/overflow_grid.frame +1 -1
  85. data/screen_test/screen_tester.rb +13 -3
  86. metadata +27 -16
  87. data/bin/debug +0 -35
  88. data/lib/whirled_peas/debugger.rb +0 -80
  89. data/lib/whirled_peas/template.rb +0 -5
  90. data/lib/whirled_peas/template/box_element.rb +0 -8
  91. data/lib/whirled_peas/template/composer.rb +0 -68
  92. data/lib/whirled_peas/template/container.rb +0 -28
  93. data/lib/whirled_peas/template/debugger.rb +0 -34
  94. data/lib/whirled_peas/template/element.rb +0 -13
  95. data/lib/whirled_peas/template/grid_element.rb +0 -8
  96. data/lib/whirled_peas/template/text_element.rb +0 -24
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :l2r
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :r2l
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :t2b
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1 +1 @@
1
- [?25l┏━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━┛MultiLine[?25h
1
+ [?25l┏━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━┛MultiLine[?25h
@@ -1 +1 @@
1
- [?25l┏━┳━┳━┳━┓┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┗━┻━┻━┻━┛0123456789[?25h
1
+ [?25l┏━┳━┳━┳━┓┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┗━┻━┻━┻━┛0123456789[?25h
@@ -1 +1 @@
1
- [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
1
+ [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
@@ -1 +1 @@
1
- [?25l┏━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━┛012340123401234[?25h
1
+ [?25l┏━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━┛012340123401234[?25h
@@ -1 +1 @@
1
- [?25l┏━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━┛XOXOXOXOXO[?25h
1
+ [?25l┏━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━┛XOXOXOXOXO[?25h
@@ -1 +1 @@
1
- [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
1
+ [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━┓┃ ┃┗━━━━━━━━━┛Inner Box[?25h
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━┓┃ ┃┗━━━━━━━━━┛Inner Box[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━┛Padded Room[?25h
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━┛Padded Room[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━┃ ┃ ┃ ┃ ┃ ┗━━━123223333443543[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━┃ ┃ ┃ ┃ ┃ ┗━━━123223333443543[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛━━━┓ ┃ ┃ ┃ ┃ ┃━━━┛345344333322321[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛━━━┓ ┃ ┃ ┃ ┃ ┃━━━┛345344333322321[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━━━┓┃ ┃┃ ┃┃ ┃123452234433333[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━━━┓┃ ┃┃ ┃┃ ┃123452234433333[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┃ ┃┃ ┃┃ ┃┗━━━━━┛333334432254321[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┃ ┃┃ ┃┃ ┃┗━━━━━┛333334432254321[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━┃ ┣━━━┃ ┣━━━┃ ┣━━━┃ ┣━━━┃ ┗━━━123223333443543[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━┃ ┣━━━┃ ┣━━━┃ ┣━━━┃ ┣━━━┃ ┗━━━123223333443543[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛━━━┓ ┃━━━┫ ┃━━━┫ ┃━━━┫ ┃━━━┫ ┃━━━┛345344333322321[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛━━━┓ ┃━━━┫ ┃━━━┫ ┃━━━┫ ┃━━━┫ ┃━━━┛345344333322321[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━━━┓┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃12345223443333344322[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┏━━━━━┓┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃12345223443333344322[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┗━━━━━┛22344333334432254321[?25h
1
+ [?25l┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┣━━━━━┫┃ ┃┗━━━━━┛22344333334432254321[?25h
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━┓┃ ┃┃▗▖ ┃┗━━━━━┛EFGHI[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.full_border
7
+ settings.set_scrollbar(horiz: true)
8
+ settings.width = 5
9
+ composer.add_box('Inner') do |composer, settings|
10
+ settings.set_position(left: -4)
11
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┓┃ ▗┃┃ ▝┃┃ ┃┃ ┃┃ ┃┗━━┛EFGHI[?25h
@@ -0,0 +1,18 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.full_border
7
+ settings.set_scrollbar(vert: true)
8
+ settings.height = 5
9
+ composer.add_box('Inner') do |composer, settings|
10
+ settings.flow = :t2b
11
+ settings.set_position(top: -4)
12
+ 26.times do |i|
13
+ composer.add_text { ('A'.ord + i).chr }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1 +1 @@
1
- [?25l████████╗███████╗███████╗████████╗╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝ ██║ █████╗ ███████╗ ██║  ██║ ██╔══╝ ╚════██║ ██║  ██║ ███████╗███████║ ██║  ╚═╝ ╚══════╝╚══════╝ ╚═╝ [?25h
1
+ [?25l████████╗███████╗███████╗████████╗╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝ ██║ █████╗ ███████╗ ██║  ██║ ██╔══╝ ╚════██║ ██║  ██║ ███████╗███████║ ██║  ╚═╝ ╚══════╝╚══════╝ ╚═╝ [?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?[?25h
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?How big is it?How big is it?How big is it?How big is it?How big is it?[?25h
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?How big is it?How big is it?How big is it?How big is it?How big is it?[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?25h
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛0|0|1|0|1|[?25h
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛0|0|1|0|1|[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━┛XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO[?25h
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━┛XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO[?25h
@@ -1 +1 @@
1
- [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?25h
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?25h
@@ -10,11 +10,16 @@ require 'whirled_peas/utils/formatted_string'
10
10
 
11
11
  module WhirledPeas
12
12
  class ScreenTester
13
+ SCREEN_WIDTH = 80
14
+ SCREEN_HEIGHT = 32
15
+
13
16
  def self.run_all
14
17
  base_dir = File.dirname(__FILE__)
15
18
  test_files = Dir.glob(File.join(base_dir, 'rendered', '**', '*.rb'))
16
19
  failures = {}
17
20
  pendings = Set.new
21
+ puts "Running #{test_files.length} rendered screen test(s)"
22
+ puts
18
23
  test_files.each do |file|
19
24
  tester = new(file)
20
25
  if tester.pending?
@@ -87,10 +92,15 @@ module WhirledPeas
87
92
  end
88
93
 
89
94
  def debug
95
+ with_template_factory do |template_factory|
96
+ render_screen(template_factory, StringIO.new)
97
+ end
98
+ end
99
+
100
+ def template
90
101
  with_template_factory do |template_factory|
91
102
  template = template_factory.build('Test', {})
92
- painter = Graphics::Renderer.new(template, *Graphics::Screen.current_dimensions).painter
93
- puts Graphics::Debugger.new(painter).debug
103
+ puts Graphics::Debugger.new(template).debug
94
104
  end
95
105
  end
96
106
 
@@ -179,7 +189,7 @@ module WhirledPeas
179
189
  end
180
190
 
181
191
  def render_screen(template_factory, output)
182
- screen = Graphics::Screen.new(output)
192
+ screen = Graphics::Screen.new(output: output, width: SCREEN_WIDTH, height: SCREEN_HEIGHT)
183
193
  consumer = Frame::EventLoop.new(
184
194
  template_factory, screen: screen, refresh_rate: 100000
185
195
  )
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.5.0
4
+ version: 0.6.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-25 00:00:00.000000000 Z
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -70,13 +70,13 @@ files:
70
70
  - README.md
71
71
  - Rakefile
72
72
  - bin/console
73
- - bin/debug
74
73
  - bin/setup
74
+ - examples/intro.rb
75
+ - examples/scrolling.rb
75
76
  - exe/whirled_peas
76
77
  - lib/whirled_peas.rb
77
78
  - lib/whirled_peas/command_line.rb
78
79
  - lib/whirled_peas/config.rb
79
- - lib/whirled_peas/debugger.rb
80
80
  - lib/whirled_peas/errors.rb
81
81
  - lib/whirled_peas/frame.rb
82
82
  - lib/whirled_peas/frame/consumer.rb
@@ -86,6 +86,7 @@ files:
86
86
  - lib/whirled_peas/graphics.rb
87
87
  - lib/whirled_peas/graphics/box_painter.rb
88
88
  - lib/whirled_peas/graphics/canvas.rb
89
+ - lib/whirled_peas/graphics/composer.rb
89
90
  - lib/whirled_peas/graphics/container_coords.rb
90
91
  - lib/whirled_peas/graphics/container_dimensions.rb
91
92
  - lib/whirled_peas/graphics/container_painter.rb
@@ -111,18 +112,11 @@ files:
111
112
  - lib/whirled_peas/settings/margin.rb
112
113
  - lib/whirled_peas/settings/padding.rb
113
114
  - lib/whirled_peas/settings/position.rb
115
+ - lib/whirled_peas/settings/scrollbar.rb
114
116
  - lib/whirled_peas/settings/spacing.rb
115
117
  - lib/whirled_peas/settings/text_align.rb
116
118
  - lib/whirled_peas/settings/text_color.rb
117
119
  - lib/whirled_peas/settings/text_settings.rb
118
- - lib/whirled_peas/template.rb
119
- - lib/whirled_peas/template/box_element.rb
120
- - lib/whirled_peas/template/composer.rb
121
- - lib/whirled_peas/template/container.rb
122
- - lib/whirled_peas/template/debugger.rb
123
- - lib/whirled_peas/template/element.rb
124
- - lib/whirled_peas/template/grid_element.rb
125
- - lib/whirled_peas/template/text_element.rb
126
120
  - lib/whirled_peas/utils.rb
127
121
  - lib/whirled_peas/utils/ansi.rb
128
122
  - lib/whirled_peas/utils/formatted_string.rb
@@ -132,6 +126,7 @@ files:
132
126
  - screen_test/rendered/elements/box.rb
133
127
  - screen_test/rendered/elements/grid.frame
134
128
  - screen_test/rendered/elements/grid.rb
129
+ - screen_test/rendered/elements/screen_overflow.frame
135
130
  - screen_test/rendered/elements/screen_overflow.rb
136
131
  - screen_test/rendered/elements/text.frame
137
132
  - screen_test/rendered/elements/text.rb
@@ -155,10 +150,22 @@ files:
155
150
  - screen_test/rendered/settings/ansi/underline.rb
156
151
  - screen_test/rendered/settings/border.frame
157
152
  - screen_test/rendered/settings/border.rb
158
- - screen_test/rendered/settings/flow/l2r.frame
159
- - screen_test/rendered/settings/flow/l2r.rb
160
- - screen_test/rendered/settings/flow/t2b.frame
161
- - screen_test/rendered/settings/flow/t2b.rb
153
+ - screen_test/rendered/settings/flow/box_b2t.frame
154
+ - screen_test/rendered/settings/flow/box_b2t.rb
155
+ - screen_test/rendered/settings/flow/box_l2r.frame
156
+ - screen_test/rendered/settings/flow/box_l2r.rb
157
+ - screen_test/rendered/settings/flow/box_r2l.frame
158
+ - screen_test/rendered/settings/flow/box_r2l.rb
159
+ - screen_test/rendered/settings/flow/box_t2b.frame
160
+ - screen_test/rendered/settings/flow/box_t2b.rb
161
+ - screen_test/rendered/settings/flow/grid_b2t.frame
162
+ - screen_test/rendered/settings/flow/grid_b2t.rb
163
+ - screen_test/rendered/settings/flow/grid_l2r.frame
164
+ - screen_test/rendered/settings/flow/grid_l2r.rb
165
+ - screen_test/rendered/settings/flow/grid_r2l.frame
166
+ - screen_test/rendered/settings/flow/grid_r2l.rb
167
+ - screen_test/rendered/settings/flow/grid_t2b.frame
168
+ - screen_test/rendered/settings/flow/grid_t2b.rb
162
169
  - screen_test/rendered/settings/height/box.frame
163
170
  - screen_test/rendered/settings/height/box.rb
164
171
  - screen_test/rendered/settings/height/grid.frame
@@ -191,6 +198,10 @@ files:
191
198
  - screen_test/rendered/settings/position/grid_top.rb
192
199
  - screen_test/rendered/settings/position/grid_top_negative.frame
193
200
  - screen_test/rendered/settings/position/grid_top_negative.rb
201
+ - screen_test/rendered/settings/scroll/horiz_box.frame
202
+ - screen_test/rendered/settings/scroll/horiz_box.rb
203
+ - screen_test/rendered/settings/scroll/vert_box.frame
204
+ - screen_test/rendered/settings/scroll/vert_box.rb
194
205
  - screen_test/rendered/settings/title_font.frame
195
206
  - screen_test/rendered/settings/title_font.rb
196
207
  - screen_test/rendered/settings/width/box.frame
data/bin/debug DELETED
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- def print_usage
4
- puts "Usage: #{$0} <config file> [options]"
5
- puts
6
- puts 'options include'
7
- puts ' --disable-screen Disable the screen (useful when printing debug statements)'
8
- puts ' --painter Print the painter debug tree and exit'
9
- puts ' --template Print the template debug tree and exit'
10
- end
11
-
12
- if !(1..2).include?(ARGV.length)
13
- print_usage
14
- exit(1)
15
- elsif !File.exist?(ARGV.first)
16
- puts "File not found: #{ARGV.first}"
17
- print_usage
18
- exit(1)
19
- elsif ARGV.length == 2 && !%w[--disable-screen --template --painter].include?(ARGV[1])
20
- puts "Unrecognized option: #{ARGV[1]}"
21
- print_usage
22
- exit(1)
23
- end
24
-
25
- require 'bundler/setup'
26
- require 'whirled_peas'
27
-
28
- if ARGV.length == 1
29
- option = nil
30
- else
31
- option = ARGV[1].sub(/^--/, '').gsub(/-/, '_').to_sym
32
- end
33
-
34
- template_file = ARGV.first[0] == '/' ? ARGV.first : File.join(Dir.pwd, ARGV.first)
35
- WhirledPeas.debug(template_file, option)
@@ -1,80 +0,0 @@
1
- require 'whirled_peas/frame/event_loop'
2
- require 'whirled_peas/frame/producer'
3
- require 'whirled_peas/graphics/debugger'
4
- require 'whirled_peas/graphics/mock_screen'
5
- require 'whirled_peas/graphics/renderer'
6
- require 'whirled_peas/graphics/screen'
7
- require 'whirled_peas/template/debugger'
8
-
9
- module WhirledPeas
10
- class Debugger
11
- module Option
12
- DISABLE_SCREEN = :disable_screen
13
- PAINTER = :painter
14
- TEMPLATE = :template
15
-
16
- VALID = [DISABLE_SCREEN, PAINTER, TEMPLATE]
17
- end
18
- private_constant :Option
19
-
20
- FRAME = 'debug'
21
- private_constant :FRAME
22
-
23
- def initialize(template_file, option=nil)
24
- unless option.nil? || Option::VALID.include?(option)
25
- message =
26
- "Invalid option: #{option}, expecting one of #{Option::VALID.join(', ')}"
27
- raise ArgumentError, message
28
- end
29
- @template_file = template_file
30
- @option = option
31
- end
32
-
33
- def debug
34
- require template_file
35
- template_factory = TemplateFactory.new
36
- if play_frame?
37
- screen = if disable_screen?
38
- Graphics::MockScreen.new(80, 40)
39
- else
40
- Graphics::Screen.new
41
- end
42
- consumer = Frame::EventLoop.new(template_factory, screen: screen)
43
- Frame::Producer.produce(consumer) do |producer|
44
- producer.send_frame(FRAME, args: {})
45
- end
46
- return
47
- end
48
-
49
- template = template_factory.build(FRAME, {})
50
- if print_painter?
51
- painter = Graphics::Renderer.new(template, *Graphics::Screen.current_dimensions).painter
52
- puts Graphics::Debugger.new(painter).debug
53
- elsif print_template?
54
- puts Template::Debugger.new(template).debug
55
- end
56
- end
57
-
58
- private
59
-
60
- attr_reader :template_file, :option
61
-
62
- def play_frame?
63
- option.nil? || option == Option::DISABLE_SCREEN
64
- end
65
-
66
- def disable_screen?
67
- !option.nil? && option == Option::DISABLE_SCREEN
68
- end
69
-
70
- def print_painter?
71
- !option.nil? && option == Option::PAINTER
72
- end
73
-
74
- def print_template?
75
- !option.nil? && option == Option::TEMPLATE
76
- end
77
- end
78
-
79
- private_constant :Debugger
80
- end