OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/overscroll_refresh.h" | 5 #include "content/browser/android/overscroll_refresh.h" |
6 | 6 |
7 #include "cc/layers/ui_resource_layer.h" | 7 #include "cc/layers/ui_resource_layer.h" |
8 #include "cc/trees/layer_tree_host.h" | 8 #include "cc/trees/layer_tree_host.h" |
9 #include "content/browser/android/animation_utils.h" | 9 #include "content/browser/android/animation_utils.h" |
10 #include "ui/base/android/system_ui_resource_manager.h" | 10 #include "ui/base/android/system_ui_resource_manager.h" |
11 #include "ui/gfx/screen.h" | |
12 | 11 |
13 using std::abs; | 12 using std::abs; |
14 using std::max; | 13 using std::max; |
15 using std::min; | 14 using std::min; |
16 | 15 |
17 namespace content { | 16 namespace content { |
18 namespace { | 17 namespace { |
19 | 18 |
20 const ui::SystemUIResourceType kIdleResourceType = ui::OVERSCROLL_REFRESH_IDLE; | 19 const ui::SystemUIResourceType kIdleResourceType = ui::OVERSCROLL_REFRESH_IDLE; |
21 const ui::SystemUIResourceType kActiveResourceType = | 20 const ui::SystemUIResourceType kActiveResourceType = |
22 ui::OVERSCROLL_REFRESH_ACTIVE; | 21 ui::OVERSCROLL_REFRESH_ACTIVE; |
23 | 22 |
24 // Default offset in dips from the top of the view to where the progress spinner | |
25 // should stop. | |
26 const int kDefaultSpinnerTargetDips = 64; | |
27 | |
28 // Drag movement multiplier between user input and effect translation. | 23 // Drag movement multiplier between user input and effect translation. |
29 const float kDragRate = .5f; | 24 const float kDragRate = .5f; |
30 | 25 |
31 // Animation duration after the effect is released without triggering a refresh. | 26 // Animation duration after the effect is released without triggering a refresh. |
32 const int kRecedeTimeMs = 300; | 27 const int kRecedeTimeMs = 300; |
33 | 28 |
34 // Animation duration immediately after the effect is released and activated. | 29 // Animation duration immediately after the effect is released and activated. |
35 const int kActivationStartTimeMs = 150; | 30 const int kActivationStartTimeMs = 150; |
36 | 31 |
37 // Animation duration after the effect is released and triggers a refresh. | 32 // Animation duration after the effect is released and triggers a refresh. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 gfx::Transform transform; | 99 gfx::Transform transform; |
105 transform.Translate(offset_x, offset_y); | 100 transform.Translate(offset_x, offset_y); |
106 transform.Rotate(rotation); | 101 transform.Rotate(rotation); |
107 layer->SetTransform(transform); | 102 layer->SetTransform(transform); |
108 } | 103 } |
109 | 104 |
110 } // namespace | 105 } // namespace |
111 | 106 |
112 class OverscrollRefresh::Effect { | 107 class OverscrollRefresh::Effect { |
113 public: | 108 public: |
114 Effect(ui::SystemUIResourceManager* resource_manager) | 109 Effect(ui::SystemUIResourceManager* resource_manager, float target_drag) |
115 : resource_manager_(resource_manager), | 110 : resource_manager_(resource_manager), |
116 idle_layer_(cc::UIResourceLayer::Create()), | 111 idle_layer_(cc::UIResourceLayer::Create()), |
117 active_layer_(cc::UIResourceLayer::Create()), | 112 active_layer_(cc::UIResourceLayer::Create()), |
118 target_drag_(kDefaultSpinnerTargetDips * | 113 target_drag_(target_drag), |
119 gfx::Screen::GetNativeScreen() | |
120 ->GetPrimaryDisplay() | |
121 .device_scale_factor()), | |
122 drag_(0), | 114 drag_(0), |
123 idle_alpha_(0), | 115 idle_alpha_(0), |
124 active_alpha_(0), | 116 active_alpha_(0), |
125 offset_(0), | 117 offset_(0), |
126 rotation_(0), | 118 rotation_(0), |
127 idle_alpha_start_(0), | 119 idle_alpha_start_(0), |
128 idle_alpha_finish_(0), | 120 idle_alpha_finish_(0), |
129 active_alpha_start_(0), | 121 active_alpha_start_(0), |
130 active_alpha_finish_(0), | 122 active_alpha_finish_(0), |
131 offset_start_(0), | 123 offset_start_(0), |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 346 |
355 base::TimeTicks start_time_; | 347 base::TimeTicks start_time_; |
356 base::TimeTicks activated_start_time_; | 348 base::TimeTicks activated_start_time_; |
357 base::TimeDelta duration_; | 349 base::TimeDelta duration_; |
358 | 350 |
359 State state_; | 351 State state_; |
360 }; | 352 }; |
361 | 353 |
362 OverscrollRefresh::OverscrollRefresh( | 354 OverscrollRefresh::OverscrollRefresh( |
363 ui::SystemUIResourceManager* resource_manager, | 355 ui::SystemUIResourceManager* resource_manager, |
364 OverscrollRefreshClient* client) | 356 OverscrollRefreshClient* client, |
| 357 float target_drag_offset_pixels) |
365 : client_(client), | 358 : client_(client), |
366 scrolled_to_top_(true), | 359 scrolled_to_top_(true), |
367 scroll_consumption_state_(DISABLED), | 360 scroll_consumption_state_(DISABLED), |
368 effect_(new Effect(resource_manager)) { | 361 effect_(new Effect(resource_manager, target_drag_offset_pixels)) { |
369 DCHECK(client); | 362 DCHECK(client); |
370 } | 363 } |
371 | 364 |
372 OverscrollRefresh::~OverscrollRefresh() { | 365 OverscrollRefresh::~OverscrollRefresh() { |
373 } | 366 } |
374 | 367 |
375 void OverscrollRefresh::Reset() { | 368 void OverscrollRefresh::Reset() { |
376 scroll_consumption_state_ = DISABLED; | 369 scroll_consumption_state_ = DISABLED; |
377 effect_->Finish(); | 370 effect_->Finish(); |
378 } | 371 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 | 443 |
451 void OverscrollRefresh::Release(bool allow_activation) { | 444 void OverscrollRefresh::Release(bool allow_activation) { |
452 if (scroll_consumption_state_ == ENABLED) { | 445 if (scroll_consumption_state_ == ENABLED) { |
453 if (effect_->Release(base::TimeTicks::Now(), allow_activation)) | 446 if (effect_->Release(base::TimeTicks::Now(), allow_activation)) |
454 client_->TriggerRefresh(); | 447 client_->TriggerRefresh(); |
455 } | 448 } |
456 scroll_consumption_state_ = DISABLED; | 449 scroll_consumption_state_ = DISABLED; |
457 } | 450 } |
458 | 451 |
459 } // namespace content | 452 } // namespace content |
OLD | NEW |