ClutterInputDevice

ClutterInputDevice — An input device managed by Clutter

Synopsis

enum                ClutterInputDeviceType;
enum                ClutterInputAxis;
enum                ClutterInputMode;
                    ClutterInputDevice;
gint                clutter_input_device_get_device_id  (ClutterInputDevice *device);
ClutterInputDeviceType clutter_input_device_get_device_type
                                                        (ClutterInputDevice *device);
const gchar *       clutter_input_device_get_device_name
                                                        (ClutterInputDevice *device);
ClutterInputMode    clutter_input_device_get_device_mode
                                                        (ClutterInputDevice *device);
gboolean            clutter_input_device_get_has_cursor (ClutterInputDevice *device);
void                clutter_input_device_set_enabled    (ClutterInputDevice *device,
                                                         gboolean enabled);
gboolean            clutter_input_device_get_enabled    (ClutterInputDevice *device);
ClutterInputDevice * clutter_input_device_get_associated_device
                                                        (ClutterInputDevice *device);
GList *             clutter_input_device_get_slave_devices
                                                        (ClutterInputDevice *device);
gboolean            clutter_input_device_keycode_to_evdev
                                                        (ClutterInputDevice *device,
                                                         guint hardware_keycode,
                                                         guint *evdev_keycode);

guint               clutter_input_device_get_n_keys     (ClutterInputDevice *device);
void                clutter_input_device_set_key        (ClutterInputDevice *device,
                                                         guint index_,
                                                         guint keyval,
                                                         ClutterModifierType modifiers);
gboolean            clutter_input_device_get_key        (ClutterInputDevice *device,
                                                         guint index_,
                                                         guint *keyval,
                                                         ClutterModifierType *modifiers);

guint               clutter_input_device_get_n_axes     (ClutterInputDevice *device);
ClutterInputAxis    clutter_input_device_get_axis       (ClutterInputDevice *device,
                                                         guint index_);
gboolean            clutter_input_device_get_axis_value (ClutterInputDevice *device,
                                                         gdouble *axes,
                                                         ClutterInputAxis axis,
                                                         gdouble *value);

gboolean            clutter_input_device_get_coords     (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence,
                                                         ClutterPoint *point);
void                clutter_input_device_get_device_coords
                                                        (ClutterInputDevice *device,
                                                         gint *x,
                                                         gint *y);
ClutterActor *      clutter_input_device_get_pointer_actor
                                                        (ClutterInputDevice *device);
ClutterStage *      clutter_input_device_get_pointer_stage
                                                        (ClutterInputDevice *device);

void                clutter_input_device_grab           (ClutterInputDevice *device,
                                                         ClutterActor *actor);
void                clutter_input_device_ungrab         (ClutterInputDevice *device);
ClutterActor *      clutter_input_device_get_grabbed_actor
                                                        (ClutterInputDevice *device);
void                clutter_input_device_sequence_grab  (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence,
                                                         ClutterActor *actor);
void                clutter_input_device_sequence_ungrab
                                                        (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence);
ClutterActor *      clutter_input_device_sequence_get_grabbed_actor
                                                        (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence);

void                clutter_input_device_update_from_event
                                                        (ClutterInputDevice *device,
                                                         ClutterEvent *event,
                                                         gboolean update_stage);

Object Hierarchy

  GObject
   +----ClutterInputDevice

Properties

  "backend"                  ClutterBackend*       : Read / Write / Construct Only
  "device-manager"           ClutterDeviceManager*  : Read / Write / Construct Only
  "device-mode"              ClutterInputMode      : Read / Write / Construct Only
  "device-type"              ClutterInputDeviceType  : Read / Write / Construct Only
  "enabled"                  gboolean              : Read / Write
  "has-cursor"               gboolean              : Read / Write / Construct Only
  "id"                       gint                  : Read / Write / Construct Only
  "n-axes"                   guint                 : Read
  "name"                     gchar*                : Read / Write / Construct Only

Description

ClutterInputDevice represents an input device known to Clutter.

The ClutterInputDevice class holds the state of the device, but its contents are usually defined by the Clutter backend in use.

Details

enum ClutterInputDeviceType

