Commit ff92ee78 authored by Katie D's avatar Katie D Committed by Commit Bot

Refactor LayerAnimationInfo into its own class.

This addresses a TODO from a preview CL. No functional changes.

Change-Id: I21e99b55f285475d8321fea260751be3f18d811b
Reviewed-on: https://chromium-review.googlesource.com/1135519Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: Katie Dektar <katie@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575035}
parent abee8664
...@@ -81,6 +81,8 @@ component("ash") { ...@@ -81,6 +81,8 @@ component("ash") {
"accessibility/focus_ring_layer.h", "accessibility/focus_ring_layer.h",
"accessibility/key_accessibility_enabler.cc", "accessibility/key_accessibility_enabler.cc",
"accessibility/key_accessibility_enabler.h", "accessibility/key_accessibility_enabler.h",
"accessibility/layer_animation_info.cc",
"accessibility/layer_animation_info.h",
"accessibility/spoken_feedback_enabler.cc", "accessibility/spoken_feedback_enabler.cc",
"accessibility/spoken_feedback_enabler.h", "accessibility/spoken_feedback_enabler.h",
"accessibility/touch_accessibility_enabler.cc", "accessibility/touch_accessibility_enabler.cc",
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "ash/accessibility/accessibility_focus_ring_layer.h" #include "ash/accessibility/accessibility_focus_ring_layer.h"
#include "ash/accessibility/accessibility_highlight_layer.h" #include "ash/accessibility/accessibility_highlight_layer.h"
#include "ash/accessibility/focus_ring_layer.h" #include "ash/accessibility/focus_ring_layer.h"
#include "ash/accessibility/layer_animation_info.h"
#include "base/logging.h" #include "base/logging.h"
namespace ash { namespace ash {
...@@ -217,8 +218,7 @@ void AccessibilityFocusRingController::AnimateCursorRing( ...@@ -217,8 +218,7 @@ void AccessibilityFocusRingController::AnimateCursorRing(
base::TimeTicks timestamp) { base::TimeTicks timestamp) {
CHECK(cursor_layer_); CHECK(cursor_layer_);
AccessibilityFocusRingGroup::ComputeOpacity(&cursor_animation_info_, ComputeOpacity(&cursor_animation_info_, timestamp);
timestamp);
if (cursor_animation_info_.opacity == 0.0) { if (cursor_animation_info_.opacity == 0.0) {
cursor_layer_.reset(); cursor_layer_.reset();
return; return;
...@@ -230,10 +230,7 @@ void AccessibilityFocusRingController::AnimateCaretRing( ...@@ -230,10 +230,7 @@ void AccessibilityFocusRingController::AnimateCaretRing(
base::TimeTicks timestamp) { base::TimeTicks timestamp) {
CHECK(caret_layer_); CHECK(caret_layer_);
// TODO(katie): Move ComputeOpacity into a separate source file, as it is used ComputeOpacity(&caret_animation_info_, timestamp);
// by more than just AccessibilityFocusRingGroup.
AccessibilityFocusRingGroup::ComputeOpacity(&caret_animation_info_,
timestamp);
if (caret_animation_info_.opacity == 0.0) { if (caret_animation_info_.opacity == 0.0) {
caret_layer_.reset(); caret_layer_.reset();
return; return;
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "ash/accessibility/accessibility_focus_ring.h" #include "ash/accessibility/accessibility_focus_ring.h"
#include "ash/accessibility/accessibility_focus_ring_group.h" #include "ash/accessibility/accessibility_focus_ring_group.h"
#include "ash/accessibility/accessibility_layer.h" #include "ash/accessibility/accessibility_layer.h"
#include "ash/accessibility/layer_animation_info.h"
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h" #include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "base/bind.h" #include "base/bind.h"
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "ash/accessibility/accessibility_focus_ring.h" #include "ash/accessibility/accessibility_focus_ring.h"
#include "ash/accessibility/accessibility_focus_ring_layer.h" #include "ash/accessibility/accessibility_focus_ring_layer.h"
#include "ash/accessibility/accessibility_layer.h" #include "ash/accessibility/accessibility_layer.h"
#include "ash/accessibility/layer_animation_info.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h" #include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
...@@ -138,7 +139,7 @@ void AccessibilityFocusRingGroup::AnimateFocusRings(base::TimeTicks timestamp) { ...@@ -138,7 +139,7 @@ void AccessibilityFocusRingGroup::AnimateFocusRings(base::TimeTicks timestamp) {
focus_layers_[0]->Set(AccessibilityFocusRing::Interpolate( focus_layers_[0]->Set(AccessibilityFocusRing::Interpolate(
previous_focus_rings_[0], focus_rings_[0], fraction)); previous_focus_rings_[0], focus_rings_[0], fraction));
} else { } else {
ComputeOpacity(&(focus_animation_info_), timestamp); ash::ComputeOpacity(&(focus_animation_info_), timestamp);
for (size_t i = 0; i < focus_layers_.size(); ++i) for (size_t i = 0; i < focus_layers_.size(); ++i)
focus_layers_[i]->SetOpacity(focus_animation_info_.opacity); focus_layers_[i]->SetOpacity(focus_animation_info_.opacity);
} }
...@@ -170,39 +171,6 @@ void AccessibilityFocusRingGroup::ClearFocusRects( ...@@ -170,39 +171,6 @@ void AccessibilityFocusRingGroup::ClearFocusRects(
UpdateFocusRingsFromFocusRects(delegate); UpdateFocusRingsFromFocusRects(delegate);
} }
void AccessibilityFocusRingGroup::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;
}
int AccessibilityFocusRingGroup::GetMargin() const { int AccessibilityFocusRingGroup::GetMargin() const {
return kAccessibilityFocusRingMargin; return kAccessibilityFocusRingMargin;
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "ash/accessibility/accessibility_focus_ring.h" #include "ash/accessibility/accessibility_focus_ring.h"
#include "ash/accessibility/accessibility_focus_ring_layer.h" #include "ash/accessibility/accessibility_focus_ring_layer.h"
#include "ash/accessibility/accessibility_layer.h" #include "ash/accessibility/accessibility_layer.h"
#include "ash/accessibility/layer_animation_info.h"
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h" #include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColor.h"
...@@ -18,17 +19,6 @@ ...@@ -18,17 +19,6 @@
namespace ash { namespace ash {
// TODO(katie): Move into a separate source file as it can be used by more than
// just AccessibilityFocusRingGroup.
struct LayerAnimationInfo {
base::TimeTicks start_time;
base::TimeTicks change_time;
base::TimeDelta fade_in_time;
base::TimeDelta fade_out_time;
float opacity = 0;
bool smooth = false;
};
// AccessibilityFocusRingGroup handles tracking all the elements of a group of // AccessibilityFocusRingGroup handles tracking all the elements of a group of
// focus rings, including their positions, colors, and animation behavior. // focus rings, including their positions, colors, and animation behavior.
// In general each extension or caller will have only one // In general each extension or caller will have only one
......
// 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
\ No newline at end of file
// 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.
#ifndef ASH_ACCESSIBILITY_LAYER_ANIMATION_INFO_H_
#define ASH_ACCESSIBILITY_LAYER_ANIMATION_INFO_H_
#include "base/time/time.h"
namespace ash {
struct LayerAnimationInfo {
base::TimeTicks start_time;
base::TimeTicks change_time;
base::TimeDelta fade_in_time;
base::TimeDelta fade_out_time;
float opacity = 0;
bool smooth = false;
};
void ComputeOpacity(LayerAnimationInfo* animation_info,
base::TimeTicks timestamp);
} // namespace ash
#endif // ASH_ACCESSIBILITY_LAYER_ANIMATION_INFO_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment