spring: Make min/max part of spring parameters

Don't hard code the 0.0 - 1.0 spring envelope.
Kristian Høgsberg 11 years ago
parent 7eec9b32f7
commit 091b09652a
  1. 30
      src/animation.c
  2. 1
      src/compositor.h

@ -42,6 +42,8 @@ weston_spring_init(struct weston_spring *spring,
spring->previous = current;
spring->target = target;
spring->clip = WESTON_SPRING_OVERSHOOT;
spring->min = 0.0;
spring->max = 1.0;
}
WL_EXPORT void
@ -77,22 +79,26 @@ weston_spring_update(struct weston_spring *spring, uint32_t msec)
break;
case WESTON_SPRING_CLAMP:
if (spring->current >= 1.0) {
spring->current = 1.0;
spring->previous = 1.0;
} else if (spring->current <= 0.0) {
spring->current = 0.0;
spring->previous = 0.0;
if (spring->current > spring->max) {
spring->current = spring->max;
spring->previous = spring->max;
} else if (spring->current < 0.0) {
spring->current = spring->min;
spring->previous = spring->min;
}
break;
case WESTON_SPRING_BOUNCE:
if (spring->current >= 1.0) {
spring->current = 2.0 - spring->current;
spring->previous = 2.0 - spring->previous;
} else if (spring->current <= 0.0) {
spring->current = -spring->current;
spring->previous = -spring->previous;
if (spring->current > spring->max) {
spring->current =
2 * spring->max - spring->current;
spring->previous =
2 * spring->max - spring->previous;
} else if (spring->current < spring->min) {
spring->current =
2 * spring->min - spring->current;
spring->previous =
2 * spring->min - spring->previous;
}
break;
}

@ -125,6 +125,7 @@ struct weston_spring {
double current;
double target;
double previous;
double min, max;
uint32_t timestamp;
uint32_t clip;
};

Loading…
Cancel
Save