shoes-swt 4.0.0.pre2 → 4.0.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -200
  3. data/Rakefile +1 -0
  4. data/bin/shoes-swt +11 -0
  5. data/lib/shoes/swt.rb +5 -2
  6. data/lib/shoes/swt/animation.rb +2 -2
  7. data/lib/shoes/swt/app.rb +45 -50
  8. data/lib/shoes/swt/arc.rb +7 -7
  9. data/lib/shoes/swt/background.rb +1 -1
  10. data/lib/shoes/swt/border.rb +1 -2
  11. data/lib/shoes/swt/click_listener.rb +70 -0
  12. data/lib/shoes/swt/color.rb +5 -5
  13. data/lib/shoes/swt/common/clickable.rb +2 -53
  14. data/lib/shoes/swt/common/fill.rb +1 -1
  15. data/lib/shoes/swt/common/painter.rb +7 -7
  16. data/lib/shoes/swt/common/painter_updates_position.rb +2 -2
  17. data/lib/shoes/swt/common/remove.rb +2 -3
  18. data/lib/shoes/swt/common/resource.rb +1 -1
  19. data/lib/shoes/swt/common/selection_listener.rb +14 -14
  20. data/lib/shoes/swt/common/stroke.rb +1 -2
  21. data/lib/shoes/swt/common/update_position.rb +1 -1
  22. data/lib/shoes/swt/dialog.rb +3 -45
  23. data/lib/shoes/swt/disposed_protection.rb +1 -1
  24. data/lib/shoes/swt/download.rb +0 -1
  25. data/lib/shoes/swt/font.rb +4 -4
  26. data/lib/shoes/swt/generate-backend.rb +9 -0
  27. data/lib/shoes/swt/gradient.rb +17 -16
  28. data/lib/shoes/swt/image.rb +3 -5
  29. data/lib/shoes/swt/image_pattern.rb +2 -2
  30. data/lib/shoes/swt/input_box.rb +3 -3
  31. data/lib/shoes/swt/key_listener.rb +6 -6
  32. data/lib/shoes/swt/line.rb +4 -24
  33. data/lib/shoes/swt/link.rb +2 -2
  34. data/lib/shoes/swt/link_segment.rb +3 -3
  35. data/lib/shoes/swt/list_box.rb +4 -4
  36. data/lib/shoes/swt/mouse_move_listener.rb +6 -5
  37. data/lib/shoes/swt/oval.rb +2 -3
  38. data/lib/shoes/swt/packager.rb +82 -0
  39. data/lib/shoes/swt/progress.rb +2 -2
  40. data/lib/shoes/swt/radio.rb +0 -2
  41. data/lib/shoes/swt/radio_group.rb +54 -54
  42. data/lib/shoes/swt/rect_painter.rb +7 -7
  43. data/lib/shoes/swt/redrawing_aspect.rb +32 -34
  44. data/lib/shoes/swt/shape.rb +1 -1
  45. data/lib/shoes/swt/shoes_layout.rb +5 -2
  46. data/lib/shoes/swt/slot.rb +2 -3
  47. data/lib/shoes/swt/sound.rb +17 -22
  48. data/lib/shoes/swt/star.rb +30 -8
  49. data/lib/shoes/swt/swt_button.rb +3 -2
  50. data/lib/shoes/swt/text_block.rb +3 -3
  51. data/lib/shoes/swt/text_block/cursor_painter.rb +2 -2
  52. data/lib/shoes/swt/text_block/fitter.rb +5 -3
  53. data/lib/shoes/swt/text_block/painter.rb +9 -9
  54. data/lib/shoes/swt/text_block/text_font_factory.rb +3 -3
  55. data/lib/shoes/swt/text_block/text_segment.rb +9 -9
  56. data/lib/shoes/swt/text_block/text_segment_collection.rb +2 -0
  57. data/lib/shoes/swt/text_block/text_style_factory.rb +9 -3
  58. data/lib/shoes/swt/timer.rb +1 -1
  59. data/lib/shoes/swt/version.rb +1 -1
  60. data/shoes-swt.gemspec +7 -6
  61. data/spec/shoes/cli_spec.rb +2 -2
  62. data/spec/{swt_shoes → shoes/swt}/animation_spec.rb +1 -1
  63. data/spec/{swt_shoes → shoes/swt}/app_spec.rb +36 -3
  64. data/spec/{swt_shoes → shoes/swt}/arc_spec.rb +1 -1
  65. data/spec/{swt_shoes → shoes/swt}/background_spec.rb +1 -1
  66. data/spec/{swt_shoes → shoes/swt}/border_spec.rb +1 -1
  67. data/spec/{swt_shoes → shoes/swt}/button_spec.rb +1 -1
  68. data/spec/{swt_shoes → shoes/swt}/check_spec.rb +1 -1
  69. data/spec/shoes/swt/click_listener_spec.rb +162 -0
  70. data/spec/{swt_shoes → shoes/swt}/color_factory_spec.rb +1 -1
  71. data/spec/{swt_shoes → shoes/swt}/color_spec.rb +1 -1
  72. data/spec/{swt_shoes → shoes/swt}/common/painter_spec.rb +1 -1
  73. data/spec/{swt_shoes → shoes/swt}/common/remove_spec.rb +4 -11
  74. data/spec/{swt_shoes → shoes/swt}/configuration_spec.rb +1 -1
  75. data/spec/{swt_shoes → shoes/swt}/dialog_spec.rb +1 -7
  76. data/spec/{swt_shoes → shoes/swt}/disposed_protection_spec.rb +0 -0
  77. data/spec/{swt_shoes → shoes/swt}/flow_spec.rb +1 -1
  78. data/spec/{swt_shoes → shoes/swt}/font_spec.rb +1 -1
  79. data/spec/{swt_shoes → shoes/swt}/gradient_spec.rb +1 -1
  80. data/spec/{swt_shoes → shoes/swt}/image_pattern_spec.rb +1 -1
  81. data/spec/{swt_shoes → shoes/swt}/image_spec.rb +4 -3
  82. data/spec/{swt_shoes → shoes/swt}/input_box_spec.rb +1 -1
  83. data/spec/{swt_shoes → shoes/swt}/integration_spec.rb +1 -1
  84. data/spec/{swt_shoes → shoes/swt}/key_listener_spec.rb +1 -1
  85. data/spec/{swt_shoes → shoes/swt}/line_spec.rb +4 -8
  86. data/spec/{swt_shoes → shoes/swt}/link_segment_spec.rb +1 -1
  87. data/spec/{swt_shoes → shoes/swt}/link_spec.rb +3 -10
  88. data/spec/{swt_shoes → shoes/swt}/list_box_spec.rb +5 -3
  89. data/spec/{swt_shoes → shoes/swt}/minimal.png +0 -0
  90. data/spec/{swt_shoes → shoes/swt}/mouse_move_listener_spec.rb +1 -1
  91. data/spec/{swt_shoes → shoes/swt}/oval_spec.rb +1 -1
  92. data/spec/{swt_shoes → shoes/swt}/progress_spec.rb +1 -1
  93. data/spec/{swt_shoes → shoes/swt}/radio_group_spec.rb +1 -1
  94. data/spec/{swt_shoes → shoes/swt}/radio_spec.rb +1 -1
  95. data/spec/{swt_shoes → shoes/swt}/rect_painter_spec.rb +1 -1
  96. data/spec/{swt_shoes → shoes/swt}/rect_spec.rb +1 -1
  97. data/spec/{swt_shoes → shoes/swt}/shape_spec.rb +1 -1
  98. data/spec/{swt_shoes → shoes/swt}/shared_examples/button.rb +0 -0
  99. data/spec/shoes/swt/shared_examples/clickable.rb +13 -0
  100. data/spec/{swt_shoes → shoes/swt}/shared_examples/movable.rb +0 -0
  101. data/spec/{swt_shoes → shoes/swt}/shared_examples/paintable.rb +0 -0
  102. data/spec/{swt_shoes → shoes/swt}/shared_examples/painter.rb +0 -0
  103. data/spec/{swt_shoes → shoes/swt}/shared_examples/pattern.rb +0 -0
  104. data/spec/{swt_shoes → shoes/swt}/shared_examples/removable.rb +1 -3
  105. data/spec/{swt_shoes → shoes/swt}/shared_examples/swt_app_context.rb +11 -3
  106. data/spec/{swt_shoes → shoes/swt}/shared_examples/visibility.rb +0 -0
  107. data/spec/{swt_shoes → shoes/swt}/shell_control_listener_spec.rb +1 -1
  108. data/spec/{swt_shoes → shoes/swt}/slot_spec.rb +1 -1
  109. data/spec/{swt_shoes → shoes/swt}/spec_helper.rb +0 -1
  110. data/spec/{swt_shoes → shoes/swt}/star_spec.rb +1 -1
  111. data/spec/{swt_shoes → shoes/swt}/text_block/centered_text_segment_spec.rb +1 -1
  112. data/spec/{swt_shoes → shoes/swt}/text_block/cursor_painter_spec.rb +8 -4
  113. data/spec/{swt_shoes → shoes/swt}/text_block/fitter_spec.rb +5 -5
  114. data/spec/{swt_shoes → shoes/swt}/text_block/painter_spec.rb +1 -1
  115. data/spec/{swt_shoes → shoes/swt}/text_block/text_font_factory_spec.rb +1 -1
  116. data/spec/{swt_shoes → shoes/swt}/text_block/text_segment_collection_spec.rb +7 -2
  117. data/spec/{swt_shoes → shoes/swt}/text_block/text_segment_spec.rb +1 -1
  118. data/spec/{swt_shoes → shoes/swt}/text_block_spec.rb +2 -5
  119. data/spec/spec_helper.rb +7 -3
  120. metadata +132 -331
  121. data/CHANGELOG +0 -84
  122. data/Gemfile +0 -24
  123. data/Guardfile +0 -11
  124. data/manifests/common.rb +0 -34
  125. data/manifests/shoes-swt.rb +0 -29
  126. data/spec/code_coverage.rb +0 -14
  127. data/spec/shoes/animation_spec.rb +0 -65
  128. data/spec/shoes/app_spec.rb +0 -484
  129. data/spec/shoes/arc_spec.rb +0 -51
  130. data/spec/shoes/background_spec.rb +0 -53
  131. data/spec/shoes/border_spec.rb +0 -47
  132. data/spec/shoes/builtin_methods_spec.rb +0 -110
  133. data/spec/shoes/button_spec.rb +0 -44
  134. data/spec/shoes/check_spec.rb +0 -35
  135. data/spec/shoes/color_spec.rb +0 -408
  136. data/spec/shoes/common/inspect_spec.rb +0 -26
  137. data/spec/shoes/common/remove_spec.rb +0 -38
  138. data/spec/shoes/common/style_normalizer_spec.rb +0 -28
  139. data/spec/shoes/common/style_spec.rb +0 -147
  140. data/spec/shoes/configuration_spec.rb +0 -36
  141. data/spec/shoes/constants_spec.rb +0 -38
  142. data/spec/shoes/dialog_spec.rb +0 -163
  143. data/spec/shoes/dimension_spec.rb +0 -407
  144. data/spec/shoes/dimensions_spec.rb +0 -837
  145. data/spec/shoes/download_spec.rb +0 -142
  146. data/spec/shoes/flow_spec.rb +0 -133
  147. data/spec/shoes/font_spec.rb +0 -37
  148. data/spec/shoes/framework_learning_spec.rb +0 -30
  149. data/spec/shoes/gradient_spec.rb +0 -32
  150. data/spec/shoes/helpers/fake_element.rb +0 -17
  151. data/spec/shoes/helpers/inspect_helpers.rb +0 -5
  152. data/spec/shoes/helpers/sample17_helper.rb +0 -66
  153. data/spec/shoes/image_spec.rb +0 -49
  154. data/spec/shoes/images/shoe.jpg +0 -0
  155. data/spec/shoes/input_box_spec.rb +0 -80
  156. data/spec/shoes/integration_spec.rb +0 -20
  157. data/spec/shoes/internal_app_spec.rb +0 -141
  158. data/spec/shoes/keypress_spec.rb +0 -11
  159. data/spec/shoes/keyrelease_spec.rb +0 -12
  160. data/spec/shoes/line_spec.rb +0 -49
  161. data/spec/shoes/link_spec.rb +0 -105
  162. data/spec/shoes/list_box_spec.rb +0 -74
  163. data/spec/shoes/logger/ruby_spec.rb +0 -8
  164. data/spec/shoes/logger_spec.rb +0 -45
  165. data/spec/shoes/oval_spec.rb +0 -24
  166. data/spec/shoes/point_spec.rb +0 -71
  167. data/spec/shoes/progress_spec.rb +0 -54
  168. data/spec/shoes/radio_spec.rb +0 -32
  169. data/spec/shoes/rect_spec.rb +0 -39
  170. data/spec/shoes/renamed_delegate_spec.rb +0 -70
  171. data/spec/shoes/shape_spec.rb +0 -95
  172. data/spec/shoes/shared_examples/button.rb +0 -6
  173. data/spec/shoes/shared_examples/changeable.rb +0 -26
  174. data/spec/shoes/shared_examples/clickable.rb +0 -5
  175. data/spec/shoes/shared_examples/common_methods.rb +0 -35
  176. data/spec/shoes/shared_examples/dimensions.rb +0 -32
  177. data/spec/shoes/shared_examples/dsl.rb +0 -44
  178. data/spec/shoes/shared_examples/dsl/animate.rb +0 -29
  179. data/spec/shoes/shared_examples/dsl/arc.rb +0 -45
  180. data/spec/shoes/shared_examples/dsl/background.rb +0 -26
  181. data/spec/shoes/shared_examples/dsl/border.rb +0 -10
  182. data/spec/shoes/shared_examples/dsl/button.rb +0 -5
  183. data/spec/shoes/shared_examples/dsl/cap.rb +0 -6
  184. data/spec/shoes/shared_examples/dsl/check.rb +0 -11
  185. data/spec/shoes/shared_examples/dsl/edit_box.rb +0 -8
  186. data/spec/shoes/shared_examples/dsl/edit_line.rb +0 -8
  187. data/spec/shoes/shared_examples/dsl/editable_element.rb +0 -29
  188. data/spec/shoes/shared_examples/dsl/fill.rb +0 -27
  189. data/spec/shoes/shared_examples/dsl/flow.rb +0 -15
  190. data/spec/shoes/shared_examples/dsl/gradient.rb +0 -62
  191. data/spec/shoes/shared_examples/dsl/image.rb +0 -21
  192. data/spec/shoes/shared_examples/dsl/line.rb +0 -9
  193. data/spec/shoes/shared_examples/dsl/nofill.rb +0 -6
  194. data/spec/shoes/shared_examples/dsl/nostroke.rb +0 -6
  195. data/spec/shoes/shared_examples/dsl/oval.rb +0 -88
  196. data/spec/shoes/shared_examples/dsl/pattern.rb +0 -34
  197. data/spec/shoes/shared_examples/dsl/progress.rb +0 -7
  198. data/spec/shoes/shared_examples/dsl/rect.rb +0 -92
  199. data/spec/shoes/shared_examples/dsl/rgb.rb +0 -26
  200. data/spec/shoes/shared_examples/dsl/shape.rb +0 -21
  201. data/spec/shoes/shared_examples/dsl/star.rb +0 -48
  202. data/spec/shoes/shared_examples/dsl/stroke.rb +0 -30
  203. data/spec/shoes/shared_examples/dsl/strokewidth.rb +0 -19
  204. data/spec/shoes/shared_examples/dsl/style.rb +0 -32
  205. data/spec/shoes/shared_examples/dsl/text_elements.rb +0 -81
  206. data/spec/shoes/shared_examples/dsl/video.rb +0 -5
  207. data/spec/shoes/shared_examples/dsl_app_context.rb +0 -8
  208. data/spec/shoes/shared_examples/hover_leave.rb +0 -11
  209. data/spec/shoes/shared_examples/parent.rb +0 -6
  210. data/spec/shoes/shared_examples/scroll.rb +0 -41
  211. data/spec/shoes/shared_examples/shared_element_method.rb +0 -60
  212. data/spec/shoes/shared_examples/slot.rb +0 -331
  213. data/spec/shoes/shared_examples/state.rb +0 -19
  214. data/spec/shoes/shared_examples/style.rb +0 -82
  215. data/spec/shoes/slot_spec.rb +0 -130
  216. data/spec/shoes/sound_spec.rb +0 -15
  217. data/spec/shoes/span_spec.rb +0 -112
  218. data/spec/shoes/spec_helper.rb +0 -24
  219. data/spec/shoes/stack_spec.rb +0 -79
  220. data/spec/shoes/star_spec.rb +0 -31
  221. data/spec/shoes/text_block_dimensions_spec.rb +0 -75
  222. data/spec/shoes/text_block_spec.rb +0 -270
  223. data/spec/shoes/url_spec.rb +0 -68
  224. data/spec/shoes/widget_spec.rb +0 -70
  225. data/spec/shoes_spec.rb +0 -44
  226. data/spec/swt_shoes/shared_examples/clickable.rb +0 -85
  227. data/spec/swt_shoes/sound.rb +0 -10
