Class: DXRubySDL::Image
- Inherits:
-
Object
- Object
- DXRubySDL::Image
- Includes:
- Color
- Defined in:
- lib/dxruby_sdl/image.rb
Instance Attribute Summary collapse
-
#_surface ⇒ Object
readonly
Returns the value of attribute _surface.
Class Method Summary collapse
- .load(filename, x = nil, y = nil, width = nil, height = nil) ⇒ Object
- .load_tiles(filename, xcount, ycount) ⇒ Object (also: loadTiles, load_to_array)
Instance Method Summary collapse
- #[](x, y) ⇒ Object
- #[]=(x, y, color) ⇒ Object
- #box(x1, y1, x2, y2, color) ⇒ Object
- #box_fill(x1, y1, x2, y2, color) ⇒ Object (also: #boxFill)
- #circle(x, y, r, color) ⇒ Object
- #circle_fill(x, y, r, color) ⇒ Object (also: #circleFill)
- #compare(x, y, color) ⇒ Object
- #draw(x, y, image, x1 = 0, y1 = 0, width = image.width, height = image.height) ⇒ Object
- #draw_font(x, y, string, font, color = [255, 255, 255]) ⇒ Object (also: #drawFont)
- #height ⇒ Object
-
#initialize(width, height, color = [0, 0, 0, 0]) ⇒ Image
constructor
A new instance of Image.
- #line(x1, y1, x2, y2, color) ⇒ Object
- #set_color_key(color) ⇒ Object (also: #setColorKey)
- #slice(x, y, width, height) ⇒ Object
- #width ⇒ Object
Methods included from Color
normalize_dxruby, to_dxruby_argb, to_sdl_alpha, to_sdl_color, to_sdl_rgba
Constructor Details
#initialize(width, height, color = [0, 0, 0, 0]) ⇒ Image
Returns a new instance of Image.
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/dxruby_sdl/image.rb', line 32 def initialize(width, height, color = [0, 0, 0, 0]) @color = to_sdl_rgba(color) if width == 0 && height == 0 return end @_surface = SDL::Surface.new(SDL::SWSURFACE, width, height, Window.send(:screen)) @_surface.fill_rect(0, 0, width, height, @color) end |
Instance Attribute Details
#_surface ⇒ Object (readonly)
Returns the value of attribute _surface.
7 8 9 |
# File 'lib/dxruby_sdl/image.rb', line 7 def _surface @_surface end |
Class Method Details
.load(filename, x = nil, y = nil, width = nil, height = nil) ⇒ Object
9 10 11 12 13 14 |
# File 'lib/dxruby_sdl/image.rb', line 9 def self.load(filename, x = nil, y = nil, width = nil, height = nil) image = new(0, 0) surface = SDL::Surface.load(filename) image.instance_variable_set('@_surface', surface) return image end |
.load_tiles(filename, xcount, ycount) ⇒ Object Also known as: loadTiles, load_to_array
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/dxruby_sdl/image.rb', line 16 def self.load_tiles(filename, xcount, ycount) surface = SDL::Surface.load(filename) width = surface.w / xcount height = surface.h / ycount images = [] ycount.times do |y| xcount.times do |x| image = new(0, 0) s = surface.copy_rect(x * width, y * height, width, height) image.instance_variable_set('@_surface', s) images << image end end return images end |
Instance Method Details
#[](x, y) ⇒ Object
44 45 46 47 |
# File 'lib/dxruby_sdl/image.rb', line 44 def [](x, y) pixel = lock { @_surface.get_pixel(x, y) } Color.to_dxruby_argb(@_surface.format.get_rgba(pixel)) end |
#[]=(x, y, color) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/dxruby_sdl/image.rb', line 49 def []=(x, y, color) sdl_rgba = Color.to_sdl_rgba(color) lock { @_surface[x, y] = sdl_rgba } end |
#box(x1, y1, x2, y2, color) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/dxruby_sdl/image.rb', line 103 def box(x1, y1, x2, y2, color) x = x1 < x2 ? x1 : x2 w = (x2 - x1).abs y = y1 < y2 ? y1 : y2 h = (y2 - y1).abs lock do @_surface.draw_rect(x, y, w, h, to_sdl_color(color), false, to_sdl_alpha(color)) end return self end |
#box_fill(x1, y1, x2, y2, color) ⇒ Object Also known as: boxFill
115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/dxruby_sdl/image.rb', line 115 def box_fill(x1, y1, x2, y2, color) x = x1 < x2 ? x1 : x2 w = (x2 - x1).abs y = y1 < y2 ? y1 : y2 h = (y2 - y1).abs lock do @_surface.draw_rect(x, y, w, h, to_sdl_color(color), true, to_sdl_alpha(color)) end return self end |
#circle(x, y, r, color) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/dxruby_sdl/image.rb', line 87 def circle(x, y, r, color) lock do @_surface.draw_circle(x, y, r, to_sdl_color(color), false, true, to_sdl_alpha(color)) end return self end |
#circle_fill(x, y, r, color) ⇒ Object Also known as: circleFill
95 96 97 98 99 100 101 |
# File 'lib/dxruby_sdl/image.rb', line 95 def circle_fill(x, y, r, color) lock do @_surface.draw_circle(x, y, r, to_sdl_color(color), true, false, to_sdl_alpha(color)) end return self end |
#compare(x, y, color) ⇒ Object
68 69 70 |
# File 'lib/dxruby_sdl/image.rb', line 68 def compare(x, y, color) self[x, y] == Color.normalize_dxruby(color) end |
#draw(x, y, image, x1 = 0, y1 = 0, width = image.width, height = image.height) ⇒ Object
127 128 129 |
# File 'lib/dxruby_sdl/image.rb', line 127 def draw(x, y, image, x1 = 0, y1 = 0, width = image.width, height = image.height) SDL.blitSurface(image._surface, x1, y1, width, height, self._surface, x, y) end |
#draw_font(x, y, string, font, color = [255, 255, 255]) ⇒ Object Also known as: drawFont
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/dxruby_sdl/image.rb', line 131 def draw_font(x, y, string, font, color = [255, 255, 255]) if string.empty? return end r, g, b = *to_sdl_color(color) h = font._ttf.height + 1 string.lines.each.with_index do |line, i| line.chomp! if line.empty? next end font._ttf.draw_blended_utf8(@_surface, line, x, y + i * h, r, g, b) end return self end |
#height ⇒ Object
60 61 62 |
# File 'lib/dxruby_sdl/image.rb', line 60 def height return @_surface.h end |
#line(x1, y1, x2, y2, color) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/dxruby_sdl/image.rb', line 79 def line(x1, y1, x2, y2, color) lock do @_surface.draw_line(x1, y1, x2, y2, to_sdl_color(color), true, to_sdl_alpha(color)) end return self end |
#set_color_key(color) ⇒ Object Also known as: setColorKey
64 65 66 |
# File 'lib/dxruby_sdl/image.rb', line 64 def set_color_key(color) @_surface.set_color_key(SDL::SRCCOLORKEY | SDL::RLEACCEL, to_sdl_color(color)) end |
#slice(x, y, width, height) ⇒ Object
72 73 74 75 76 77 |
# File 'lib/dxruby_sdl/image.rb', line 72 def slice(x, y, width, height) s = @_surface.copy_rect(x, y, width, height) image = Image.new(0, 0) image.instance_variable_set('@_surface', s) return image end |
#width ⇒ Object
56 57 58 |
# File 'lib/dxruby_sdl/image.rb', line 56 def width return @_surface.w end |