shoes-core 4.0.0.pre12 → 4.0.0.rc1

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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/bin/shoes-picker +1 -0
  3. data/fonts/FiraMono.otf +0 -0
  4. data/lib/shoes.rb +1 -0
  5. data/lib/shoes/animation.rb +1 -0
  6. data/lib/shoes/app.rb +4 -3
  7. data/lib/shoes/arc.rb +3 -0
  8. data/lib/shoes/arrow.rb +34 -2
  9. data/lib/shoes/background.rb +1 -0
  10. data/lib/shoes/border.rb +1 -0
  11. data/lib/shoes/builtin_methods.rb +2 -1
  12. data/lib/shoes/button.rb +1 -0
  13. data/lib/shoes/check_button.rb +1 -0
  14. data/lib/shoes/color.rb +7 -6
  15. data/lib/shoes/color/dsl.rb +1 -0
  16. data/lib/shoes/color/dsl_helpers.rb +1 -0
  17. data/lib/shoes/color/hex_converter.rb +1 -0
  18. data/lib/shoes/common/art_element.rb +5 -0
  19. data/lib/shoes/common/attachable.rb +1 -0
  20. data/lib/shoes/common/background_element.rb +5 -0
  21. data/lib/shoes/common/changeable.rb +1 -0
  22. data/lib/shoes/common/clickable.rb +1 -0
  23. data/lib/shoes/common/fill.rb +1 -0
  24. data/lib/shoes/common/focus.rb +9 -0
  25. data/lib/shoes/common/hover.rb +8 -7
  26. data/lib/shoes/common/image_handling.rb +1 -0
  27. data/lib/shoes/common/inspect.rb +1 -0
  28. data/lib/shoes/common/link_finder.rb +1 -0
  29. data/lib/shoes/common/positioning.rb +1 -0
  30. data/lib/shoes/common/registration.rb +1 -0
  31. data/lib/shoes/common/remove.rb +2 -2
  32. data/lib/shoes/common/rotate.rb +1 -0
  33. data/lib/shoes/common/safely_evaluate.rb +1 -0
  34. data/lib/shoes/common/state.rb +1 -0
  35. data/lib/shoes/common/stroke.rb +1 -0
  36. data/lib/shoes/common/style.rb +3 -1
  37. data/lib/shoes/common/style_normalizer.rb +1 -0
  38. data/lib/shoes/common/translate.rb +1 -0
  39. data/lib/shoes/common/ui_element.rb +24 -0
  40. data/lib/shoes/common/visibility.rb +21 -1
  41. data/lib/shoes/configuration.rb +1 -0
  42. data/lib/shoes/console.rb +2 -1
  43. data/lib/shoes/core.rb +1 -0
  44. data/lib/shoes/core/version.rb +1 -1
  45. data/lib/shoes/dialog.rb +2 -1
  46. data/lib/shoes/dimension.rb +17 -7
  47. data/lib/shoes/dimensions.rb +12 -1
  48. data/lib/shoes/download.rb +1 -0
  49. data/lib/shoes/dsl.rb +2 -1
  50. data/lib/shoes/dsl/animate.rb +1 -0
  51. data/lib/shoes/dsl/art.rb +51 -50
  52. data/lib/shoes/dsl/element.rb +1 -0
  53. data/lib/shoes/dsl/interaction.rb +1 -0
  54. data/lib/shoes/dsl/media.rb +4 -3
  55. data/lib/shoes/dsl/setup.rb +1 -0
  56. data/lib/shoes/dsl/style.rb +1 -0
  57. data/lib/shoes/dsl/text.rb +3 -2
  58. data/lib/shoes/file_not_found_error.rb +1 -0
  59. data/lib/shoes/font.rb +1 -0
  60. data/lib/shoes/gradient.rb +1 -0
  61. data/lib/shoes/image.rb +1 -0
  62. data/lib/shoes/image_pattern.rb +1 -0
  63. data/lib/shoes/input_box.rb +1 -0
  64. data/lib/shoes/internal_app.rb +7 -4
  65. data/lib/shoes/key_event.rb +1 -0
  66. data/lib/shoes/line.rb +19 -2
  67. data/lib/shoes/link.rb +1 -0
  68. data/lib/shoes/list_box.rb +1 -0
  69. data/lib/shoes/mock/animation.rb +1 -0
  70. data/lib/shoes/mock/app.rb +1 -0
  71. data/lib/shoes/mock/arc.rb +1 -0
  72. data/lib/shoes/mock/arrow.rb +1 -0
  73. data/lib/shoes/mock/background.rb +1 -0
  74. data/lib/shoes/mock/border.rb +1 -0
  75. data/lib/shoes/mock/button.rb +1 -0
  76. data/lib/shoes/mock/check.rb +1 -0
  77. data/lib/shoes/mock/clickable.rb +1 -0
  78. data/lib/shoes/mock/common_methods.rb +1 -0
  79. data/lib/shoes/mock/dialog.rb +1 -0
  80. data/lib/shoes/mock/download.rb +1 -0
  81. data/lib/shoes/mock/font.rb +1 -0
  82. data/lib/shoes/mock/image.rb +1 -0
  83. data/lib/shoes/mock/image_pattern.rb +1 -0
  84. data/lib/shoes/mock/input_box.rb +1 -0
  85. data/lib/shoes/mock/keypress.rb +1 -0
  86. data/lib/shoes/mock/keyrelease.rb +1 -0
  87. data/lib/shoes/mock/line.rb +1 -0
  88. data/lib/shoes/mock/link.rb +1 -0
  89. data/lib/shoes/mock/list_box.rb +1 -0
  90. data/lib/shoes/mock/oval.rb +1 -0
  91. data/lib/shoes/mock/packager.rb +1 -0
  92. data/lib/shoes/mock/progress.rb +1 -0
  93. data/lib/shoes/mock/radio.rb +1 -0
  94. data/lib/shoes/mock/rect.rb +1 -0
  95. data/lib/shoes/mock/shape.rb +1 -0
  96. data/lib/shoes/mock/slot.rb +1 -0
  97. data/lib/shoes/mock/sound.rb +1 -0
  98. data/lib/shoes/mock/star.rb +1 -0
  99. data/lib/shoes/mock/text_block.rb +1 -0
  100. data/lib/shoes/mock/timer.rb +1 -0
  101. data/lib/shoes/not_implemented_error.rb +1 -0
  102. data/lib/shoes/oval.rb +1 -0
  103. data/lib/shoes/packager.rb +1 -0
  104. data/lib/shoes/point.rb +1 -0
  105. data/lib/shoes/progress.rb +1 -0
  106. data/lib/shoes/radio.rb +1 -0
  107. data/lib/shoes/rect.rb +3 -2
  108. data/lib/shoes/renamed_delegate.rb +1 -0
  109. data/lib/shoes/shape.rb +31 -0
  110. data/lib/shoes/slot.rb +52 -14
  111. data/lib/shoes/slot_contents.rb +1 -0
  112. data/lib/shoes/sound.rb +1 -0
  113. data/lib/shoes/span.rb +1 -0
  114. data/lib/shoes/standard_logger.rb +1 -0
  115. data/lib/shoes/star.rb +29 -2
  116. data/lib/shoes/text.rb +1 -0
  117. data/lib/shoes/text_block.rb +11 -1
  118. data/lib/shoes/text_block_dimensions.rb +9 -0
  119. data/lib/shoes/timer.rb +1 -0
  120. data/lib/shoes/ui/cli.rb +1 -0
  121. data/lib/shoes/ui/cli/base_command.rb +1 -0
  122. data/lib/shoes/ui/cli/default_command.rb +1 -0
  123. data/lib/shoes/ui/cli/help_command.rb +4 -3
  124. data/lib/shoes/ui/cli/manual_command.rb +4 -3
  125. data/lib/shoes/ui/cli/package_command.rb +1 -0
  126. data/lib/shoes/ui/cli/samples_command.rb +1 -0
  127. data/lib/shoes/ui/cli/select_backend_command.rb +5 -4
  128. data/lib/shoes/ui/cli/version_command.rb +4 -3
  129. data/lib/shoes/ui/picker.rb +1 -0
  130. data/lib/shoes/url.rb +1 -0
  131. data/lib/shoes/version.rb +1 -1
  132. data/lib/shoes/widget.rb +1 -0
  133. data/lib/shoes/window.rb +1 -0
  134. data/static/shoes-icon.png +0 -0
  135. metadata +3 -2
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module Common
4
5
  module Translate
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module Common
4
5
  class UIElement
