Input

Typedefs

typedef enum binocle_input_mouse_button binocle_input_mouse_button
typedef enum binocle_input_finger_type binocle_input_finger_type
typedef struct binocle_input_touch binocle_input_touch
typedef enum binocle_input_keyboard_key binocle_input_keyboard_key

Keyboard scan codes, based on: http://wiki.libsdl.org/SDLScancodeLookup

typedef struct binocle_input binocle_input

Enums

enum binocle_input_mouse_button

Values:

enumerator MOUSE_LEFT
enumerator MOUSE_MIDDLE
enumerator MOUSE_RIGHT
enumerator MOUSE_MAX
enum binocle_input_finger_type

Values:

enumerator FINGER_MOTION
enumerator FINGER_DOWN
enumerator FINGER_UP
enumerator FINGER_MAX
enum binocle_input_keyboard_key

Keyboard scan codes, based on: http://wiki.libsdl.org/SDLScancodeLookup

Values:

enumerator KEY_UNKNOWN
enumerator KEY_A
enumerator KEY_B
enumerator KEY_C
enumerator KEY_D
enumerator KEY_E
enumerator KEY_F
enumerator KEY_G
enumerator KEY_H
enumerator KEY_I
enumerator KEY_J
enumerator KEY_K
enumerator KEY_L
enumerator KEY_M
enumerator KEY_N
enumerator KEY_O
enumerator KEY_P
enumerator KEY_Q
enumerator KEY_R
enumerator KEY_S
enumerator KEY_T
enumerator KEY_U
enumerator KEY_V
enumerator KEY_W
enumerator KEY_X
enumerator KEY_Y
enumerator KEY_Z
enumerator KEY_1
enumerator KEY_2
enumerator KEY_3
enumerator KEY_4
enumerator KEY_5
enumerator KEY_6
enumerator KEY_7
enumerator KEY_8
enumerator KEY_9
enumerator KEY_0
enumerator KEY_RETURN
enumerator KEY_ESCAPE
enumerator KEY_BACKSPACE
enumerator KEY_TAB
enumerator KEY_SPACE
enumerator KEY_MINUS
enumerator KEY_EQUALS
enumerator KEY_LEFTBRACKET
enumerator KEY_RIGHTBRACKET
enumerator KEY_BACKSLASH
enumerator KEY_NONUSHASH
enumerator KEY_SEMICOLON
enumerator KEY_APOSTROPHE
enumerator KEY_GRAVE
enumerator KEY_COMMA
enumerator KEY_PERIOD
enumerator KEY_SLASH
enumerator KEY_CAPSLOCK
enumerator KEY_F1
enumerator KEY_F2
enumerator KEY_F3
enumerator KEY_F4
enumerator KEY_F5
enumerator KEY_F6
enumerator KEY_F7
enumerator KEY_F8
enumerator KEY_F9
enumerator KEY_F10
enumerator KEY_F11
enumerator KEY_F12
enumerator KEY_PRINTSCREEN
enumerator KEY_SCROLLLOCK
enumerator KEY_PAUSE
enumerator KEY_INSERT
enumerator KEY_HOME
enumerator KEY_PAGEUP
enumerator KEY_DELETE
enumerator KEY_END
enumerator KEY_PAGEDOWN
enumerator KEY_RIGHT
enumerator KEY_LEFT
enumerator KEY_DOWN
enumerator KEY_UP
enumerator KEY_NUMLOCKCLEAR
enumerator KEY_KEYPAD_DIVIDE
enumerator KEY_KEYPAD_MULTIPLY
enumerator KEY_KEYPAD_MINUS
enumerator KEY_KEYPAD_PLUS
enumerator KEY_KEYPAD_ENTER
enumerator KEY_KEYPAD_1
enumerator KEY_KEYPAD_2
enumerator KEY_KEYPAD_3
enumerator KEY_KEYPAD_4
enumerator KEY_KEYPAD_5
enumerator KEY_KEYPAD_6
enumerator KEY_KEYPAD_7
enumerator KEY_KEYPAD_8
enumerator KEY_KEYPAD_9
enumerator KEY_KEYPAD_0
enumerator KEY_KEYPAD_PERIOD
enumerator KEY_NONUSBACKSLASH
enumerator KEY_APPLICATION
enumerator KEY_POWER
enumerator KEY_KEYPAD_EQUALS
enumerator KEY_F13
enumerator KEY_F14
enumerator KEY_F15
enumerator KEY_F16
enumerator KEY_F17
enumerator KEY_F18
enumerator KEY_F19
enumerator KEY_F20
enumerator KEY_F21
enumerator KEY_F22
enumerator KEY_F23
enumerator KEY_F24
enumerator KEY_EXECUTE_EX
enumerator KEY_HELP
enumerator KEY_MENU
enumerator KEY_SELECT
enumerator KEY_STOP
enumerator KEY_AGAIN
enumerator KEY_UNDO
enumerator KEY_CUT
enumerator KEY_COPY
enumerator KEY_PASTE
enumerator KEY_FIND
enumerator KEY_MUTE
enumerator KEY_VOLUMEUP
enumerator KEY_VOLUMEDOWN
enumerator KEY_KEYPAD_COMMA
enumerator KEY_KEYPAD_EQUALSAS400
enumerator KEY_INTERNATIONAL1
enumerator KEY_INTERNATIONAL2
enumerator KEY_INTERNATIONAL3
enumerator KEY_INTERNATIONAL4
enumerator KEY_INTERNATIONAL5
enumerator KEY_INTERNATIONAL6
enumerator KEY_INTERNATIONAL7
enumerator KEY_INTERNATIONAL8
enumerator KEY_INTERNATIONAL9
enumerator KEY_LANG1
enumerator KEY_LANG2
enumerator KEY_LANG3
enumerator KEY_LANG4
enumerator KEY_LANG5
enumerator KEY_LANG6
enumerator KEY_LANG7
enumerator KEY_LANG8
enumerator KEY_LANG9
enumerator KEY_ALTERASE
enumerator KEY_SYSREQ
enumerator KEY_CANCEL
enumerator KEY_CLEAR
enumerator KEY_PRIOR
enumerator KEY_RETURN2
enumerator KEY_SEPARATOR
enumerator KEY_OUT
enumerator KEY_OPER
enumerator KEY_CLEARAGAIN
enumerator KEY_CRSEL
enumerator KEY_EXSEL
enumerator KEY_KEYPAD_00
enumerator KEY_KEYPAD_000
enumerator KEY_THOUSANDSSEPARATOR
enumerator KEY_DECIMALSEPARATOR
enumerator KEY_CURRENCYUNIT
enumerator KEY_CURRENCYSUBUNIT
enumerator KEY_KEYPAD_LEFTPAREN
enumerator KEY_KEYPAD_RIGHTPAREN
enumerator KEY_KEYPAD_LEFTBRACE
enumerator KEY_KEYPAD_RIGHTBRACE
enumerator KEY_KEYPAD_TAB
enumerator KEY_KEYPAD_BACKSPACE
enumerator KEY_KEYPAD_A
enumerator KEY_KEYPAD_B
enumerator KEY_KEYPAD_C
enumerator KEY_KEYPAD_D
enumerator KEY_KEYPAD_E
enumerator KEY_KEYPAD_F
enumerator KEY_KEYPAD_XOR
enumerator KEY_KEYPAD_POWER
enumerator KEY_KEYPAD_PERCENT
enumerator KEY_KEYPAD_LESS
enumerator KEY_KEYPAD_GREATER
enumerator KEY_KEYPAD_AMPERSAND
enumerator KEY_KEYPAD_DBLAMPERSAND
enumerator KEY_KEYPAD_VERTICALBAR
enumerator KEY_KEYPAD_DBLVERTICALBAR
enumerator KEY_KEYPAD_COLON
enumerator KEY_KEYPAD_HASH
enumerator KEY_KEYPAD_SPACE
enumerator KEY_KEYPAD_AT
enumerator KEY_KEYPAD_EXCLAM
enumerator KEY_KEYPAD_MEMSTORE
enumerator KEY_KEYPAD_MEMRECALL
enumerator KEY_KEYPAD_MEMCLEAR
enumerator KEY_KEYPAD_MEMADD
enumerator KEY_KEYPAD_MEMSUBTRACT
enumerator KEY_KEYPAD_MEMMULTIPLY
enumerator KEY_KEYPAD_MEMDIVIDE
enumerator KEY_KEYPAD_PLUSMINUS
enumerator KEY_KEYPAD_CLEAR
enumerator KEY_KEYPAD_CLEARENTRY
enumerator KEY_KEYPAD_BINARY
enumerator KEY_KEYPAD_OCTAL
enumerator KEY_KEYPAD_DECIMAL
enumerator KEY_KEYPAD_HEXADECIMAL
enumerator KEY_LEFT_CTRL
enumerator KEY_LEFT_SHIFT
enumerator KEY_LEFT_ALT
enumerator KEY_LEFT_GUI
enumerator KEY_RIGHT_CTRL
enumerator KEY_RIGHT_SHIFT
enumerator KEY_RIGHT_ALT
enumerator KEY_RIGHT_GUI
enumerator KEY_MODE
enumerator KEY_AUDIONEXT
enumerator KEY_AUDIOPREV
enumerator KEY_AUDIOSTOP
enumerator KEY_AUDIOPLAY
enumerator KEY_AUDIOMUTE
enumerator KEY_MEDIASELECT
enumerator KEY_WWW
enumerator KEY_MAIL
enumerator KEY_CALCULATOR
enumerator KEY_COMPUTER
enumerator KEY_AC_SEARCH
enumerator KEY_AC_HOME
enumerator KEY_AC_BACK
enumerator KEY_AC_FORWARD
enumerator KEY_AC_STOP
enumerator KEY_AC_REFRESH
enumerator KEY_AC_BOOKMARKS
enumerator KEY_BRIGHTNESSDOWN
enumerator KEY_BRIGHTNESSUP
enumerator KEY_DISPLAYSWITCH
enumerator KEY_KBDILLUMTOGGLE
enumerator KEY_KBDILLUMDOWN
enumerator KEY_KBDILLUMUP
enumerator KEY_EJECT
enumerator KEY_SLEEP
enumerator KEY_APP1
enumerator KEY_APP2
enumerator KEY_MAX

