Class: SDL2::Event

Inherits:
Union
  • Object
show all
Defined in:
lib/sdl2/event.rb,
lib/sdl2/event.rb,
lib/sdl2/event.rb,
lib/sdl2/event.rb,
lib/sdl2/event/os.rb,
lib/sdl2/event/drop.rb,
lib/sdl2/event/quit.rb,
lib/sdl2/event/type.rb,
lib/sdl2/event/user.rb,
lib/sdl2/event/state.rb,
lib/sdl2/event/action.rb,
lib/sdl2/event/common.rb,
lib/sdl2/event/sys_wm.rb,
lib/sdl2/event/window.rb,
lib/sdl2/event/joy_hat.rb,
lib/sdl2/event/abstract.rb,
lib/sdl2/event/joy_axis.rb,
lib/sdl2/event/joy_ball.rb,
lib/sdl2/event/keyboard.rb,
lib/sdl2/event/joy_button.rb,
lib/sdl2/event/joy_device.rb,
lib/sdl2/event/text_input.rb,
lib/sdl2/event/mouse_wheel.rb,
lib/sdl2/event/mouse_button.rb,
lib/sdl2/event/mouse_motion.rb,
lib/sdl2/event/text_editing.rb,
lib/sdl2/event/touch_finger.rb,
lib/sdl2/event/multi_gesture.rb,
lib/sdl2/event/dollar_gesture.rb,
lib/sdl2/event/controller_axis.rb,
lib/sdl2/event/controller_button.rb,
lib/sdl2/event/controller_device.rb

Overview

Union Layout

Defined Under Namespace

Modules: ACTION, STATE, TYPE Classes: Abstract, Common, ControllerAxis, ControllerButton, ControllerDevice, DollarGesture, Drop, JoyAxis, JoyBall, JoyButton, JoyDevice, JoyHat, Keyboard, MouseButton, MouseMotion, MouseWheel, MultiGesture, OS, Quit, SysWM, TextEditing, TextInput, TouchFinger, User, Window

Class Method Summary collapse

Instance Method Summary collapse

Methods included from StructHelper

#member_readers, #member_writers

Class Method Details

.add(*events) ⇒ Object