@@ -20,7 +20,7 @@ class Shoes
20
20
  set_size
21
21
  end
22
22
 
23
- def eval_block blk
23
+ def eval_block(blk)
24
24
  blk.call @dsl
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ class Shoes
28
28
  @real.set_focus
29
29
  end
30
30
 
31
- def click blk
31
+ def click(blk)
32
32
  remove_listeners
33
33
  @real.addSelectionListener { eval_block blk }
34
34
  end
@@ -45,6 +45,7 @@ class Shoes
45
45
  end
46
46
 
47
47
  private
48
+
48
49
  def set_size
49
50
  @real.pack
50
51
  @dsl.element_width ||= @real.size.x
@@ -65,10 +65,10 @@ class Shoes
65
65
  last_segment = segments.last
66
66
 
67
67
  @dsl.absolute_right = starting_left + last_segment.last_line_width +
68
- margin_right
68
+ margin_right
69
69
 
70
70
  @dsl.absolute_bottom = starting_top + last_segment.height +
71
- margin_top + margin_bottom
71
+ margin_top + margin_bottom
72
72
  end
73
73
 
74
74
  def bump_absolutes_to_next_line
@@ -79,7 +79,7 @@ class Shoes
79
79
  def set_calculated_sizes
80
80
  @dsl.calculated_width = segments.last.width
