Commit Graph

5663 Commits

Author SHA1 Message Date
Emmanuele Bassi
cd67c7fd24 drag-action: Allow destroying the dragged actor inside ::drag-end
It should be possible to destroy the actor currently being dragged from
within the ::drag-end signal. In order to do this, we need to keep a
reference on the action for the duration of the emit_drag_end() function
as well as resetting the action's state inside the dispose()
implementation, to avoid trying to access cleared data.

https://bugzilla.gnome.org/show_bug.cgi?id=681814
2012-09-17 19:54:27 +01:00
Emmanuele Bassi
8d53bbd34f docs: Document the states of a GestureAction
Useful notes for developers writing gesture recognizers.
2012-09-17 12:05:39 +01:00
Emanuele Aina
165871024c stage: fix typo and format identifiers in debug notes
https://bugzilla.gnome.org/show_bug.cgi?id=683937
2012-09-13 12:09:30 +02:00
Emanuele Aina
e6fcdb0644 click-action: add touch event support
Allow for touch events to trigger the "clicked" event on
ClickAction without introducing API changes.

https://bugzilla.gnome.org/show_bug.cgi?id=683936
2012-09-13 11:59:08 +02:00
Emanuele Aina
19de5d2541 action: fix CLUTTER_GESTURE_ACTION_GET_CLASS()
Fix the same cut'n'paste error fixed for GestureAction in 609766fa,
this time in ClickAction, PanAction, RotateAction and SwipeAction.

https://bugzilla.gnome.org/show_bug.cgi?id=683430
2012-09-11 23:05:15 +02:00
Rui Matos
ea50df6bb6 text: Don't accept new line characters in single line mode
Modified Return key presses don't trigger ::activate so we would end
up adding an unprintable character to a single paragraph mode pango
layout which renders it as a box.

https://bugzilla.gnome.org/show_bug.cgi?id=623344
2012-09-09 23:48:46 +02:00
Debarshi Ray
c3e574a389 actor: Fix the content box for CLUTTER_CONTENT_GRAVITY_RESIZE_ASPECT
The code for calculating the content box when the aspect ratio is
greater than 1 was broken. The same code that did the calculation for
aspect ratio less than 1 should be used in all cases.

Fixes: https://bugzilla.gnome.org/682161
2012-09-07 21:23:24 +01:00
Emanuele Aina
9caf9ffbbb gesture-action: unregister point on missed release events
When we miss button release events (eg. when they happen outside
of our window) we must ensure that the corresponding point is
removed from the array of tracked points, otherwise GestureAction
will get very confused and will cancel all subsequent gestures.

https://bugzilla.gnome.org/show_bug.cgi?id=683471
2012-09-06 12:16:24 +01:00
Emanuele Aina
3b298ddfa3 pan-action: emit ::pan-stopped before ::gesture-begin
When starting a new gesture before the momentum of the previous one
has finished the ::pan-stopped was counter-intuitively emitted
after the new ::gesture-begin.

Make use of gesture_prepare() to reset the state of the action
right before emitting ::gesture-begin.

https://bugzilla.gnome.org/show_bug.cgi?id=683431
2012-09-06 12:16:09 +01:00
Emanuele Aina
2001cd7a2c gesture-action: add gesture_prepare() virtual function
The gesture_prepare() virtual function is called before the
::gesture-begin signal is emitted, and allows a subclass to reset
its state.

https://bugzilla.gnome.org/show_bug.cgi?id=683431
2012-09-06 12:16:08 +01:00
Emanuele Aina
609766fa2b gesture-action: fix CLUTTER_GESTURE_ACTION_GET_CLASS()
Fix a cut'n'paste error where CLUTTER_GESTURE_ACTION_GET_CLASS()
was returning the private class data instead of the class instance.

https://bugzilla.gnome.org/show_bug.cgi?id=683430
2012-09-06 12:15:50 +01:00
Emmanuele Bassi
f67aa36e3b color: Simplify shade() implementation
We can use the CLAMP macro, instead of a bunch of ifs.
2012-09-06 12:15:28 +01:00
Jasper St. Pierre
3398f3acdf stage: Normalize key focus setting
We often mean that when key_focus == NULL, it's assumed to be on the
stage, and clutter_stage_get_key_focus() reflects this. We also do a
lot of check around the lines of key_focus == NULL instead of also
checking for the stage, so make sure to normalize it so that explicitly
grabbing the stage's key focus will not change our behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=683301
2012-09-05 14:16:34 -03:00
Emmanuele Bassi
950e60f824 x11: Add EventSequence → touch detail accessor
The ClutterEventSequence structure is a fully opaque type; on X11, it is
just an unsigned integer that gets converted into a pointer, but in the
future it may become a fully fledged data structure.

