OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/android/edge_effect.h" | 5 #include "content/browser/android/edge_effect.h" |
6 | 6 |
7 #include "cc/layers/layer.h" | 7 #include "cc/layers/layer.h" |
8 #include "cc/layers/ui_resource_layer.h" | 8 #include "cc/layers/ui_resource_layer.h" |
| 9 #include "content/browser/android/animation_utils.h" |
9 #include "ui/base/android/system_ui_resource_manager.h" | 10 #include "ui/base/android/system_ui_resource_manager.h" |
10 | 11 |
11 namespace content { | 12 namespace content { |
12 | 13 |
13 namespace { | 14 namespace { |
14 | 15 |
15 // Time it will take the effect to fully recede in ms | 16 // Time it will take the effect to fully recede in ms |
16 const int kRecedeTimeMs = 1000; | 17 const int kRecedeTimeMs = 1000; |
17 | 18 |
18 // Time it will take before a pulled glow begins receding in ms | 19 // Time it will take before a pulled glow begins receding in ms |
(...skipping 26 matching lines...) Expand all Loading... |
45 // Number determined by user testing. | 46 // Number determined by user testing. |
46 const int kPullDistanceGlowFactor = 7; | 47 const int kPullDistanceGlowFactor = 7; |
47 const float kPullDistanceAlphaGlowFactor = 1.1f; | 48 const float kPullDistanceAlphaGlowFactor = 1.1f; |
48 | 49 |
49 const int kVelocityEdgeFactor = 8; | 50 const int kVelocityEdgeFactor = 8; |
50 const int kVelocityGlowFactor = 12; | 51 const int kVelocityGlowFactor = 12; |
51 | 52 |
52 const float kEdgeHeightAtMdpi = 12.f; | 53 const float kEdgeHeightAtMdpi = 12.f; |
53 const float kGlowHeightAtMdpi = 128.f; | 54 const float kGlowHeightAtMdpi = 128.f; |
54 | 55 |
55 template <typename T> | |
56 T Lerp(T a, T b, T t) { | |
57 return a + (b - a) * t; | |
58 } | |
59 | |
60 template <typename T> | |
61 T Clamp(T value, T low, T high) { | |
62 return value < low ? low : (value > high ? high : value); | |
63 } | |
64 | |
65 template <typename T> | |
66 T Damp(T input, T factor) { | |
67 T result; | |
68 if (factor == 1) { | |
69 result = 1 - (1 - input) * (1 - input); | |
70 } else { | |
71 result = 1 - std::pow(1 - input, 2 * factor); | |
72 } | |
73 return result; | |
74 } | |
75 | |
76 } // namespace | 56 } // namespace |
77 | 57 |
78 class EdgeEffect::EffectLayer { | 58 class EdgeEffect::EffectLayer { |
79 public: | 59 public: |
80 EffectLayer(ui::SystemUIResourceManager::ResourceType resource_type, | 60 EffectLayer(ui::SystemUIResourceType resource_type, |
81 ui::SystemUIResourceManager* resource_manager) | 61 ui::SystemUIResourceManager* resource_manager) |
82 : ui_resource_layer_(cc::UIResourceLayer::Create()), | 62 : ui_resource_layer_(cc::UIResourceLayer::Create()), |
83 resource_type_(resource_type), | 63 resource_type_(resource_type), |
84 resource_manager_(resource_manager) {} | 64 resource_manager_(resource_manager) {} |
85 | 65 |
86 ~EffectLayer() { ui_resource_layer_->RemoveFromParent(); } | 66 ~EffectLayer() { ui_resource_layer_->RemoveFromParent(); } |
87 | 67 |
88 void SetParent(cc::Layer* parent) { | 68 void SetParent(cc::Layer* parent) { |
89 if (ui_resource_layer_->parent() != parent) | 69 if (ui_resource_layer_->parent() != parent) |
90 parent->AddChild(ui_resource_layer_); | 70 parent->AddChild(ui_resource_layer_); |
(...skipping 10 matching lines...) Expand all Loading... |
101 resource_manager_->GetUIResourceId(resource_type_)); | 81 resource_manager_->GetUIResourceId(resource_type_)); |
102 ui_resource_layer_->SetIsDrawable(true); | 82 ui_resource_layer_->SetIsDrawable(true); |
103 ui_resource_layer_->SetTransformOrigin( | 83 ui_resource_layer_->SetTransformOrigin( |
104 gfx::Point3F(size.width() * 0.5f, 0, 0)); | 84 gfx::Point3F(size.width() * 0.5f, 0, 0)); |
105 ui_resource_layer_->SetTransform(transform); | 85 ui_resource_layer_->SetTransform(transform); |
106 ui_resource_layer_->SetBounds(size); | 86 ui_resource_layer_->SetBounds(size); |
107 ui_resource_layer_->SetOpacity(Clamp(opacity, 0.f, 1.f)); | 87 ui_resource_layer_->SetOpacity(Clamp(opacity, 0.f, 1.f)); |
108 } | 88 } |
109 | 89 |
110 scoped_refptr<cc::UIResourceLayer> ui_resource_layer_; | 90 scoped_refptr<cc::UIResourceLayer> ui_resource_layer_; |
111 ui::SystemUIResourceManager::ResourceType resource_type_; | 91 ui::SystemUIResourceType resource_type_; |
112 ui::SystemUIResourceManager* resource_manager_; | 92 ui::SystemUIResourceManager* resource_manager_; |
113 | 93 |
114 DISALLOW_COPY_AND_ASSIGN(EffectLayer); | 94 DISALLOW_COPY_AND_ASSIGN(EffectLayer); |
115 }; | 95 }; |
116 | 96 |
117 EdgeEffect::EdgeEffect(ui::SystemUIResourceManager* resource_manager, | 97 EdgeEffect::EdgeEffect(ui::SystemUIResourceManager* resource_manager, |
118 float device_scale_factor) | 98 float device_scale_factor) |
119 : edge_(new EffectLayer(ui::SystemUIResourceManager::OVERSCROLL_EDGE, | 99 : edge_(new EffectLayer(ui::OVERSCROLL_EDGE, resource_manager)), |
120 resource_manager)), | 100 glow_(new EffectLayer(ui::OVERSCROLL_GLOW, resource_manager)), |
121 glow_(new EffectLayer(ui::SystemUIResourceManager::OVERSCROLL_GLOW, | |
122 resource_manager)), | |
123 base_edge_height_(kEdgeHeightAtMdpi * device_scale_factor), | 101 base_edge_height_(kEdgeHeightAtMdpi * device_scale_factor), |
124 base_glow_height_(kGlowHeightAtMdpi * device_scale_factor), | 102 base_glow_height_(kGlowHeightAtMdpi * device_scale_factor), |
125 edge_alpha_(0), | 103 edge_alpha_(0), |
126 edge_scale_y_(0), | 104 edge_scale_y_(0), |
127 glow_alpha_(0), | 105 glow_alpha_(0), |
128 glow_scale_y_(0), | 106 glow_scale_y_(0), |
129 edge_alpha_start_(0), | 107 edge_alpha_start_(0), |
130 edge_alpha_finish_(0), | 108 edge_alpha_finish_(0), |
131 edge_scale_y_start_(0), | 109 edge_scale_y_start_(0), |
132 edge_scale_y_finish_(0), | 110 edge_scale_y_finish_(0), |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 | 333 |
356 void EdgeEffect::SetParent(cc::Layer* parent) { | 334 void EdgeEffect::SetParent(cc::Layer* parent) { |
357 edge_->SetParent(parent); | 335 edge_->SetParent(parent); |
358 glow_->SetParent(parent); | 336 glow_->SetParent(parent); |
359 } | 337 } |
360 | 338 |
361 // static | 339 // static |
362 void EdgeEffect::PreloadResources( | 340 void EdgeEffect::PreloadResources( |
363 ui::SystemUIResourceManager* resource_manager) { | 341 ui::SystemUIResourceManager* resource_manager) { |
364 DCHECK(resource_manager); | 342 DCHECK(resource_manager); |
365 resource_manager->PreloadResource( | 343 resource_manager->PreloadResource(ui::OVERSCROLL_EDGE); |
366 ui::SystemUIResourceManager::OVERSCROLL_EDGE); | 344 resource_manager->PreloadResource(ui::OVERSCROLL_GLOW); |
367 resource_manager->PreloadResource( | |
368 ui::SystemUIResourceManager::OVERSCROLL_GLOW); | |
369 } | 345 } |
370 | 346 |
371 } // namespace content | 347 } // namespace content |
OLD | NEW |