81
81
  @dsl.calculated_height = segments.inject(0) do |total, segment|
82
- total += segment.bounds.height
82
+ total + segment.bounds.height
83
83
  end
84
84
  end
85
85
 
@@ -22,7 +22,6 @@ class Shoes
22
22
 
23
23
  move_if_necessary(segment.element_left + position.x,
24
24
  segment.element_top + position.y)
25
-
26
25
  end
27
26
 
28
27
  # It's important to only move when necessary to avoid constant redraws
@@ -33,7 +32,8 @@ class Shoes
33
32
  end
34
33
 
35
34
  def move_textcursor(x, y)
36
- textcursor.move(x, y)
35
+ height = textcursor.height
36
+ textcursor.move(x, y, x, y + height)
37
37
  textcursor.show
38
38
  end
39
39
 
@@ -84,7 +84,6 @@ class Shoes
84
84
 
85
85
  # Since we regenerate layouts, we must dispose of first try here.
86
86
  layout.dispose
87
- layout = nil
88
87
 
89
88
  first_layout = generate_layout(width, first_text)
90
89
 
@@ -185,6 +184,9 @@ class Shoes
185
184
  segment
186
185
  end
187
186
 
187
+ # Splits the text into two pieces based on height. Allows one final
188
+ # line to exceed the requested height, which results in smoother
189
+ # flowing text between different sized fonts on a line.
188
190
  def split_text(layout, height)
