shoes-core 4.0.0.pre6 → 4.0.0.pre7

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/bin/shoes-picker +1 -1
  3. data/lib/shoes/app.rb +3 -3
  4. data/lib/shoes/arc.rb +6 -5
  5. data/lib/shoes/arrow.rb +31 -0
  6. data/lib/shoes/background.rb +1 -1
  7. data/lib/shoes/border.rb +1 -1
  8. data/lib/shoes/builtin_methods.rb +1 -1
  9. data/lib/shoes/color.rb +3 -3
  10. data/lib/shoes/color/dsl_helpers.rb +10 -7
  11. data/lib/shoes/color/hex_converter.rb +1 -1
  12. data/lib/shoes/common/attachable.rb +11 -0
  13. data/lib/shoes/common/background_element.rb +8 -0
  14. data/lib/shoes/common/hover.rb +7 -17
  15. data/lib/shoes/common/link_finder.rb +12 -0
  16. data/lib/shoes/common/positioning.rb +1 -1
  17. data/lib/shoes/common/state.rb +1 -1
  18. data/lib/shoes/common/style.rb +9 -4
  19. data/lib/shoes/common/translate.rb +24 -0
  20. data/lib/shoes/common/ui_element.rb +1 -0
  21. data/lib/shoes/common/visibility.rb +1 -1
  22. data/lib/shoes/configuration.rb +2 -2
  23. data/lib/shoes/core/version.rb +3 -1
  24. data/lib/shoes/dimensions.rb +6 -2
  25. data/lib/shoes/dsl.rb +34 -14
  26. data/lib/shoes/font.rb +1 -1
  27. data/lib/shoes/gradient.rb +2 -1
  28. data/lib/shoes/image.rb +2 -2
  29. data/lib/shoes/input_box.rb +2 -2
  30. data/lib/shoes/internal_app.rb +8 -8
  31. data/lib/shoes/line.rb +7 -6
  32. data/lib/shoes/link.rb +5 -6
  33. data/lib/shoes/list_box.rb +2 -2
  34. data/lib/shoes/logger.rb +2 -1
  35. data/lib/shoes/mock.rb +1 -0
  36. data/lib/shoes/mock/arrow.rb +15 -0
  37. data/lib/shoes/mock/rect.rb +2 -1
  38. data/lib/shoes/mock/slot.rb +5 -1
  39. data/lib/shoes/mock/star.rb +2 -1
  40. data/lib/shoes/oval.rb +5 -4
  41. data/lib/shoes/point.rb +2 -1
  42. data/lib/shoes/progress.rb +1 -1
  43. data/lib/shoes/rect.rb +3 -2
  44. data/lib/shoes/shape.rb +14 -9
  45. data/lib/shoes/slot.rb +54 -25
  46. data/lib/shoes/slot_contents.rb +1 -3
  47. data/lib/shoes/star.rb +4 -3
  48. data/lib/shoes/text.rb +5 -0
  49. data/lib/shoes/text_block.rb +9 -9
  50. data/lib/shoes/ui/picker.rb +5 -5
  51. data/lib/shoes/version.rb +3 -1
  52. data/lib/shoes/widget.rb +2 -2
  53. data/lib/shoes/window.rb +6 -0
  54. data/spec/shoes/app_spec.rb +16 -16
  55. data/spec/shoes/arc_spec.rb +1 -1
  56. data/spec/shoes/arrow_spec.rb +28 -0
  57. data/spec/shoes/background_spec.rb +2 -2
  58. data/spec/shoes/border_spec.rb +3 -3
  59. data/spec/shoes/builtin_methods_spec.rb +2 -2
  60. data/spec/shoes/button_spec.rb +4 -2
  61. data/spec/shoes/color_spec.rb +12 -12
  62. data/spec/shoes/common/attachable_spec.rb +32 -0
  63. data/spec/shoes/common/inspect_spec.rb +4 -4
  64. data/spec/shoes/common/remove_spec.rb +5 -5
  65. data/spec/shoes/common/rotate_spec.rb +1 -1
  66. data/spec/shoes/common/style_normalizer_spec.rb +4 -4
  67. data/spec/shoes/common/style_spec.rb +15 -11
  68. data/spec/shoes/common/translate_spec.rb +27 -0
  69. data/spec/shoes/dimension_spec.rb +111 -100
  70. data/spec/shoes/dimensions_spec.rb +344 -303
  71. data/spec/shoes/download_spec.rb +17 -17
  72. data/spec/shoes/flow_spec.rb +2 -2
  73. data/spec/shoes/framework_learning_spec.rb +3 -1
  74. data/spec/shoes/helpers/fake_absolute_element.rb +3 -2
  75. data/spec/shoes/helpers/fake_element.rb +3 -2
  76. data/spec/shoes/input_box_spec.rb +2 -2
  77. data/spec/shoes/internal_app_spec.rb +14 -14
  78. data/spec/shoes/link_spec.rb +18 -19
  79. data/spec/shoes/list_box_spec.rb +9 -8
  80. data/spec/shoes/oval_spec.rb +1 -1
  81. data/spec/shoes/point_spec.rb +3 -3
  82. data/spec/shoes/renamed_delegate_spec.rb +2 -2
  83. data/spec/shoes/shape_spec.rb +20 -20
  84. data/spec/shoes/shared_examples/common_methods.rb +2 -2
  85. data/spec/shoes/shared_examples/dsl.rb +2 -2
  86. data/spec/shoes/shared_examples/dsl/flow.rb +1 -1
  87. data/spec/shoes/shared_examples/dsl/pattern.rb +2 -2
  88. data/spec/shoes/shared_examples/dsl/rgb.rb +2 -2
  89. data/spec/shoes/shared_examples/dsl/shape.rb +11 -7
  90. data/spec/shoes/shared_examples/dsl/star.rb +44 -44
  91. data/spec/shoes/shared_examples/dsl/style.rb +1 -1
  92. data/spec/shoes/shared_examples/dsl/text_elements.rb +6 -3
  93. data/spec/shoes/shared_examples/dsl/video.rb +1 -1
  94. data/spec/shoes/shared_examples/dsl_app_context.rb +6 -5
  95. data/spec/shoes/shared_examples/hover.rb +2 -2
  96. data/spec/shoes/shared_examples/shared_element_method.rb +2 -2
  97. data/spec/shoes/shared_examples/slot.rb +32 -21
  98. data/spec/shoes/shared_examples/style.rb +1 -1
  99. data/spec/shoes/slot_spec.rb +24 -7
  100. data/spec/shoes/span_spec.rb +5 -5
  101. data/spec/shoes/spec_helper.rb +1 -1
  102. data/spec/shoes/stack_spec.rb +5 -5
  103. data/spec/shoes/text_block_dimensions_spec.rb +6 -3
  104. data/spec/shoes/text_block_spec.rb +13 -7
  105. data/spec/shoes/text_spec.rb +22 -0
  106. data/spec/shoes/ui/picker_spec.rb +3 -3
  107. data/spec/shoes/url_spec.rb +4 -4
  108. data/spec/shoes/widget_spec.rb +1 -1
  109. data/spec/shoes_spec.rb +3 -3
  110. data/spec/spec_helper.rb +8 -1
  111. metadata +17 -4
  112. data/bin/shoes +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a1616fc9ee94998821bae34f5e523b6bb435e8c