typedef enum {
  CLUTTER_POINTER_DEVICE,
  CLUTTER_KEYBOARD_DEVICE,
  CLUTTER_EXTENSION_DEVICE,
  CLUTTER_JOYSTICK_DEVICE,
  CLUTTER_TABLET_DEVICE,
  CLUTTER_TOUCHPAD_DEVICE,
  CLUTTER_TOUCHSCREEN_DEVICE,
  CLUTTER_PEN_DEVICE,
  CLUTTER_ERASER_DEVICE,
  CLUTTER_CURSOR_DEVICE,

  CLUTTER_N_DEVICE_TYPES
} ClutterInputDeviceType;

The types of input devices available.

The ClutterInputDeviceType enumeration can be extended at later date; not every platform supports every input device type.

CLUTTER_POINTER_DEVICE

A pointer device

CLUTTER_KEYBOARD_DEVICE

A keyboard device

CLUTTER_EXTENSION_DEVICE

A generic extension device

CLUTTER_JOYSTICK_DEVICE

A joystick device

CLUTTER_TABLET_DEVICE

A tablet device

CLUTTER_TOUCHPAD_DEVICE

A touchpad device

CLUTTER_TOUCHSCREEN_DEVICE

A touch screen device

CLUTTER_PEN_DEVICE

A pen device

CLUTTER_ERASER_DEVICE

An eraser device

CLUTTER_CURSOR_DEVICE

A cursor device

CLUTTER_N_DEVICE_TYPES

The number of device types

Since 1.0


enum ClutterInputAxis

typedef enum {
  CLUTTER_INPUT_AXIS_IGNORE,

  CLUTTER_INPUT_AXIS_X,
  CLUTTER_INPUT_AXIS_Y,
  CLUTTER_INPUT_AXIS_PRESSURE,
  CLUTTER_INPUT_AXIS_XTILT,
  CLUTTER_INPUT_AXIS_YTILT,
  CLUTTER_INPUT_AXIS_WHEEL,
  CLUTTER_INPUT_AXIS_DISTANCE,

  CLUTTER_INPUT_AXIS_LAST
} ClutterInputAxis;

The type of axes Clutter recognizes on a ClutterInputDevice

CLUTTER_INPUT_AXIS_IGNORE

Unused axis

CLUTTER_INPUT_AXIS_X

The position on the X axis

CLUTTER_INPUT_AXIS_Y

The position of the Y axis

CLUTTER_INPUT_AXIS_PRESSURE

The pressure information

CLUTTER_INPUT_AXIS_XTILT

The tilt on the X axis

CLUTTER_INPUT_AXIS_YTILT

The tile on the Y axis

CLUTTER_INPUT_AXIS_WHEEL

A wheel

CLUTTER_INPUT_AXIS_DISTANCE

Distance (Since 1.12)

CLUTTER_INPUT_AXIS_LAST

Last value of the enumeration; this value is useful when iterating over the enumeration values (Since 1.12)

Since 1.6


enum ClutterInputMode

typedef enum {
  CLUTTER_INPUT_MODE_MASTER,
  CLUTTER_INPUT_MODE_SLAVE,
  CLUTTER_INPUT_MODE_FLOATING
} ClutterInputMode;

The mode for input devices available.

CLUTTER_INPUT_MODE_MASTER

A master, virtual device

CLUTTER_INPUT_MODE_SLAVE

A slave, physical device, attached to a master device

CLUTTER_INPUT_MODE_FLOATING

A slave, physical device, not attached to a master device

Since 1.6


ClutterInputDevice

typedef struct _ClutterInputDevice ClutterInputDevice;

Generic representation of an input device. The actual contents of this structure depend on the backend used.


clutter_input_device_get_device_id ()

gint                clutter_input_device_get_device_id  (ClutterInputDevice *device);

Retrieves the unique identifier of device

device :

a ClutterInputDevice

Returns :

the identifier of the device

Since 1.0


clutter_input_device_get_device_type ()

ClutterInputDeviceType clutter_input_device_get_device_type
                                                        (ClutterInputDevice *device);

Retrieves the type of device

device :

a ClutterInputDevice

Returns :

the type of the device

Since 1.0


clutter_input_device_get_device_name ()

const gchar *       clutter_input_device_get_device_name
                                                        (ClutterInputDevice *device);

Retrieves the name of the device

device :

a ClutterInputDevice

Returns :

the name of the device, or NULL. The returned string is owned by the ClutterInputDevice and should never be modified or freed

Since 1.2


clutter_input_device_get_device_mode ()

ClutterInputMode    clutter_input_device_get_device_mode
                                                        (ClutterInputDevice *device);

Retrieves the ClutterInputMode of device.

device :

a ClutterInputDevice

Returns :

the device mode

Since 1.6


