Commit Graph

808 Commits

Author SHA1 Message Date
Tomeu Vizoso
060b05cc29 actor: Remove transition when stopping it
This covers more cases when the transition completes but was still
being tracked by its actor.

https://bugzilla.gnome.org/show_bug.cgi?id=685982
2012-12-18 01:27:32 +00:00
Emmanuele Bassi
84b4f2f0a3 actor: Clean up the code in ::apply-transform
Instead of placing the whole body of the function inside an if block,
let's make it clear what each part of the function does. Also, add more
comments.
2012-12-18 00:05:42 +00:00
Emanuele Aina
219d0efcc6 actor: rollback pivot translation even on explicit transforms
When setting an explicit transform with clutter_actor_set_transform()
and a non (0,0) pivot-point, clutter_actor_apply_transform() will fail
to roll back the pivot-point translation done before multiplying the
transformation matrix due to the "out:" label being slightly misplaced
in clutter_actor_real_apply_transform().

This works properly:
  clutter_actor_set_pivot_point (actor, 0.5, 0.5);
  clutter_actor_set_rotation_angle (actor, CLUTTER_Z_AXIS, 30);

This results in the actor being moved to the pivot-point position:
  clutter_actor_set_pivot_point (actor, 0.5, 0.5);
  clutter_matrix_init_identity(&matrix);
  cogl_matrix_rotate (&matrix, 30, 0, 0, 1.0);
  clutter_actor_set_transform (actor, &matrix);

This also add a conformance test checking that even when using a
pivot-point, no matter how a rotation is set the resulting
transformation matrix will be the same.

https://bugzilla.gnome.org/show_bug.cgi?id=690214
2012-12-14 19:15:48 +01:00
Jasper St. Pierre
15b811840c actor: Use fixed positioning for allocate_preferred_size
clutter_actor_allocate_preferred_size is supposed to use the fixed
position of an actor. Unfortunately, recent refactorings made it so
that it accidentally used the current allocation. As the current
allocation may be adjusted by the actor, or have been previously
allocated in a strange spot, it may have unintended side effects. Use
the fixed positioning of the actor instead.

This fixes weird issues with margins colliding with
ClutterFixedLayout, causing strange offsets on relayout.

https://bugzilla.gnome.org/show_bug.cgi?id=689316
2012-11-30 18:13:53 -05:00
Lionel Landwerlin
da498fdb9a actor: fix allocate_align_fill() to maintain the child preferred size
When trying to clamp to pixel a box that is exactly in between 2
pixels, the clutter_actor_box_clamp_to_pixel() function changes the
size of the box.

Here is an example :

ClutterActorBox box = { 10.5, 10, 20.5, 20};

g_message ("%fx%f -> %fx%f", box.x1, box.y1, box.x2, box.y2);
clutter_actor_box_clamp_to_pixel (&box);
g_message ("%fx%f -> %fx%f", box.x1, box.y1, box.x2, box.y2);

Here is what you get :

** Message: 10.500000x10.000000 -> 20.500000x20.000000
** Message: 10.000000x10.000000 -> 21.000000x20.000000

That is because of the properties of the ceilf and floorf function
used to do the clamping.

For example, ceil(0.5) is 1.0, and ceil(-0.5) is 0.0.
And, floor(0.5) is 0.0, and floor(-0.5) is -1.0.

To work around that problem this patch retains the distance between x
and y coordinates and apply that difference before calling ceilf() on
x2 and y2.

https://bugzilla.gnome.org/show_bug.cgi?id=689073
2012-11-26 11:22:24 +00:00
Guillaume Desmottes
2be88b34b2 Don't annotate with (transfer full) constructors of GInitiallyUnowned subclasses
https://bugzilla.gnome.org/show_bug.cgi?id=686776
2012-10-24 13:17:57 +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
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
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
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
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
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
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
93a43f879d Deprecate ClutterActor::paint
Only the signal connection. When using G_ENABLE_DIAGNOSTIC there will be
a warning for every signal connection.

