bind-constraint: Add accessor methods

ClutterBindConstraint should have accessor methods for its properties,
to allow direct manipulation instead of going through GObject's API.
This commit is contained in:
Emmanuele Bassi 2010-06-17 12:02:28 +01:00
parent 52d2e7d25d
commit 77c63e0237
3 changed files with 172 additions and 63 deletions

View File

@ -84,6 +84,9 @@ update_actor_position (ClutterBindConstraint *bind)
ClutterVertex source_position; ClutterVertex source_position;
ClutterActor *actor; ClutterActor *actor;
if (bind->source == NULL)
return;
if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (bind))) if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (bind)))
return; return;
@ -131,63 +134,6 @@ source_destroyed (ClutterActor *actor,
bind->source = NULL; bind->source = NULL;
} }
static void
_clutter_bind_constraint_set_source (ClutterBindConstraint *bind,
ClutterActor *source)
{
ClutterActor *old_source = bind->source;
if (old_source != NULL)
{
g_signal_handlers_disconnect_by_func (old_source,
G_CALLBACK (source_destroyed),
bind);
g_signal_handlers_disconnect_by_func (old_source,
G_CALLBACK (source_position_changed),
bind);
}
bind->source = source;
g_signal_connect (bind->source, "notify",
G_CALLBACK (source_position_changed),
bind);
g_signal_connect (bind->source, "destroy",
G_CALLBACK (source_destroyed),
bind);
update_actor_position (bind);
g_object_notify (G_OBJECT (bind), "source");
}
static void
_clutter_bind_constraint_set_coordinate (ClutterBindConstraint *bind,
ClutterBindCoordinate coord)
{
if (bind->coordinate == coord)
return;
bind->coordinate = coord;
update_actor_position (bind);
g_object_notify (G_OBJECT (bind), "coordinate");
}
static void
_clutter_bind_constraint_set_offset (ClutterBindConstraint *bind,
gfloat offset)
{
if (fabs (bind->offset - offset) < 0.00001f)
return;
bind->offset = offset;
update_actor_position (bind);
g_object_notify (G_OBJECT (bind), "offset");
}
static void static void
clutter_bind_constraint_set_property (GObject *gobject, clutter_bind_constraint_set_property (GObject *gobject,
guint prop_id, guint prop_id,
@ -199,15 +145,15 @@ clutter_bind_constraint_set_property (GObject *gobject,
switch (prop_id) switch (prop_id)
{ {
case PROP_SOURCE: case PROP_SOURCE:
_clutter_bind_constraint_set_source (bind, g_value_get_object (value)); clutter_bind_constraint_set_source (bind, g_value_get_object (value));
break; break;
case PROP_COORDINATE: case PROP_COORDINATE:
_clutter_bind_constraint_set_coordinate (bind, g_value_get_enum (value)); clutter_bind_constraint_set_coordinate (bind, g_value_get_enum (value));
break; break;
case PROP_OFFSET: case PROP_OFFSET:
_clutter_bind_constraint_set_offset (bind, g_value_get_float (value)); clutter_bind_constraint_set_offset (bind, g_value_get_float (value));
break; break;
default: default:
@ -335,3 +281,150 @@ clutter_bind_constraint_new (ClutterActor *source,
"offset", offset, "offset", offset,
NULL); NULL);
} }
/**
* clutter_bind_constraint_set_source:
* @constraint: a #ClutterBindConstraint
* @source: a #ClutterActor
*
* Sets the source #ClutterActor for the constraint
*
* Since: 1.4
*/
void
clutter_bind_constraint_set_source (ClutterBindConstraint *constraint,
ClutterActor *source)
{
ClutterActor *old_source;
g_return_if_fail (CLUTTER_IS_BIND_CONSTRAINT (constraint));
g_return_if_fail (CLUTTER_IS_ACTOR (source));
old_source = constraint->source;
if (old_source != NULL)
{
g_signal_handlers_disconnect_by_func (old_source,
G_CALLBACK (source_destroyed),
constraint);
g_signal_handlers_disconnect_by_func (old_source,
G_CALLBACK (source_position_changed),
constraint);
}
constraint->source = source;
g_signal_connect (constraint->source, "notify",
G_CALLBACK (source_position_changed),
constraint);
g_signal_connect (constraint->source, "destroy",
G_CALLBACK (source_destroyed),
constraint);
update_actor_position (constraint);
g_object_notify (G_OBJECT (constraint), "source");
}
/**
* clutter_bind_constraint_get_source:
* @constraint: a #ClutterBindConstraint
*
* Retrieves the #ClutterActor set using clutter_bind_constraint_set_source()
*
* Return value: (transfer none): a pointer to the source actor
*
* Since: 1.4
*/
ClutterActor *
clutter_bind_constraint_get_source (ClutterBindConstraint *constraint)
{
g_return_val_if_fail (CLUTTER_IS_BIND_CONSTRAINT (constraint), NULL);
return constraint->source;
}
/**
* clutter_bind_constraint_set_coordinate:
* @constraint: a #ClutterBindConstraint
* @coordinate: the coordinate to bind
*
* Sets the coordinate to bind in the constraint
*
* Since: 1.4
*/
void
clutter_bind_constraint_set_coordinate (ClutterBindConstraint *constraint,
ClutterBindCoordinate coordinate)
{
g_return_if_fail (CLUTTER_IS_BIND_CONSTRAINT (constraint));
if (constraint->coordinate == coordinate)
return;
constraint->coordinate = coordinate;
update_actor_position (constraint);
g_object_notify (G_OBJECT (constraint), "coordinate");
}
/**
* clutter_bind_constraint_get_coordinate:
* @constraint: a #ClutterBindConstraint
*
* Retrieves the bound coordinate of the constraint
*
* Return value: the bound coordinate
*
* Since: 1.4
*/
ClutterBindCoordinate
clutter_bind_constraint_get_coordinate (ClutterBindConstraint *constraint)
{
g_return_val_if_fail (CLUTTER_IS_BIND_CONSTRAINT (constraint),
CLUTTER_BIND_X);
return constraint->coordinate;
}
/**
* clutter_bind_constraint_set_offset:
* @constraint: a #ClutterBindConstraint
* @offset: the offset to apply, in pixels
*
* Sets the offset to be applied to the constraint
*
* Since: 1.4
*/
void
clutter_bind_constraint_set_offset (ClutterBindConstraint *constraint,
gfloat offset)
{
g_return_if_fail (CLUTTER_IS_BIND_CONSTRAINT (constraint));
if (fabs (constraint->offset - offset) < 0.00001f)
return;
constraint->offset = offset;
update_actor_position (constraint);
g_object_notify (G_OBJECT (constraint), "offset");
}
/**
* clutter_bind_constraint_get_offset:
* @constraint: a #ClutterBindConstraint
*
* Retrieves the offset set using clutter_bind_constraint_set_offset()
*
* Return value: the offset, in pixels
*
* Since: 1.4
*/
gfloat
clutter_bind_constraint_get_offset (ClutterBindConstraint *bind)
{
g_return_val_if_fail (CLUTTER_IS_BIND_CONSTRAINT (bind), 0.0);
return bind->offset;
}

View File

@ -65,10 +65,20 @@ typedef enum { /*< prefix=CLUTTER_BIND >*/
GType clutter_bind_constraint_get_type (void) G_GNUC_CONST; GType clutter_bind_constraint_get_type (void) G_GNUC_CONST;
ClutterConstraint *clutter_bind_constraint_new (ClutterActor *source, ClutterConstraint * clutter_bind_constraint_new (ClutterActor *source,
ClutterBindCoordinate coordinate, ClutterBindCoordinate coordinate,
gfloat offset); gfloat offset);
void clutter_bind_constraint_set_source (ClutterBindConstraint *constraint,
ClutterActor *actor);
ClutterActor * clutter_bind_constraint_get_source (ClutterBindConstraint *constraint);
void clutter_bind_constraint_set_coordinate (ClutterBindConstraint *constraint,
ClutterBindCoordinate coordinate);
ClutterBindCoordinate clutter_bind_constraint_get_coordinate (ClutterBindConstraint *constraint);
void clutter_bind_constraint_set_offset (ClutterBindConstraint *constraint,
gfloat offset);
gfloat clutter_bind_constraint_get_offset (ClutterBindConstraint *constraint);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_BIND_CONSTRAINT_H__ */ #endif /* __CLUTTER_BIND_CONSTRAINT_H__ */

View File

@ -2215,6 +2215,12 @@ ClutterDragActionPrivate
ClutterBindConstraint ClutterBindConstraint
ClutterBindCoordinate ClutterBindCoordinate
clutter_bind_constraint_new clutter_bind_constraint_new
clutter_bind_constraint_set_source
clutter_bind_constraint_get_source
clutter_bind_constraint_set_coordinate
clutter_bind_constraint_get_coordinate
clutter_bind_constraint_set_offset
clutter_bind_constraint_get_offset
<SUBSECTION Standard> <SUBSECTION Standard>
CLUTTER_TYPE_BIND_CONSTRAINT CLUTTER_TYPE_BIND_CONSTRAINT