clutter_input_device_get_has_cursor ()

gboolean            clutter_input_device_get_has_cursor (ClutterInputDevice *device);

Retrieves whether device has a pointer that follows the device motion.

device :

a ClutterInputDevice

Returns :

TRUE if the device has a cursor

Since 1.6


clutter_input_device_set_enabled ()

void                clutter_input_device_set_enabled    (ClutterInputDevice *device,
                                                         gboolean enabled);

Enables or disables a ClutterInputDevice.

Only devices with a "device-mode" property set to CLUTTER_INPUT_MODE_SLAVE or CLUTTER_INPUT_MODE_FLOATING can be disabled.

device :

a ClutterInputDevice

enabled :

TRUE to enable the device

Since 1.6


clutter_input_device_get_enabled ()

gboolean            clutter_input_device_get_enabled    (ClutterInputDevice *device);

Retrieves whether device is enabled.

device :

a ClutterInputDevice

Returns :

TRUE if the device is enabled

Since 1.6


clutter_input_device_get_associated_device ()

ClutterInputDevice * clutter_input_device_get_associated_device
                                                        (ClutterInputDevice *device);

Retrieves a pointer to the ClutterInputDevice that has been associated to device.

If the "device-mode" property of device is set to CLUTTER_INPUT_MODE_MASTER, this function will return NULL.

device :

a ClutterInputDevice

Returns :

a ClutterInputDevice, or NULL. [transfer none]

Since 1.6


clutter_input_device_get_slave_devices ()

GList *             clutter_input_device_get_slave_devices
                                                        (ClutterInputDevice *device);

Retrieves the slave devices attached to device.

device :

a ClutterInputDevice

Returns :

a list of ClutterInputDevice, or NULL. The contents of the list are owned by the device. Use g_list_free() when done. [transfer container][element-type Clutter.InputDevice]

Since 1.6


clutter_input_device_keycode_to_evdev ()

gboolean            clutter_input_device_keycode_to_evdev
                                                        (ClutterInputDevice *device,
                                                         guint hardware_keycode,
                                                         guint *evdev_keycode);

Translates a hardware keycode from a ClutterKeyEvent to the equivalent evdev keycode. Note that depending on the input backend used by Clutter this function can fail if there is no obvious mapping between the key codes. The hardware keycode can be taken from the ClutterKeyEvent.hardware_keycode member of ClutterKeyEvent.

device :

A ClutterInputDevice

hardware_keycode :

The hardware keycode from a ClutterKeyEvent

evdev_keycode :

The return location for the evdev keycode

Returns :

TRUE if the conversion succeeded, FALSE otherwise.

Since 1.10


clutter_input_device_get_n_keys ()

guint               clutter_input_device_get_n_keys     (ClutterInputDevice *device);

Retrieves the number of keys registered for device.

device :

a ClutterInputDevice

Returns :

the number of registered keys

Since 1.6


clutter_input_device_set_key ()

void                clutter_input_device_set_key        (ClutterInputDevice *device,
                                                         guint index_,
                                                         guint keyval,
                                                         ClutterModifierType modifiers);

Sets the keyval and modifiers at the given index_ for device.

Clutter will use the keyval and modifiers set when filling out an event coming from the same input device.

device :

a ClutterInputDevice

index_ :

the index of the key

keyval :

the keyval

modifiers :

a bitmask of modifiers

Since 1.6


clutter_input_device_get_key ()

gboolean            clutter_input_device_get_key        (ClutterInputDevice *device,
                                                         guint index_,
                                                         guint *keyval,
                                                         ClutterModifierType *modifiers);

Retrieves the key set using clutter_input_device_set_key()

device :

a ClutterInputDevice

index_ :

the index of the key

keyval :

return location for the keyval at index_. [out]

modifiers :

return location for the modifiers at index_. [out]

Returns :

TRUE if a key was set at the given index

Since 1.6


clutter_input_device_get_n_axes ()

guint               clutter_input_device_get_n_axes     (ClutterInputDevice *device);

Retrieves the number of axes available on device.

device :

a ClutterInputDevice

Returns :

the number of axes on the device

Since 1.6


clutter_input_device_get_axis ()

ClutterInputAxis    clutter_input_device_get_axis       (ClutterInputDevice *device,
                                                         guint index_);

Retrieves the type of axis on device at the given index.

device :

a ClutterInputDevice

index_ :

the index of the axis

Returns :

the axis type

Since 1.6


clutter_input_device_get_axis_value ()

