glimmer-dsl-swt 4.18.3.0 → 4.18.3.1

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.
@@ -38,31 +38,32 @@ class Tetris
38
38
  Z: :red,
39
39
  }
40
40
 
41
- attr_reader :letter, :preview
41
+ attr_reader :game, :letter, :preview
42
42
  alias preview? preview
43
43
  attr_accessor :orientation, :blocks, :row, :column
44
44
 
45
- def initialize
45
+ def initialize(game)
46
+ @game = game
46
47
  @letter = LETTER_COLORS.keys.sample
47
48
  @orientation = :north
48
49
  @blocks = default_blocks
49
50
  @preview = true
50
51
  new_row = 0
51
- new_column = (PREVIEW_PLAYFIELD_WIDTH - width)/2
52
+ new_column = (Model::Game::PREVIEW_PLAYFIELD_WIDTH - width)/2
52
53
  update_playfield(new_row, new_column)
53
54
  end
54
55
 
55
56
  def playfield
56
- @preview ? Game.preview_playfield : Game.playfield
57
+ @preview ? game.preview_playfield : game.playfield
57
58
  end
58
59
 
59
60
  def launch!
60
61
  remove_from_playfield
61
62
  @preview = false
62
63
  new_row = 1 - height
63
- new_column = (PLAYFIELD_WIDTH - width)/2
64
+ new_column = (game.playfield_width - width)/2
64
65
  update_playfield(new_row, new_column)
65
- Game.tetrominoes << self
66
+ game.tetrominoes << self
66
67
  end
67
68
 
68
69
  def update_playfield(new_row = nil, new_column = nil)
@@ -89,16 +90,16 @@ class Tetris
89
90
 
90
91
  def stopped?
91
92
  return true if @stopped || @preview
92
- playfield_remaining_heights = Game.playfield_remaining_heights(self)
93
+ playfield_remaining_heights = game.playfield_remaining_heights(self)
93
94
  result = bottom_most_blocks.any? do |bottom_most_block|
94
95
  playfield_column = @column + bottom_most_block[:column_index]
95
96
  playfield_remaining_heights[playfield_column] &&
96
97
  @row + bottom_most_block[:row] >= playfield_remaining_heights[playfield_column] - 1
97
98
  end
98
- if result && !Game.hypothetical?
99
+ if result && !game.hypothetical?
99
100
  @stopped = result
100
- Game.consider_eliminating_lines
101
- Model::Game.consider_adding_tetromino
101
+ game.consider_eliminating_lines
102
+ @game.consider_adding_tetromino
102
103
  end
103
104
  result
104
105
  end
@@ -124,9 +125,10 @@ class Tetris
124
125
  end
125
126
 
126
127
  def right_blocked?
127
- (@column == PLAYFIELD_WIDTH - width) ||
128
+ (@column == game.playfield_width - width) ||
128
129
  right_most_blocks.any? { |right_most_block|
129
- playfield[@row + right_most_block[:row_index]][@column + right_most_block[:column_index] + 1].occupied?
130
+ (@row + right_most_block[:row_index]) >= 0 &&
131
+ playfield[@row + right_most_block[:row_index]][@column + right_most_block[:column_index] + 1].occupied?
130
132
  }
131
133
  end
132
134
 
@@ -150,7 +152,8 @@ class Tetris
150
152
  def left_blocked?
151
153
  (@column == 0) ||
152
154
  left_most_blocks.any? { |left_most_block|
153
- playfield[@row + left_most_block[:row_index]][@column + left_most_block[:column_index] - 1].occupied?
155
+ (@row + left_most_block[:row_index]) >= 0 &&
156
+ playfield[@row + left_most_block[:row_index]][@column + left_most_block[:column_index] - 1].occupied?
154
157
  }
155
158
  end
156
159
 
@@ -179,7 +182,7 @@ class Tetris
179
182
  @blocks.size
180
183
  end
181
184
 
182
- def down
185
+ def down!
183
186
  launch! if preview?
184
187
  unless stopped?
185
188
  new_row = @row + 1
@@ -187,14 +190,14 @@ class Tetris
187
190
  end
188
191
  end
189
192
 
190
- def left
193
+ def left!
191
194
  unless left_blocked?
192
195
  new_column = @column - 1
193
196
  update_playfield(@row, new_column)
194
197
  end