Obviously, we cannot tell people to just dereference the pointer into an
integer in order to use it, and still retain the ability to change the
type; for this reason, we need a proper accessor function to convert the
EventSequence into a touch detail, to be used with the XInput API.
2012-09-05 09:43:47 +01:00
Emmanuele Bassi
d6b8dfb694 gdk: Fix include 2012-09-03 22:34:52 +01:00
Neil Roberts
99a7406d01 evdev: Swap the numbers for the middle and right buttons
The ordering of the evdev button numbers is the opposite of the
order in Clutter (the middle button is 3 instead of 2) so we need to
manually map the button numbers when creating a ClutterButtonEvent.

https://bugzilla.gnome.org/show_bug.cgi?id=680255
2012-09-03 21:58:25 +01:00
Emmanuele Bassi
df0ab34499 docs: Fix GestureAction.get_velocity()
The velocity is in pixels per milliseconds, not microseconds.

https://bugzilla.gnome.org/show_bug.cgi?id=683113
2012-09-03 21:56:39 +01:00
Lionel Landwerlin
d6a0f7eb61 input-device: don't reset a device's stage until all touch points are gone
803b3bafb6 introduced a new issue for
multi touch events.

In the case where 2 touch events for 2 different touch points are
processed in the same iteration, a call to
_clutter_stage_remove_device() when processing the first event will
remove the stage setting of the InputDevice. That means Clutter will
skip the second event, because it can't find a stage to which relate
the event, so no related actor and so no emission.

To fix this we move the _clutter_stage_(add/remove)_device() calls
into the input device. This way the input device can find out exactly
when to call these functions (i.e. when no touch point were previously
active or when no touch point remain active).

https://bugzilla.gnome.org/show_bug.cgi?id=682362
2012-09-03 21:50:24 +01:00
Tomeu Vizoso
d5332d1e4c stage: Remove tracking input devices, it's not used
https://bugzilla.gnome.org/show_bug.cgi?id=683126
2012-09-03 21:50:19 +01:00
Jasper St. Pierre
fd375a7bc9 blur-effect: Fix the blur filter
Make sure we don't sample the center twice, and don't sample things
that aren't our immediate neighbors.

https://bugzilla.gnome.org/show_bug.cgi?id=683076
2012-09-03 21:18:43 +01:00
Emmanuele Bassi
48a2846ab9 actor: Make :transform and :child-transform animatable
Now that we can interpolate between two matrices, we can mark the
matrix-based property as animatable.
2012-09-03 21:00:40 +01:00
Emmanuele Bassi
22ce4409b3 Add interpolation for matrices
Interpolating between two transformations expressed using a 3D matrix
can be achieved by decomposing the matrices into their transformations
and do a simple numeric interpolation between the initial and final
states, like we do for other data types.

Luckily for us, the CSS Transforms specification from the W3C provides
the decomposition algorithm, using the "unmatrix" code taken from the
book "Graphics Gems II, edited by Jim Arvo".

Once the matrices have been decomposed, we can simply interpolate the
transformations, and re-apply them onto the result matrix, using the
facilities that Clutter provides for interpolating between two known
GTypes.
2012-09-03 20:54:43 +01:00
Neil Roberts
cda4493f99 Include cogl/cogl-egl.h from clutter-egl-headers.h
Since Cogl version 1.11.2, Cogl no longer includes the EGL headers
from cogl.h if COGL_ENABLE_EXPERIMENTAL_2_0_API is defined. Instead
the application needs to include cogl-egl.h so that we can avoid
polluting the global namespace with X defines. Clutter defines the 2.0
define in its configure.ac and it is relying on Cogl to include the
right EGL header in clutter-egl-headers.h so we need to change which
header it includes.
2012-09-03 15:58:17 +01:00
Emmanuele Bassi
03f4f1c69e actor: Remove existing implicit transition if duration is 0
When changing an implicit transition mid flight we may end up with an
easing state with a duration of zero milliseconds; this leads to the
implicit transition machinery setting the final state directly onto the
actor. If there is a running transition, though, we need to remove it
from the transitions table, otherwise it will keep running.

This regression happened when the update_transition() internal function
was merged into the create_transition() one.