gboolean            clutter_input_device_get_axis_value (ClutterInputDevice *device,
                                                         gdouble *axes,
                                                         ClutterInputAxis axis,
                                                         gdouble *value);

Extracts the value of the given axis of a ClutterInputDevice from an array of axis values.

An example of typical usage for this function is:

1
2
3
4
5
6
7
ClutterInputDevice *device = clutter_event_get_device (event);
gdouble *axes = clutter_event_get_axes (event, NULL);
gdouble pressure_value = 0;

clutter_input_device_get_axis_value (device, axes,
                                     CLUTTER_INPUT_AXIS_PRESSURE,
                                     &pressure_value);

device :

a ClutterInputDevice

axes :

an array of axes values, typically coming from clutter_event_get_axes(). [array]

axis :

the axis to extract

value :

return location for the axis value. [out]

Returns :

TRUE if the value was set, and FALSE otherwise

Since 1.6


clutter_input_device_get_coords ()

gboolean            clutter_input_device_get_coords     (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence,
                                                         ClutterPoint *point);

Retrieves the latest coordinates of a pointer or touch point of device.

device :

a ClutterInputDevice

sequence :

a ClutterEventSequence, or NULL if the device is not touch-based. [allow-none]

point :

return location for the pointer or touch point. [out caller-allocates]

Returns :

FALSE if the device's sequence hasn't been found, and TRUE otherwise.

Since 1.12


clutter_input_device_get_device_coords ()

void                clutter_input_device_get_device_coords
                                                        (ClutterInputDevice *device,
                                                         gint *x,
                                                         gint *y);

Warning

clutter_input_device_get_device_coords has been deprecated since version 1.12 and should not be used in newly-written code. Use clutter_input_device_get_coords() instead.

Retrieves the latest coordinates of the pointer of device

device :

a ClutterInputDevice of type CLUTTER_POINTER_DEVICE

x :

return location for the X coordinate. [out]

y :

return location for the Y coordinate. [out]

Since 1.2


clutter_input_device_get_pointer_actor ()

ClutterActor *      clutter_input_device_get_pointer_actor
                                                        (ClutterInputDevice *device);

Retrieves the ClutterActor underneath the pointer of device

device :

a ClutterInputDevice of type CLUTTER_POINTER_DEVICE

Returns :

a pointer to the ClutterActor or NULL. [transfer none]

Since 1.2


clutter_input_device_get_pointer_stage ()

ClutterStage *      clutter_input_device_get_pointer_stage
                                                        (ClutterInputDevice *device);

Retrieves the ClutterStage underneath the pointer of device

device :

a ClutterInputDevice of type CLUTTER_POINTER_DEVICE

Returns :

a pointer to the ClutterStage or NULL. [transfer none]

Since 1.2


clutter_input_device_grab ()

void                clutter_input_device_grab           (ClutterInputDevice *device,
                                                         ClutterActor *actor);

Acquires a grab on actor for the given device.

Any event coming from device will be delivered to actor, bypassing the usual event delivery mechanism, until the grab is released by calling clutter_input_device_ungrab().

The grab is client-side: even if the windowing system used by the Clutter backend has the concept of "device grabs", Clutter will not use them.

Only ClutterInputDevice of types CLUTTER_POINTER_DEVICE and CLUTTER_KEYBOARD_DEVICE can hold a grab.

device :

a ClutterInputDevice

actor :

a ClutterActor

Since 1.10


clutter_input_device_ungrab ()

void                clutter_input_device_ungrab         (ClutterInputDevice *device);

Releases the grab on the device, if one is in place.

device :

a ClutterInputDevice

Since 1.10


clutter_input_device_get_grabbed_actor ()

ClutterActor *      clutter_input_device_get_grabbed_actor
                                                        (ClutterInputDevice *device);

Retrieves a pointer to the ClutterActor currently grabbing all the events coming from device.

device :

a ClutterInputDevice

Returns :

a ClutterActor, or NULL. [transfer none]

Since 1.10


clutter_input_device_sequence_grab ()

void                clutter_input_device_sequence_grab  (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence,
                                                         ClutterActor *actor);

Acquires a grab on actor for the given device and the given touch sequence.

Any touch event coming from device and from sequence will be delivered to actor, bypassing the usual event delivery mechanism, until the grab is released by calling clutter_input_device_sequence_ungrab().

The grab is client-side: even if the windowing system used by the Clutter backend has the concept of "device grabs", Clutter will not use them.