189
191
  ending_offset = 0
190
192
  height_so_far = 0
@@ -192,9 +194,9 @@ class Shoes
192
194
  offsets = layout.line_offsets
193
195
  offsets[0...-1].each_with_index do |_, i|
194
196
  height_so_far += layout.line_bounds(i).height
195
- break if height_so_far > height
197
+ ending_offset = offsets[i + 1]
196
198
 
197
- ending_offset = offsets[i+1]
199
+ break if height_so_far > height
198
200
  end
199
201
  [layout.text[0...ending_offset], layout.text[ending_offset..-1]]
200
202
  end
@@ -30,15 +30,15 @@ class Shoes
30
30
 
31
31
  def default_text_styles
32
32
  {
33
- :fg => @style[:fg],
34
- :bg => @style[:bg],
35
- :strikecolor => @style[:strikecolor],
36
- :undercolor => @style[:undercolor],
37
- :font_detail => {
38
- :name => @dsl.font,
39
- :size => @dsl.size,
40
- :styles => [::Swt::SWT::NORMAL]
41
- }
33
+ fg: @style[:fg],
34
+ bg: @style[:bg],
35
+ strikecolor: @style[:strikecolor],
36
+ undercolor: @style[:undercolor],
37
+ font_detail: {
38
+ name: @dsl.font,
39
+ size: @dsl.size,
40
+ styles: [::Swt::SWT::NORMAL]
41
+ }
42
42
  }
