| 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 |