@@ -88,6 +89,29 @@ class Shoes
88
89
 
89
90
  def update_stroke
90
91
  end
92
+
93
+ # Some element types (arrows, shapes) don't necessarily track their
94
+ # element locations in the standard way. Let them inform redrawing about
95
+ # the actual bounds to redraw within by overriding these methods
96
+ def redraw_left
97
+ element_left
98
+ end
99
+
100
+ def redraw_top
101
+ element_top
102
+ end
103
+
104
+ def redraw_width
105
+ element_width
106
+ end
107
+
108
+ def redraw_height
109
+ element_height
110
+ end
111
+
112
+ def painted?
113
+ false
114
+ end
91
115
  end
92
116
  end
93
117
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module Common
4
5
  module Visibility
@@ -8,8 +9,10 @@ class Shoes
8
9
  self
9
10
  end
10
11
 
12
+ # Root method for determining whether we're visible or not, taking into
13
+ # account our parent chain's visibility.
11
14
  def hidden?
12
- style[:hidden]
15
+ (defined?(@parent) && @parent&.hidden?) || style[:hidden]
13
16
  end
14
17
 
15
18
  alias hidden hidden?
@@ -18,6 +21,18 @@ class Shoes
18
21
  !hidden?
19
22
  end
20
23
 
24
+ def hidden_from_view?
25
+ hidden? || outside_parent_view?
26
+ end
27
+
28
+ def outside_parent_view?
29
+ # Painted elements handle slot bounds themselves when painting
30
+ return false if @parent.nil? || @parent.variable_height? || painted?
31
+
32
+ # We hide when we're at all outside our parent's bounds
33
+ !@parent.contains?(dimensions)
34
+ end
35
+
21
36
  # Reveals the element, if it is hidden. See also #hide and #toggle.