4
- data.tar.gz: 80be512d070e25a15b46fc9744dd005922bfc1fe
3
+ metadata.gz: 24b91fee87f3e41db5ff2dfea086583143fa478f
4
+ data.tar.gz: 90f1c1286744dec7e681972691c6f14abb838573
5
5
  SHA512:
6
- metadata.gz: 40702d6e8e3ec2dbb2e7e34c98bdcfd37a741010f34d5a5b0c939c0da3c9ec251b7fe38971094cdbc5288cbde912e30fb04273030b752e0c1ceb149f1ee3dff7
7
- data.tar.gz: 0dbc92f9dd5a7bd178d998a12456cdca348f8a7b28df320ee6adec3d9fb1d803d157b93302a6c528bbec4a4b14f80c0e4a010300ea2d7e86a6972f3beb1c2092
6
+ metadata.gz: e34d82bc1902bd05f440d69cc8b56cac7f30be8367edbca11e8870996691307bd402084a09e0c9dbfc33b87abcf9b8d8d24e6c230c8c5392a043e7b882ac537b
7
+ data.tar.gz: 699dd3055e4bfdbcf0498af1be251f88835d870591e6019e04e9a82bdd9f40c87c2189000fcce042f85f1e873833c57cde925cab0ff49be7df04799bb95baf3c
data/bin/shoes-picker CHANGED
@@ -5,6 +5,6 @@ $LOAD_PATH << lib_directory
5
5
  require 'shoes/ui/picker'
