diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2011-02-22 17:12:34 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2011-02-28 14:16:23 +0000 |
commit | d3a7b7502e3a1d1a2df2ca60298fbe3639aa008e (patch) | |
tree | 117d1e67391a8b9f0f891147ab58e9bc03c5a1b1 /clutter/clutter-event.c | |
parent | 26ec3efbff6da99bd443cd5b587a980bb7a3a75a (diff) | |
download | clutter-d3a7b7502e3a1d1a2df2ca60298fbe3639aa008e.tar.gz |
event: Add setters for ClutterEvent members
Creating a synthetic event requires direct access to the ClutterEvent
union members; this access does not map in bindings to high-level
languages, especially run-time bindings using GObject-Introspection.
It's also midly annoying from C, as it unnecessarily exposes the guts of
ClutterEvent - something we might want to fix in the future.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2575
Diffstat (limited to 'clutter/clutter-event.c')
-rw-r--r-- | clutter/clutter-event.c | 368 |
1 files changed, 322 insertions, 46 deletions
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c index 036d0694d..e1b297be9 100644 --- a/clutter/clutter-event.c +++ b/clutter/clutter-event.c @@ -87,6 +87,15 @@ _clutter_event_get_platform_data (const ClutterEvent *event) return ((ClutterEventPrivate *) event)->platform_data; } +/*< private > + * _clutter_event_set_platform_data: + * @event: a #ClutterEvent + * @data: a pointer to platform-specific data + * + * Sets the pointer to platform-specific data inside an event + * + * Since: 1.4 + */ void _clutter_event_set_platform_data (ClutterEvent *event, gpointer data) @@ -132,6 +141,24 @@ clutter_event_get_time (const ClutterEvent *event) } /** + * clutter_event_set_time: + * @event: a #ClutterEvent + * @time_: the time of the event + * + * Sets the time of the event. + * + * Since: 1.8 + */ +void +clutter_event_set_time (ClutterEvent *event, + guint32 time_) +{ + g_return_if_fail (event != NULL); + + event->any.time = time_; +} + +/** * clutter_event_get_state: * @event: a #ClutterEvent * @@ -170,6 +197,46 @@ clutter_event_get_state (const ClutterEvent *event) } /** + * clutter_event_set_state: + * @event: a #ClutterEvent + * @state: the modifier state to set + * + * Sets the modifier state of the event. + * + * Since: 1.8 + */ +void +clutter_event_set_state (ClutterEvent *event, + ClutterModifierType state) +{ + g_return_if_fail (event != NULL); + + switch (event->type) + { + case CLUTTER_KEY_PRESS: + case CLUTTER_KEY_RELEASE: + event->key.modifier_state = state; + break; + + case CLUTTER_BUTTON_PRESS: + case CLUTTER_BUTTON_RELEASE: + event->button.modifier_state = state; + break; + + case CLUTTER_MOTION: + event->motion.modifier_state = state; + break; + + case CLUTTER_SCROLL: + event->scroll.modifier_state = state; + break; + + default: + break; + } +} + +/** * clutter_event_get_coords: * @event: a #ClutterEvent * @x: (out): return location for the X coordinate, or %NULL @@ -232,6 +299,58 @@ clutter_event_get_coords (const ClutterEvent *event, } /** + * clutter_event_set_coords: + * @event: a #ClutterEvent + * @x: the X coordinate of the event + * @y: the Y coordinate of the event + * + * Sets the coordinates of the @event. + * + * Since: 1.8 + */ +void +clutter_event_set_coords (ClutterEvent *event, + gfloat x, + gfloat y) +{ + g_return_if_fail (event != NULL); + + switch (event->type) + { + case CLUTTER_NOTHING: + case CLUTTER_KEY_PRESS: + case CLUTTER_KEY_RELEASE: + case CLUTTER_STAGE_STATE: + case CLUTTER_DESTROY_NOTIFY: + case CLUTTER_CLIENT_MESSAGE: + case CLUTTER_DELETE: + break; + + case CLUTTER_ENTER: + case CLUTTER_LEAVE: + event->crossing.x = x; + event->crossing.y = y; + break; + + case CLUTTER_BUTTON_PRESS: + case CLUTTER_BUTTON_RELEASE: + event->button.x = x; + event->button.y = y; + break; + + case CLUTTER_MOTION: + event->motion.x = x; + event->motion.y = y; + break; + + case CLUTTER_SCROLL: + event->scroll.x = x; + event->scroll.y = y; + break; + } +} + +/** * clutter_event_get_source: * @event: a #ClutterEvent * @@ -251,6 +370,25 @@ clutter_event_get_source (const ClutterEvent *event) } /** + * clutter_event_set_source: + * @event: a #ClutterEvent + * @actor: (allow-none): a #ClutterActor, or %NULL + * + * Sets the source #ClutterActor of @event. + * + * Since: 1.8 + */ +void +clutter_event_set_source (ClutterEvent *event, + ClutterActor *actor) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor)); + + event->any.source = actor; +} + +/** * clutter_event_get_stage: * @event: a #ClutterEvent * @@ -270,6 +408,28 @@ clutter_event_get_stage (const ClutterEvent *event) } /** + * clutter_event_set_stage: + * @event: a #ClutterEvent + * @stage: (allow-none): a #ClutterStage, or %NULL + * + * Sets the source #ClutterStage of the event. + * + * Since: 1.8 + */ +void +clutter_event_set_stage (ClutterEvent *event, + ClutterStage *stage) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (stage == NULL || CLUTTER_IS_STAGE (stage)); + + if (event->any.stage == stage) + return; + + event->any.stage = stage; +} + +/** * clutter_event_get_flags: * @event: a #ClutterEvent * @@ -288,6 +448,28 @@ clutter_event_get_flags (const ClutterEvent *event) } /** + * clutter_event_set_flags: + * @event: a #ClutterEvent + * @flags: a binary OR of #ClutterEventFlags values + * + * Sets the #ClutterEventFlags of @event + * + * Since: 1.8 + */ +void +clutter_event_set_flags (ClutterEvent *event, + ClutterEventFlags flags) +{ + g_return_if_fail (event != NULL); + + if (event->any.flags == flags) + return; + + event->any.flags = flags; + event->any.flags |= CLUTTER_EVENT_FLAG_SYNTHETIC; +} + +/** * clutter_event_get_related: * @event: a #ClutterEvent of type %CLUTTER_ENTER or of * type %CLUTTER_LEAVE @@ -309,6 +491,30 @@ clutter_event_get_related (const ClutterEvent *event) } /** + * clutter_event_set_related + * @event: a #ClutterEvent of type %CLUTTER_ENTER or %CLUTTER_LEAVE + * @actor: (allow-none): a #ClutterActor or %NULL + * + * Sets the related actor of a crossing event + * + * Since: 1.8 + */ +void +clutter_event_set_related (ClutterEvent *event, + ClutterActor *actor) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_ENTER || + event->type == CLUTTER_LEAVE); + g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor)); + + if (event->crossing.related == actor) + return; + + event->crossing.related = actor; +} + +/** * clutter_event_get_scroll_direction: * @event: a #ClutterEvent of type %CLUTTER_SCROLL * @@ -328,6 +534,25 @@ clutter_event_get_scroll_direction (const ClutterEvent *event) } /** + * clutter_event_set_scroll_direction: + * @event: a #ClutterEvent + * @direction: the scrolling direction + * + * Sets the direction of the scrolling of @event + * + * Since: 1.8 + */ +void +clutter_event_set_scroll_direction (ClutterEvent *event, + ClutterScrollDirection direction) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_SCROLL); + + event->scroll.direction = direction; +} + +/** * clutter_event_get_button: * @event: a #ClutterEvent of type %CLUTTER_BUTTON_PRESS or * of type %CLUTTER_BUTTON_RELEASE @@ -349,6 +574,27 @@ clutter_event_get_button (const ClutterEvent *event) } /** + * clutter_event_set_button: + * @event: a #ClutterEvent or type %CLUTTER_BUTTON_PRESS or + * of type %CLUTTER_BUTTON_RELEASE + * @button: the button number + * + * Sets the button number of @event + * + * Since: 1.8 + */ +void +clutter_event_set_button (ClutterEvent *event, + guint32 button) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_BUTTON_PRESS || + event->type == CLUTTER_BUTTON_RELEASE); + + event->button.button = button; +} + +/** * clutter_event_get_click_count: * @event: a #ClutterEvent of type %CLUTTER_BUTTON_PRESS or * of type %CLUTTER_BUTTON_RELEASE @@ -393,6 +639,27 @@ clutter_event_get_key_symbol (const ClutterEvent *event) } /** + * clutter_event_set_key_symbol: + * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS + * or %CLUTTER_KEY_RELEASE + * @key_sym: the key symbol representing the key + * + * Sets the key symbol of @event. + * + * Since: 1.8 + */ +void +clutter_event_set_key_symbol (ClutterEvent *event, + guint key_sym) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_KEY_PRESS || + event->type == CLUTTER_KEY_RELEASE); + + event->key.keyval = key_sym; +} + +/** * clutter_event_get_key_code: * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS or * of type %CLUTTER_KEY_RELEASE @@ -414,8 +681,30 @@ clutter_event_get_key_code (const ClutterEvent *event) } /** + * clutter_event_set_key_code: + * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS + * or %CLUTTER_KEY_RELEASE + * @key_code: the keycode representing the key + * + * Sets the keycode of the @event. + * + * Since: 1.8 + */ +void +clutter_event_set_key_code (ClutterEvent *event, + guint16 key_code) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_KEY_PRESS || + event->type == CLUTTER_KEY_RELEASE); + + event->key.hardware_keycode = key_code; +} + +/** * clutter_event_get_key_unicode: - * @event: A #ClutterKeyEvent + * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS + * or %CLUTTER_KEY_RELEASE * * Retrieves the unicode value for the key that caused @keyev. * @@ -435,6 +724,27 @@ clutter_event_get_key_unicode (const ClutterEvent *event) } /** + * clutter_event_set_key_unicode: + * @event: a #ClutterEvent of type %CLUTTER_KEY_PRESS + * or %CLUTTER_KEY_RELEASE + * @key_unicode: the Unicode value representing the key + * + * Sets the Unicode value of @event. + * + * Since: 1.8 + */ +void +clutter_event_set_key_unicode (ClutterEvent *event, + guint32 key_unicode) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_KEY_PRESS || + event->type == CLUTTER_KEY_RELEASE); + + event->key.unicode_value = key_unicode; +} + +/** * clutter_keysym_to_unicode: * @keyval: a key symbol * @@ -532,7 +842,7 @@ clutter_event_get_device_type (const ClutterEvent *event) /** * clutter_event_set_device: * @event: a #ClutterEvent - * @device: a #ClutterInputDevice + * @device: (allow-none): a #ClutterInputDevice, or %NULL * * Sets the device for @event. * @@ -652,7 +962,7 @@ clutter_event_get_device (const ClutterEvent *event) * * Creates a new #ClutterEvent of the specified type. * - * Return value: A newly allocated #ClutterEvent. + * Return value: (transfer full): A newly allocated #ClutterEvent. */ ClutterEvent * clutter_event_new (ClutterEventType type) @@ -679,7 +989,7 @@ clutter_event_new (ClutterEventType type) * * Copies @event. * - * Return value: A newly allocated #ClutterEvent + * Return value: (transfer full): A newly allocated #ClutterEvent */ ClutterEvent * clutter_event_copy (const ClutterEvent *event) @@ -853,8 +1163,6 @@ _clutter_event_push (const ClutterEvent *event, ClutterEvent *copy; copy = clutter_event_copy (event); - copy->any.flags |= CLUTTER_EVENT_FLAG_SYNTHETIC; - event = copy; } @@ -979,58 +1287,26 @@ clutter_event_get_source_device (const ClutterEvent *event) return clutter_event_get_device (event); } -void -_clutter_event_set_device (ClutterEvent *event, - ClutterInputDevice *device) -{ - switch (event->type) - { - case CLUTTER_NOTHING: - case CLUTTER_STAGE_STATE: - case CLUTTER_DESTROY_NOTIFY: - case CLUTTER_CLIENT_MESSAGE: - case CLUTTER_DELETE: - case CLUTTER_ENTER: - case CLUTTER_LEAVE: - break; - - case CLUTTER_BUTTON_PRESS: - case CLUTTER_BUTTON_RELEASE: - event->button.device = device; - break; - - case CLUTTER_MOTION: - event->motion.device = device; - break; - - case CLUTTER_SCROLL: - event->scroll.device = device; - break; - - case CLUTTER_KEY_PRESS: - case CLUTTER_KEY_RELEASE: - event->key.device = device; - break; - } -} - -/*< private > +/** * clutter_event_set_source_device: * @event: a #ClutterEvent - * @device: a #ClutterInputDevice + * @device: (allow-none): a #ClutterInputDevice * * Sets the source #ClutterInputDevice for @event. * * The #ClutterEvent must have been created using clutter_event_new(). * - * Since: 1.6 + * Since: 1.8 */ void -_clutter_event_set_source_device (ClutterEvent *event, - ClutterInputDevice *device) +clutter_event_set_source_device (ClutterEvent *event, + ClutterInputDevice *device) { ClutterEventPrivate *real_event; + g_return_if_fail (event != NULL); + g_return_if_fail (device == NULL || CLUTTER_IS_INPUT_DEVICE (device)); + if (!is_event_allocated (event)) return; |