Class: RbSDL2::Palette

Inherits:
Object
  • Object
show all
Defined in:
lib/rb_sdl2/palette.rb

Defined Under Namespace

Classes: PalettePointer

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ptr) ⇒ Palette

Returns a new instance of Palette.



35
36
37
# File 'lib/rb_sdl2/palette.rb', line 35

def initialize(ptr)
  @st = ::SDL::Palette.new(ptr)
end

Class Method Details

.[](*color) ⇒ Object



14
15
16
17
18
# File 'lib/rb_sdl2/palette.rb', line 14

def [](*color)
  plt = new(color.length)
  color.each.with_index { |c, nth| plt[nth] = c }
  plt
end

.new(num_colors) ⇒ Object

Raises:



20
21
22
23
24
25
26
# File 'lib/rb_sdl2/palette.rb', line 20

def new(num_colors)
  # SDL_AllocPalette() のエラーは引数が < 1、または必要なメモリー領域がない場合。
  # パレットのカラーは作成時に全て [255, 255, 255, 255] で埋められる。
  ptr = PalettePointer.new(::SDL.AllocPalette(num_colors))
  raise RbSDL2Error if ptr.null?
  super(ptr)
end

.to_ptr(ptr) ⇒ Object



28
29
30
31
32
# File 'lib/rb_sdl2/palette.rb', line 28

def to_ptr(ptr)
  obj = allocate
  obj.__send__(:initialize, PalettePointer.to_ptr(ptr))
  obj
end

Instance Method Details

#==(other) ⇒ Object



39
40
41
# File 'lib/rb_sdl2/palette.rb', line 39

def ==(other)
  other.respond_to?(:to_ptr) && other.to_ptr == to_ptr
end

#[](nth) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
# File 'lib/rb_sdl2/palette.rb', line 43

def [](nth)
  raise ArgumentError if nth < 0 || length <= nth
  ::SDL::Color.new(@st[:colors] + ::SDL::Color.size * nth).values
end

#[]=(nth, color) ⇒ Object

color 引数には 3要素以上の配列であること。4要素目以降は無視される。 color 引数は内部で splat する。これに対応していれば配列以外のオブジェクトでもよい。 パレットのカラーが描画に使われるときはアルファ値は無視されて不透明(ALPHA_OPAQUE)として扱う。

Raises:

  • (ArgumentError)


51
52
53
54
55
56
57
# File 'lib/rb_sdl2/palette.rb', line 51

def []=(nth, color)
  raise ArgumentError if nth < 0 || length <= nth
  c = ::SDL::Color.new
  c[:r], c[:g], c[:b] = color
  err = ::SDL.SetPaletteColors(self, c, nth, 1)
  raise RbSDL2Error if err < 0
end

#eachObject



59
# File 'lib/rb_sdl2/palette.rb', line 59

def each = length.times { |nth| yield(self[nth]) }

#inspectObject



61
62
63
# File 'lib/rb_sdl2/palette.rb', line 61

def inspect
  "#<#{self.class.name} colors=#{length}>"
end

#lengthObject Also known as: size



65
# File 'lib/rb_sdl2/palette.rb', line 65

def length = @st[:ncolors]

#to_aObject



68
# File 'lib/rb_sdl2/palette.rb', line 68

def to_a = to_enum.to_a

#to_ptrObject



70
# File 'lib/rb_sdl2/palette.rb', line 70

def to_ptr = @st.to_ptr

#versionObject



72
# File 'lib/rb_sdl2/palette.rb', line 72

def version = @st[:version]