6
6
 
7
7
  # On Windows getting odd paths with trailing double-quote
8
- bin_dir = ARGV[0].gsub('"', '')
8
+ bin_dir = ARGV[0].delete('"')
9
9
 
10
10
  Shoes::UI::Picker.new.run(bin_dir)
data/lib/shoes/app.rb CHANGED
@@ -66,7 +66,7 @@ class Shoes
66
66
  @__app__.quit
67
67
  end
68
68
 
69
- alias_method :close, :quit
69
+ alias close quit
70
70
 
71
71
  def parent
72
72
  @__app__.current_slot.parent
@@ -80,7 +80,7 @@ class Shoes
80
80
 
81
81
  def_delegators :@__app__, *delegated_to_internal_app
82
82
 
83
- alias_method :fullscreen?, :fullscreen
83
+ alias fullscreen? fullscreen
84
84
 
85
85
  def eval_with_additional_context(context, &blk)
86
86
  @__additional_context__ = context
@@ -107,7 +107,7 @@ class Shoes
107
107
  inspect_details
108
108
  end
109
109
 
110
- DELEGATE_BLACKLIST = [:parent, :app]
110
+ DELEGATE_BLACKLIST = [:parent, :app].freeze
111
111
 
112
112
  # class definitions are evaluated top to bottom, want to have all of them
113
113
  # so define at bottom
data/lib/shoes/arc.rb CHANGED
@@ -1,21 +1,22 @@
1
1
  class Shoes
2
2
  class Arc
3
3
  include Common::UIElement
4
+ include Common::Clickable
5
+ include Common::Hover
4
6
  include Common::Fill
5
7
  include Common::Stroke
6
8
  include Common::Style
7
- include Common::Clickable
8
- include Common::Hover
9
+ include Common::Translate
9
10
 
10
11
  style_with :angle1, :angle2, :art_styles, :center, :common_styles, :dimensions, :radius, :wedge
11
- STYLES = { wedge: false }
12
+ STYLES = { wedge: false }.freeze
12
13
 
13
- def before_initialize(styles, left, top, width, height, angle1, angle2)
14
+ def before_initialize(styles, _left, _top, _width, _height, angle1, angle2)
14
15
  styles[:angle1] = angle1
15
16
  styles[:angle2] = angle2
16
17
  end
17
18
 
18
- def create_dimensions(left, top, width, height, angle1, angle2)
19
+ def create_dimensions(left, top, width, height, _angle1, _angle2)
19
20
  @dimensions = Dimensions.new parent, left, top, width, height, @style
20
21
  end
21
22
 
@@ -0,0 +1,31 @@
1
+ class Shoes
2
+ class Arrow
3
+ include Common::UIElement
4
+ include Common::Clickable
5
+ include Common::Fill
6
+ include Common::Hover
7
+ include Common::Stroke
8
+ include Common::Style
9
+ include Common::Translate
10
+
11
+ style_with :angle, :art_styles, :curve, :common_styles, :dimensions
12
+ STYLES = { angle: 0, fill: Shoes::COLORS[:black] }.freeze
13
+
14
+ def create_dimensions(left, top, width)
15
+ left ||= @style[:left] || 0
16
+ top ||= @style[:top] || 0
17
+ width ||= @style[:width] || 0
18
+
19
+ @dimensions = AbsoluteDimensions.new left, top, width, width, @style
20
+ end
21
+
22
+ def needs_rotate?
23
+ rotate && rotate.nonzero?
24
+ end
25
+
26
+ def width=(*_)
27
+ super
28
+ gui.update_position
29
+ end
30
+ end
31
+ end
@@ -7,7 +7,7 @@ class Shoes
7
7
  include Common::Style
