Commit Graph

5685 Commits

Author SHA1 Message Date
Emanuele Aina
abcf1d589f gesture-action: Let subclasses override the GestureTriggerEdge handling
Let gesture subclasses override how the drag threshold should
be handled:

• CLUTTER_GESTURE_TRIGGER_NONE tells GestureAction that the gesture
  must begin immediately and there's no drag limit that will cause
  its cancellation;
• CLUTTER_GESTURE_TRIGGER_AFTER is the default GestureAction behaviour,
  where it needs to wait until the drag threshold has been exceeded
  before considering the gesture valid;
• CLUTTER_GESTURE_TRIGGER_BEFORE will make GestureAction cancel
  the gesture once the drag exceed the configured threshold.

For example, ZoomAction and RotateAction could set
CLUTTER_GESTURE_TRIGGER_NONE since the use of two fingers makes the
begin of the action more self-evident, while an hypothetical Tap
gesture may use CLUTTER_GESTURE_TRIGGER_BEFORE to cancel the tap if
the pointer moves too much.

https://bugzilla.gnome.org/show_bug.cgi?id=685028
2012-10-19 11:27:35 +02:00
Rob Bradford
cbab0a62ad wayland: Port to new protocol 2012-10-12 18:54:25 +01:00
Rob Bradford
eb61e372b0 wayland: Initialise the repeat key to the expected default value
The code for handling key repeats (and in particular stopping on focus loss)
assumes that the repeat key is set to XKB_KEYCODE_INVALID in the default case.
2012-10-12 15:23:03 +01:00
Rob Bradford
fce43c420e wayland: Use wl_cursor_theme to provide a buffer for the Wayland cursor
This change switches to the new mechanism for loading a cursor into a buffer.
It no longer relies on having a PNG stored in a known location and instead
loads from the Wayland cursor theme.

Signed-off-by: Rob Bradford <rob@linux.intel.com>
2012-10-12 15:12:55 +01:00
Daniel Stone
d4c7f2ecf4 abicheck: Add CLUTTER_WINDOWING_WAYLAND
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
dab6b3916a clutter.symbols: Update for Wayland changes
make check now passes under Wayland.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
a33d84234f Hide clutter_input_device_wayland and clutter_stage_wayland types
By prefixing them with an underscore, so they don't get exported as part
of public ABI.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
978202aa49 Wayland: Set default font DPI to 96
Otherwise the units test fails, since the default DPI is set to -1.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
1c7a740385 Wayland: Add key repeat
Add support for repeating keys to the Wayland input backend.
Unfortunately the repeat delay/interval is hardcoded into the Clutter
backend, as Wayland doesn't yet tell clients what the global values
should be.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
8f4e39b6d7 Port to new Wayland and xkbcommon APIs
For Wayland, this is mostly the input protocol having changed, although
there's also the SHM pool API, the cursor API, as well as fullscreen and
ping.

Also port to the new (months-old) xkbcommon API, as used by Weston 0.95.
This involves having xkbcommon manage the state for us, where
appropriate.  Fans of multi-layout keyboards (or just caps lock) will no
doubt appreciate these changes.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Daniel Stone
a158d66abb EGL: Include cogl-egl.h for prototypes
Looks like we need to include this directly, but also need to include
cogl/cogl.h to get COGL_HAS_EGL_SUPPORT, since cogl-egl.h doesn't
include cogl-defines.h first.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-10-12 15:12:55 +01:00
Emanuele Aina
1eaa577883 gesture-action: Make _cancel() callable after the gesture has started
https://bugzilla.gnome.org/show_bug.cgi?id=685554
2012-10-10 20:50:29 +02:00
Emanuele Aina
318d0d5965 events: Deliver touch events that continue off stage (soft grab)
If a button press happen on stage and the pointer is moved outside
the stage while holding the mouse button, the motion and release
events are still delivered to actors. Do the same X11 soft grab
emulation for touch events.

https://bugzilla.gnome.org/show_bug.cgi?id=685589
2012-10-10 20:34:51 +02:00
Emanuele Aina
cb4620d14f version: Add 1.14 version macros
https://bugzilla.gnome.org/show_bug.cgi?id=685028
2012-10-10 20:27:44 +02:00
Tomeu Vizoso
36c2343001 actor: Place coordinate of the pivot point in the right pointer 2012-10-08 11:08:20 +02:00
Emmanuele Bassi
0da0e5122e main: Do not release the lock if it hasn't been acquired
On various systems, trying to release a mutex that hasn't been acquired
will result in a run-time error.

In order to avoid this, we trylock() the Big Clutter Lock™ and
immediately unlock() it, regardless of the result; if the lock was
already acquired, trylock() will immediately fail, and we can release
it; if the lock was not acquired, trylock() will succeed, and we can
release the lock immediately.

This is necessary to maintain binary compatibility and invariants for
Clutter applications doing:

  clutter_init()
  clutter_threads_enter()
  ...
  clutter_main()
  ...
  clutter_threads_leave()

instead of the correct:

  clutter_init()
  clutter_threads_enter()
  ...
  clutter_threads_leave()
  clutter_main()
  clutter_threads_enter()
  ...
  clutter_threads_leave()

With Clutter ≥ 1.12, the idiomatic form is:

  clutter_init()
  ...
  clutter_main()

given that the public Big Clutter Lock™ acquire/release API has been
deprecated, and nobody should take the lock outside of Clutter itself.

https://bugzilla.gnome.org/show_bug.cgi?id=679439
2012-10-05 17:36:06 +01:00
Emmanuele Bassi
696f1afc04 actor: Fix transform-set condition
The :transform-set property is set if the matrix in :transform is not
the identity matrix.
2012-09-25 09:12:54 +01:00
Emmanuele Bassi
65bedbe42c docs: Fix typo in closing tag 2012-09-24 17:21:36 +01:00
Emanuele Aina
35faaf604c x11: set the stage for core events with no associated stage
When the last touch has been released the stage on the
corresponding master device (eg. the virtual core pointer) is set
to NULL and no mouse events can be delivered until an ENTER event
has occurred and the stage pointer restored.

This is due to the fact that the master devices can send both
touch events and mouse events, forwarding events coming from the
attached slave devices.

To restore delivery of mouse events we need to ensure that the
stage is set on each ButtonPress, ButtonRelease and Motion event
coming from master devices.

https://bugzilla.gnome.org/show_bug.cgi?id=684509
2012-09-24 17:08:24 +01:00
Emanuele Aina
a6abf86e94 input-device: print device number in debug messages
https://bugzilla.gnome.org/show_bug.cgi?id=684530
2012-09-24 17:04:08 +01:00
Emmanuele Bassi
64c7973c74 bin-layout: Fix text direction checks
When using the new ActorAlign flags we must get the real alignment for
the horizontal axis, as clutter_actor_allocate() will compute the
effective alignment by itself; if we use the effective alignment then
ClutterActor.allocate() will swap it, and undo our work.

When using the old BinAlignment flags we should reverse the alignment
depending on whether the text direction of the child is RTL or LTR.

See bug: https://bugzilla.gnome.org/show_bug.cgi?id=684214
2012-09-19 11:40:33 +01:00
Emmanuele Bassi
4578a87d1d Add debug note for text direction
It would be nice to have the text direction inside the debug log.
2012-09-19 11:39:41 +01:00
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