43
43
  end
44
44
  end
@@ -29,9 +29,9 @@ class Shoes
29
29
  @fonts.find do |font|
30
30
  font.font_data.any? do |font_data|
31
31
  font_data.name == name &&
32
- # Windows seems to create fonts of height 15.75 when requesting 16
33
- font_data.height.round == size.round &&
34
- font_data.style == styles
32
+ # Windows seems to create fonts of height 15.75 when requesting 16
33
+ font_data.height.round == size.round &&
34
+ font_data.style == styles
35
35
  end
36
36
  end
37
37
  end
@@ -18,7 +18,7 @@ class Shoes
18
18
 
19
19
  extend Forwardable
20
20
  def_delegators :@layout, :text, :text=, :bounds, :width, :spacing,
21
- :line_bounds, :line_count, :line_offsets
21
+ :line_bounds, :line_count, :line_offsets
22
22
 
23
23
  def initialize(dsl, text, width)
24
24
  @dsl = dsl
@@ -43,7 +43,7 @@ class Shoes
43
43
  self
44
44
  end
45
45
 
46
- def get_location(cursor, trailing=false)
46
+ def get_location(cursor, trailing = false)
47
47
  @layout.get_location(cursor, trailing)
48
48
  end
49
49
 
@@ -51,15 +51,15 @@ class Shoes
51
51
  layout.justify = style[:justify]
52
52
  layout.spacing = (style[:leading] || DEFAULT_SPACING)
53
53
  layout.alignment = case style[:align]
54
- when 'center'; ::Swt::SWT::CENTER
55
- when 'right'; ::Swt::SWT::RIGHT
54
+ when 'center' then ::Swt::SWT::CENTER
55
+ when 'right' then ::Swt::SWT::RIGHT
56
56
  else ::Swt::SWT::LEFT
57
57
  end
58
58
 
59
59
  set_style(TextStyleFactory.apply_styles(default_text_styles, style))
60
60
  end
61
61
 
