typedef struct {
d_window_t *w;
- uint16_t start;
- uint16_t end;
- uint16_t current;
+ uint16_t start_alpha;
+ uint16_t end_alpha;
+ uint16_t current_alpha;
struct timeval start_time;
struct timeval end_time;
} fade_t;
}
static void
-start_fade(d_window_t *w, uint16_t start, uint16_t end)
+start_fade(d_window_t *w, uint16_t start_alpha, uint16_t end_alpha)
{
data_t *d;
d_list_it_t *it;
else
newfade = FALSE;
- fade->start = start;
- fade->end = end;
+ fade->start_alpha = start_alpha;
+ fade->end_alpha = end_alpha;
if (newfade) {
fade->start_time = now;
fade->end_time = now;
time_add(&fade->end_time, d->fade_total_time);
- fade->current = start;
+ fade->current_alpha = start_alpha;
- window_set_opacity(w, fade->current);
+ window_set_opacity(w, fade->current_alpha);
window_ref(w);
window_zombie_ref(w);
long remain, total;
double percent;
- total = ABS(fade->end - fade->start);
- remain = ABS(fade->current - fade->end);
+ total = ABS(fade->end_alpha - fade->start_alpha);
+ remain = ABS(fade->current_alpha - fade->end_alpha);
percent = (double)remain / total;
//printf("start %d end %d current %d\n", fade->start, fade->end,
//printf("done %lu total %lu percent %f\n", done, total, percent);
if (percent >= 1)
- fade->current = fade->end;
- else if (fade->end > fade->start)
- fade->current = fade->start + (fade->end - fade->start) * percent;
+ fade->current_alpha = fade->end_alpha;
+ else if (fade->end_alpha > fade->start_alpha)
+ fade->current_alpha = fade->start_alpha +
+ (fade->end_alpha - fade->start_alpha) * percent;
else
- fade->current = fade->start - (fade->start - fade->end) * percent;
+ fade->current_alpha = fade->start_alpha -
+ (fade->start_alpha - fade->end_alpha) * percent;
- window_set_opacity(fade->w, fade->current);
+ window_set_opacity(fade->w, fade->current_alpha);
- if (fade->current == fade->end) {
+ if (fade->current_alpha == fade->end_alpha) {
list_delete_link(d->fades, it);
window_zombie_unref(fade->w);
window_unref(fade->w);