rubydraw 0.1.8 → 0.1.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.
data/lib/rubydraw.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  # The only dependency
2
2
  require 'ruby-sdl-ffi'
3
3
 
4
+ # The extention must be loaded first.
5
+ require 'ext/string'
6
+
4
7
  # Require all the rubydraw files
5
8
  files = %w[
6
9
  window
7
10
  image
8
11
  sound
12
+ text
9
13
  events
10
14
  event_queue
11
15
  keys
@@ -14,7 +18,6 @@ files = %w[
14
18
  sdl_error
15
19
  rectangle]
16
20
  files.each {|f| require("rubydraw/" + f)}
17
- require 'ext/string'
18
21
 
19
22
  # Rubydraw is a high level game/graphics library, like Gosu or Rubygame, and is written completely
20
23
  # in Ruby. Its only dependency is ruby-sdl-ffi, which it uses to access SDL functions. Also, thanks,
@@ -30,7 +33,11 @@ module Rubydraw
30
33
  # Initialize SDL.
31
34
  def self.initialize_sdl
32
35
  if SDL::Init(SDL::INIT_EVERYTHING) != 0
33
- raise DrawError "Could not initialize SDL"
36
+ raise SDLError "Failed to initialize SDL: #{SDL.GetError}"
37
+ end
38
+ # Initialize fonts.
39
+ if (SDL::TTF.WasInit == 0 and not SDL::TTF.Init == 0)
40
+ raise SDLError "Failed to initialize SDL TTF: #{SDL.GetError}"
34
41
  end
35
42
  end
36
43
  end
@@ -1,29 +1,30 @@
1
1
  module Rubydraw
2
2
  # Instances of Color are created with four arguments: Red, green,
3
- # blue, and alpha. The last is 0 by default, and all should have
4
- # values ranging from 0 to 255. Use this to specify colors instead
5
- # hex numbers. Each color instance can return its numerical value,
6
- # but only Rubydraw itself should need it.
3
+ # blue, and alpha (see Rubydraw::Color#initialize) The last is 0
4
+ # by default, and all should have values ranging from 0 to 255.
5
+ # Use this to specify colors instead of hex numbers. Each color
6
+ # instance can return its numerical value, but only Rubydraw itself
7
+ # should need it.
7
8
  class Color
8
- #Red = 0x00_00_ff_00
9
- #Green = 0x00_ff_00_00
10
- #Blue = 0xff_00_00_00
11
- #Black = 0x00_00_00_00
12
- #White = 0xff_ff_ff_00
9
+ # Shorthand new method.
10
+ def self.[](red, green, blue, alpha = 0)
11
+ self.new(red, green, blue, alpha)
12
+ end
13
+
13
14
  attr_reader(:red, :green, :blue, :alpha)
14
15
 
15
16
  # Create a new color with the given red, green, blue, and alpha
16
17
  # values. Alpha is 0 by default.
17
18
  #
18
- # TODO: Add other color specs, like HSV or maybe (but probably not) CYMK
19
- def initialize(red, green, blue, alpha = 0)
19
+ # TODO: Add other color specs, like HSV or maybe CYMK
20
+ def initialize(red, green, blue, alpha = 255)
20
21
  @red, @green, @blue, @alpha = red, green, blue, alpha
22
+ calc_num_val
21
23
  end
22
24
 
23
- # Convert this color to a numerical value. It only makes sense in
24
- # hexidecimal or binary format; e.g. red would be equal to
25
- # +0x0000ff00+.
26
- def to_i
25
+ # Calculate and store the numerical value in @num_val. You shouldn't
26
+ # need this (see Rubydraw::Color.new).
27
+ def calc_num_val
27
28
  # Get the hex string for each value.
28
29
  hex_alpha = (@alpha.to_s(16)).color_string
29
30
  hex_red = (@red.to_s(16)).color_string
@@ -33,9 +34,34 @@ module Rubydraw
33
34
  # *Note:* it appears that SDL's (or maybe ruby-sdl-ffi's) color
34
35
  # is backwards. The order appears to be: +BBGGRRAA+
35
36
  color_str = hex_blue + hex_green + hex_red + hex_alpha
36
- color_str.to_i(16)
37
+ @num_val = color_str.to_i(16)
38
+ end
39
+
40
+ # Convert this color to a numerical value, which only makes sense when
41
+ # read as a hex number, e.g. red would be: +0000ff00+.
42
+ #
43
+ # Also see the comments in: Rubydraw::Color#calc_num_val.
44
+ def to_i
45
+ @num_val
37
46
  end
38
47
 
48
+ # Returns an Array containing each +rgba+ value.
49
+ #
50
+ # Example:
51
+ # color = Rubydraw::Color.new(red = 200, green = 60, blue = 5, alpha = 255)
52
+ # => #<Rubydraw::Color:0x10039cf50 @green=60, @red=200, @alpha=255, @num_val=87869695, @blue=5>
53
+ # color.to_ary
54
+ # => [200, 60, 5, 255]
55
+ def to_a
56
+ [@red, @blue, @green, @alpha]
57
+ end
58
+
59
+ # Create an SDL::Color equivilent to this Rubydraw::Color.
60
+ def to_sdl
61
+ SDL::Color.new(to_a)
62
+ end
63
+
64
+
39
65
  White = new(255, 255, 255)
40
66
  Black = new(0, 0, 0)
41
67
  # The primary colors
@@ -191,6 +191,16 @@ module Rubydraw
191
191
  def initialize(position, relative_position)
192
192
  @position, @relative_position = position, relative_position
193
193
  end
194
+
195
+ # Returns the new x positon of the mouse.
196
+ def x
197
+ @position.x
198
+ end
199
+
200
+ # Returns the new y mouse positon.
201
+ def y
202
+ @position.y
203
+ end
194
204
  end
195
205
 
196
206
  # Created either when the window gains or loses focus. This is the parent class for
@@ -25,9 +25,11 @@ module Rubydraw
25
25
  # Notice that you don't blit surfaces to other surfaces when using
26
26
  # Rubygame, but instead you draw things.
27
27
  def draw(window, position)
28
- source_rect = SDL::Rect.new([0, 0, width, height])
29
- blit_rect = SDL::Rect.new([position.x, position.y, window.width, window.height])
30
- SDL::BlitSurface(@sdl_image, source_rect, window.sdl_surface, blit_rect)
28
+ #source_rect = Rectangle[Point[0, 0], width, height]
29
+ #blit_rect = Rectangle[position, window.width, window.height]
30
+ source_rect = Rectangle[width, height, Point[0, 0]]
31
+ blit_rect = Rectangle[window.width, window.height, position]
32
+ SDL::BlitSurface(@sdl_image, source_rect.to_sdl, window.sdl_surface, blit_rect.to_sdl)
31
33
  self
32
34
  end
33
35
 
@@ -5,6 +5,11 @@ module Rubydraw
5
5
  class Rectangle
6
6
  attr_reader(:position, :width, :height)
7
7
 
8
+ # Shorthand new method
9
+ def self.[](width, height, position)
10
+ self.new(width, height, position)
11
+ end
12
+
8
13
  # Create a new rectangle with the given dimensions and position.
9
14
  def initialize(width, height, position)
10
15
  @width, @height, @position = width, height, position
@@ -28,9 +33,14 @@ module Rubydraw
28
33
  Point[x + @width, y + @height]
29
34
  end
30
35
 
31
- # Returns if the given point is inside this rectangle. See Rubydraw::Point::inside?
36
+ # Returns if the given point is inside this rectangle. See Rubydraw::Point#inside?
32
37
  def contains?(point)
33
38
  point.inside?(top_left, bottom_right)
34
39
  end
40
+
41
+ # Returns an SDL::Rectangle equal to this one.
42
+ def to_sdl
43
+ SDL::Rect.new([x, y, width, height])
44
+ end
35
45
  end
36
46
  end
@@ -0,0 +1,23 @@
1
+ module Rubydraw
2
+ # Text objects are instantiazed with the font (can be a TTF file) and
3
+ # with the text to display. They can be drawn at a position on the
4
+ # screen.
5
+ class Text
6
+ attr_accessor(:font, :contents, :size, :color)
7
+ # Create a new drawable Text object with the given font and contents.
8
+ def initialize(font, contents, color = Rubydraw::Color::White, size = 25)
9
+ @font, @contents, @size, @color = font, contents, size, color
10
+ @drawable = SDL::TTF.OpenFont(font, size)
11
+ raise(SDLError, "Failed to initialize font: #{SDL.GetError}") if @drawable.pointer.null?
12
+ end
13
+
14
+ # Draw the font in the given window at a position.
15
+ def draw(window, position)
16
+ sdl_color = @color.to_sdl
17
+ sdl_surface = SDL::TTF.RenderText_Blended(@drawable, @contents, sdl_color)
18
+ source_rect = Rectangle[sdl_surface.w, sdl_surface.h, Point[0, 0]]
19
+ blit_rect = Rectangle[window.width, window.height, position]
20
+ SDL::BlitSurface(sdl_surface, source_rect.to_sdl, window.sdl_surface, blit_rect.to_sdl)
21
+ end
22
+ end
23
+ end
@@ -5,6 +5,8 @@ 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(:width, :height)
9
+
8
10
  # Create a new window.
9
11
  def initialize(width, height, bkg_color=Color::Black)
10
12
  unless height.is_a?(Numeric) and width.is_a?(Numeric)
@@ -100,28 +102,21 @@ module Rubydraw
100
102
  def tick
101
103
  end
102
104
 
103
- # Return the width of this window.
104
- def width
105
- @width
106
- end
107
-
108
- # Return the height of this window.
109
- def height
110
- @height
111
- end
112
-
113
- # Send +selector+ to +reciever+ when +event+ happens, and include the specific event
114
- # instace as a parameter if send_params = true.
115
-
116
- # Execute the given block on the appearance of an instance of +event+.
105
+ # Execute the given block on the appearance of an instance of +event+ and pass that
106
+ # instance to the block.
117
107
  #
118
108
  # Example:
119
109
  # class MyWindow < Rubydraw::Window
120
110
  # def initialize
121
111
  # super(300, 300)
122
- #
123
- # register_action(Rubydraw::Events::MouseMove) {|event| new_pos = event.position; puts "Mouse moved to #{new_pos.x}, #{new_pos.y}"}
124
- # register_action(Rubydraw::Events::QuitRequest) {puts "Goodbye!"; close}
112
+ # whenever(Rubydraw::Events::QuitRequest) do
113
+ # puts "Goodbye!"
114
+ # close
115
+ # end
116
+ # whenever(Rubydraw::Events::MouseMove) do |event|
117
+ # new_pos = event.position
118
+ # puts "Mouse moved to #{new_pos.x}, #{new_pos.y}.}"
119
+ # end
125
120
  # end
126
121
  # end
127
122
  def whenever(event, &block)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydraw
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 8
10
- version: 0.1.8
9
+ - 9
10
+ version: 0.1.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - J. Wostenberg
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-18 00:00:00 -07:00
18
+ date: 2011-11-19 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -53,6 +53,7 @@ files:
53
53
  - lib/rubydraw/window.rb
54
54
  - lib/rubydraw/image.rb
55
55
  - lib/rubydraw/sound.rb
56
+ - lib/rubydraw/text.rb
56
57
  - lib/rubydraw/sdl_error.rb
57
58
  - lib/rubydraw/keys.rb
58
59
  - lib/rubydraw/event_queue.rb