- else if (fade->end_alpha > fade->start_alpha)
- fade->current_alpha = fade->start_alpha +
- (fade->end_alpha - fade->start_alpha) * percent;
- else
- fade->current_alpha = fade->start_alpha -
- (fade->start_alpha - fade->end_alpha) * percent;
+ }
+ else {
+ struct timeval total_time, time_left;
+ unsigned long remain, total;
+ double percent;
+
+ time_difference(&fade->end_time, now, &time_left);
+ time_difference(&fade->end_time, &fade->start_time, &total_time);
+
+
+ /* count milliseconds */
+ remain = time_left.tv_sec * 1000 + time_left.tv_usec / 1000;
+ total = total_time.tv_sec * 1000 + total_time.tv_usec / 1000;
+ percent = (double)remain / total;
+
+ //printf("done %lu total %lu percent %f\n", done, total, percent);
+
+ if (fade->end_alpha > fade->start_alpha)
+ /* increasing */
+ fade->current_alpha = fade->end_alpha -
+ (fade->end_alpha - fade->start_alpha) * percent;
+ else
+ /* decreasing */
+ fade->current_alpha = fade->end_alpha +
+ (fade->start_alpha - fade->end_alpha) * percent;
+ }