Functions

binocle_input binocle_input_new()

Creates a new input manager.

Returns

the input manager instance

void binocle_input_update(binocle_input *input)

Updates the input manager. This function should be called at every frame update as it consumes the SDL events and sets the appropriate values.

Parameters

input – the input manager instance

bool binocle_input_is_printable(SDL_Keycode key)

Checks whether an SDL keycode can be printed as an ASCII character.

Parameters

key – the SDL keycode

Returns

true if the keycode is a printable ASCII character

bool binocle_input_is_key_down(binocle_input input, int key)

Checks if a key has just been pressed.

Parameters
  • input – the input manager

  • key – the key to check

Returns

true if the key is being held down at the current frame and wasn’t at the previous one.

bool binocle_input_is_key_up(binocle_input input, int key)

Checks if a key has just been released.

Parameters
  • input – the input manager

  • key – the key to check

Returns

true if the key has been released at the current frame while it was held down at the previous one.

bool binocle_input_is_key_pressed(binocle_input *input, binocle_input_keyboard_key key)

Checks if a key is currently pressed, no matter the previous state.

Parameters
  • input – the input manager

  • key – the key to check

Returns

true if the key is pressed at the current frame

bool binocle_input_shift(binocle_input input)

Checks if one of the SHIFT keys is currently pressed, no matter the previous state.

