align-constraint: Add CLUTTER_ALIGN_BOTH
Just like ClutterBindConstraint has two shorthand enumerations for binding position and size and avoid using multiple instances, ClutterAlignConstraint should have a way to align an actor with the same alignment factor on both axis at the same time; this is especially useful for centering actors.
This commit is contained in:
parent
30d309c6e3
commit
1e51961f7a
@ -142,13 +142,14 @@ clutter_align_constraint_update_allocation (ClutterConstraint *constraint,
|
|||||||
if (align->source == NULL)
|
if (align->source == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
clutter_actor_box_get_size (allocation, &actor_width, &actor_height);
|
||||||
|
|
||||||
clutter_actor_get_position (align->source, &source_x, &source_y);
|
clutter_actor_get_position (align->source, &source_x, &source_y);
|
||||||
clutter_actor_get_size (align->source, &source_width, &source_height);
|
clutter_actor_get_size (align->source, &source_width, &source_height);
|
||||||
|
|
||||||
switch (align->align_axis)
|
switch (align->align_axis)
|
||||||
{
|
{
|
||||||
case CLUTTER_ALIGN_X_AXIS:
|
case CLUTTER_ALIGN_X_AXIS:
|
||||||
actor_width = clutter_actor_box_get_width (allocation);
|
|
||||||
allocation->x1 = ((source_width - actor_width) * align->factor)
|
allocation->x1 = ((source_width - actor_width) * align->factor)
|
||||||
+ source_x;
|
+ source_x;
|
||||||
allocation->x1 = floorf (allocation->x1 + 0.5);
|
allocation->x1 = floorf (allocation->x1 + 0.5);
|
||||||
@ -156,13 +157,23 @@ clutter_align_constraint_update_allocation (ClutterConstraint *constraint,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_ALIGN_Y_AXIS:
|
case CLUTTER_ALIGN_Y_AXIS:
|
||||||
actor_height = clutter_actor_box_get_height (allocation);
|
|
||||||
allocation->y1 = ((source_height - actor_height) * align->factor)
|
allocation->y1 = ((source_height - actor_height) * align->factor)
|
||||||
+ source_y;
|
+ source_y;
|
||||||
allocation->y1 = floorf (allocation->y1 + 0.5);
|
allocation->y1 = floorf (allocation->y1 + 0.5);
|
||||||
allocation->y2 = allocation->y1 + actor_height;
|
allocation->y2 = allocation->y1 + actor_height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_ALIGN_BOTH:
|
||||||
|
allocation->x1 = ((source_width - actor_width) * align->factor)
|
||||||
|
+ source_x;
|
||||||
|
allocation->y1 = ((source_height - actor_height) * align->factor)
|
||||||
|
+ source_y;
|
||||||
|
allocation->x1 = floorf (allocation->x1 + 0.5f);
|
||||||
|
allocation->y1 = floorf (allocation->y1 + 0.5f);
|
||||||
|
allocation->x2 = allocation->x1 + actor_width;
|
||||||
|
allocation->y2 = allocation->y1 + actor_height;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
@ -416,15 +416,17 @@ typedef enum {
|
|||||||
* ClutterAlignAxis:
|
* ClutterAlignAxis:
|
||||||
* @CLUTTER_ALIGN_X_AXIS: Maintain the alignment on the X axis
|
* @CLUTTER_ALIGN_X_AXIS: Maintain the alignment on the X axis
|
||||||
* @CLUTTER_ALIGN_Y_AXIS: Maintain the alignment on the Y axis
|
* @CLUTTER_ALIGN_Y_AXIS: Maintain the alignment on the Y axis
|
||||||
|
* @CLUTTER_ALIGN_BOTH: Maintain the alignment on both the X and Y axis
|
||||||
*
|
*
|
||||||
* Specifies the axis on which #ClutterAlignConstraint should maintain
|
* Specifies the axis on which #ClutterAlignConstraint should maintain
|
||||||
* the alignment
|
* the alignment.
|
||||||
*
|
*
|
||||||
* Since: 1.4
|
* Since: 1.4
|
||||||
*/
|
*/
|
||||||
typedef enum { /*< prefix=CLUTTER_ALIGN >*/
|
typedef enum { /*< prefix=CLUTTER_ALIGN >*/
|
||||||
CLUTTER_ALIGN_X_AXIS,
|
CLUTTER_ALIGN_X_AXIS,
|
||||||
CLUTTER_ALIGN_Y_AXIS
|
CLUTTER_ALIGN_Y_AXIS,
|
||||||
|
CLUTTER_ALIGN_BOTH
|
||||||
} ClutterAlignAxis;
|
} ClutterAlignAxis;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user