22
37
  def show
23
38
  style(hidden: false)
@@ -33,6 +48,11 @@ class Shoes
33
48
 
34
49
  private
35
50
 
51
+ # Backend elements are expected to respond to update_visibility, and use
52
+ # the hidden? or visible? accessors to assess their proper display state.
53
+ #
54
+ # These take into account parent visibility, versus styling which applies
55
+ # only to the element itself.
36
56
  def update_visibility
37
57
  gui.update_visibility
38
58
  self
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class Configuration
4
5
  class << self
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class Console
4
5
  attr_reader :messages, :message_stacks
@@ -76,7 +77,7 @@ class Shoes
76
77
  end
77
78
 
78
79
  def add_message_stack(type, message, index = nil)
79
- return unless @app && @app.open?
80
+ return unless defined?(@app) && @app.open?
80
81
 
81
82
  @app.instance_exec do
82
83
  append do
@@ -1,2 +1,3 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'shoes/dsl'
@@ -2,6 +2,6 @@
2
2
 
3
3
  class Shoes
4
4
  module Core
5
- VERSION = "4.0.0.pre12"
5
+ VERSION = "4.0.0.rc1"
6
6
  end
7
7
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class Dialog
4
5
  def initialize
@@ -42,7 +43,7 @@ class Shoes
42
43
  end
43
44
 
44
45
  def result
45
- @result
46
+ @result ||= nil
46
47
  end
47
48
  end
48
49
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class Dimension
4
5
  attr_reader :parent
@@ -15,9 +16,22 @@ class Shoes
15
16
  PIXEL_COUNTING_ADJUSTMENT = -1
16
17
 
17
18
  def initialize(parent = nil, start_as_center = false)
18
- @parent = parent
19
- @start_as_center = start_as_center
20
- @combined_margins = 0
19
+ @parent = parent
20
+ @start_as_center = start_as_center
21
+ @combined_margins = 0
22
+ @displace_start = nil
23
+ @displace_start_relative = nil
24
+ @end = nil
25
+ @extent = nil
26
+ @extent_negative = nil
27
+ @extent_relative = nil
28
+ @margin_end = nil
29
+ @margin_end_relative = nil
30
+ @margin_start = nil
31
+ @margin_start_relative = nil
32
+ @start = nil
33
+ @start = nil
34
+ @start_relative = nil
21
35
  end
22
36
 
23
37
  def start
@@ -45,8 +59,6 @@ class Shoes
45
59
 
46
60
  @extent_relative = relative?(@extent)
47
61
  @extent_negative = negative?(@extent)
48
-
49
- @extent
50
62
  end
51
63
 
52
64
  def absolute_end
@@ -138,7 +150,6 @@ class Shoes
138
150
  @margin_start = parse_int_value(value)
139
151
 
