class RbSDL2::Event
Public Class Methods
new(type: 0, **members)
click to toggle source
Calls superclass method
# File lib/rb_sdl2/event.rb, line 36 def new(type: 0, **members) ptr = EventPointer.malloc num = Numeric === type ? type : EventType.to_num(type) ptr.write_uint32(num) obj = super(ptr) if obj.typed? members.each_pair { |sym, val| obj[sym] = val } end obj end
new(ptr)
click to toggle source
UserEvent の data1, data2 メンバー、SysWMEvent の msg メンバーはポインターである。 ポインターとしての読み書きの対応はしている。しかしポインターが指し示すメモリーの管理は行わない。
# File lib/rb_sdl2/event.rb, line 56 def initialize(ptr) @ptr = ptr end
to_ptr(ptr)
click to toggle source
# File lib/rb_sdl2/event.rb, line 47 def to_ptr(ptr) obj = allocate obj.__send__(:initialize, ptr) obj end
Public Instance Methods
[](sym)
click to toggle source
# File lib/rb_sdl2/event.rb, line 60 def [](sym) raise ArgumentError unless member?(sym) case sym when :data member[:data].to_a when :file member[:file].then { |ptr| ptr.null? ? nil : ptr.read_string } when :keysym member[:keysym].then { |st| {scancode: st[:scancode], sym: st[:sym], mod: st[:mod]} } when :text member[:text].to_s else member[sym] end end
[]=(sym, val)
click to toggle source
DropEvent の file メンバーのポインターの管理は行われる。 UserEvent の data1, data2 メンバーと SysWMEvent の msg メンバーはポインターである。 これらのポインターの管理は行ない。アプリケーション側で実装を行うこと。
# File lib/rb_sdl2/event.rb, line 80 def []=(sym, val) raise FrozenError if frozen? raise ArgumentError unless member?(sym) case sym when :data val.each.with_index { |v, i| member[:data][i] = v } when :file if drop_file? || drop_text? _ptr = member[:file] member[:file] = if val.nil? nil else c_str = "#{val}\x00" ptr = ::SDL2.SDL_malloc(c_str.size) raise NoMemoryError if ptr.null? ptr.write_bytes(c_str) end ::SDL2.SDL_free(_ptr) else raise ArgumentError end when :keysym val.each { |k, v| member[:keysym][k] = v } when :msg if val.nil? || val.respond_to?(:null?) && val.null? || val.respond_to?(:zero?) && val.zero? raise ArgumentError end member[:msg] = val when :type raise ArgumentError else member[sym] = val end end
clear()
click to toggle source
# File lib/rb_sdl2/event.rb, line 118 def clear raise FrozenError if frozen? if drop_file? || drop_text? self[:file] = nil end member.clear @st = nil self end
initialize_copy(obj)
click to toggle source
deep copy を行う。 これは @ptr が イベントキューの一部(SDL の管理領域)を指している場合があるためである。
Calls superclass method
# File lib/rb_sdl2/event.rb, line 130 def initialize_copy(obj) super @ptr = EventPointer.malloc.write_bytes(obj.to_ptr.read_bytes(::SDL2::SDL_Event.size)) if drop_file? || drop_text? self[:file] = obj[:file] end end
inspect()
click to toggle source
# File lib/rb_sdl2/event.rb, line 138 def inspect "#<#{self.class.name} ptr=#{@ptr.inspect} name=#{name.inspect} #{to_h}>" end
member?(name)
click to toggle source
# File lib/rb_sdl2/event.rb, line 144 def member?(name) = members.include?(name) def members = member.members.grep_v(/\Apadding/) def name = EventType.to_name(type) alias to_s name def to_h = members.map { |sym| [sym, self[sym]] }.to_h def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed? =
members(= member.members.grep_v(/\Apadding/))
click to toggle source
# File lib/rb_sdl2/event.rb, line 146 def members = member.members.grep_v(/\Apadding/) def name = EventType.to_name(type) alias to_s name def to_h = members.map { |sym| [sym, self[sym]] }.to_h def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed? = type
name(= EventType.to_name(type))
click to toggle source
# File lib/rb_sdl2/event.rb, line 148 def name = EventType.to_name(type) alias to_s name def to_h = members.map { |sym| [sym, self[sym]] }.to_h def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed? = type !=
to_h(= members.map { |sym| [sym, self[sym]] })
click to toggle source
# File lib/rb_sdl2/event.rb, line 151 def to_h = members.map { |sym| [sym, self[sym]] }.to_h def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed? = type != 0
to_ptr(= @ptr)
click to toggle source
# File lib/rb_sdl2/event.rb, line 153 def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed? = type != 0 end
type(= to_ptr.read_uint32)
click to toggle source
# File lib/rb_sdl2/event.rb, line 155 def type = to_ptr.read_uint32 include EventType def typed? = type != 0 end end
typed?(= type != 0)
click to toggle source
# File lib/rb_sdl2/event.rb, line 159 def typed? = type != 0 end
Protected Instance Methods
member(= @st ||= ::SDL2::SDL_Event.new(@ptr)[EventType.to_type(type)])
click to toggle source
# File lib/rb_sdl2/event.rb, line 142 def member = @st ||= ::SDL2::SDL_Event.new(@ptr)[EventType.to_type(type)] def member?(name) = members.include?(name) def members = member.members.grep_v(/\Apadding/) def name = EventType.to_name(type) alias to_s name def to_h = members.map { |sym| [sym, self[sym]] }.to_h def to_ptr = @ptr def type = to_ptr.read_uint32 include EventType def typed?