8
8
 
9
9
  style_with :angle, :common_styles, :curve, :dimensions, :fill
10
- STYLES = { angle: 0, curve: 0 }
10
+ STYLES = { angle: 0, curve: 0 }.freeze
11
11
 
12
12
  def before_initialize(styles, color)
13
13
  styles[:fill] = color
data/lib/shoes/border.rb CHANGED
@@ -7,7 +7,7 @@ class Shoes
7
7
  include Common::Style
8
8
 
9
9
  style_with :angle, :common_styles, :curve, :dimensions, :stroke, :strokewidth
10
- STYLES = { angle: 0, curve: 0 }
10
+ STYLES = { angle: 0, curve: 0 }.freeze
11
11
 
12
12
  def before_initialize(styles, color)
13
13
  styles[:stroke] = color
@@ -24,7 +24,7 @@ class Shoes
24
24
  end
25
25
  end
26
26
 
27
- alias_method :confirm?, :confirm
27
+ alias confirm? confirm
28
28
 
29
29
  def ask_open_file
30
30
  Shoes::Dialog.new.dialog_chooser 'Open File...'
data/lib/shoes/color.rb CHANGED
@@ -24,7 +24,7 @@ Must be one of:
24
24
  - #{self.class}.new(red, green, blue)
25
25
  - #{self.class}.new(red, green, blue, alpha)
26
26
  EOS
27
- fail ArgumentError, message
27
+ raise ArgumentError, message
28
28
  end
29
29
  alpha ||= OPAQUE
30
30
  @red = normalize_rgb(red)
@@ -56,7 +56,7 @@ EOS
56
56
  end
57
57
 
58
58
  def black?
59
- @red == 0 && @green == 0 && @blue == 0
59
+ @red.zero? && @green.zero? && @blue.zero?
60
60
  end
61
61
 
62
62
  def <=>(other)
@@ -86,7 +86,7 @@ EOS
86
86
  end
87
87
 
88
88
  def normalize_rgb(value)
89
- rgb = value.is_a?(Fixnum) ? value : (255 * value).round
89
+ rgb = value.is_a?(Integer) ? value : (255 * value).round
90
90
  return 255 if rgb > 255
91
91
  return 0 if rgb < 0
92
92
  rgb
@@ -14,7 +14,7 @@ class Shoes
14
14
  when Shoes::ImagePattern
15
15
  arg
16
16
  else
17
- fail ArgumentError, "Bad pattern: #{arg.inspect}"
17
+ raise ArgumentError, "Bad pattern: #{arg.inspect}"
18
18
  end
19
19
  else
20
20
  gradient(*args)
@@ -50,16 +50,19 @@ class Shoes
50
50
  arg = args[0]
51
51
  case arg
52
52
  when Gradient
53
- min, max = arg.color1, arg.color2
53
+ min = arg.color1
54
+ max = arg.color2
54
55
  when Range
55
- min, max = arg.first, arg.last
56
+ min = arg.first
57
+ max = arg.last
56
58
  else
57
- fail ArgumentError, "Can't make gradient out of #{arg.inspect}"
59
+ raise ArgumentError, "Can't make gradient out of #{arg.inspect}"
58
60
  end
59
61
  when 2
60
- min, max = args[0], args[1]
62
+ min = args[0]
63
+ max = args[1]
61
64
  else
62
- fail ArgumentError, "Wrong number of arguments (#{args.length} for 1 or 2)"
65
+ raise ArgumentError, "Wrong number of arguments (#{args.length} for 1 or 2)"
63
66
  end
64
67
  Shoes::Gradient.new(color(min), color(max))
65
68
  end
@@ -68,7 +71,7 @@ class Shoes
68
71
  Shoes::Color.new(level, level, level, alpha)
69
72
  end
70
73
 
71
- alias_method :grey, :gray
74
+ alias grey gray
72
75
 
73
76
  private
74
77
 
@@ -2,7 +2,7 @@ class Shoes
2
2
  class Color
3
3
  class HexConverter