140
152
  @combined_margins = margin_start + margin_end
141
- @margin_start
142
153
  end
143
154
 
144
155
  def margin_end=(value)
@@ -146,7 +157,6 @@ class Shoes
146
157
  @margin_end = parse_int_value(value)
147
158
 
148
159
  @combined_margins = margin_start + margin_end
149
- @margin_end
150
160
  end
151
161
 
152
162
  def displace_start=(value)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Dimensions is a central class that most Shoes classes use to represent their
3
4
  # dimensions, e.g. where they are and how much space they are taking up there.
4
5
  # All the different position types might be confusing. So here is a little list:
@@ -82,6 +83,16 @@ class Shoes
82
83
  x_dimension.in_bounds?(x) && y_dimension.in_bounds?(y)
83
84
  end
84
85
 
86
+ def contains?(other)
87
+ return false unless other.element_left && other.element_top &&
88
+ other.element_right && other.element_bottom
89
+
90
+ element_left <= other.element_left &&
91
+ element_right >= other.element_right &&
92
+ element_top <= other.element_top &&
93
+ element_bottom >= other.element_bottom
94
+ end
95
+
85
96
  def margin
86
97
  [margin_left, margin_top, margin_right, margin_bottom]
87
98
  end
@@ -205,7 +216,7 @@ class Shoes
205
216
  WRITER_METHODS.each do |meth|
206
217
  key = meth.to_s.sub("=", "").to_sym
207
218
  define_method(meth) do |value|
208
- @style[key] = value if @style
219
+ @style[key] = value if defined?(@style)
209
220
  dimensions.send(meth, value)
210
221
  end
211
222
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class HttpResponse
4
5
  # Struct might be better?
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'delegate'
3
4
  require 'fileutils'
4
5
  require 'forwardable'
@@ -24,7 +25,7 @@ class Shoes
24
25
  end
25
26
 
26
27
  def logger
27
- return @logger if @logger
28
+ return @logger if defined?(@logger)
28
29
 
29
30
  @logger ||= Shoes::LoggerCollection.new
30
31
  @logger << Shoes::StandardLogger.new
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module DSL
4
5
  module Animate
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module DSL
4
5
  module Art
@@ -23,12 +24,12 @@ class Shoes
23
24
 
24
25
  left, top, width, *leftovers = args
25
26
 
26
- message = <<EOS
27
- Too many arguments. Must be one of:
28
- - arrow(left, top, width, [opts])
29
- - arrow(left, top, [opts])
30
- - arrow(left, [opts])
31
- - arrow([opts])
27
+ message = <<~EOS
28
+ Too many arguments. Must be one of:
29
+ - arrow(left, top, width, [opts])
30
+ - arrow(left, top, [opts])
31
+ - arrow(left, [opts])
32
+ - arrow([opts])
32
33
  EOS
33
34
  raise ArgumentError, message if leftovers.any?
34
35
 
@@ -51,15 +52,15 @@ EOS
51
52
 
52
53
  left, top, width, height, angle1, angle2, *leftovers = args
53
54
 
54
- message = <<EOS
55
- Too many arguments. Must be one of:
56
- - arc(left, top, width, height, angle1, angle2, [opts])
57
- - arc(left, top, width, height, angle1, [opts])
58
- - arc(left, top, width, height, [opts])
59
- - arc(left, top, width, [opts])
60
- - arc(left, top, [opts])
61
- - arc(left, [opts])
62
- - arc([opts])
55
+ message = <<~EOS
56
+ Too many arguments. Must be one of:
57
+ - arc(left, top, width, height, angle1, angle2, [opts])
58
+ - arc(left, top, width, height, angle1, [opts])
59
+ - arc(left, top, width, height, [opts])
60
+ - arc(left, top, width, [opts])
61
+ - arc(left, top, [opts])
62
+ - arc(left, [opts])
63
+ - arc([opts])
63
64
  EOS
64
65
  raise ArgumentError, message if leftovers.any?
65
66
 
@@ -78,13 +79,13 @@ EOS
78
79
 
79
80
  x1, y1, x2, y2, *leftovers = args
80
81
 
81
- message = <<EOS
82
- Too many arguments. Must be one of:
83
- - line(x1, y1, x2, y2, [opts])
84
- - line(x1, y1, x2, [opts])
85
- - line(x1, y1, [opts])
86
- - line(x1, [opts])
87
- - line([opts])
82
+ message = <<~EOS
83
+ Too many arguments. Must be one of:
84
+ - line(x1, y1, x2, y2, [opts])
85
+ - line(x1, y1, x2, [opts])
86
+ - line(x1, y1, [opts])
87
+ - line(x1, [opts])
88
+ - line([opts])
88
89
  EOS
