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

Unified Diff: cc/input/top_controls_manager.cc

Issue 14139013: Hide location bar on Javascript-initiated scroll. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge ShowTopControls into UpdateTopControlsState, use new TopControlsState enum in plumbing, gener… Created 7 years, 8 months 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
Index: cc/input/top_controls_manager.cc
diff --git a/cc/input/top_controls_manager.cc b/cc/input/top_controls_manager.cc
index 02a015246452ba5ecd83c30c4bfcb5e50540bd1b..981095b63aa66281383b1fe6179ef4949f43e29e 100644
--- a/cc/input/top_controls_manager.cc
+++ b/cc/input/top_controls_manager.cc
@@ -40,7 +40,7 @@ TopControlsManager::TopControlsManager(TopControlsManagerClient* client,
float top_controls_hide_threshold)
: client_(client),
animation_direction_(NO_ANIMATION),
- visibility_restriction_(NONE),
+ permitted_state_(BOTH),
controls_top_offset_(0.f),
top_controls_height_(top_controls_height),
current_scroll_delta_(0.f),
@@ -55,31 +55,36 @@ TopControlsManager::TopControlsManager(TopControlsManagerClient* client,
TopControlsManager::~TopControlsManager() {
}
-void TopControlsManager::UpdateTopControlsState(bool enable_hiding,
- bool enable_showing,
+void TopControlsManager::UpdateTopControlsState(TopControlsState constraints,
+ TopControlsState current,
bool animate) {
- float final_controls_position = 0.f;
-
- if (enable_hiding && enable_showing) {
- visibility_restriction_ = NONE;
- } else if (enable_showing || !enable_hiding) {
- visibility_restriction_ = ALWAYS_SHOWN;
- } else {
- visibility_restriction_ = ALWAYS_HIDDEN;
- final_controls_position = -top_controls_height_;
+ if (constraints == SHOWN) {
+ DCHECK(current != HIDDEN);
aelias_OOO_until_Jul13 2013/05/02 18:44:23 Nit, formulate it as: DCHECK(!(constraints == SHO
Michael van Ouwerkerk 2013/05/08 16:21:15 Done.
+ } else if (constraints == HIDDEN) {
+ DCHECK(current != SHOWN);
}
- if (visibility_restriction_ != NONE &&
- final_controls_position != controls_top_offset_) {
- ResetAnimations();
+ permitted_state_ = constraints;
+
+ // Don't do anything if it doesn't matter which state the controls are in.
+ if (constraints == BOTH && current == BOTH) return;
aelias_OOO_until_Jul13 2013/05/02 18:44:23 Style: return on next line
Michael van Ouwerkerk 2013/05/08 16:21:15 Done.
+
+ ResetAnimations();
+ if (constraints == SHOWN || current == SHOWN) {
+ if (animate) {
+ SetupAnimation(SHOWING_CONTROLS);
+ } else {
+ controls_top_offset_ = 0.f;
+ }
+ }
+ if (constraints == HIDDEN || current == HIDDEN) {
if (animate) {
- SetupAnimation(visibility_restriction_ == ALWAYS_SHOWN ?
- SHOWING_CONTROLS : HIDING_CONTROLS);
+ SetupAnimation(HIDING_CONTROLS);
} else {
- controls_top_offset_ = final_controls_position;
+ controls_top_offset_ = -top_controls_height_;
}
- client_->DidChangeTopControlsPosition();
}
+ client_->DidChangeTopControlsPosition();
aelias_OOO_until_Jul13 2013/05/02 18:44:23 Please track the old value of controls_top_offset_
Michael van Ouwerkerk 2013/05/08 16:21:15 Done.
}
void TopControlsManager::ScrollBegin() {
@@ -90,9 +95,9 @@ void TopControlsManager::ScrollBegin() {
gfx::Vector2dF TopControlsManager::ScrollBy(
const gfx::Vector2dF pending_delta) {
- if (visibility_restriction_ == ALWAYS_SHOWN && pending_delta.y() > 0)
+ if (permitted_state_ == SHOWN && pending_delta.y() > 0)
return pending_delta;
- else if (visibility_restriction_ == ALWAYS_HIDDEN && pending_delta.y() < 0)
+ else if (permitted_state_ == HIDDEN && pending_delta.y() < 0)
return pending_delta;
current_scroll_delta_ += pending_delta.y();
@@ -153,6 +158,19 @@ void TopControlsManager::ResetAnimations() {
}
void TopControlsManager::SetupAnimation(AnimationDirection direction) {
+ DCHECK(direction != NO_ANIMATION);
+
+ if (direction == SHOWING_CONTROLS && controls_top_offset_ == 0)
+ return;
+
+ if (direction == HIDING_CONTROLS &&
+ controls_top_offset_ == -top_controls_height_) {
+ return;
+ }
+
+ if (top_controls_animation_ && animation_direction_ == direction)
+ return;
+
top_controls_animation_ = KeyframedFloatAnimationCurve::Create();
double start_time =
(base::TimeTicks::Now() - base::TimeTicks()).InMillisecondsF();
@@ -166,6 +184,7 @@ void TopControlsManager::SetupAnimation(AnimationDirection direction) {
controls_top_offset_ + max_ending_offset,
EaseTimingFunction::Create()));
animation_direction_ = direction;
+ client_->DidChangeTopControlsPosition();
}
void TopControlsManager::StartAnimationIfNecessary() {
@@ -187,11 +206,8 @@ void TopControlsManager::StartAnimationIfNecessary() {
SHOWING_CONTROLS : HIDING_CONTROLS;
}
- if (show_controls != NO_ANIMATION &&
- (!top_controls_animation_ || animation_direction_ != show_controls)) {
+ if (show_controls != NO_ANIMATION)
SetupAnimation(show_controls);
- client_->DidChangeTopControlsPosition();
- }
}
}

Powered by Google App Engine
This is Rietveld 408576698