blob: e8f98b2e07fea1acfbad9c1faa9c74418bf83c39 [file] [log] [blame]
// Copyright 2015 Google Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
// Module Overview: Starboard Input module
// Defines input events and associated data types.
#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/key.h"
#include "starboard/types.h"
#include "starboard/window.h"
#ifdef __cplusplus
extern "C" {
// Identifies possible input subsystem types. The types of events that each
// device type produces correspond to |SbInputEventType| values.
typedef enum SbInputDeviceType {
// Input from a gesture-detection mechanism. Examples include Kinect,
// Wiimotes, LG Magic Remotes, etc...
// Produces |Move|, |Grab|, |Ungrab|, |Press| and |Unpress| events.
// Input from a gamepad, following the layout provided in the W3C Web Gamepad
// API. []
// Produces |Move|, |Press| and |Unpress| events.
// Keyboard input from a traditional keyboard or game controller chatpad.
// Produces |Press| and |Unpress| events.
// Input from a microphone that would provide audio data to the caller, who
// may then find some way to detect speech or other sounds within it. It may
// have processed or filtered the audio in some way before it arrives.
// Produces |Audio| events.
// Input from a traditional mouse.
// Produces |Move|, |Press|, and |Unpress| events.
// Input from a TV remote-control-style device.
// Produces |Press| and |Unpress| events.
// Input from a speech command analyzer, which is some hardware or software
// that, given a set of known phrases, activates when one of the registered
// phrases is heard.
// Produces |Command| events.
// Input from a single- or multi-touchscreen.
// Produces |Move|, |Press|, and |Unpress| events.
// Input from a touchpad that is not masquerading as a mouse.
// Produces |Move|, |Press|, and |Unpress| events.
} SbInputDeviceType;
// The action that an input event represents.
typedef enum SbInputEventType {
// Receipt of Audio. Some audio data was received by the input microphone.
// Receipt of a command. A command was received from some semantic source,
// like a speech recognizer.
// Grab activation. This event type is deprecated.
// Device Movement. In the case of |Mouse|, and perhaps |Gesture|, the
// movement tracks an absolute cursor position. In the case of |TouchPad|,
// only relative movements are provided.
// Key or button press activation. This could be a key on a keyboard, a
// button on a mouse or game controller, a push from a touch screen, or
// a gesture. An |Unpress| event is subsequently delivered when the
// |Press| event terminates, such as when the key/button/finger is raised.
// Injecting repeat presses is up to the client.
// Grab deactivation. This event type is deprecated.
// Key or button deactivation. The counterpart to the |Press| event, this
// event is sent when the key or button being pressed is released.
} SbInputEventType;
// A 2-dimensional vector used to represent points and motion vectors.
typedef struct SbInputVector {
int x;
int y;
} SbInputVector;
// Event data for |kSbEventTypeInput| events.
typedef struct SbInputData {
// The window in which the input was generated.
SbWindow window;
// The type of input event that this represents.
SbInputEventType type;
// The type of device that generated this input event.
SbInputDeviceType device_type;
// An identifier that is unique among all connected devices.
int device_id;
// An identifier that indicates which keyboard key or mouse button was
// involved in this event, if any. All known keys for all devices are mapped
// to a single ID space, defined by the |SbKey| enum in |key.h|.
SbKey key;
// The character that corresponds to the key. For an external keyboard, this
// character also depends on the keyboard language. The value is |0| if there
// is no corresponding character.
wchar_t character;
// The location of the specified key, in cases where there are multiple
// instances of the button on the keyboard. For example, some keyboards
// have more than one "shift" key.
SbKeyLocation key_location;
// Key modifiers (e.g. |Ctrl|, |Shift|) held down during this input event.
unsigned int key_modifiers;
// The (x, y) coordinates of the persistent cursor controlled by this
// device. The value is |0| if this data is not applicable.
SbInputVector position;
// The relative motion vector of this input. The value is |0| if this data
// is not applicable.
SbInputVector delta;
} SbInputData;
#ifdef __cplusplus
} // extern "C"