Module: SFML::Touch

Defined in:
lib/sfml/window/touch.rb

Overview

Polling API for touchscreen input. Each finger is identified by an integer (0 = first contact, 1 = second, etc.). The same fingers also surface through the event loop as ‘:touch_began`, `:touch_moved`, `:touch_ended` events with `finger:` and `position:` fields.

if SFML::Touch.down?(0)
  pos = SFML::Touch.position(0, relative_to: window)
  ...
end

On desktop platforms without touchscreen hardware these always return ‘false` / `[0, 0]`.

Class Method Summary collapse

Class Method Details

.down?(finger = 0) ⇒ Boolean

True while finger ‘n` is currently in contact with the screen.

Returns:

  • (Boolean)


19
20
21
# File 'lib/sfml/window/touch.rb', line 19

def down?(finger = 0)
  C::Window.sfTouch_isDown(Integer(finger))
end

.position(finger = 0, relative_to: nil) ⇒ Object

Position of finger ‘n`. Without `relative_to:`, returns desktop-relative coordinates; pass a Window or RenderWindow to get window-local coordinates.



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/sfml/window/touch.rb', line 26

def position(finger = 0, relative_to: nil)
  f = Integer(finger)
  vec =
    case relative_to
    when nil          then C::Window.sfTouch_getPosition(f, nil)
    when RenderWindow then C::Graphics.sfTouch_getPositionRenderWindow(f, relative_to.handle)
    when Window       then C::Window.sfTouch_getPosition(f, relative_to.handle)
    else
      raise ArgumentError, "relative_to: must be SFML::Window, SFML::RenderWindow, or nil"
    end
  Vector2.new(vec[:x], vec[:y])
end