device :

a ClutterInputDevice

sequence :

a ClutterEventSequence

actor :

a ClutterActor

Since 1.12


clutter_input_device_sequence_ungrab ()

void                clutter_input_device_sequence_ungrab
                                                        (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence);

Releases the grab on the device for the given sequence, if one is in place.

device :

a ClutterInputDevice

sequence :

a ClutterEventSequence

Since 1.12


clutter_input_device_sequence_get_grabbed_actor ()

ClutterActor *      clutter_input_device_sequence_get_grabbed_actor
                                                        (ClutterInputDevice *device,
                                                         ClutterEventSequence *sequence);

Retrieves a pointer to the ClutterActor currently grabbing the touch events coming from device given the sequence.

device :

a ClutterInputDevice

sequence :

a ClutterEventSequence

Returns :

a ClutterActor, or NULL. [transfer none]

Since 1.12


clutter_input_device_update_from_event ()

void                clutter_input_device_update_from_event
                                                        (ClutterInputDevice *device,
                                                         ClutterEvent *event,
                                                         gboolean update_stage);

Forcibly updates the state of the device using a ClutterEvent

This function should never be used by applications: it is meant for integration with embedding toolkits, like clutter-gtk

Embedding toolkits that disable the event collection inside Clutter need to use this function to update the state of input devices depending on a ClutterEvent that they are going to submit to the event handling code in Clutter though clutter_do_event(). Since the input devices hold the state that is going to be used to fill in fields like the ClutterButtonEvent click count, or to emit synthesized events like CLUTTER_ENTER and CLUTTER_LEAVE, it is necessary for embedding toolkits to also be responsible of updating the input device state.

For instance, this might be the code to translate an embedding toolkit native motion notification into a Clutter ClutterMotionEvent and ask Clutter to process it:

1
2
3
4
5
ClutterEvent c_event;

translate_native_event_to_clutter (native_event, &c_event);

clutter_do_event (&c_event);

Before letting clutter_do_event() process the event, it is necessary to call clutter_input_device_update_from_event():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ClutterEvent c_event;
ClutterDeviceManager *manager;
ClutterInputDevice *device;

translate_native_event_to_clutter (native_event, &c_event);

/* get the device manager */
manager = clutter_device_manager_get_default ();

/* use the default Core Pointer that Clutter
 * backends register by default
 */
device = clutter_device_manager_get_core_device (manager, %CLUTTER_POINTER_DEVICE);

/* update the state of the input device */
clutter_input_device_update_from_event (device, &c_event, FALSE);

clutter_do_event (&c_event);

The update_stage boolean argument should be used when the input device enters and leaves a ClutterStage; it will use the ClutterStage field of the passed event to update the stage associated to the input device.

device :

a ClutterInputDevice

event :

a ClutterEvent

update_stage :

whether to update the ClutterStage of the device using the stage of the event

Since 1.2

Property Details

The "backend" property

  "backend"                  ClutterBackend*       : Read / Write / Construct Only

The ClutterBackend that created the device.

Since 1.6


The "device-manager" property

  "device-manager"           ClutterDeviceManager*  : Read / Write / Construct Only

The ClutterDeviceManager instance which owns the device

Since 1.6


The "device-mode" property

  "device-mode"              ClutterInputMode      : Read / Write / Construct Only

The mode of the device.

Default value: CLUTTER_INPUT_MODE_FLOATING


The "device-type" property

  "device-type"              ClutterInputDeviceType  : Read / Write / Construct Only

The type of the device

Default value: CLUTTER_POINTER_DEVICE

Since 1.2


The "enabled" property

  "enabled"                  gboolean              : Read / Write

Whether the device is enabled.

A device with the "device-mode" property set to CLUTTER_INPUT_MODE_MASTER cannot be disabled.

A device must be enabled in order to receive events from it.

Default value: FALSE

Since 1.6


The "has-cursor" property

  "has-cursor"               gboolean              : Read / Write / Construct Only

Whether the device has an on screen cursor following its movement.

Default value: FALSE

Since 1.6


The "id" property

  "id"                       gint                  : Read / Write / Construct Only

The unique identifier of the device

Allowed values: >= G_MAXULONG

Default value: 0

Since 1.2


The "n-axes" property

  "n-axes"                   guint                 : Read

The number of axes of the device.

Default value: 0

Since 1.6


The "name" property

  "name"                     gchar*                : Read / Write / Construct Only

The name of the device

Default value: NULL

Since 1.2