89
90
  raise ArgumentError, message if leftovers.any?
90
91
 
@@ -118,13 +119,13 @@ EOS
118
119
 
119
120
  left, top, width, height, *leftovers = args
120
121
 
121
- message = <<EOS
122
- Wrong number of arguments. Must be one of:
123
- - oval(left, top, width, height, [opts])
124
- - oval(left, top, diameter, [opts])
125
- - oval(left, top, [opts])
126
- - oval(left, [opts])
127
- - oval(styles)
122
+ message = <<~EOS
123
+ Wrong number of arguments. Must be one of:
124
+ - oval(left, top, width, height, [opts])
125
+ - oval(left, top, diameter, [opts])
126
+ - oval(left, top, [opts])
127
+ - oval(left, [opts])
128
+ - oval(styles)
128
129
  EOS
129
130
  raise ArgumentError, message if leftovers.any?
130
131
 
@@ -159,14 +160,14 @@ EOS
159
160
  left, top, width, height, curve, *leftovers = args
160
161
  opts[:curve] = curve if curve
161
162
 
162
- message = <<EOS
163
- Wrong number of arguments. Must be one of:
164
- - rect(left, top, width, height, curve, [opts])
165
- - rect(left, top, width, height, [opts])
166
- - rect(left, top, side, [opts])
167
- - rect(left, top, [opts])
168
- - rect(left, [opts])
169
- - rect(styles)
163
+ message = <<~EOS
164
+ Wrong number of arguments. Must be one of:
165
+ - rect(left, top, width, height, curve, [opts])
166
+ - rect(left, top, width, height, [opts])
167
+ - rect(left, top, side, [opts])
168
+ - rect(left, top, [opts])
169
+ - rect(left, [opts])
170
+ - rect(styles)
170
171
  EOS
171
172
 
172
173
  raise ArgumentError, message if leftovers.any?
@@ -207,14 +208,14 @@ EOS
207
208
 
208
209
  left, top, points, outer, inner, *leftovers = args
209
210
 
210
- message = <<EOS
211
- Wrong number of arguments. Must be one of:
212
- - star([styles])
213
- - star(left, [styles])
214
- - star(left, top, [styles])
215
- - star(left, top, points, [styles])
216
- - star(left, top, points, outer, [styles])
217
- - star(left, top, points, outer, inner, [styles])
211
+ message = <<~EOS
212
+ Wrong number of arguments. Must be one of:
213
+ - star([styles])
214
+ - star(left, [styles])
215
+ - star(left, top, [styles])
216
+ - star(left, top, points, [styles])
217
+ - star(left, top, points, outer, [styles])
218
+ - star(left, top, points, outer, inner, [styles])
218
219
  EOS
219
220
  raise ArgumentError, message if leftovers.any?
220
221
 
@@ -240,11 +241,11 @@ EOS
240
241
 
241
242
  left, top, *leftovers = args
242
243
 
243
- message = <<EOS
244
- Wrong number of arguments. Must be one of:
245
- - shape(left, top, [opts])
246
- - shape(left, [opts])
247
- - shape([opts])
244
+ message = <<~EOS
245
+ Wrong number of arguments. Must be one of:
246
+ - shape(left, top, [opts])
247
+ - shape(left, [opts])
248
+ - shape([opts])
248
249
  EOS
249
250
 
250
251
  raise ArgumentError, message if leftovers.any?
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module DSL
4
5
  module Element
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module DSL
4
5
  module Interaction
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  module DSL
4
5
  module Media
@@ -12,9 +13,9 @@ class Shoes
12
13
  opts = style_normalizer.normalize pop_style(args)
13
14
  path, *leftovers = args
14
15
 
15
- message = <<EOS
16
- Wrong number of arguments. Must be:
17
- - image(path, [opts])
16
+ message = <<~EOS
17
+ Wrong number of arguments. Must be:
18
+ - image(path, [opts])
18
19
  EOS
19
20
  raise ArgumentError, message if leftovers.any?
20
21
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class Shoes
3
4
  class << self
4
5
  # To ease the upgrade path from Shoes 3 we warn users they need to install