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

Unified Diff: chrome/browser/ui/views/location_bar/location_bar_view.h

Issue 302453002: New animation for the origin chip URL showing/hiding. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test failure by checking for NULL extension Created 6 years, 7 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: chrome/browser/ui/views/location_bar/location_bar_view.h
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index 7bf3c2fe1b367839345e89bb54793a578d8736c8..4331733ed350f9843f242d4c7b8da51e05c37cb8 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -256,6 +256,7 @@ class LocationBarView : public LocationBar,
// OmniboxEditController:
virtual void Update(const content::WebContents* contents) OVERRIDE;
virtual void ShowURL() OVERRIDE;
+ virtual void EndOriginChipAnimations(bool cancel_fade) OVERRIDE;
virtual ToolbarModel* GetToolbarModel() OVERRIDE;
virtual content::WebContents* GetWebContents() OVERRIDE;
@@ -336,9 +337,18 @@ class LocationBarView : public LocationBar,
bool ShouldShowKeywordBubble() const;
bool ShouldShowEVBubble() const;
- // Origin chip animation control methods.
- void OnShowURLAnimationEnded();
- void OnHideURLAnimationEnded();
+ // Used to "reverse" the URL showing/hiding animations, since we use separate
+ // animations whose curves are not true inverses of each other. Based on the
+ // current position of the omnibox, calculates what value the desired
+ // animation (|hide_url_animation_| if |hide| is true, |show_url_animation_|
+ // if it's false) should be set to in order to produce the same omnibox
+ // position. This way we can stop the old animation, set the new animation to
+ // this value, and start it running, and the text will appear to reverse
+ // directions from its current location.
+ double GetValueForAnimation(bool hide) const;
+
+ // Resets |show_url_animation_| and the color changes it causes.
+ void ResetShowAnimationAndColors();
// LocationBar:
virtual void ShowFirstRunBubble() OVERRIDE;
@@ -512,11 +522,44 @@ class LocationBarView : public LocationBar,
int dropdown_animation_offset_;
// Origin chip animations.
+ //
+ // For the "show URL" animation, we instantly hide the origin chip and show
Justin Donnelly 2014/06/02 15:07:33 Great description, thanks.
+ // the |omnibox_view_| in its place, containing the complete URL. However, we
+ // clip that view (using the XXX_leading_inset_ and XXX_width_ members) so
+ // that only the hostname is visible. We also offset the omnibox (using the
+ // XXX_offset_ members) so the hostname is in the same place as it was in the
+ // origin chip. Finally, we set the selection text and background color of
+ // the text to match the pressed origin chip. Then, as the animation runs,
+ // all of these values are animated to their steady-state values (no omnibox
+ // offset, no inset, width equal to the full omnibox text [which is reset to
+ // "no width clamp" after the animation ends], and standard selection colors).
+ //
+ // For the hide animation, we run the positioning and clipping parts of the
+ // animation in reverse, but instead of changing the selection color, because
+ // there usually isn't a selection when hiding, we leave the omnibox colors
+ // alone, and when the hide animation has ended, tell the origin chip to
+ // fade-in its background.
scoped_ptr<gfx::SlideAnimation> show_url_animation_;
scoped_ptr<gfx::SlideAnimation> hide_url_animation_;
-
- // Text label shown only during origin chip animations.
- views::Label* animated_host_label_;
+ // The omnibox offset may be positive or negative. The starting offset is the
+ // amount necessary to shift the |omnibox_view_| by such that the hostname
+ // portion of the URL aligns with the hostname in the origin chip. As the
+ // show animation runs, the current offset gradually moves to 0.
+ int starting_omnibox_offset_;
+ int current_omnibox_offset_;
+ // The leading inset is always positive. The starting inset is the width of
+ // the text between the leading edge of the omnibox and the edge of the
+ // hostname, which is clipped off at the start of the show animation. Note
+ // that in RTL mode, this will be the part of the URL that is logically after
+ // the hostname. As the show animation runs, the current inset gradually
+ // moves to 0.
+ int starting_omnibox_leading_inset_;
+ int current_omnibox_leading_inset_;
+ // The width is always positive. The ending width is the width of the entire
+ // omnibox URL. As the show animation runs, the current width gradually moves
+ // from the width of the hostname to the ending value.
+ int current_omnibox_width_;
+ int ending_omnibox_width_;
// Used to register for notifications received by NotificationObserver.
content::NotificationRegistrar registrar_;
« no previous file with comments | « chrome/browser/ui/toolbar/toolbar_model_impl.cc ('k') | chrome/browser/ui/views/location_bar/location_bar_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698