From 46cb355799413bfe07795ed609e971ad5833fb02 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 3 Aug 2023 23:18:06 +0200 Subject: [PATCH] clutter: Make ClutterEvent structs private All ClutterEvent users have been changed to use getter methods instead of direct field access. We may now make the ClutterEvent union/structs entirely opaque by moving the definitions out of public headers. All future usage of ClutterEvent data should be done through getter methods. Part-of: --- clutter/clutter/clutter-event.c | 240 +++++++++++++++++ clutter/clutter/clutter-event.h | 460 -------------------------------- 2 files changed, 240 insertions(+), 460 deletions(-) diff --git a/clutter/clutter/clutter-event.c b/clutter/clutter/clutter-event.c index 332cc01c1..8bad3dff3 100644 --- a/clutter/clutter/clutter-event.c +++ b/clutter/clutter/clutter-event.c @@ -34,6 +34,246 @@ #include +struct _ClutterAnyEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; +}; + +struct _ClutterKeyEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterModifierType modifier_state; + uint32_t keyval; + uint16_t hardware_keycode; + gunichar unicode_value; + uint32_t evdev_code; + ClutterInputDevice *device; +}; + +struct _ClutterButtonEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + float x; + float y; + ClutterModifierType modifier_state; + uint32_t button; + double *axes; /* Future use */ + ClutterInputDevice *device; + uint32_t evdev_code; +}; + +struct _ClutterProximityEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + ClutterInputDevice *device; +}; + +struct _ClutterCrossingEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + float x; + float y; + ClutterInputDevice *device; + ClutterEventSequence *sequence; + ClutterActor *source; + ClutterActor *related; +}; + +struct _ClutterMotionEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + float x; + float y; + ClutterModifierType modifier_state; + double *axes; /* Future use */ + ClutterInputDevice *device; + + int64_t time_us; + double dx; + double dy; + double dx_unaccel; + double dy_unaccel; + double dx_constrained; + double dy_constrained; +}; + +struct _ClutterScrollEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + float x; + float y; + ClutterScrollDirection direction; + ClutterModifierType modifier_state; + double *axes; /* future use */ + ClutterInputDevice *device; + ClutterScrollSource scroll_source; + ClutterScrollFinishFlags finish_flags; +}; + +struct _ClutterTouchEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + float x; + float y; + ClutterEventSequence *sequence; + ClutterModifierType modifier_state; + double *axes; /* reserved */ + ClutterInputDevice *device; +}; + +struct _ClutterTouchpadPinchEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterTouchpadGesturePhase phase; + float x; + float y; + float dx; + float dy; + float dx_unaccel; + float dy_unaccel; + float angle_delta; + float scale; + uint32_t n_fingers; +}; + +struct _ClutterTouchpadSwipeEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterTouchpadGesturePhase phase; + uint32_t n_fingers; + float x; + float y; + float dx; + float dy; + float dx_unaccel; + float dy_unaccel; +}; + +struct _ClutterTouchpadHoldEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterTouchpadGesturePhase phase; + uint32_t n_fingers; + float x; + float y; +}; + +struct _ClutterPadButtonEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + uint32_t button; + uint32_t group; + ClutterInputDevice *device; + uint32_t mode; +}; + +struct _ClutterPadStripEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterInputDevice *device; + ClutterInputDevicePadSource strip_source; + uint32_t strip_number; + uint32_t group; + double value; + uint32_t mode; +}; + +struct _ClutterPadRingEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterInputDevice *device; + ClutterInputDevicePadSource ring_source; + uint32_t ring_number; + uint32_t group; + double angle; + uint32_t mode; +}; + +struct _ClutterDeviceEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + ClutterInputDevice *device; +}; + +struct _ClutterIMEvent +{ + ClutterEventType type; + uint32_t time; + ClutterEventFlags flags; + + char *text; + int32_t offset; + int32_t anchor; + uint32_t len; + ClutterPreeditResetMode mode; +}; + +union _ClutterEvent +{ + /*< private >*/ + ClutterEventType type; + + ClutterAnyEvent any; + ClutterButtonEvent button; + ClutterKeyEvent key; + ClutterMotionEvent motion; + ClutterScrollEvent scroll; + ClutterCrossingEvent crossing; + ClutterTouchEvent touch; + ClutterTouchpadPinchEvent touchpad_pinch; + ClutterTouchpadSwipeEvent touchpad_swipe; + ClutterTouchpadHoldEvent touchpad_hold; + ClutterProximityEvent proximity; + ClutterPadButtonEvent pad_button; + ClutterPadStripEvent pad_strip; + ClutterPadRingEvent pad_ring; + ClutterDeviceEvent device; + ClutterIMEvent im; +}; + typedef struct _ClutterEventPrivate { ClutterEvent base; diff --git a/clutter/clutter/clutter-event.h b/clutter/clutter/clutter-event.h index e0c41d6d0..92a07b205 100644 --- a/clutter/clutter/clutter-event.h +++ b/clutter/clutter/clutter-event.h @@ -109,466 +109,6 @@ typedef struct _ClutterPadRingEvent ClutterPadRingEvent; typedef struct _ClutterDeviceEvent ClutterDeviceEvent; typedef struct _ClutterIMEvent ClutterIMEvent; -/** - * ClutterAnyEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @source: event source actor - * - * Common members for a #ClutterEvent - */ -struct _ClutterAnyEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; -}; - -/** - * ClutterKeyEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @modifier_state: key modifiers - * @keyval: raw key value - * @hardware_keycode: raw hardware key value - * @unicode_value: Unicode representation - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Key event - */ -struct _ClutterKeyEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterModifierType modifier_state; - guint keyval; - guint16 hardware_keycode; - gunichar unicode_value; - uint32_t evdev_code; - ClutterInputDevice *device; -}; - -/** - * ClutterButtonEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @x: event X coordinate, relative to the stage - * @y: event Y coordinate, relative to the stage - * @modifier_state: button modifiers - * @button: event button - * @axes: reserved for future use - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Button event. - * - * The event coordinates are relative to the stage that received the - * event, and can be transformed into actor-relative coordinates by - * using clutter_actor_transform_stage_point(). - */ -struct _ClutterButtonEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - gfloat x; - gfloat y; - ClutterModifierType modifier_state; - guint32 button; - gdouble *axes; /* Future use */ - ClutterInputDevice *device; - uint32_t evdev_code; -}; - -/** - * ClutterProximityEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Event for tool proximity in tablet devices8 - */ -struct _ClutterProximityEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - ClutterInputDevice *device; -}; - -/** - * ClutterCrossingEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @x: event X coordinate - * @y: event Y coordinate - * @related: actor related to the crossing - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Event for the movement of the pointer across different actors - */ -struct _ClutterCrossingEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - gfloat x; - gfloat y; - ClutterInputDevice *device; - ClutterEventSequence *sequence; - ClutterActor *source; - ClutterActor *related; -}; - -/** - * ClutterMotionEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @x: event X coordinate - * @y: event Y coordinate - * @modifier_state: button modifiers - * @axes: reserved for future use - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Event for the pointer motion - */ -struct _ClutterMotionEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - gfloat x; - gfloat y; - ClutterModifierType modifier_state; - gdouble *axes; /* Future use */ - ClutterInputDevice *device; - - int64_t time_us; - double dx; - double dy; - double dx_unaccel; - double dy_unaccel; - double dx_constrained; - double dy_constrained; -}; - -/** - * ClutterScrollEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor - * @x: event X coordinate - * @y: event Y coordinate - * @direction: direction of the scrolling - * @modifier_state: button modifiers - * @axes: reserved for future use - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * @scroll_source: the source of scroll events. This field is available since 1.26 - * @finish_flags: the axes that were stopped in this event. This field is available since 1.26 - * - * Scroll wheel (or similar device) event - */ -struct _ClutterScrollEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - gfloat x; - gfloat y; - ClutterScrollDirection direction; - ClutterModifierType modifier_state; - gdouble *axes; /* future use */ - ClutterInputDevice *device; - ClutterScrollSource scroll_source; - ClutterScrollFinishFlags finish_flags; -}; - -/** - * ClutterTouchEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor (unused) - * @x: the X coordinate of the pointer, relative to the stage - * @y: the Y coordinate of the pointer, relative to the stage - * @sequence: the event sequence that this event belongs to - * @modifier_state: (type ClutterModifierType): a bit-mask representing the state - * of modifier keys (e.g. Control, Shift, and Alt) and the pointer - * buttons. See #ClutterModifierType - * @axes: reserved - * @device: the device that originated the event. If you want the physical - * device the event originated from, use clutter_event_get_source_device() - * - * Used for touch events. - * - * The @type field will be one of %CLUTTER_TOUCH_BEGIN, %CLUTTER_TOUCH_END, - * %CLUTTER_TOUCH_UPDATE, or %CLUTTER_TOUCH_CANCEL. - * - * Touch events are grouped into sequences; each touch sequence will begin - * with a %CLUTTER_TOUCH_BEGIN event, progress with %CLUTTER_TOUCH_UPDATE - * events, and end either with a %CLUTTER_TOUCH_END event or with a - * %CLUTTER_TOUCH_CANCEL event. - * - * With multi-touch capable devices there can be multiple event sequence - * running at the same time. - */ -struct _ClutterTouchEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - gfloat x; - gfloat y; - ClutterEventSequence *sequence; - ClutterModifierType modifier_state; - gdouble *axes; /* reserved */ - ClutterInputDevice *device; -}; - -/** - * ClutterTouchpadPinchEvent: - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor (unused) - * @phase: the current phase of the gesture - * @x: the X coordinate of the pointer, relative to the stage - * @y: the Y coordinate of the pointer, relative to the stage - * @dx: movement delta of the pinch focal point in the X axis - * @dy: movement delta of the pinch focal point in the Y axis - * @dx_unaccel: unaccelerated movement delta of the pinch focal - * point in the X axis - * @dy_unaccel: unaccelerated movement delta of the pinch focal - * point in the Y axis - * @angle_delta: angle delta in degrees, clockwise rotations are - * represented by positive deltas - * @scale: the current scale - * - * Used for touchpad pinch gesture events. - * - * The current state of the gesture will be determined by the @phase field. - * - * Each event with phase %CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN - * will report a @scale of 1.0, all later phases in the gesture - * report the current scale relative to the initial 1.0 value - * (eg. 0.5 being half the size, 2.0 twice as big).4 - */ -struct _ClutterTouchpadPinchEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterTouchpadGesturePhase phase; - gfloat x; - gfloat y; - gfloat dx; - gfloat dy; - gfloat dx_unaccel; - gfloat dy_unaccel; - gfloat angle_delta; - gfloat scale; - guint n_fingers; -}; - -/** - * ClutterTouchpadSwipeEvent - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor (unused) - * @phase: the current phase of the gesture - * @n_fingers: the number of fingers triggering the swipe - * @x: the X coordinate of the pointer, relative to the stage - * @y: the Y coordinate of the pointer, relative to the stage - * @dx: movement delta of the swipe center point in the X axis - * @dy: movement delta of the swipe center point in the Y axis - * @dx_unaccel: unaccelerated movement delta of the swipe center - * point in the X axis - * @dy_unaccel: unaccelerated movement delta of the swipe center - * point in the Y axis - * - * Used for touchpad swipe gesture events. - * - * The current state of the gesture will be determined by the @phase field.4 - */ -struct _ClutterTouchpadSwipeEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterTouchpadGesturePhase phase; - guint n_fingers; - gfloat x; - gfloat y; - gfloat dx; - gfloat dy; - gfloat dx_unaccel; - gfloat dy_unaccel; -}; - -/** - * ClutterTouchpadHoldEvent - * @type: event type - * @time: event time - * @flags: event flags - * @stage: event source stage - * @source: event source actor (unused) - * @phase: the current phase of the gesture - * @n_fingers: the number of fingers triggering the swipe - * @x: the X coordinate of the pointer, relative to the stage - * @y: the Y coordinate of the pointer, relative to the stage - * - * Used for touchpad hold gesture events. - * - * The current state of the gesture will be determined by the @phase field. - * - * A hold gesture starts when the user places one or many fingers on the - * touchpad and ends when all fingers are lifted. It is cancelled when the - * finger(s) move past a certain threshold. - * Unlike swipe and pinch, @phase can only be - * CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN, CLUTTER_TOUCHPAD_GESTURE_PHASE_END and - * CLUTTER_TOUCHPAD_GESTURE_PHASE_CANCEL. - */ -struct _ClutterTouchpadHoldEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterTouchpadGesturePhase phase; - uint32_t n_fingers; - float x; - float y; -}; - -struct _ClutterPadButtonEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - guint32 button; - guint32 group; - ClutterInputDevice *device; - guint32 mode; -}; - -struct _ClutterPadStripEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterInputDevice *device; - ClutterInputDevicePadSource strip_source; - guint32 strip_number; - guint32 group; - gdouble value; - guint32 mode; -}; - -struct _ClutterPadRingEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterInputDevice *device; - ClutterInputDevicePadSource ring_source; - guint32 ring_number; - guint32 group; - gdouble angle; - guint32 mode; -}; - -struct _ClutterDeviceEvent -{ - ClutterEventType type; - guint32 time; - ClutterEventFlags flags; - - ClutterInputDevice *device; -}; - -struct _ClutterIMEvent -{ - ClutterEventType type; - uint32_t time; - ClutterEventFlags flags; - - char *text; - int32_t offset; - int32_t anchor; - uint32_t len; - ClutterPreeditResetMode mode; -}; - -/** - * ClutterEvent: - * - * User and window system events - * - * The events usually come from the windowing backend, but can also - * be synthesized by Clutter itself or by the application code. - */ -union _ClutterEvent -{ - /*< private >*/ - ClutterEventType type; - - ClutterAnyEvent any; - ClutterButtonEvent button; - ClutterKeyEvent key; - ClutterMotionEvent motion; - ClutterScrollEvent scroll; - ClutterCrossingEvent crossing; - ClutterTouchEvent touch; - ClutterTouchpadPinchEvent touchpad_pinch; - ClutterTouchpadSwipeEvent touchpad_swipe; - ClutterTouchpadHoldEvent touchpad_hold; - ClutterProximityEvent proximity; - ClutterPadButtonEvent pad_button; - ClutterPadStripEvent pad_strip; - ClutterPadRingEvent pad_ring; - ClutterDeviceEvent device; - ClutterIMEvent im; -}; - /** * ClutterEventFilterFunc: * @event: the event that is going to be emitted