blob: c0204e4f9318a17b36f799f2803a2b84004ded03 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/accessibility/layer_animation_info.h"
namespace ash {
void ComputeOpacity(LayerAnimationInfo* animation_info,
base::TimeTicks timestamp) {
// It's quite possible for the first 1 or 2 animation frames to be
// for a timestamp that's earlier than the time we received the
// mouse movement, so we just treat those as a delta of zero.
if (timestamp < animation_info->start_time)
timestamp = animation_info->start_time;
base::TimeDelta start_delta = timestamp - animation_info->start_time;
base::TimeDelta change_delta = timestamp - animation_info->change_time;
base::TimeDelta fade_in_time = animation_info->fade_in_time;
base::TimeDelta fade_out_time = animation_info->fade_out_time;
if (change_delta > fade_in_time + fade_out_time) {
animation_info->opacity = 0.0;
return;
}
float opacity;
if (start_delta < fade_in_time) {
opacity = start_delta.InSecondsF() / fade_in_time.InSecondsF();
} else {
opacity = 1.0 - (change_delta.InSecondsF() /
(fade_in_time + fade_out_time).InSecondsF());
}
// Layer::SetOpacity will throw an error if we're not within 0...1.
opacity = std::min(std::max(opacity, 0.0f), 1.0f);
animation_info->opacity = opacity;
}
} // namespace ash