rubydraw 0.2.8 → 0.2.9

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.
@@ -3,7 +3,7 @@ require 'rubydraw'
3
3
 
4
4
  class GameWindow < Rubydraw::Window
5
5
  def initialize
6
- super(500, 500, false, Rubydraw::Color::White)
6
+ super(Point[500, 500], [], Rubydraw::Color::White)
7
7
  @score = 0
8
8
  @score_text = Rubydraw::Text.new("", Rubydraw::Color::Black)
9
9
  @game_objects = []
data/examples/image_ex.rb CHANGED
@@ -4,7 +4,7 @@ require 'rubydraw'
4
4
  class MyWindow < Rubydraw::Window
5
5
  # Create a new window with an bug image inside it
6
6
  def initialize
7
- super(300, 300)
7
+ super(Point[300, 300])
8
8
  @image = Rubydraw::Image.new("media/bug.png")
9
9
  whenever Rubydraw::Events::QuitRequest do
10
10
  close
@@ -2,8 +2,8 @@ require 'rubygems'
2
2
  require 'rubydraw'
3
3
 
4
4
  class MyWindow < Rubydraw::Window
5
- def initialize(width, height)
6
- super(width, height)
5
+ def initialize(dimensions)
6
+ super(dimensions)
7
7
  puts "New window created with width: #{@width} and height #{@height}"
8
8
  whenever Rubydraw::Events::QuitRequest do
9
9
  close
@@ -16,4 +16,4 @@ w = gets.to_i
16
16
  print "Window width: "
17
17
  h = gets.to_i
18
18
 
19
- window = MyWindow.new(w, h).show
19
+ window = MyWindow.new(Point[w, h]).show
data/lib/rubydraw.rb CHANGED
@@ -8,6 +8,7 @@ require 'ext/object'
8
8
  # Require all the rubydraw files
9
9
  files = %w[
10
10
  window
11
+ flags
11
12
  surface
12
13
  image
13
14
  sound
@@ -57,9 +57,9 @@ module Rubydraw
57
57
  end
58
58
 
59
59
  # Convert this color to a numerical value, which only makes sense when
60
- # read as a hex number, e.g. red would be: +0000ff00+.
60
+ # read as a hex number.
61
61
  #
62
- # Also see the comments in: Rubydraw::Color#calc_num_val.
62
+ # Also see the comments in: Rubydraw::Color#calc_num_vals.
63
63
  def to_i(format)
64
64
  if format == :surface or format == :display_fullscreen
65
65
  return @surface_num_val
@@ -83,10 +83,10 @@ module Rubydraw
83
83
  #
84
84
  # Example:
85
85
  # color = Rubydraw::Color.new(red = 200, green = 60, blue = 5, alpha = 255)
86
- # => #<Rubydraw::Color:0x10039cf50 @green=60, @red=200, @alpha=255, @num_val=87869695, @blue=5>
86
+ # => #<Rubydraw::Color: (@red: 200, @green: 60, @blue: 5, @alpha: 255)>
87
87
  # color.to_ary
88
88
  # => [200, 60, 5, 255]
89
- def to_a
89
+ def to_ary
90
90
  [@red, @blue, @green, @alpha]
91
91
  end
92
92
 
@@ -96,7 +96,7 @@ module Rubydraw
96
96
 
97
97
  # Create an SDL::Color equivilent to this Rubydraw::Color.
98
98
  def to_sdl
99
- SDL::Color.new(to_a)
99
+ SDL::Color.new(to_ary)
100
100
  end
101
101
 
102
102
  # Return a new color resulting from mixing this color and +other+ additively.
@@ -21,7 +21,7 @@ module Rubydraw
21
21
  # each event class if it matches the SDL event. No case statements here.
22
22
  def self.match(sdl_event)
23
23
  event_classes = Event.all_subclasses.compact
24
- rubydraw_event = UnknownEvent.new
24
+ rubydraw_event = UnknownEvent.new(sdl_event)
25
25
  # Remove all the classes that don't want to be included in the search
26
26
  event_classes.delete_if {|event_class| not event_class.wants_to_match?}
27
27
  event_classes.each {|event_class| rubydraw_event = event_class.from_sdl_event(sdl_event) if event_class.matches?(sdl_event)}
@@ -64,6 +64,18 @@ module Rubydraw
64
64
  # A special event class that is called when no Rubydraw event is matched to an
65
65
  # SDL event.
66
66
  class UnknownEvent < Event
67
+ # The SDL event should be passed so that the programmer using this library can still
68
+ # attempt to implement behavior, but it will have to match and SDL event, not a
69
+ # Rubydraw::Events::Event.
70
+ def from_sdl_event(sdl_event)
71
+ self.new(sdl_event)
72
+ end
73
+
74
+ attr_reader(:sdl_event)
75
+
76
+ def initialize(sdl_event)
77
+ @sdl_event = sdl_event
78
+ end
67
79
  end
68
80
 
69
81
  # Provides methods used in both Rubydraw::Events::KeyPressed and
@@ -211,7 +223,8 @@ module Rubydraw
211
223
  end
212
224
  end
213
225
 
214
- # Created when the window gains focus.
226
+ # Created when the window gains focus, e.g. clicking on the window after previously using
227
+ # another application.
215
228
  class FocusGain < FocusEvent
216
229
  def self.wants_to_match?
217
230
  true
@@ -220,11 +233,10 @@ module Rubydraw
220
233
  # Redefine Event#matches? because both this class and Rubydraw::Events::FocusLoss use
221
234
  # SDL::ActiveEvent.
222
235
  def self.matches?(sdl_event)
223
- result = false
224
236
  if super(sdl_event)
225
- result = sdl_event.gain == 1
237
+ return sdl_event.gain == 1
226
238
  end
227
- result
239
+ return false
228
240
  end
229
241
  end
230
242
 
@@ -237,20 +249,48 @@ module Rubydraw
237
249
  # Redefine Event#matches? because both this class and Rubydraw::Events::FocuGain use
238
250
  # SDL::ActiveEvent
239
251
  def self.matches?(sdl_event)
240
- result = false
241
252
  if super(sdl_event)
242
- result = sdl_event.gain == 0
253
+ return sdl_event.gain == 0
243
254
  end
244
- result
255
+ return false
245
256
  end
246
257
  end
247
258
 
248
259
  # Created when the user attempts to close the window.
249
260
  class QuitRequest < Event
250
-
251
261
  def self.matching_sdl_type
252
262
  SDL::QUIT
253
263
  end
254
264
  end
265
+
266
+ # Created when the user resizes the window. This can only happen if Rubydraw::Flags::Resizable
267
+ # is passed when the window is created.
268
+ class WindowResize < Event
269
+ def self.matching_sdl_type
270
+ SDL::VIDEORESIZE
271
+ end
272
+
273
+ def self.from_sdl_event(sdl_event)
274
+ self.new(Point[sdl_event.w, sdl_event.h])
275
+ end
276
+
277
+ attr_accessor(:dimensions)
278
+
279
+ def initialize(dimensions)
280
+ @dimensions = dimensions
281
+ end
282
+
283
+ def width
284
+ @dimensions.x
285
+ end
286
+
287
+ def height
288
+ @dimensions.y
289
+ end
290
+
291
+ alias :x :width
292
+
293
+ alias :y :height
294
+ end
255
295
  end
256
296
  end
@@ -0,0 +1,20 @@
1
+ module Rubydraw
2
+ # Contains constants for new window flags, such as Fullscreen and Resizable.
3
+ module Flags
4
+ # Collapse +flags+ using a bitwise or (thanks to Rubygame for most of this
5
+ # chunk of code)
6
+ #
7
+ # Example:
8
+ # Rubydraw::Flags.collapse(0b10, 0b1000, 0b100000)
9
+ # => 42 #(0b101010)
10
+ def self.collapse(*flags)
11
+ first_mem = flags[0]
12
+ flags = first_mem if first_mem.is_a?(Array)
13
+ flags.inject(0) {|total, num|
14
+ num | total}
15
+ end
16
+
17
+ Fullscreen = SDL::FULLSCREEN
18
+ Resizable = SDL::RESIZABLE
19
+ end
20
+ end
@@ -32,7 +32,7 @@ module Rubydraw
32
32
  if @sdl_surface.pointer.null?
33
33
  # SDL couln't load the image; usually happens because it doesn't
34
34
  # exist.
35
- raise Rubydraw::SDLError "Failed to load image: #{SDL.GetError}"
35
+ raise SDLError, "Failed to load image: #{SDL.GetError}"
36
36
  end
37
37
  end
38
38
 
@@ -79,7 +79,7 @@ module Rubydraw
79
79
  end
80
80
  end
81
81
 
82
- def to_a
82
+ def to_ary
83
83
  [@x, @y]
84
84
  end
85
85
 
@@ -5,34 +5,29 @@ module Rubydraw
5
5
  # (which starts when Rubydraw::Window#open is called) is *not* forked! It will break
6
6
  # when Rubydraw::Window#close is called.
7
7
  class Window
8
- attr_reader(:fullscreen)
9
8
  attr_accessor(:bkg_color)
10
9
 
11
10
  # Create a new window.
12
- def initialize(width, height, fullscreen=false, bkg_color=Color::Black)
11
+ def initialize(dimensions, flags=[], bkg_color=Color::Black)
12
+ width, height = dimensions.to_ary
13
+ @fullscreen = flags.include?(Rubydraw::Flags::Fullscreen)
13
14
  if width < 0
14
15
  raise SDLError, "New window width cannot be less than zero"
15
16
  end
16
17
  if height < 0
17
18
  raise SDLError, "New window height cannot be less than zero"
18
19
  end
19
- if height == 0
20
- # Compensate for the height of the window bar itself, the menu bar at the top
21
- # of the screen, and a space of around 4px at the bottom of the screen. Not
22
- # sure what the numbers would be for anything other than Mac OSX; more info
23
- # would be appreciated.
24
- height = Rubydraw::screen_height - 48
20
+ unless flags.include?(Flags::Fullscreen)
21
+ if height == 0
22
+ # Compensate for the height of the window bar itself, the menu bar at the top
23
+ # of the screen, and a space of around 4px at the bottom of the screen. Not
24
+ # sure what the numbers would be for anything other than Mac OSX; more info
25
+ # would be appreciated.
26
+ height = Rubydraw::screen_height - 48
27
+ end
25
28
  end
26
- @width, @height = width, height
27
- @fullscreen = fullscreen
28
- @bkg_color = bkg_color
29
+ @width, @height, @flags, @bkg_color = width, height, Flags.collapse(flags), bkg_color
29
30
  @open = false
30
- @flags =
31
- if fullscreen
32
- SDL::FULLSCREEN
33
- else
34
- 0
35
- end
36
31
 
37
32
  @event_queue = EventQueue.new
38
33
 
@@ -133,10 +128,6 @@ module Rubydraw
133
128
  # Rubydraw::Window#register_action on how to use it.
134
129
  def handle_events
135
130
  events = @event_queue.get_events
136
-
137
- #events.each {|event|
138
- # block = @registered_actions[event.class]
139
- # block.call(event) unless block.nil?}
140
131
  events.each { |event|
141
132
  blocks = @registered_actions[event.class]
142
133
  unless blocks.nil?
@@ -144,12 +135,13 @@ module Rubydraw
144
135
  end }
145
136
  end
146
137
 
147
- # This causes the main loop to exit. Use Rubydraw::Window#close to close the
148
- # window, not this.
138
+ # Causes the main loop to exit as soon as it get the chance to.
149
139
  def break_main_loop
150
140
  @open = false
151
141
  end
152
142
 
143
+ private :break_main_loop
144
+
153
145
  # Returns if this window is open.
154
146
  def open?
155
147
  @open
@@ -196,7 +188,7 @@ module Rubydraw
196
188
  #
197
189
  # area: The area which the new rectangle will cover. Should be an instance of Rubydraw::Rectangle.
198
190
  # color: Specifies what color to use when drawing the rectangle. If +fill+ is enabled, it will fill the new rect with this color. If not, it will only affect the border.
199
- # fill: A boolean determining whether to fill it in or not.
191
+ # fill: A boolean determining whether to fill it in or not. (anti-aliasing is not needed because all the lines are perfectly straigt)
200
192
  def draw_rectangle(area, color, fill=true)
201
193
  tl = area.top_left
202
194
  br = area.bottom_right
@@ -218,8 +210,7 @@ module Rubydraw
218
210
  # center: The center of the ellipse, should be a Rubydraw::Point object.
219
211
  # dimensions: Determines the width and the height of the ellipse to be drawn; should be a Rubydraw::Point.
220
212
  # color: The color to use when drawing; should be an instance of Rubydraw::Color.
221
- # fill: Fill the ellipse with said color?
222
- # anti_aliasing: When set to true, smoothing happens.
213
+ # mode: Can be one of three modes; +:fill+, +:outline+, or +:aa+. When set to +:fill+, it will draw a *solid* ellipse. When it is +:outline+, it renders without filling. When set to +:aa+ (anti-aliasing), it will draw without filling and smooth the border.
223
214
  def draw_ellipse(center, dimensions, color, mode=:fill)
224
215
  x, y = center.to_a
225
216
  width, height = (dimensions / 2).to_a
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rubydraw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.8
5
+ version: 0.2.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - J. Wostenberg
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-12-01 00:00:00 -07:00
13
+ date: 2011-12-02 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -36,6 +36,7 @@ files:
36
36
  - README
37
37
  - lib/rubydraw.rb
38
38
  - lib/rubydraw/window.rb
39
+ - lib/rubydraw/flags.rb
39
40
  - lib/rubydraw/surface.rb
40
41
  - lib/rubydraw/image.rb
41
42
  - lib/rubydraw/sound.rb