62
- def set_style(styles, range=(0...text.length))
62
+ def set_style(styles, range = (0...text.length))
63
63
  # If we've been given an empty/nonsense range, just ignore it
64
64
  return unless range.count > 0
65
65
 
@@ -71,10 +71,10 @@ class Shoes
71
71
  def font_styling
72
72
  {
73
73
  font_detail: {
74
- name: @dsl.font,
75
- size: @dsl.size,
76
- styles:[::Swt::SWT::NORMAL]
77
- }
74
+ name: @dsl.font,
75
+ size: @dsl.size,
76
+ styles: [::Swt::SWT::NORMAL]
77
+ }
78
78
  }
79
79
  end
80
80
 
@@ -83,6 +83,8 @@ class Shoes
83
83
  # segments apply, and what the relative ranges within each segment to use.
84
84
  def segment_ranges(text_range)
85
85
  return [] unless @segments.first # TODO WTF #636
86
+ return [] unless text_range.any?
87
+
86
88
  first_text = @segments.first.text
87
89
  slice = first_text[text_range]
88
90
 
@@ -47,12 +47,13 @@ class Shoes
47
47
  end
48
48
 
49
49
  private
50
+
50
51
  def set_rise(style)
51
52
  @gui_style.rise = style[:rise]
52
53
  end
53
54
 
54
55
  def set_underline(style)
55
- @gui_style.underline = style[:underline].nil? || style[:underline] == "none" ? false : true
56
+ @gui_style.underline = style_present? style[:underline]
56
57
  @gui_style.underlineStyle = UNDERLINE_STYLES[style[:underline]]
57
58
  end
58
59
 
@@ -61,7 +62,7 @@ class Shoes
61
62
  end
62
63
 
63
64
  def set_strikethrough(style)
64
- @gui_style.strikeout = style[:strikethrough].nil? || style[:strikethrough] == "none" ? false : true
65
+ @gui_style.strikeout = style_present? style[:strikethrough]
65
66
  end
66
67
 
67
68
  def set_strikecolor(style)
@@ -74,7 +75,7 @@ class Shoes
74
75
  end
75
76
 
76
77
  def color_from_dsl(dsl_color, default = nil)
77
- return nil if dsl_color.nil? and default.nil?
78
+ return nil if dsl_color.nil? && default.nil?
78
79
  return color_from_dsl default if dsl_color.nil?
79
80
  color = ::Swt::Color.new(Shoes.display, dsl_color.red, dsl_color.green, dsl_color.blue)
80
81
 
@@ -83,6 +84,11 @@ class Shoes
83
84
 
84
85
  color
85
86
  end
87
+
88
+ private
89
+ def style_present?(style)
90
+ !style.nil? && !(style == 'none')
91
+ end
86
92
  end
87
93
  end
88
94
  end
@@ -3,7 +3,7 @@ class Shoes
3
3
  class Timer
4
4
  def initialize(dsl, app, blk)
5
5
  @blk = blk
6
- task = Proc.new do
6
+ task = proc do
7
7
  unless app.real.disposed?
8
8
  eval_block
9
9
  end
@@ -1,5 +1,5 @@
1
1
  class Shoes
2
2
  module Swt
3
- VERSION = "4.0.0.pre2"
3
+ VERSION = "4.0.0.pre3"
4
4
  end
5
5
  end
data/shoes-swt.gemspec CHANGED
@@ -1,6 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require_relative 'lib/shoes/swt/version'
3
- require_relative 'manifests/shoes-swt'
2
+ require File.expand_path('lib/shoes/swt/version')
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = "shoes-swt"
@@ -13,12 +12,14 @@ Gem::Specification.new do |s|
13
12
  s.description = %q{A JRuby and Swt backend for Shoes, the best little GUI toolkit for Ruby. Shoes makes building for Mac, Windows, and Linux super simple.}
14
13
  s.license = 'MIT'
15
14
 
16
- s.files = ShoesSwtManifest.files
17
- s.test_files = ShoesSwtManifest.test_files
15
+ s.files = `git ls-files`.split($/)
16
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
17
  s.require_paths = ["lib"]
19
18
 
20
19
  s.add_dependency "swt", "~>4.4"
21
20
  s.add_dependency "after_do", "~>0.3"
22
- s.add_dependency "shoes-dsl", Shoes::Swt::VERSION
23
- s.add_dependency "furoshiki", "~>0.2.0" # For packaging
21
+ s.add_dependency "shoes-core", Shoes::Swt::VERSION
22
+ s.add_dependency "shoes-package", Shoes::Swt::VERSION
23
+
24
+ s.executables = ['shoes-swt']
24
25
  end
@@ -4,12 +4,12 @@ describe Shoes::CLI do
4
4
  subject {Shoes::CLI.new}
5
5
 
6
6
  before :each do