We should try and discourage people from ever using the paint signal
ever again, until we can safely remove it in Clutter 2.0.
2012-08-11 11:43:28 +01:00
Emmanuele Bassi
5b7c61a026 actor: Deprecate Geometry-related API
We cannot fully deprecate Geometry, because ClutterActor and ClutterText
are actually using the type in signals and properties; but we can
deprecate the API that uses this type, so that 2.0 will be able to avoid
it entirely.
2012-08-10 15:05:43 +01:00
Emmanuele Bassi
7a59b69f96 actor: Deprecate :clip and introduce :clip-rect instead
The :clip property still uses ClutterGeometry, which is a very bad
rectangle type. Since we cannot change the type of the property
compatibly, we should introduce a new property using ClutterRect
instead. This also matches the ClutterActor.set_clip() API, which uses a
decomposed rectangle with floating point values, like we do with
set_position() and set_size().
2012-08-10 15:05:33 +01:00
Emmanuele Bassi
9515cc5b94 docs: Fix the link to set_content_gravity() 2012-08-10 15:05:28 +01:00
Emmanuele Bassi
a4d1e6f6f1 actor: Ensure the invariants of transition-stopped
We need to make sure that ClutterActor::transition-stopped is emitted
after the transition was removed from the actor's list of transitions.

We cannot just remove the TransitionClosure from the hash table that
holds the transitions associated to an actor, and let the
TransitionClosure free function stop the timeline, thus emitting the
::transition-stopped signal - otherwise, stopping the timeline will end
up trying to remove the transition from the hash table, and we'll get
either a warning or a segfault.

Since we know we're removing the timeline anyway, we can emit the signal
ourselves in case the timeline is playing, in both the implicit and
explicit cases.
2012-07-26 14:01:01 +01:00
Emmanuele Bassi
17860b128e Annotate things to be removed/changed for 2.0
Lest we forget, like we did during the 0.9 → 1.0 cycle.
2012-07-26 14:01:01 +01:00
Emmanuele Bassi
178e6b2294 Add ClutterActor.transform
The :transform property controls the modelview matrix of an actor; it
can be used to set a custom modelview matrix on the actor, as opposed
to the decomposed transformations (rotation, scaling, translation)
provided by the ClutterActor class.
2012-07-26 14:01:00 +01:00
Emmanuele Bassi
3f732cdc2b actor: Ensure that we remove only implicit transitions
The transitions we create implicitly should be removed from the set of
transitions associated to an actor; the transitions explicitly
associated to an actor, though, have to survive the emission of their
'stopped' signal.
2012-07-26 14:01:00 +01:00
Emmanuele Bassi
ee00e37bc4 actor: Simplify the implicit transition handling
We can remove the update_transition() private method, and move its
functionality inside the create_transition() private method, thereby
removing lots of duplicated code, as well as redundant checks on the
existence of a transition. This will allow handling transition updates
atomically in the future.
2012-07-26 14:01:00 +01:00
Emmanuele Bassi
28c2eeef95 actor: Add ::transition-stopped
The ::transition-stopped signal can be used to get notification of the
end of a transition.
2012-07-26 14:01:00 +01:00
Emmanuele Bassi
b10e7057ad actor: Consolidate rotation angle internal setter
Use the GParamSpec, instead of the rotation axis enumeration, to
simplify the caller code, similarly to how we handle scaling and
translation factors.
2012-07-19 13:58:50 -04:00
Emmanuele Bassi
2bec43c3c2 actor: Round the adjusted allocation origin correctly
We use floorf() for the allocation origin, and ceilf() for the
allocation size. Swapping the two introduces rounding errors if
the original allocation is not clamped to the nearest pixel.
2012-07-12 22:32:02 +01:00
Emmanuele Bassi
42ca7bf1f4 Use Vertex zero init macro 2012-07-11 13:22:21 +01:00
Emmanuele Bassi
9b52f9b3f5 actor: Add scaling factor in the Z axis
Having a scaling factor on the Z axis helps with projects that use fully
3D elements, like Mash.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
6feee080b3 actor: Clean up the order of transformations
https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
1796b37948 actor: Deprecate anchor-point
The pivot point and the translation transformation replace it
completely.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
8cea162d3c actor: Add translation transformation
We need an alternative to the translation performed by the anchor point,
one that possibly applies to all three axes and is relative to the
pivot-point.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
0ba078a146 Add notes on the properties to remove
Lest we forget during the 1.99 cycle.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
6e85feecf8 actor: Add :pivot-point-z
For some transformations we need to be able to set the Z component of
the pivot point.

