rubydraw 0.2.3 → 0.2.5
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 +21 -0
- data/lib/rubydraw/color.rb +16 -2
- data/lib/rubydraw/image.rb +7 -10
- data/lib/rubydraw/text.rb +21 -13
- data/lib/rubydraw/window.rb +19 -2
- metadata +4 -25
data/lib/rubydraw.rb
CHANGED
@@ -49,6 +49,27 @@ module Rubydraw
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def self.vinfo #:nodoc:
|
53
|
+
SDL.GetVideoInfo
|
54
|
+
end
|
55
|
+
|
56
|
+
private_class_method :vinfo
|
57
|
+
|
58
|
+
# Returns the screen width.
|
59
|
+
def self.screen_width
|
60
|
+
vinfo.current_w
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns the screen height.
|
64
|
+
def self.screen_height
|
65
|
+
vinfo.current_h
|
66
|
+
end
|
67
|
+
|
68
|
+
# Returns the screen size.
|
69
|
+
def self.screen_dimensions
|
70
|
+
Point[screen_width, screen_height]
|
71
|
+
end
|
72
|
+
|
52
73
|
# Enable/disable key repeating. After this method is called, instances of Rubydraw::Events::KeyPressed
|
53
74
|
# wil be continually created, until the key is released.
|
54
75
|
#
|
data/lib/rubydraw/color.rb
CHANGED
@@ -6,6 +6,18 @@ module Rubydraw
|
|
6
6
|
# instance can return its numerical value, but only Rubydraw itself
|
7
7
|
# should need it.
|
8
8
|
class Color
|
9
|
+
# Returns true if all arguments are within the valid RGB color
|
10
|
+
# values (0-255).
|
11
|
+
def self.in_bounds?(*args)
|
12
|
+
args.each {|element|
|
13
|
+
if (0..255).include?(element)
|
14
|
+
return true
|
15
|
+
else
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
9
21
|
# Shorthand new method.
|
10
22
|
def self.[](red, green, blue, alpha = 0)
|
11
23
|
self.new(red, green, blue, alpha)
|
@@ -18,6 +30,9 @@ module Rubydraw
|
|
18
30
|
#
|
19
31
|
# TODO: Add other color specs, like HSV or maybe CYMK
|
20
32
|
def initialize(red, green, blue, alpha = 255)
|
33
|
+
unless self.class.in_bounds?(red, green, blue, alpha)
|
34
|
+
raise IndexError, "One or more color values are out of bounds (must be between 0 and 255)"
|
35
|
+
end
|
21
36
|
@red, @green, @blue, @alpha = red, green, blue, alpha
|
22
37
|
calc_num_val
|
23
38
|
end
|
@@ -31,8 +46,7 @@ module Rubydraw
|
|
31
46
|
hex_green = (@green.to_s(16)).color_string
|
32
47
|
hex_blue = (@blue.to_s(16)).color_string
|
33
48
|
# Construct a hex string using the previously determined hex colors.
|
34
|
-
# *Note:* it appears that SDL's
|
35
|
-
# is backwards. The order appears to be: +BBGGRRAA+
|
49
|
+
# *Note:* it appears that SDL's colors are in the format +BBGGRRAA+.
|
36
50
|
color_str = hex_blue + hex_green + hex_red + hex_alpha
|
37
51
|
@num_val = color_str.to_i(16)
|
38
52
|
end
|
data/lib/rubydraw/image.rb
CHANGED
@@ -14,7 +14,7 @@ module Rubydraw
|
|
14
14
|
elsif arg.is_a?(SDL::Surface)
|
15
15
|
load_from_surface(arg)
|
16
16
|
else
|
17
|
-
raise TypeError, "Failed to load image: Expected String or SDL::Surface but got #{arg}"
|
17
|
+
raise TypeError, "Failed to load image: Expected String or SDL::Surface but got: #{arg}"
|
18
18
|
end
|
19
19
|
self
|
20
20
|
end
|
@@ -45,20 +45,17 @@ module Rubydraw
|
|
45
45
|
@sdl_image = surface
|
46
46
|
end
|
47
47
|
|
48
|
-
# Blit (copy) into
|
48
|
+
# Blit (copy) into +surface at +position+ (see Rubydraw::Point).
|
49
49
|
# No graphical effects are applied.
|
50
|
-
|
51
|
-
# Notice that you don't blit surfaces to other surfaces when using
|
52
|
-
# Rubygame, but instead you draw things.
|
53
|
-
def draw(window, position)
|
50
|
+
def blit(surface, position)
|
54
51
|
source_rect = Rectangle[Point[0, 0], Point[width, height]]
|
55
|
-
blit_rect = Rectangle[position, Point[
|
56
|
-
|
57
|
-
#blit_rect = Rectangle[position, Point[window.width, window.height]]
|
58
|
-
SDL::BlitSurface(@sdl_image, source_rect.to_sdl, window.sdl_surface, blit_rect.to_sdl)
|
52
|
+
blit_rect = Rectangle[position, Point[surface.width, surface.height]]
|
53
|
+
SDL::BlitSurface(@sdl_image, source_rect.to_sdl, surface.to_sdl, blit_rect.to_sdl)
|
59
54
|
self
|
60
55
|
end
|
61
56
|
|
57
|
+
alias draw blit
|
58
|
+
|
62
59
|
# Rotates and/or expands the image. Note that this modifies the image
|
63
60
|
# itself.
|
64
61
|
def rotozoom!(angle, zoom, smooth=false)
|
data/lib/rubydraw/text.rb
CHANGED
@@ -3,7 +3,7 @@ module Rubydraw
|
|
3
3
|
# with the text to display. They can be drawn at a position on the
|
4
4
|
# screen.
|
5
5
|
class Text
|
6
|
-
|
6
|
+
attr_reader(:contents, :font, :color, :size)
|
7
7
|
|
8
8
|
# Create a new drawable Text object with the given font and contents.
|
9
9
|
def initialize(contents, color, font_name="Times New Roman", size = 25)
|
@@ -18,31 +18,39 @@ module Rubydraw
|
|
18
18
|
unless File.exists?(font_path)
|
19
19
|
raise "Font file '#{font_name}' does not exist; attemped to load from '#{font_path}'"
|
20
20
|
end
|
21
|
-
|
22
|
-
raise(SDLError, "Failed to initialize font: #{SDL.GetError}") if
|
21
|
+
sdl_text = SDL::TTF.OpenFont(font_path, size)
|
22
|
+
raise(SDLError, "Failed to initialize font: #{SDL.GetError}") if sdl_text.pointer.null?
|
23
|
+
|
24
|
+
sdl_color = @color.to_sdl
|
25
|
+
@sdl_surface = SDL::TTF.RenderText_Blended(sdl_text, @contents, sdl_color)
|
23
26
|
end
|
24
27
|
|
25
|
-
# Returns the
|
28
|
+
# Returns the SDL surface for this object.
|
26
29
|
def sdl_surface
|
27
|
-
|
28
|
-
SDL::TTF.RenderText_Blended(@drawable, @contents, sdl_color)
|
30
|
+
@sdl_surface
|
29
31
|
end
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
alias to_sdl sdl_surface
|
34
|
+
|
35
|
+
# Blit (copy) into +surface at +position+ (see Rubydraw::Point).
|
36
|
+
# No graphical effects are applied.
|
37
|
+
def blit(surface, position)
|
38
|
+
source_rect = Rectangle[Point[0, 0], Point[width, height]]
|
39
|
+
blit_rect = Rectangle[position, Point[surface.width, surface.height]]
|
40
|
+
SDL::BlitSurface(sdl_surface, source_rect.to_sdl, surface.to_sdl, blit_rect.to_sdl)
|
41
|
+
self
|
36
42
|
end
|
37
43
|
|
44
|
+
alias draw blit
|
45
|
+
|
38
46
|
# Returns the width.
|
39
47
|
def width
|
40
|
-
sdl_surface.w
|
48
|
+
@sdl_surface.w
|
41
49
|
end
|
42
50
|
|
43
51
|
# Returns the height.
|
44
52
|
def height
|
45
|
-
sdl_surface.h
|
53
|
+
@sdl_surface.h
|
46
54
|
end
|
47
55
|
end
|
48
56
|
end
|
data/lib/rubydraw/window.rb
CHANGED
@@ -26,11 +26,27 @@ module Rubydraw
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def width
|
29
|
-
|
29
|
+
begin
|
30
|
+
return @screen.w
|
31
|
+
rescue NameError
|
32
|
+
if @width == 0
|
33
|
+
return Rubydraw.screen_width
|
34
|
+
else
|
35
|
+
return @width
|
36
|
+
end
|
37
|
+
end
|
30
38
|
end
|
31
39
|
|
32
40
|
def height
|
33
|
-
|
41
|
+
begin
|
42
|
+
return @screen.h
|
43
|
+
rescue NameError
|
44
|
+
if @height == 0
|
45
|
+
return Rubydraw.screen_height
|
46
|
+
else
|
47
|
+
return @height
|
48
|
+
end
|
49
|
+
end
|
34
50
|
end
|
35
51
|
|
36
52
|
# Call this method to start updating and drawing.
|
@@ -122,6 +138,7 @@ module Rubydraw
|
|
122
138
|
@screen
|
123
139
|
end
|
124
140
|
|
141
|
+
alias to_sdl sdl_surface
|
125
142
|
|
126
143
|
# Redefine Rubydraw::Window#tick with any code you want to be executed
|
127
144
|
# every frame, like drawing functions.
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydraw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 17
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 3
|
10
|
-
version: 0.2.3
|
5
|
+
version: 0.2.5
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- J. Wostenberg
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-29 00:00:00 -07:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
@@ -26,20 +21,10 @@ dependencies:
|
|
26
21
|
requirements:
|
27
22
|
- - ">="
|
28
23
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 4
|
33
24
|
version: "0.4"
|
34
25
|
type: :runtime
|
35
26
|
version_requirements: *id001
|
36
|
-
description:
|
37
|
-
|
38
|
-
Rubydraw is a high level drawing/game library,
|
39
|
-
like Gosu or Rubygame. Its only dependencies are
|
40
|
-
ruby-sdl-ffi--which it uses to access SDL
|
41
|
-
functions--and SDL itself (See README on how to
|
42
|
-
install the latter).
|
27
|
+
description: "\n Rubydraw is a high level drawing/game library,\n like Gosu or Rubygame. Its only dependencies are\n ruby-sdl-ffi--which it uses to access SDL\n functions--and SDL itself (See README on how to\n install the latter)."
|
43
28
|
email:
|
44
29
|
executables: []
|
45
30
|
|
@@ -94,23 +79,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
79
|
requirements:
|
95
80
|
- - ">="
|
96
81
|
- !ruby/object:Gem::Version
|
97
|
-
hash: 3
|
98
|
-
segments:
|
99
|
-
- 0
|
100
82
|
version: "0"
|
101
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
84
|
none: false
|
103
85
|
requirements:
|
104
86
|
- - ">="
|
105
87
|
- !ruby/object:Gem::Version
|
106
|
-
hash: 3
|
107
|
-
segments:
|
108
|
-
- 0
|
109
88
|
version: "0"
|
110
89
|
requirements: []
|
111
90
|
|
112
91
|
rubyforge_project:
|
113
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.6.2
|
114
93
|
signing_key:
|
115
94
|
specification_version: 3
|
116
95
|
summary: Rubydraw is a high level drawing/graphics library, like Gosu or Rubygame.
|