Add a bunch of events, expects them as arguments so make sure you add that astrik/star: ‘SDL2::Event.add(*array)`



164
165
166
# File 'lib/sdl2/event.rb', line 164

def self.add(*events)
  self.peep(events, nil, :ADD, f, l)
end

.cast(something) ⇒ Object

Coerce some value into an Event



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/sdl2/event.rb', line 187

def self.cast(something)
  SDL2::Debug.log(self){"Casting Something: #{something.inspect}"}
  if something.kind_of? Abstract
    return something.to_event
  elsif something.kind_of? Hash
    raise "Must have type : #{something.inspect}" unless something.has_key? :type
    tmp = self.new
    fields = members & something.keys
    SDL2::Debug.log(self){"Using fields: #{fields.inspect}"}
    fields.each do |field|
      if tmp[field].kind_of? Struct and something[field].kind_of? Hash
        tmp[field].update_members(something[field])
      else
        tmp[field] = something[field]
      end
    end
    return tmp
  else
    raise "Is not an Abstract!: #{something.inspect}"
  end
end

.filter(user_data = nil, &event_filter) ⇒ Object

Use this function to filter events on current event Que removing any events for which this filter returns 0 (Zero) If called without arguments, it will check and return any currently defined global filters and associated user data as: [filter, data]



100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/sdl2/event.rb', line 100

def self.filter(user_data = nil, &event_filter)
  if event_filter
    SDL2.filter_events(event_filter, user_data)
  else
    event_filter = SDL2::TypedPointer::EventFilter.new
    user_data = SDL2::TypedPointer::Pointer.new
    if SDL2.get_event_filter?(event_filter, user_data)
      [event_filter.value, user_data.value]
    else
      false
    end
  end
end

.filter=(filter_lambda, user_data_pointer = nil) ⇒ Object

This routine sets the global event filter, it expects either a single lambda parameter or an array with or paired with a user_data_pointer



117
118
119
# File 'lib/sdl2/event.rb', line 117

def self.filter=(filter_lambda, user_data_pointer = nil)
  SDL2.set_event_filter(filter_lambda, user_data_pointer)    
end

.flush(type, type_end = nil) ⇒ Object

Flush this kind of event (or this range of event types) from the que



131
132
133
134
135
136
137
# File 'lib/sdl2/event.rb', line 131

def self.flush(type, type_end = nil)
  unless type_end
    SDL2.flush_event(type)
  else
    SDL2.flush_events(type, type_end)
  end
end

.get(count = 10, f = :FIRSTEVENT, l = :LASTEVENT) ⇒ Object

Get a bunch of events, defaults to 10 at once



169
170
171
# File 'lib/sdl2/event.rb', line 169

def self.get(count = 10, f = :FIRSTEVENT, l = :LASTEVENT)
  self.peep(nil, count, :GET, f, l)
end

.has?(type, type_end = nil) ⇒ Boolean

Check if this event type, or a range of event types exist

Returns:

  • (Boolean)


122
123
124
125
126
127
128
# File 'lib/sdl2/event.rb', line 122

def self.has?(type, type_end = nil)
  unless type_end
    SDL2.has_event?(type)
  else
    SDL2.has_events?(type, type_end)
  end
end

.peek(count = 10, f = :FIRSTEVENT, l = :LASTEVENT) ⇒ Object

Peek at events, default maximum to return at once is 10



158
159
160
# File 'lib/sdl2/event.rb', line 158

def self.peek(count = 10, f = :FIRSTEVENT, l = :LASTEVENT)
  self.peep(nil, count, :PEEK, f, l)
end

.peep(events = nil, num_events = nil, action = :PEEK, first_event = :FIRSTEVENT, last_event = :LASTEVENT) ⇒ Object

General Utility for Peek/Get/Del/Add many events



146
147
148
149
150
151
152
153
154
155
# File 'lib/sdl2/event.rb', line 146

def self.peep(events = nil, num_events = nil, action = :PEEK, first_event = :FIRSTEVENT, last_event = :LASTEVENT)
  if events.is_a?(Array)
    events = SDL2::StructArray.clone_from(events, SDL2::Event)
  end
  num_events ||= events.try(:count)
  raise 'num_events must be specified unless events responds to count' if num_events.nil?
  events ||= SDL2::StructArray.new(SDL2::Event, num_events) unless num_events == 0     
  returned = SDL2.peep_events!(events.nil? ? nil : events.first, num_events, action, first_event, last_event)
  events.nil? ? Array.new(returned, nil) : events.first(returned)      
end

.pollObject

Polls for currently pending events.



86
87
88
89
90
91
92
93
# File 'lib/sdl2/event.rb', line 86

def self.poll()
  tmp_event = SDL2::Event.new
  unless SDL2.poll_event?(tmp_event)
    tmp_event.pointer.free
    tmp_event = nil
  end
  return tmp_event # May be nil if SDL2.poll_event fails.
end

.pumpObject

Pump the events.



174
175
176
# File 'lib/sdl2/event.rb', line 174

def self.pump
  SDL2.pump_events()
end

.push(event) ⇒ Object

Add an event to the que



140
141
142
143
# File 'lib/sdl2/event.rb', line 140

def self.push(event)
  event = Event.cast(event) unless event.kind_of? Event
  SDL2.push_event!(event)
end

.quit_requested?Boolean

Indicates if a Quit event is waiting in the que.

Returns:

  • (Boolean)


179
180
181
182
183
184
# File 'lib/sdl2/event.rb', line 179

def self.quit_requested?
  self.pump()
  # Peek into the event que and return the count of quit events.
  # Return true if that is greater than zero.
  self.peep(nil,0,:PEEK,:QUIT,:QUIT).count > 0
end

.state(type, state = :QUERY) ⇒ Object

Set the state of processing event types:



80
81
82
# File 'lib/sdl2/event.rb', line 80

def self.state(type,state=:QUERY)
  SDL2.event_state(type,state)
end

Instance Method Details

#==(other) ⇒ Object



209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/sdl2/event.rb', line 209

def ==(other)
  if other.kind_of?(Hash)
    # False if there are fields that do not exist
    return false unless (other.keys - members).empty?

    (other.keys & members).each do |field|
      return false unless self[field] == other[field]
    end

    return true #if we get this far

  else

    return super(other)

  end
end