Unlike :pivot-point, the Z coordinate is not normalized because actors
are 2D surfaces.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
005584a1ee actor: Deprecate scale center and gravity accessors
The ClutterActor:pivot-point supercedes the scale center and gravity
properties.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
32b78a41f1 actor: Deprecate rotation center properties
The pivot point supercedes the per-axis center of rotation, including
the one based on the gravity enumeration.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:20 +01:00
Emmanuele Bassi
a758cf6d3d actor: Add accessors for rotation angles
Given that the rotation transformations are now affected by the pivot
point, the Actor class should provide an accessors pair only for the
angle of rotation on a given axis.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:19 +01:00
Emmanuele Bassi
1fd0f4b9a5 actor: Add pivot point
The pivot point is a point in normalized coordinates space around which
all transformations revolve.

It supercedes the anchor point and the per-transformation center points
as well as the gravity settings, and tries to sort out the mess that
is the modelview matrix set up in ClutterActor.

https://bugzilla.gnome.org/show_bug.cgi?id=677853
2012-07-11 13:22:19 +01:00
Emmanuele Bassi
b20e9b78e5 actor: Add :z-position and deprecate :depth
The ClutterActor:depth property has always been a bit of a misnomer:
actors are 2D flat surfaces, so they cannot have "depth"; the property
defines the position on the Z axis.

Another side effect of the :depth property is that it decides the
default paint and allocation order on insertion, and that setting it
will call the ClutterContainer.sort_depth_order() method. This has
proven to be a fairly bad design decision that we strung along from the
0.x days, as it gives a false impression of being able to change the
paint and allocation order simply by changing the position on the Z
axis — something that, in reality, requires depth testing to be enabled
during the paint sequence of an actor's parent.

For 2.0 we need a clean break from the side effects, and a better
defined interface.

ClutterActor:z-position is essentially what ClutterActor:depth is, but
doesn't call into ClutterContainer, and has a more apt name.

https://bugzilla.gnome.org/show_bug.cgi?id=679465
2012-07-11 13:22:19 +01:00
Emmanuele Bassi
9b7287e897 actor: Move event chain emission into ClutterActor
By moving the function that builds the event emission chain we can avoid
a bunch of checks and function calls.
2012-07-11 13:22:19 +01:00
Emmanuele Bassi
67cbb56ab8 actor: Constify event argument in clutter_actor_event()
The Clutter.Actor.event() method is a signal emitter; it does not modify
the event passed to it.
2012-07-11 13:22:19 +01:00
Emmanuele Bassi
1da42dd8a0 actor: Add ActorIter.is_valid()
It can be useful to check whether a ClutterActorIter is currently valid,
i.e. if the iterator has been initialized *and* if the actor to which it
refers to hasn't been updated.

We can also use the is_valid() method in the conformance test suite to
check that initialization has been successful, and that changing the
children list through the ClutterActorIter API leaves the iterator in a
valid state.
2012-06-27 21:28:01 +01:00
Lionel Landwerlin
1af7de8ac8 actor: add touch event vfuncs
https://bugzilla.gnome.org/show_bug.cgi?id=678047
2012-06-22 21:40:03 +01:00
Bastian Winkler
d2fff6e3c3 actor: Make margin properties animatable
Enable implicit animations for :margin-(top|right|bottom|left)
properties.

https://bugzilla.gnome.org/show_bug.cgi?id=678264
2012-06-22 08:52:00 +02:00
Emmanuele Bassi
24495918bb docs: Further clarifications on implicit vs explicit animations
The wording is a bit terse, so it's better to clarify it.
2012-06-10 17:54:21 +01:00
Emmanuele Bassi
7043a3a1ed docs: Add notes on implicit vs. explicit animations
The implicit animations only apply to properties that are documented as
'animatable'; the explicit animations apply to any property defined
through GObject or ClutterAnimatable.
2012-06-10 17:54:21 +01:00
Emmanuele Bassi
9412b1a4c3 actor: Provide an initial easing state
For 1.x, we still have a duration of 0 msecs, but we have a valid easing
state, so we can change the easing parameters without calling save and
restore.
2012-06-10 17:54:21 +01:00
Emmanuele Bassi
e7aa21203c actor: Add content-repeat
ClutterContent implementations may allow repeating their contents when
painting; we should provide the repeat policy on the actor, like we do
for scaling filters and content gravity.
2012-06-08 14:33:00 +01:00
Alexander Larsson
fd8dcfcc56 Ensure that fixed positions always start at 0,0
Fixed positions are defined to be initialized at 0,0 whenever
enabled, by setting fixed_position_enabled to true, or by setting
just one of x/y. This normally happens in the defaults, but we need
to make sure it also happens if a fixed position was once set but
then disabled. We do this by always resetting it back to 0,0 when
fixed_position_set is unset.
2012-06-07 16:32:01 +02:00