Parameters

input – the input manager

Returns

true if one of the SHIFT keys is pressed at the current frame

bool binocle_input_ctrl(binocle_input input)

Checks if one of the CTRL keys is currently pressed, no matter the previous state.

Parameters

input – the input manager

Returns

true if one of the CTRL keys is pressed at the current frame

bool binocle_input_alt(binocle_input input)

Checks if one of the ALT keys is currently pressed, no matter the previous state.

Parameters

input – the input manager

Returns

true if one of the ALT keys is pressed at the current frame

bool binocle_input_is_mouse_down(binocle_input input, binocle_input_mouse_button button)

Checks if a mouse button has just been pressed.

See also

binocle_input_mouse_button

Parameters
  • input – the input manager

  • button – the button to check,

Returns

true if the mouse button is being held down at the current frame and wasn’t at the previous one.

bool binocle_input_is_mouse_up(binocle_input input, binocle_input_mouse_button button)

Checks if a mouse button has just been released.

See also

binocle_input_mouse_button

Parameters
  • input – the input manager

  • button – the button to check,

Returns

true if the mouse button has been released at the current frame while it was held down at the previous one.

bool binocle_input_is_mouse_pressed(binocle_input input, binocle_input_mouse_button button)

Checks if a mouse button is currently pressed, no matter the previous state.