195
198
  end
196
199
 
197
- def right
200
+ def right!
198
201
  unless right_blocked?
199
202
  new_column = @column + 1
200
203
  update_playfield(@row, new_column)
@@ -202,11 +205,11 @@ class Tetris
202
205
  end
203
206
 
204
207
  # Rotate in specified direcation, which can be :right (clockwise) or :left (counterclockwise)
205
- def rotate(direction)
208
+ def rotate!(direction)
206
209
  return if stopped?
207
210
  can_rotate = nil
208
211
  new_blocks = nil
209
- Game.hypothetical do
212
+ game.hypothetical do
210
213
  hypothetical_rotated_tetromino = hypothetical_tetromino
211
214
  new_blocks = hypothetical_rotated_tetromino.rotate_blocks(direction)
212
215
  can_rotate = !hypothetical_rotated_tetromino.stopped? && !hypothetical_rotated_tetromino.right_blocked? && !hypothetical_rotated_tetromino.left_blocked?
@@ -222,13 +225,13 @@ class Tetris
222
225
  end
223
226
 
224
227
  def rotate_blocks(direction)
225
- new_blocks = Matrix[*@blocks].transpose.to_a
226
- if direction == :right
227
- new_blocks = new_blocks.map(&:reverse)
228
- else
229
- new_blocks = new_blocks.reverse
230
- end
231
- Matrix[*new_blocks].to_a
228
+ new_blocks = Matrix[*@blocks].transpose.to_a
229
+ if direction == :right
230
+ new_blocks = new_blocks.map(&:reverse)
231
+ else
232
+ new_blocks = new_blocks.reverse
233
+ end
234
+ Matrix[*new_blocks].to_a
232
235
  end
233
236
 
234
237
  def hypothetical_tetromino
@@ -19,12 +19,20 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ require_relative 'tetris_menu_bar'
23
+
22
24
  class Tetris
23
25
  module View
24
26
  class GameOverDialog
25
27
  include Glimmer::UI::CustomShell
26
28
 
27
- options :parent_shell
29
+ options :parent_shell, :game
30
+
31
+ after_body {
32
+ observe(game, :game_over) do |game_over|
33
+ hide if !game_over
34
+ end
35
+ }
28
36
 
29
37
  body {
30
38
  dialog(parent_shell) {
@@ -34,6 +42,8 @@ class Tetris
34
42
  }
35
43
  text 'Tetris'
36
44
 
45
+ tetris_menu_bar(game: game)
46
+
37
47
  label(:center) {
38
48
  text 'Game Over!'
39
49
  font name: 'Menlo', height: 30, style: :bold
@@ -43,30 +53,16 @@ class Tetris
43
53
  text 'Play Again?'
44
54
 
45
55
  on_widget_selected {
46
- Model::Game.restart
47
-
48
- body_root.close
56
+ hide
57
+ game.restart!
49
58
  }
50
59
  }
51
60
 
52
61
  on_shell_activated {
53
- Model::Game.game_over = true
54
62
  display.beep
55
63
  }
56
-
57
- on_shell_closed {
58
- exit_game
59
- }
60
-
61
- on_key_pressed { |event|
62
- exit_game if event.keyCode == swt(:cr)
63
- }
64
64
  }
65
65
  }
66
-
67
- def exit_game
68
- display.dispose if Model::Game.game_over?
69
- end
70
66
  end
71
67
  end
72
68
  end
@@ -27,7 +27,7 @@ class Tetris
27
27
  class ScoreLane
28
28
  include Glimmer::UI::CustomWidget
29
29
 
30
- options :block_size
30
+ options :block_size, :game
31
31
 
32
32
  before_body {
33
33
  @font_name = 'Menlo'
@@ -48,14 +48,14 @@ class Tetris
48
48
  text 'Next'
49
49
  font name: @font_name, height: @font_height, style: :bold
50
50
  }
51
- playfield(game_playfield: Model::Game.preview_playfield, playfield_width: PREVIEW_PLAYFIELD_WIDTH, playfield_height: PREVIEW_PLAYFIELD_HEIGHT, block_size: BLOCK_SIZE)
51
+ playfield(game_playfield: game.preview_playfield, playfield_width: Model::Game::PREVIEW_PLAYFIELD_WIDTH, playfield_height: Model::Game::PREVIEW_PLAYFIELD_HEIGHT, block_size: block_size)
52
52
 