4
4
  def initialize(hex)
5
- @hex = validate(hex) || fail(ArgumentError, "Bad hex color: #{hex}")
5
+ @hex = validate(hex) || raise(ArgumentError, "Bad hex color: #{hex}")
6
6
  @red, @green, @blue = hex_to_rgb(pad_if_necessary(@hex))
7
7
  end
8
8
 
@@ -0,0 +1,11 @@
1
+ class Shoes
2
+ module Common
3
+ module Attachable
4
+ def attached_to
5
+ target = style[:attach]
6
+ target = @app.top_slot if target == Shoes::Window
7
+ target
8
+ end
9
+ end
10
+ end
11
+ end
@@ -13,6 +13,14 @@ class Shoes
13
13
  def takes_up_space?
14
14
  false
15
15
  end
16
+
17
+ def translate_left
18
+ 0
19
+ end
20
+
21
+ def translate_top
22
+ 0
23
+ end
16
24
  end
17
25
  end
18
26
  end
@@ -23,10 +23,6 @@ class Shoes
23
23
  @hovered
24
24
  end
25
25
 
26
- def eval_in_parent?
27
- false
28
- end
29
-
30
26
  def hover_class
31
27
  return @hover_class if @hover_class
32
28
 
@@ -40,7 +36,7 @@ class Shoes
40
36
  @hovered = true
41
37
 
42
38
  apply_style_from_hover_class
43
- target.eval_hover_block(@hover_blk)
39
+ eval_hover_block(@hover_blk)
44
40
  end
45
41
 
46
42
  def mouse_left
@@ -49,37 +45,31 @@ class Shoes
49
45
  @hovered = false
50
46
 
51
47
  apply_style_from_pre_hover
52
- target.eval_hover_block(@leave_blk)
48
+ eval_hover_block(@leave_blk)
53
49
  end
54
50
 
55
51
  def add_mouse_hover_control
56
52
  app.add_mouse_hover_control(self)
57
53
  end
58
54
 
59
- def target
60
- target = self
61
- target = parent if eval_in_parent?
62
- target
63
- end
64
-
65
55
  def eval_hover_block(blk)
66
56
  blk.call(self) if blk
67
57
  end
68
58
 
69
59
  def apply_style_from_hover_class
70
- hover_style = @app.element_styles[self.hover_class]
60
+ hover_style = @app.element_styles[hover_class]
71
61
  return unless hover_style
72
62
 
73
- @pre_hover_style = hover_style.inject({}) do |memo, (key, _)|
74
- memo[key] = self.style[key]
63
+ @pre_hover_style = hover_style.each_with_object({}) do |(key, _), memo|
64
+ memo[key] = style[key]
75
65
  memo
76
66
  end
77
67
 
78
- self.style(hover_style)
68
+ style(hover_style)
79
69
  end
80
70
 
81
71
  def apply_style_from_pre_hover
82
- self.style(@pre_hover_style) if @pre_hover_style
72
+ style(@pre_hover_style) if @pre_hover_style
83
73
  @pre_hover_style = nil
84
74
  end
85
75
  end
@@ -0,0 +1,12 @@
1
+ class Shoes
2
+ module Common
3
+ module LinkFinder
4
+ def find_links(texts)
5
+ texts.to_a
6
+ .select { |text| text.respond_to?(:links) }
7
+ .map(&:links)
8
+ .flatten
9
+ end
10
+ end
11
+ end
12
+ end
@@ -17,7 +17,7 @@ class Shoes
17
17
  gui.update_position if gui && gui.respond_to?(:update_position)
18
18
  end
19
19
 
20
- # displace(left: a number, top: a number) » self
20
+ # displace(left: a number, top: a number) >> self
21
21
  # Displacing an element moves it. But without changing the layout around it.
22
22
  def displace(left, top)
23
23
  self.displace_left = left
@@ -1,7 +1,7 @@
1
1
  class Shoes
2
2
  module Common
3
3
  module State
4
- DISABLED_STATE = "disabled"
4
+ DISABLED_STATE = "disabled".freeze
5
5
 
6
6
  def after_initialize(*_)
7
7
  super