Tested-by: Lionel Landwerlin <llandwerlin@gmail.com>
2012-09-03 13:03:16 +01:00
Tomeu Vizoso
2ef148a2c9 gesture-action: Add API for cancelling a gesture
and getters for sequences and devices of current points. It can be
used for accepting and rejecting sequences for system-wide gestures.

https://bugzilla.gnome.org/show_bug.cgi?id=683090
2012-09-03 10:21:24 +02:00
Jasper St. Pierre
38b82cb22c brightness-contrast-effect: Don't actually run if it will have no effect
Don't run the shader and redirect to an FBO if it won't actually do anything.
This saves us on resources a ton.

https://bugzilla.gnome.org/show_bug.cgi?id=683066
2012-09-03 05:02:48 -03:00
Emmanuele Bassi
b2b22dbe6c x11/device-manager-xi2: Put XIPointerEmulated under conditionals
There are a couple of debugging messages using XInput 2.2 symbols
unconditionally, and it breaks builds on older systems.

https://bugzilla.gnome.org/show_bug.cgi?id=683219
2012-09-02 22:48:52 +01:00
Emanuele Aina
9ca06d2895 pan-action: add PanAction, to handle panning in scrollable actors
PanAction is a GestureAction-subclass that implements the panning
concept for scrollable actors, with the ability to emit interpolated
signals to emulate the kinetic inertia of the panning. PanAction provides:

• pan signal, notifying users of the panning gesture status;

• pan-stopped signal, emitted at the end of the interpolated phase
  of the panning gesture, if enabled;

• pan-axis property, to allow constraining the dragging to a specific
  axis;

• interpolated property, to enable or disable the inertial behaviour;

• deceleration property, to customize the rate at which the momentum
  of the panning will be slowed down;

• acceleration-factor property, applied to the inertial momentum when
  starting the interpolated sequence.

An interactive test is also provided.

https://bugzilla.gnome.org/show_bug.cgi?id=681648
2012-08-28 10:11:16 -03:00
Emanuele Aina
436ebb2716 gesture-action: add _get_motion_delta()/_get_velocity()
Add some accessors to simplify common tasks for GestureAction users:

• clutter_gesture_action_get_motion_delta() to get the delta
  on the X and Y axis in stage coordinates since the last motion
  event, and the scalar distance travelled;

• clutter_gesture_action_get_velocity() to get an estimate of the
  speed of the last motion event along the X and Y axis and as a
  scalar value in pixels per millisecond.

https://bugzilla.gnome.org/show_bug.cgi?id=681648
2012-08-28 09:57:33 -03:00
Emanuele Aina
e8e91b62c8 gesture-action: add allow-none annotations to getters
https://bugzilla.gnome.org/show_bug.cgi?id=681648
2012-08-28 09:57:30 -03:00
Andre Kuehne
d332255111 Fix clutter_table_layout_pack row/column count incrementation.
When appending (with a negative row/column parameter), the row/column
count should be incremented by 1, not 2. This also fixes layout errors
when using column/row spacing: The amount of extra space required was
calculated incorrectly due to the wrong column count.

https://bugzilla.gnome.org/show_bug.cgi?id=679990
2012-08-27 16:23:34 +01:00
Emanuele Aina
59801ef854 drag-action: fix press coords transform with drag_handle
When setting a drag handle, transform the original press
coordinates using the drag handle as reference instead of the
associated actor.

This causes the initial misplacement of drag handle in
example/drag-action when holding down the Shift key: the handle
gets placed at the main actor origin on the first drag event,
instead of following the mouse pointer.

All subsequent motion events already use the right actor when
transforming the coordinates, thus they are not affected.

https://bugzilla.gnome.org/show_bug.cgi?id=681746
2012-08-27 16:21:13 +01:00
Lionel Landwerlin
8cf5c5959f rotate-action: fix wrong marshaller usage
https://bugzilla.gnome.org/show_bug.cgi?id=682754
2012-08-27 14:05:44 +01:00
Lionel Landwerlin
fe92acd649 actor-iter: fix prev()/next() annotations
https://bugzilla.gnome.org/show_bug.cgi?id=682795
2012-08-27 13:47:29 +01:00
Emmanuele Bassi
3937a7c74c actor: Setting the child-transform invalidates the children's modelview
We need to ensure that the children's cached modelview matrix gets
invalidated when setting the :child-transform property on their parent.
2012-08-27 12:24:20 +01:00
Emmanuele Bassi
1b155504c5 actor: Call queue_redraw() when setting child-transform 2012-08-27 10:48:28 +01:00
Emmanuele Bassi
6bf0b983af actor: Deprecate the pick signal
Just like we did for the paint signal; a warning will be emitted if the
diagnostic mode of GLib is enabled through the G_ENABLE_DIAGNOSTIC env
var.
2012-08-27 10:48:27 +01:00
Emmanuele Bassi
06ea2cf7b1 drag-action: Ensure that we can destroy the drag handle
If the DragAction has a drag handle that gets destroyed inside the
::drag-end signal handler, the destruction sequence will trigger a
callback we have in place to check if the handle is being destroyed
mid-drag, e.g. from a ::drag-motion event.