7
- allow(subject).to receive :package
7
+ allow(subject.packager).to receive :run
8
8
  end
9
9
 
10
10
  it 'does not raise an error for a normal packaging command #624' do
11
11
  expect do
12
- subject.run ['-p', 'swt:app', 'test/simple-sound.rb']
12
+ subject.run ['-p', 'swt:app', 'samples/simple-sound.rb']
13
13
  end.not_to raise_error
14
14
  end
15
15
  end
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Animation do
4
4
  include_context 'swt app'
@@ -1,4 +1,4 @@
1
- require "swt_shoes/spec_helper"
1
+ require "shoes/swt/spec_helper"
2
2
 
3
3
  describe Shoes::Swt::App do
4
4
  let(:opts) { {:background => Shoes::COLORS[:salmon], :resizable => true} }
@@ -24,10 +24,11 @@ describe Shoes::Swt::App do
24
24
  it_behaves_like "clickable backend" do
25
25
  let(:swt_app) { subject }
26
26
  let(:click_block_parameters) { click_block_coordinates }
27
+ let(:click_listener) { double("listener", add_click_listener: nil, add_release_listener: nil) }
27
28
 
28
29
  before do
29
30
  allow(dsl).to receive(:pass_coordinates?) { true }
30
- allow(subject).to receive(:add_listener)
31
+ allow(subject).to receive(:click_listener) { click_listener }
31
32
  end
32
33
  end
33
34
 
@@ -70,7 +71,7 @@ describe Shoes::Swt::App do
70
71
 
71
72
  context "when attempting to copy text" do
72
73
  it "copies text to clipboard" do
73
- skip 'Seems to be broken with tmux please see/fix #398'
74
+ # In case of failure when running tmux, please see #398
74
75
  text = "test"
75
76
  subject.clipboard = text
76
77
  expect(subject.clipboard).to eq(text)
@@ -81,4 +82,36 @@ describe Shoes::Swt::App do
81
82
  # which at the time is overkill imo
82
83
  it {is_expected.to respond_to :started?}
83
84
 
85
+ describe 'App dimensions' do
86
+ let(:client_area) {double 'client_area', width: width, height: height}
87
+ let(:vertical_bar) {double 'scroll bar', visible?: bar_visible}
88
+ let(:shell) {double('shell', client_area: client_area,
89
+ vertical_bar: vertical_bar)}
90
+ let(:width) {50}
91
+ let(:height) {80}
92
+ let(:bar_visible) {false}
93
+
94
+ before :each do
95
+ allow(subject).to receive(:shell).and_return(shell)
96
+ end
97
+
98
+ shared_examples_for 'reports client area dimensions' do
99
+ it 'always returns the client area width' do
100
+ expect(subject.width).to eq width
101
+ end
102
+
103
+ it 'returns the client area height' do
104
+ expect(subject.height).to eq height
105
+ end
106
+ end
107
+
108
+ it_behaves_like 'reports client area dimensions'
109
+
110
+ context 'with a scroll bar' do
111
+ let(:bar_visible) {true}
112
+
113
+ it_behaves_like 'reports client area dimensions'
114
+ end
115
+ end
116
+
84
117
  end
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Arc do
4
4
  include_context "swt app"
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Background do
4
4
  include_context "swt app"
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Border do
4
4
  include_context "swt app"
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Button do
4
4
  include_context "swt app"
@@ -1,4 +1,4 @@
1
- require 'swt_shoes/spec_helper'
1
+ require 'shoes/swt/spec_helper'
2
2
 
3
3
  describe Shoes::Swt::Check do
4
4
  include_context "swt app"