53
53
  label(:center) {
54
54
  text 'Score'
55
55
  font name: @font_name, height: @font_height, style: :bold
56
56
  }
57
57
  label(:center) {
58
- text bind(Model::Game, :score)
58
+ text bind(game, :score)
59
59
  font height: @font_height
60
60
  }
61
61
 
@@ -66,7 +66,7 @@ class Tetris
66
66
  font name: @font_name, height: @font_height, style: :bold
67
67
  }
68
68
  label(:center) {
69
- text bind(Model::Game, :lines)
69
+ text bind(game, :lines)
70
70
  font height: @font_height
71
71
  }
72
72
 
@@ -77,7 +77,7 @@ class Tetris
77
77
  font name: @font_name, height: @font_height, style: :bold
78
78
  }
79
79
  label(:center) {
80
- text bind(Model::Game, :level)
80
+ text bind(game, :level)
81
81
  font height: @font_height
82
82
  }
83
83
  }
@@ -0,0 +1,72 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ class Tetris
23
+ module View
24
+ class TetrisMenuBar
25
+ include Glimmer::UI::CustomWidget
26
+
27
+ options :game
28
+
29
+ body {
30
+ menu_bar {
31
+ menu {
32
+ text '&Game'
33
+
34
+ menu_item {
35
+ text '&Start'
36
+ enabled bind(game, :game_over)
37
+ accelerator :command, :s
38
+
39
+ on_widget_selected {
40
+ game.start!
41
+ }
42
+ }
43
+ menu_item(:check) {
44
+ text '&Pause'
45
+ accelerator :command, :p
46
+ enabled bind(game, :game_over, on_read: :!)
47
+ selection bind(game, :paused)
48
+ }
49
+ menu_item {
50
+ text '&Restart'
51
+ accelerator :command, :r
52
+ enabled bind(game, :game_over, on_read: :!)
53
+
54
+ on_widget_selected {
55
+ game.restart!
56
+ }
57
+ }
58
+ menu_item(:separator)
59
+ menu_item {
60
+ text '&Exit'
61
+ accelerator :command, :x
62
+
63
+ on_widget_selected {
64
+ parent_proxy.close
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ end
71
+ end
72
+ end
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2007-2021 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -28,7 +28,7 @@ class TicTacToe
28
28
  @tic_tac_toe_board = Board.new
29
29
  @shell = shell {
30
30
  text "Tic-Tac-Toe"
31
- minimum_size 150, 178
31
+ minimum_size 176, 200
32
32
  composite {
33
33
  grid_layout 3, true
34
34
  (1..3).each { |row|
@@ -6,7 +6,7 @@ shell {
6
6
  text 'Hello, Canvas Transform!'
7
7
  minimum_size 330, 352
8
8
 
9
- canvas { |canvas_proxy|
9
+ canvas {
10
10
  background :white
11
11
 
12
12
  image(glimmer_logo, 0, 0) {
@@ -49,7 +49,7 @@ shell { |main_shell|
49
49
  }
50
50
  on_mouse_up { |mouse_event|
51
51
  unless @selected_link.nil?
52
- @help_shell.close unless @help_shell.nil? || @help_shell.is_disposed
52
+ @help_shell.close unless @help_shell.nil? || @help_shell.disposed?
53
53
  @help_shell = shell(:no_trim) {
54
54
  grid_layout {
55
55
  margin_width 10
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.18.3.0
4
+ version: 4.18.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-26 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
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 1.0.9
18
+ version: 1.0.11
19
19
  name: glimmer
20
20
  type: :runtime
21
21
  prerelease: false
@@ -23,7 +23,7 @@ dependencies:
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.9
26
+ version: 1.0.11
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -476,6 +476,7 @@ files:
476
476
  - samples/elaborate/tetris/view/game_over_dialog.rb
477
477
  - samples/elaborate/tetris/view/playfield.rb
478
478
  - samples/elaborate/tetris/view/score_lane.rb
479
+ - samples/elaborate/tetris/view/tetris_menu_bar.rb
479
480
  - samples/elaborate/tic_tac_toe.rb
480
481
  - samples/elaborate/tic_tac_toe/board.rb
481
482
  - samples/elaborate/tic_tac_toe/cell.rb