Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: content/browser/android/edge_effect.cc

Issue 679493002: [Android] Add a native pull-to-refresh overscroll effect (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix findbugs... Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/android/content_view_core_impl.cc ('k') | content/browser/android/edge_effect_l.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698