The callback on the drag handle destruction will check if we are still
in the middle of a drag and emit the ::drag-end signal to allow cleaning
up; the callback erroneously uses the drag handle as the argument for
the emit_drag_end() function — instead of the actor to which the drag
action has been attached. Also, by the time we emit the ::drag-end, we
are not dragging the actor any more, so we shouldn't be emitted the
::drag-end signal twice.

The fix is, thus, made of two parts:

  - reset the in_drag boolean before emitting the ::drag-end signal
    so that destroying the drag handle will not result in a double
    signal emission;

  - use the correct actor when calling emit_drag_end().

https://bugzilla.gnome.org/show_bug.cgi?id=681814
2012-08-20 19:04:56 +01:00
Lionel Landwerlin
84325057af Add zoom action
https://bugzilla.gnome.org/show_bug.cgi?id=678427
2012-08-20 18:28:22 +01:00
Tristan Van Berkom
d037890fc4 ClutterBoxLayout: Blessing with proper h4w geometry management
The box layout was broken for height-for-width requests in the opposing orientation of the box.

https://bugzilla.gnome.org/show_bug.cgi?id=679483
2012-08-20 17:52:38 +01:00
Emmanuele Bassi
8536314dbf bin-layout: Ensure that fixed position get a 0.0 alignment
If the actor has a fixed position set, but it's not using the BinLayout
alignment enumeration to set its alignment, then we force the alignment
factor to 0.0; this is consistent with what happens with an explicit
alignment of CLUTTER_BIN_ALIGNMENT_FIXED.

https://bugzilla.gnome.org/show_bug.cgi?id=682265
2012-08-20 14:50:39 +01:00
Emmanuele Bassi
ffe32426b8 actor: Add the :child-transform property
An additional transformation that is applied to the children of an actor
before their own transformations, but not to the actor itself.
2012-08-19 17:23:26 +01:00
Emmanuele Bassi
f7dd2d3746 matrix: Fix the init_with_matrix() implementation
As usual, I swapped the memcpy() arguments around.
2012-08-19 17:23:26 +01:00
Emmanuele Bassi
e9bcb4cf6e text: Clean up button press handling
Event handling should only apply to editable ClutterText actors, but we
also have the :selectable property to care about.

The button/touch press should position the cursor inside an editable
ClutterText; the :selectable property should be used to allow selecting
the text, either through pointer or touch dragging, via the keyboard, or
by multiple pointer clicks. If neither of these two conditions are met,
the ClutterText should just propagate the event handling further.
2012-08-19 10:05:34 +01:00
Emmanuele Bassi
aeb7c6926b Fix segfault when enabling debugging notes 2012-08-19 10:05:34 +01:00
Jasper St. Pierre
f5a620ed3b clutter-text: Make sure to paint the background of a text actor
https://bugzilla.gnome.org/show_bug.cgi?id=682070
2012-08-17 13:17:01 -04:00
Giovanni Campagna
f99d48a0c6 ClutterDragAction: allow constraining the movement of the dragged actor
Allow setting a ClutterRect on the drag action and force the
dragged actor's position to be always within that rectangle (relative
to the actor's parent).

https://bugzilla.gnome.org/show_bug.cgi?id=681168
2012-08-16 18:21:07 +02:00
Emmanuele Bassi
b6e8f9d61e Remove (constructor) annotation
ClutterMatrix is an alias to CoglMatrix, and g-ir-scanner complains if
a function marked as a constructor does not return the correct type.
2012-08-16 12:22:56 +01:00
Emmanuele Bassi
803b3bafb6 Associate the device to a stage on touch events
Just like we do for crossing events, we need to update the stage pointer
inside ClutterInputDevice on TOUCH_BEGIN and TOUCH_END.

https://bugzilla.gnome.org/show_bug.cgi?id=681074
2012-08-16 11:27:25 +01:00
Emmanuele Bassi
260d8fc097 backend: Include deprecated header
To avoid compiler warnings.
2012-08-12 19:21:22 +01:00