@@ -0,0 +1,162 @@
1
+ require 'shoes/swt/spec_helper'
2
+
3
+ describe Shoes::Swt::ClickListener do
4
+ include_context 'swt app'
5
+
6
+ let(:dsl) { double('dsl', hidden?: false, pass_coordinates?: false) }
7
+
8
+ let(:click_block) { double("click block", call: nil) }
9
+ let(:release_block) { double("release block", call: nil) }
10
+
11
+ subject { Shoes::Swt::ClickListener.new(swt_app) }
12
+
13
+ before do
14
+ allow(swt_app).to receive(:add_listener)
15
+ end
16
+
17
+ describe "SWT event wireup" do
18
+ it "registers mouse down and mouse up" do
19
+ subject
20
+ expect(swt_app).to have_received(:add_listener).with(::Swt::SWT::MouseDown, subject)
21
+ expect(swt_app).to have_received(:add_listener).with(::Swt::SWT::MouseUp, subject)
22
+ end
23
+ end
24
+
25
+ describe "adding listeners" do
26
+ it "adds a click listener" do
27
+ subject.add_click_listener(dsl, click_block)
28
+ expect(subject.clickable_elements).to eq([dsl])
29
+ end
30
+
31
+ it "adds a release listener" do
32
+ subject.add_release_listener(dsl, release_block)
33
+ expect(subject.clickable_elements).to eq([dsl])
34
+ end
35
+
36
+ it "only reports each element once" do
37
+ subject.add_click_listener(dsl, click_block)
38
+ subject.add_release_listener(dsl, release_block)
39
+ expect(subject.clickable_elements).to eq([dsl])
40
+ end
41
+ end
42
+
43
+ describe "removing" do
44
+ it "removes safely when not added" do
45
+ subject.remove_listeners_for(dsl)
46
+ expect(subject.clickable_elements).to be_empty
47
+ end
48
+
49
+ it "removes element" do
50
+ subject.add_click_listener(dsl, click_block)
51
+ subject.add_release_listener(dsl, release_block)
52
+
53
+ subject.remove_listeners_for(dsl)
54
+
55
+ expect(subject.clickable_elements).to be_empty
56
+ end
57
+ end
58
+
59
+ describe "event handling" do
60
+ before do
61
+ subject.add_click_listener(dsl, click_block)
62
+ subject.add_release_listener(dsl, release_block)
63
+
64
+ allow(dsl).to receive(:in_bounds?) { false }
65
+ allow(dsl).to receive(:in_bounds?).with(10, 10) { true }
66
+ end
67
+
68
+ shared_examples_for "mouse event" do
69
+ it "triggers" do
70
+ event = double(type: event_type, x: 10, y: 10)
71
+ subject.handle_event(event)
72
+
73
+ expect(block).to have_received(:call)
74
+ end
75
+
76
+ it "doesn't trigger other block" do
77
+ event = double(type: event_type, x: 10, y: 10)
78
+ subject.handle_event(event)
79
+
80
+ expect(other_block).to_not have_received(:call)
81
+ end
82
+
83
+ it "doesn't trigger click out of bounds" do
84
+ event = double(type: event_type, x: 20, y: 10)
85
+ subject.handle_event(event)
86
+
87
+ expect(block).to_not have_received(:call)
88
+ end
89
+
90
+ it "re-registering an element's click overwrites old one" do
91
+ another_block = double("another block", call: nil)
92
+ subject.send(add_method, dsl, another_block)
93
+
94
+ event = double(type: event_type, x: 10, y: 10)
95
+ subject.handle_event(event)
96
+
97
+ expect(block).to_not have_received(:call)
98
+ expect(another_block).to have_received(:call)
99
+ end
100
+
101
+ it "takes the last element to respond" do
102
+ other_dsl = double("other dsl", in_bounds?: true,
103
+ hidden?: false, pass_coordinates?: false)
104
+ other_block = double("other block", call: nil)
105
+
106
+ subject.send(add_method, other_dsl, other_block)
107
+
108
+ event = double(type: event_type, x: 10, y: 10)
109
+ subject.handle_event(event)
110
+
111
+ expect(block).to_not have_received(:call)
112
+ expect(other_block).to have_received(:call)
113
+ end
114
+
115
+ it "won't call on hidden elements" do
116
+ allow(dsl).to receive(:hidden?) { true }
117
+
118
+ event = double(type: event_type, x: 10, y: 10)
119
+ subject.handle_event(event)
120
+
121
+ expect(block).to_not have_received(:call)
122
+ end
123
+
124
+ it "passes dsl along by default to event" do
125
+ event = double(type: event_type, x: 10, y: 10)
126
+ subject.handle_event(event)
127
+
128
+ expect(block).to have_received(:call).with(dsl)
129
+ end
130
+
131
+ it "can pass coordinates if requested" do
132
+ allow(dsl).to receive(:pass_coordinates?) { true }
133
+
134
+ event = double(type: event_type, x: 10, y: 10, button: 1)
135
+ subject.handle_event(event)
136
+
137
+ expect(block).to have_received(:call).with(1, 10, 10)
138
+ end
139
+
140
+ it "ignores incorrect event types" do
141
+ event = double(type: ::Swt::SWT::KeyDown, x: 10, y: 10)
142
+ subject.handle_event(event)
143
+
144
+ expect(block).to_not have_received(:call)
145
+ end
146
+ end
147
+
148
+ it_behaves_like "mouse event" do
149
+ let(:event_type) { ::Swt::SWT::MouseDown }
150
+ let(:block) { click_block }
151
+ let(:other_block) { release_block }
152
+ let(:add_method) { :add_click_listener }
153
+ end
154
+
155
+ it_behaves_like "mouse event" do
156
+ let(:event_type) { ::Swt::SWT::MouseUp }
157
+ let(:block) { release_block }
158
+ let(:other_block) { click_block }
159
+ let(:add_method) { :add_release_listener }
160
+ end
161
+ end
162
+ end