See also

binocle_input_mouse_button

Parameters
  • input – the input manager

  • button – the button to check,

Returns

true if the mouse button is pressed at the current frame

int binocle_input_get_mouse_x(binocle_input input)

Gets the mouse X position in screen space.

Parameters

input – the input manager

Returns

the mouse X position in screen space

int binocle_input_get_mouse_y(binocle_input input)

Gets the mouse Y position in screen space.

Parameters

input – the input manager

Returns

the mouse Y position in screen space

bool binocle_input_quit_requested(binocle_input input)

Checks if the user requested to quit the application either by pressing the combination of keys or by clicking on the close window icon.

Parameters

input – the input manager

Returns

true if the user requested to terminate the application

bool binocle_input_pause_requested(binocle_input input)

Checks if the application is going into pause by losing the window focus.

Parameters

input – the input manager

Returns

true if the window has lost focus and the application should go into pause

bool binocle_input_is_mouse_inside(binocle_input input, kmAABB2 rectangle)

Checks if the mouse coordinates are inside a bounding box (screen space coordinates)

Parameters
  • input – the input manager

  • rectangle – the bounding box

Returns

true if the mouse is inside the bounding box

kmVec2 binocle_input_get_mouse_position(binocle_input input, struct binocle_camera camera)

Returns a vector with the X and Y coordinates of the mouse cursor in world space.

Parameters
  • input – the input manager

  • camera – the camera used to offset the mouse position to find the world space coordinates

Returns

bool binocle_input_is_printable_key_down(binocle_input input)

Checks if the current key being held down is a printable ASCII character.

Parameters

input – the input manager

Returns

true if the current key held down is a printable ASCII character

const char binocle_input_get_cur_printable_key(binocle_input input)

Gets the current printable character.

Parameters

input – the input manager

Returns

the printable character

void binocle_input_lock(binocle_input input)

Locks user input.

Parameters

input – the input manager

void binocle_input_unlock(binocle_input input)

Unlocks user input.

Parameters

input – the input manager

bool binocle_input_is_touch_down(binocle_input input, unsigned int finger)

Checks if the given finger is being held down on a touch screen.

Parameters
  • input – the input manager

  • finger – the index of the finger

Returns

true if the finger is being held down

kmVec2 binocle_input_get_touch_position(binocle_input input, unsigned int finger, struct binocle_camera camera)

Gets the current position of the given finger in world coordinates.

Parameters
  • finger – the index of the finger

  • camera – the camera used to offset the position to convert to world coordinates

Returns

the position of the finger in world coordinates

void binocle_input_invert_mouse_position(binocle_input *input, uint32_t screen_height)

Inverts the mouse position setting the origin at the bottom-left of the screen. If the window/screen size changes you have to call this function again to set the new height.

Parameters
  • input – the iunput manager

  • screen_height – the height of the screen, used to calculate the mouse origin

void binocle_input_default_mouse_position(binocle_input *input)

Sets the mouse position to have the origin at the top-left of the screen.

Parameters

input – the input manager

struct binocle_input_touch

Public Members

float x
float y
float dx
float dy
float pressure
binocle_input_finger_type type
struct binocle_input

Public Members

bool quit_requested
bool previousKeys[KEY_MAX]

Saves internal keyboard state.

bool currentKeys[KEY_MAX]
bool previousMouseButtons[MOUSE_MAX]

Saves internal mouse state.

bool currentMouseButtons[MOUSE_MAX]
int mouseX

Current mouse X position.

int mouseY

Current mouse Y position.

int mouseWheelX

Current mouse wheel X value.

int mouseWheelY

Current mouse wheel Y value.

binocle_input_keyboard_key curPrintableKey

If the user pressed a printable key, this is where it’ll be stored.

bool isLocked

Tells if the input manager is currently locked.

bool willPause

Tells if we must pause tha game (i.e. lost window focus)

bool force_skip_pause

If true we ignore the willPause flag and keep running at full speed.

bool resized
kmVec2 newWindowSize
binocle_input_touch touch
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]
bool inverted_mouse_position

By default the mouse position has the origin at the top-left of the screen. When this is set to true, we consider the origin at the bottom-left instead.

uint32_t screen_height

The screen height, used to calculate the inverted mouse position.