Index: chrome/browser/views/status_bubble_views.cc |
=================================================================== |
--- chrome/browser/views/status_bubble_views.cc (revision 19854) |
+++ chrome/browser/views/status_bubble_views.cc (working copy) |
@@ -28,7 +28,6 @@ |
#include "views/widget/root_view.h" |
#include "views/widget/widget.h" |
#if defined(OS_WIN) |
-#include "views/controls/scrollbar/native_scroll_bar.h" |
#include "views/widget/widget_win.h" |
#endif |
@@ -54,7 +53,7 @@ |
// The minimum horizontal space between the (right) end of the text and the edge |
// of the status bubble, not including the outer shadow ring, or a 1 px gap we |
-// leave so we can shift all the text by 1 px to produce a "highlight" effect. |
+// leave so we can shit all the text by 1 px to produce a "highlight" effect. |
static const int kTextHorizPadding = 1; |
// Delays before we start hiding or showing the bubble after we receive a |
@@ -67,9 +66,6 @@ |
static const int kHideFadeDurationMS = 200; |
static const int kFramerate = 25; |
-// How long each expansion step should take. |
-static const int kExpansionStepDurationMS = 150; |
- |
// View ----------------------------------------------------------------------- |
// StatusView manages the display of the bubble, applying text changes and |
// fading in or out the bubble as required. |
@@ -117,11 +113,6 @@ |
// Set the bubble text to a certain value, hides the bubble if text is |
// an empty string. |
- void SetTextAndAnimate(const std::wstring& text); |
- |
- // Set the bubble text to a certain value without triggering animation |
- // sequence. Called by the StatusViewExpander after bubble has been |
- // fully expanded. |
void SetText(const std::wstring& text); |
BubbleStage GetState() const { return stage_; } |
@@ -187,12 +178,6 @@ |
}; |
void StatusBubbleViews::StatusView::SetText(const std::wstring& text) { |
- text_ = text; |
- SchedulePaint(); |
-} |
- |
-void StatusBubbleViews::StatusView::SetTextAndAnimate( |
- const std::wstring& text) { |
if (text.empty()) { |
// The string was empty. |
StartHiding(); |
@@ -332,6 +317,7 @@ |
void StatusBubbleViews::StatusView::AnimationEnded( |
const Animation* animation) { |
SetOpacity(opacity_end_); |
+ |
if (stage_ == BUBBLE_HIDING_FADE) { |
stage_ = BUBBLE_HIDDEN; |
popup_->Hide(); |
@@ -467,83 +453,6 @@ |
body_bounds.height()); |
} |
- |
-// StatusViewExpander --------------------------------------------------------- |
-// StatusViewExpander manages the expansion and contraction of the status |
-// bubble as it accommodates URL's too long to fit in the standard bubble. |
-// Changes are passed through to the StatusView to paint. |
-class StatusBubbleViews::StatusViewExpander : public Animation, |
- public AnimationDelegate { |
- public: |
- StatusViewExpander(StatusBubble* status_bubble, StatusView* status_view) |
- : Animation(kFramerate, this), |
- status_bubble_(status_bubble), |
- status_view_(status_view), |
- expansion_start_(0), |
- expansion_end_(0) { |
- } |
- |
- // Manage the expansion of the bubble. |
- void StartExpansion(std::wstring expanded_text, int current_width, |
- int expansion_end); |
- |
- // Set width of fully expanded bubble. |
- void SetExpandedWidth(int expanded_width); |
- |
- private: |
- // Animation functions. |
- int GetCurrentBubbleWidth(); |
- void SetBubbleWidth(int width); |
- void AnimateToState(double state); |
- void AnimationEnded(const Animation* animation); |
- |
- // We are changing the bounds and text of this view. |
- StatusView* status_view_; |
- |
- // Manager that owns us. |
- StatusBubble* status_bubble_; |
- |
- // The currently displayed text. |
- std::wstring text_; |
- |
- // Text elided to fit maximum possible status bar width. |
- std::wstring expanded_text_; |
- |
- // Widths at expansion start and end. |
- int expansion_start_; |
- int expansion_end_; |
-}; |
- |
-void StatusBubbleViews::StatusViewExpander::AnimateToState(double state) { |
- SetBubbleWidth(GetCurrentBubbleWidth()); |
-} |
- |
-void StatusBubbleViews::StatusViewExpander::AnimationEnded( |
- const Animation* animation) { |
- SetBubbleWidth(expansion_end_); |
- status_view_->SetText(expanded_text_); |
-} |
- |
-void StatusBubbleViews::StatusViewExpander::StartExpansion( |
- std::wstring expanded_text, int expansion_start, |
- int expansion_end) { |
- expanded_text_ = expanded_text; |
- expansion_start_ = expansion_start; |
- expansion_end_ = expansion_end; |
- SetDuration(kExpansionStepDurationMS); |
- Start(); |
-} |
- |
-int StatusBubbleViews::StatusViewExpander::GetCurrentBubbleWidth() { |
- return static_cast<int>(expansion_start_ + |
- (expansion_end_ - expansion_start_) * Animation::GetCurrentValue()); |
-} |
- |
-void StatusBubbleViews::StatusViewExpander::SetBubbleWidth(int width) { |
- status_bubble_->SetBubbleWidth(width); |
- status_view_->SchedulePaint(); |
-} |
- |
// StatusBubble --------------------------------------------------------------- |
const int StatusBubbleViews::kShadowThickness = 1; |
@@ -554,13 +463,10 @@ |
opacity_(0), |
frame_(frame), |
view_(NULL), |
- download_shelf_is_visible_(false), |
- is_expanded_(false), |
- expand_timer_factory_(this) { |
+ download_shelf_is_visible_(false) { |
} |
StatusBubbleViews::~StatusBubbleViews() { |
- CancelExpandTimer(); |
if (popup_.get()) |
popup_->CloseNow(); |
} |
@@ -573,8 +479,6 @@ |
if (!view_) |
view_ = new StatusView(this, popup, frame_->GetThemeProvider()); |
- if (!expand_view_) |
- expand_view_ = new StatusViewExpander(this, view_); |
popup->set_window_style(WS_POPUP); |
popup->set_window_ex_style(WS_EX_LAYERED | WS_EX_TOOLWINDOW | |
@@ -631,34 +535,26 @@ |
Init(); |
status_text_ = status_text; |
if (!status_text_.empty()) { |
- view_->SetTextAndAnimate(status_text); |
+ view_->SetText(status_text); |
view_->Show(); |
} else if (!url_text_.empty()) { |
- view_->SetTextAndAnimate(url_text_); |
+ view_->SetText(url_text_); |
} else { |
- view_->SetTextAndAnimate(std::wstring()); |
+ view_->SetText(std::wstring()); |
} |
} |
void StatusBubbleViews::SetURL(const GURL& url, const std::wstring& languages) { |
- languages_ = languages; |
- url_ = url; |
Init(); |
// If we want to clear a displayed URL but there is a status still to |
// display, display that status instead. |
if (url.is_empty() && !status_text_.empty()) { |
url_text_ = std::wstring(); |
- view_->SetTextAndAnimate(status_text_); |
+ view_->SetText(status_text_); |
return; |
} |
- // Reset expansion state only when bubble is completely hidden. |
- if (view_->GetState() == StatusView::BUBBLE_HIDDEN) { |
- is_expanded_ = false; |
- SetBubbleWidth(GetStandardStatusBubbleWidth()); |
- } |
- |
// Set Elided Text corresponding to the GURL object. |
gfx::Rect popup_bounds; |
popup_->GetBounds(&popup_bounds, true); |
@@ -667,30 +563,13 @@ |
url_text_ = gfx::ElideUrl(url, view_->Label::GetFont(), text_width, |
languages); |
- url_parse::Parsed parsed; |
- std::wstring original_url_text_ = |
- net::FormatUrl(url, languages, true, true, &parsed, NULL); |
- |
// An URL is always treated as a left-to-right string. On right-to-left UIs |
// we need to explicitly mark the URL as LTR to make sure it is displayed |
// correctly. |
if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT && |
!url_text_.empty()) |
l10n_util::WrapStringWithLTRFormatting(&url_text_); |
- |
- view_->SetTextAndAnimate(url_text_); |
- |
- CancelExpandTimer(); |
- |
- // If bubble is already in expanded state, shift immediately to adjust to |
- // new text size (shrinking or expanding). Otherwise delay for |
- // kExpandHoverDelay ms. |
- if (is_expanded_ && !url.is_empty()) |
- ExpandBubble(); |
- else if (original_url_text_.length() > url_text_.length()) |
- MessageLoop::current()->PostDelayedTask(FROM_HERE, |
- expand_timer_factory_.NewRunnableMethod( |
- &StatusBubbleViews::ExpandBubble), kExpandHoverDelay); |
+ view_->SetText(url_text_); |
} |
void StatusBubbleViews::Hide() { |
@@ -796,7 +675,7 @@ |
view_->SetStyle(StatusView::STYLE_STANDARD_RIGHT); |
offset_ = 0; |
- // Subtract border width + bubble width. |
+ // Substract border width + bubble width. |
int right_position_x = window_width - (position_.x() + size_.width()); |
popup_->SetBounds(gfx::Rect(top_left.x() + right_position_x, |
top_left.y() + position_.y(), |
@@ -816,46 +695,3 @@ |
size_.width(), size_.height())); |
} |
} |
- |
-void StatusBubbleViews::ExpandBubble() { |
- // Elide url to maximum possible size, then check actual length (it may |
- // still be too long to fit) before expanding bubble. |
- gfx::Rect popup_bounds; |
- popup_->GetBounds(&popup_bounds, true); |
- int max_status_bubble_width = GetMaxStatusBubbleWidth(); |
- url_text_ = gfx::ElideUrl(url_, view_->Label::GetFont(), |
- max_status_bubble_width, languages_); |
- int expanded_bubble_width = |
- std::max(GetStandardStatusBubbleWidth(), |
- std::min(view_->Label::GetFont().GetStringWidth(url_text_) + |
- (kShadowThickness * 2) + kTextPositionX + kTextHorizPadding + 1, |
- max_status_bubble_width)); |
- is_expanded_ = true; |
- expand_view_->StartExpansion(url_text_, popup_bounds.width(), |
- expanded_bubble_width); |
-} |
- |
-int StatusBubbleViews::GetStandardStatusBubbleWidth() { |
- gfx::Rect frame_bounds; |
- frame_->GetBounds(&frame_bounds, false); |
- return frame_bounds.width() / 3; |
-} |
- |
-int StatusBubbleViews::GetMaxStatusBubbleWidth() { |
- gfx::Rect frame_bounds; |
- frame_->GetBounds(&frame_bounds, false); |
- return static_cast<int>(frame_bounds.width() - (kShadowThickness * 2) - |
- kTextPositionX - kTextHorizPadding - 1 - |
- views::NativeScrollBar::GetVerticalScrollBarWidth()); |
-} |
- |
-void StatusBubbleViews::SetBubbleWidth(int width) { |
- size_.set_width(width); |
- SetBounds(position_.x(), position_.y(), size_.width(), size_.height()); |
-} |
- |
-void StatusBubbleViews::CancelExpandTimer() { |
- if (!expand_timer_factory_.empty()) |
- expand_timer_factory_.RevokeAll(); |
-} |
- |