@@ -23,7 +23,7 @@ class Shoes
23
23
  :justify, :kerning, :leading, :rise, :size, :stretch,
24
24
  :strikecolor, :strikethrough, :stroke, :undercolor,
25
25
  :underline, :weight, :wrap],
26
- }
26
+ }.freeze
27
27
 
28
28
  # Adds styles, or just returns current style if no argument
29
29
  def style(new_styles = nil)
@@ -85,7 +85,7 @@ class Shoes
85
85
 
86
86
  def define_reader_methods
87
87
  needs_readers = @supported_styles.reject do |style|
88
- self.method_defined?(style)
88
+ method_defined?(style)
89
89
  end
90
90
 
91
91
  needs_readers.map(&:to_sym).each do |style|
@@ -97,7 +97,7 @@ class Shoes
97
97
 
98
98
  def define_writer_methods
99
99
  needs_writers = @supported_styles.reject do |style|
100
- self.method_defined?("#{style}=")
100
+ method_defined?("#{style}=")
101
101
  end
102
102
 
103
103
  needs_writers.map(&:to_sym).each do |style_key|
@@ -126,6 +126,7 @@ class Shoes
126
126
  set_visibility(new_styles)
127
127
  set_coloring(new_styles)
128
128
  set_hovers(new_styles)
129
+ set_translate(new_styles)
129
130
  click(&new_styles[:click]) if new_styles.key?(:click)
130
131
  @style.merge! normalized_style
131
132
  end
@@ -153,9 +154,13 @@ class Shoes
153
154
  leave(&new_styles[:leave]) if new_styles.include?(:leave)
154
155
  end
155
156
 
157
+ def set_translate(new_styles)
158
+ clear_translate if new_styles.include?(:translate)
159
+ end
160
+
156
161
  def update_dimensions # so that @style hash matches actual values
157
162
  STYLE_GROUPS[:dimensions].each do |style|
158
- if self.respond_to?(style)
163
+ if respond_to?(style)
159
164
  value = send(style)
160
165
  @style[style] = value if value
161
166
  end
@@ -0,0 +1,24 @@
1
+ class Shoes
2
+ module Common
3
+ module Translate
4
+ def translate_left
5
+ @translate_left ||= begin
6
+ left, _ = translate
7
+ left || 0
8
+ end
9
+ end
10
+
11
+ def translate_top
12
+ @translate_top ||= begin
13
+ _, top = translate
14
+ top || 0
15
+ end
16
+ end
17
+
18
+ def clear_translate
19
+ @translate_left = nil
20
+ @translate_top = nil
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,7 @@
1
1
  class Shoes
2
2
  module Common
3
3
  module UIElement
4
+ include Common::Attachable
4
5
  include Common::Initialization
5
6
  include Common::Inspect
6
7
  include Common::Visibility
@@ -11,7 +11,7 @@ class Shoes
11
11
  style[:hidden]
12
12
  end
13
13
 
14
- alias_method :hidden, :hidden?
14
+ alias hidden hidden?
15
15
 
16
16
  def visible?
17
17
  !hidden?
@@ -32,7 +32,7 @@ class Shoes
32
32
  return if @backend_name == name
33
33
 
34
34
  unless @backend.nil?
35
- fail "Can't switch backend to Shoes::#{name.capitalize}, Shoes::#{backend_name.capitalize} backend already loaded."
35
+ raise "Can't switch backend to Shoes::#{name.capitalize}, Shoes::#{backend_name.capitalize} backend already loaded."
36
36
  end
37
37
  @backend_name ||= name
38
38
  end
@@ -48,7 +48,7 @@ class Shoes
48
48
  class_name = klazz.name.split("::").last
49
49
  # Lookup with false to not consult modules higher in the chain Object
50
50
  # because Shoes::Swt.const_defined? 'Range' => true
51
- fail ArgumentError, "#{object} does not have a backend class defined for #{backend}" unless backend.const_defined?(class_name, false)
51
+ raise ArgumentError, "#{object} does not have a backend class defined for #{backend}" unless backend.const_defined?(class_name, false)
52
52
  backend.const_get(class_name, false)
53
53
  end
54
54