Class: SDL2::Struct
- Inherits:
-
FFI::Struct
- Object
- FFI::Struct
- SDL2::Struct
- Defined in:
- lib/sdl2.rb
Overview
FFI::Struct class with some useful additions.
Direct Known Subclasses
Audio::CVT, Audio::Spec, BlendModeStruct, Color, CommonEvent, ControllerAxisEvent, ControllerButtonEvent, ControllerDeviceEvent, Cursor, Display::Mode, DollarGestureEvent, DropEvent, EventFilterStruct, Finger, GameController, GameController::ButtonBind, Haptic, Haptic::Condition, Haptic::Constant, Haptic::Custom, Haptic::Direction, Haptic::LeftRight, Haptic::Periodic, Haptic::Ramp, JoyAxisEvent, JoyBallEvent, JoyButtonEvent, JoyDeviceEvent, JoyHatEvent, Joystick, JoystickGUID, KeyboardEvent, Keysym, MouseButtonEvent, MouseMotionEvent, MouseWheelEvent, MultiGestureEvent, OSEvent, Palette, QuitEvent, RWops, RWops::AndroidIO, RWops::Mem, RWops::STDIO, RWops::Unkown, RWops::WindowsIO, RWops::WindowsIO::Buffer, Rect, Renderer, RendererInfo, Surface, SDL2::SysWM::Info, SDL2::SysWM::Info::Cocoa, SDL2::SysWM::Info::DirectFB, SDL2::SysWM::Info::UIKit, SDL2::SysWM::Info::Win, SDL2::SysWM::Info::X11, SDL2::SysWM::Msg, SDL2::SysWM::Msg::Cocoa, SDL2::SysWM::Msg::DirectFB, SDL2::SysWM::Msg::UIKit, SDL2::SysWM::Msg::Win, SDL2::SysWM::Msg::X11, SysWMEvent, TTF::Font, TextEditingEvent, TextInputEvent, TouchFingerEvent, TypedPointer, UserEvent, Window, WindowEvent
Class Method Summary collapse
-
.member_readers(*members_to_define) ⇒ Object
Define a set of member readers Ex1: ‘member_readers [:one, :two, :three]` Ex2: `member_readers *members`.
-
.member_writers(*members_to_define) ⇒ Object
Ex1: ‘member_writers [:one, :two, :three]` Ex2: `member_writers *members`.
-
.release(pointer) ⇒ Object
A default release scheme is defined, but should be redefined where appropriate.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Compare two structures by class and values.
-
#initialize(*args, &block) ⇒ Struct
constructor
Allows creation and use within block, automatically freeing pointer after block.
-
#inspect ⇒ Object
A human-readable representation of the struct and it’s values.
Constructor Details
#initialize(*args, &block) ⇒ Struct
Allows creation and use within block, automatically freeing pointer after block.
16 17 18 19 20 21 22 23 |
# File 'lib/sdl2.rb', line 16 def initialize(*args, &block) super(*args) if block_given? throw 'Release must be defined to use block' unless self.class.respond_to?(:release) yield self self.class.release(self.pointer) end end |
Class Method Details
.member_readers(*members_to_define) ⇒ Object
Define a set of member readers Ex1: ‘member_readers [:one, :two, :three]` Ex2: `member_readers *members`
33 34 35 36 37 38 39 40 41 |
# File 'lib/sdl2.rb', line 33 def self.member_readers(*members_to_define) #self.class_eval do members_to_define.each do |member| define_method member do [member] end end #end end |
.member_writers(*members_to_define) ⇒ Object
Ex1: ‘member_writers [:one, :two, :three]` Ex2: `member_writers *members`
46 47 48 49 50 51 52 |
# File 'lib/sdl2.rb', line 46 def self.member_writers(*members_to_define) members_to_define.each do |member| define_method "#{member}=".to_sym do |value| self[member]= value end end end |
.release(pointer) ⇒ Object
A default release scheme is defined, but should be redefined where appropriate.
26 27 28 |
# File 'lib/sdl2.rb', line 26 def self.release(pointer) pointer.free end |
Instance Method Details
#==(other) ⇒ Object
Compare two structures by class and values.
69 70 71 72 73 74 75 |
# File 'lib/sdl2.rb', line 69 def ==(other) return false unless self.class == other.class self.class.members.each do |field| return false unless self[field] == other[field] end true # return true if we get this far. end |
#inspect ⇒ Object
A human-readable representation of the struct and it’s values.
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/sdl2.rb', line 55 def inspect return 'nil' if self.null? #binding.pry #return self.to_s report = "struct #{self.class.to_s}{" report += self.class.members.collect do |field| "#{field}->#{self[field].inspect}" end.join(' ') report += "}" end |