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

Unified Diff: content/browser/android/overscroll_glow.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/android/overscroll_glow.h ('k') | content/browser/android/overscroll_refresh.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/android/overscroll_glow.cc
diff --git a/content/browser/android/overscroll_glow.cc b/content/browser/android/overscroll_glow.cc
index 6df795a2db2ecb5931fb486041b06d7666984c2d..a5355d4fd9fb606096bb49b10c86e7a36e084ec9 100644
--- a/content/browser/android/overscroll_glow.cc
+++ b/content/browser/android/overscroll_glow.cc
@@ -77,7 +77,7 @@ gfx::SizeF ComputeSize(OverscrollGlow::Edge edge,
OverscrollGlow::OverscrollGlow(const EdgeEffectProvider& edge_effect_provider)
: edge_effect_provider_(edge_effect_provider),
- enabled_(true),
+ edge_offsets_(),
initialized_(false) {
DCHECK(!edge_effect_provider_.is_null());
}
@@ -86,45 +86,30 @@ OverscrollGlow::~OverscrollGlow() {
Detach();
}
-void OverscrollGlow::Enable() {
- enabled_ = true;
-}
-
-void OverscrollGlow::Disable() {
- if (!enabled_)
+void OverscrollGlow::Reset() {
+ if (!initialized_)
return;
- enabled_ = false;
- if (!enabled_ && initialized_) {
- Detach();
- for (size_t i = 0; i < EDGE_COUNT; ++i)
- edge_effects_[i]->Finish();
- }
+ Detach();
+ for (size_t i = 0; i < EDGE_COUNT; ++i)
+ edge_effects_[i]->Finish();
}
-bool OverscrollGlow::OnOverscrolled(cc::Layer* overscrolling_layer,
- base::TimeTicks current_time,
+bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF overscroll_delta,
gfx::Vector2dF velocity,
gfx::Vector2dF displacement) {
- DCHECK(overscrolling_layer);
-
- if (!enabled_)
- return false;
-
// The size of the glow determines the relative effect of the inputs; an
// empty-sized effect is effectively disabled.
- if (display_params_.size.IsEmpty())
+ if (viewport_size_.IsEmpty())
return false;
// Ignore sufficiently small values that won't meaningfuly affect animation.
overscroll_delta = ZeroSmallComponents(overscroll_delta);
if (overscroll_delta.IsZero()) {
- if (initialized_) {
+ if (initialized_)
Release(current_time);
- UpdateLayerAttachment(overscrolling_layer);
- }
- return NeedsAnimate();
+ return CheckNeedsAnimate();
}
if (!InitializeIfNecessary())
@@ -142,45 +127,55 @@ bool OverscrollGlow::OnOverscrolled(cc::Layer* overscrolling_layer,
else
Pull(current_time, overscroll_delta, displacement);
- UpdateLayerAttachment(overscrolling_layer);
- return NeedsAnimate();
+ return CheckNeedsAnimate();
}
-bool OverscrollGlow::Animate(base::TimeTicks current_time) {
- if (!NeedsAnimate()) {
- Detach();
+bool OverscrollGlow::Animate(base::TimeTicks current_time,
+ cc::Layer* parent_layer) {
+ DCHECK(parent_layer);
+ if (!CheckNeedsAnimate())
return false;
- }
+
+ UpdateLayerAttachment(parent_layer);
for (size_t i = 0; i < EDGE_COUNT; ++i) {
if (edge_effects_[i]->Update(current_time)) {
Edge edge = static_cast<Edge>(i);
edge_effects_[i]->ApplyToLayers(
- ComputeSize(edge, display_params_.size),
- ComputeTransform(
- edge, display_params_.size, display_params_.edge_offsets[i]));
+ ComputeSize(edge, viewport_size_),
+ ComputeTransform(edge, viewport_size_, edge_offsets_[i]));
}
}
- if (!NeedsAnimate()) {
- Detach();
- return false;
- }
-
- return true;
+ return CheckNeedsAnimate();
}
-void OverscrollGlow::UpdateDisplayParameters(const DisplayParameters& params) {
- display_params_ = params;
+void OverscrollGlow::UpdateDisplay(
+ const gfx::SizeF& viewport_size,
+ const gfx::SizeF& content_size,
+ const gfx::Vector2dF& content_scroll_offset) {
+ viewport_size_ = viewport_size;
+ edge_offsets_[OverscrollGlow::EDGE_TOP] = -content_scroll_offset.y();
+ edge_offsets_[OverscrollGlow::EDGE_LEFT] = -content_scroll_offset.x();
+ edge_offsets_[OverscrollGlow::EDGE_BOTTOM] = content_size.height() -
+ content_scroll_offset.y() -
+ viewport_size.height();
+ edge_offsets_[OverscrollGlow::EDGE_RIGHT] =
+ content_size.width() - content_scroll_offset.x() - viewport_size.width();
}
-bool OverscrollGlow::NeedsAnimate() const {
- if (!enabled_ || !initialized_)
+bool OverscrollGlow::CheckNeedsAnimate() {
+ if (!initialized_) {
+ Detach();
return false;
+ }
+
for (size_t i = 0; i < EDGE_COUNT; ++i) {
if (!edge_effects_[i]->IsFinished())
return true;
}
+
+ Detach();
return false;
}
@@ -189,10 +184,8 @@ void OverscrollGlow::UpdateLayerAttachment(cc::Layer* parent) {
if (!root_layer_.get())
return;
- if (!NeedsAnimate()) {
- Detach();
+ if (!CheckNeedsAnimate())
return;
- }
if (root_layer_->parent() != parent)
parent->AddChild(root_layer_);
@@ -207,7 +200,6 @@ void OverscrollGlow::Detach() {
}
bool OverscrollGlow::InitializeIfNecessary() {
- DCHECK(enabled_);
if (initialized_)
return true;
@@ -225,10 +217,11 @@ bool OverscrollGlow::InitializeIfNecessary() {
void OverscrollGlow::Pull(base::TimeTicks current_time,
const gfx::Vector2dF& overscroll_delta,
const gfx::Vector2dF& overscroll_location) {
- DCHECK(enabled_ && initialized_);
+ DCHECK(initialized_);
DCHECK(!overscroll_delta.IsZero());
- const float inv_width = 1.f / display_params_.size.width();
- const float inv_height = 1.f / display_params_.size.height();
+ DCHECK(!viewport_size_.IsEmpty());
+ const float inv_width = 1.f / viewport_size_.width();
+ const float inv_height = 1.f / viewport_size_.height();
gfx::Vector2dF overscroll_pull =
gfx::ScaleVector2d(overscroll_delta, inv_width, inv_height);
@@ -264,7 +257,7 @@ void OverscrollGlow::Absorb(base::TimeTicks current_time,
const gfx::Vector2dF& velocity,
bool x_overscroll_started,
bool y_overscroll_started) {
- DCHECK(enabled_ && initialized_);
+ DCHECK(initialized_);
DCHECK(!velocity.IsZero());
// Only trigger on initial overscroll at a non-zero velocity
@@ -295,8 +288,4 @@ EdgeEffectBase* OverscrollGlow::GetOppositeEdge(int edge_index) {
return edge_effects_[(edge_index + 2) % EDGE_COUNT].get();
}
-OverscrollGlow::DisplayParameters::DisplayParameters() {
- edge_offsets[0] = edge_offsets[1] = edge_offsets[2] = edge_offsets[3] = 0.f;
-}
-
} // namespace content
« no previous file with comments | « content/browser/android/overscroll_glow.h ('k') | content/browser/android/overscroll_refresh.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698