Index: chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
diff --git a/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
index 01c1ad62c97d2e6d9182241edc814b16ffbaf061..34e26fca2e89d01e0fc1cdaae61389ffda1ef8e7 100644 |
--- a/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
+++ b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
@@ -6,15 +6,30 @@ |
#include "base/bind.h" |
#include "base/message_loop.h" |
+#include "chrome/common/pref_names.h" |
Peter Kasting
2012/07/26 01:36:13
Nit: Alphabetical order
Kyle Horimoto
2012/08/03 03:33:29
Done.
|
+#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents.h" |
+#include "chrome/browser/ui/zoom/zoom_controller.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/browser/render_view_host.h" |
#include "grit/generated_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
-#include "ui/views/layout/fill_layout.h" |
+#include "ui/views/controls/separator.h" |
+#include "ui/views/layout/box_layout.h" |
+#include "ui/views/layout/layout_constants.h" |
namespace { |
// The number of milliseconds the bubble should stay on the screen for if it |
Peter Kasting
2012/07/26 01:36:13
Nit: Removing "for" makes this sentence read bette
Kyle Horimoto
2012/08/03 03:33:29
Done.
|
// will automatically close. |
-const int kBubbleCloseDelay = 400; |
+const int kBubbleCloseDelay = 1500; |
+ |
+// The number of pixels between the separator and the button. |
+const int kSeparatorButtonSpacing = 2; |
+ |
+// The font size of the percentage label. |
Peter Kasting
2012/07/26 01:36:13
Nit: How about: "How many pixels larger the percen
Kyle Horimoto
2012/08/03 03:33:29
Done.
|
+const int kPercentageFontIncrease = 5; |
} |
@@ -23,7 +38,7 @@ ZoomBubbleView* ZoomBubbleView::zoom_bubble_ = NULL; |
// static |
void ZoomBubbleView::ShowBubble(views::View* anchor_view, |
- int zoom_percent, |
+ TabContents* tab_contents, |
bool auto_close) { |
// If the bubble is already showing in this window and its |auto_close_| value |
// is equal to |auto_close|, the bubble can be reused and only the label text |
@@ -31,15 +46,7 @@ void ZoomBubbleView::ShowBubble(views::View* anchor_view, |
if (zoom_bubble_ && |
zoom_bubble_->anchor_view() == anchor_view && |
zoom_bubble_->auto_close_ == auto_close) { |
- zoom_bubble_->label_->SetText( |
- l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, zoom_percent)); |
- |
- if (auto_close) { |
- // If the bubble should be closed automatically, reset the timer so that |
- // it will show for the full amount of time instead of only what remained |
- // from the previous time. |
- zoom_bubble_->timer_.Reset(); |
- } |
+ zoom_bubble_->Refresh(); |
} else { |
// If the bubble is already showing but its |auto_close_| value is not equal |
// to |auto_close|, the bubble's focus properties must change, so the |
@@ -47,7 +54,7 @@ void ZoomBubbleView::ShowBubble(views::View* anchor_view, |
if (zoom_bubble_) |
zoom_bubble_->Close(); |
- zoom_bubble_ = new ZoomBubbleView(anchor_view, zoom_percent, auto_close); |
+ zoom_bubble_ = new ZoomBubbleView(anchor_view, tab_contents, auto_close); |
views::BubbleDelegateView::CreateBubble(zoom_bubble_); |
zoom_bubble_->Show(); |
} |
@@ -65,11 +72,11 @@ bool ZoomBubbleView::IsShowing() { |
} |
ZoomBubbleView::ZoomBubbleView(views::View* anchor_view, |
- int zoom_percent, |
+ TabContents* tab_contents, |
bool auto_close) |
: BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), |
label_(NULL), |
- zoom_percent_(zoom_percent), |
+ tab_contents_(tab_contents), |
auto_close_(auto_close) { |
set_use_focusless(auto_close); |
} |
@@ -77,16 +84,24 @@ ZoomBubbleView::ZoomBubbleView(views::View* anchor_view, |
ZoomBubbleView::~ZoomBubbleView() { |
} |
+void ZoomBubbleView::Refresh() { |
+ int zoom_percent = tab_contents_->zoom_controller()->zoom_percent(); |
+ label_->SetText( |
+ l10n_util::GetStringFUTF16Int(IDS_TOOLTIP_ZOOM, zoom_percent)); |
+ |
+ if (auto_close_) { |
+ // If the bubble should be closed automatically, reset the timer so that |
+ // it will show for the full amount of time instead of only what remained |
+ // from the previous time. |
+ timer_.Reset(); |
+ } |
+} |
+ |
void ZoomBubbleView::Close() { |
GetWidget()->Close(); |
} |
-void ZoomBubbleView::Init() { |
- SetLayoutManager(new views::FillLayout()); |
- label_ = new views::Label( |
- l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, zoom_percent_)); |
- AddChildView(label_); |
- |
+void ZoomBubbleView::StartTimerIfNecessary() { |
if (auto_close_) { |
timer_.Start( |
FROM_HERE, |
@@ -96,7 +111,73 @@ void ZoomBubbleView::Init() { |
} |
} |
+void ZoomBubbleView::StopTimer() { |
+ timer_.Stop(); |
+} |
+ |
+void ZoomBubbleView::OnMouseMoved(const views::MouseEvent& event) { |
+ StopTimer(); |
+} |
+ |
+void ZoomBubbleView::OnMouseExited(const views::MouseEvent& event) { |
+ StartTimerIfNecessary(); |
+} |
+ |
+void ZoomBubbleView::ButtonPressed(views::Button* sender, |
+ const views::Event& event) { |
+ double default_zoom_level = |
Peter Kasting
2012/07/26 01:36:14
It seems like this whole function call can be repl
Kyle Horimoto
2012/08/03 03:33:29
Done. Fix for that function in an upcoming CL.
|
+ Profile::FromBrowserContext(tab_contents_->profile())-> |
+ GetPrefs()->GetDouble(prefs::kDefaultZoomLevel); |
+ tab_contents_->web_contents()->GetRenderViewHost()-> |
+ SetZoomLevel(default_zoom_level); |
+} |
+ |
+void ZoomBubbleView::Init() { |
+ SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, |
+ 0, 0, views::kRelatedControlVerticalSpacing)); |
+ |
+ int zoom_percent = tab_contents_->zoom_controller()->zoom_percent(); |
+ label_ = new views::Label( |
+ l10n_util::GetStringFUTF16Int(IDS_TOOLTIP_ZOOM, zoom_percent)); |
+ gfx::Font font = label_->font().DeriveFont(kPercentageFontIncrease); |
+ label_->SetFont(font); |
+ AddChildView(label_); |
+ |
+ AddChildView(new views::Separator()); |
+ |
+ ZoomBubbleViewTextButton* set_default_button = new ZoomBubbleViewTextButton( |
+ this, l10n_util::GetStringUTF16(IDS_ZOOM_SET_DEFAULT)); |
+ set_default_button->set_alignment(views::TextButtonBase::ALIGN_CENTER); |
+ AddChildView(set_default_button); |
+ |
+ StartTimerIfNecessary(); |
+} |
+ |
+gfx::Rect ZoomBubbleView::GetAnchorRect() { |
+ // Compensate for some built-in padding in the zoom image. |
+ gfx::Rect rect(BubbleDelegateView::GetAnchorRect()); |
+ rect.Inset(0, anchor_view() ? 5 : 0); |
+ return rect; |
+} |
+ |
void ZoomBubbleView::WindowClosing() { |
DCHECK(zoom_bubble_ == this); |
zoom_bubble_ = NULL; |
} |
+ |
+ZoomBubbleView::ZoomBubbleViewTextButton::ZoomBubbleViewTextButton( |
+ ZoomBubbleView* listener, const string16& text) : |
Peter Kasting
2012/07/26 01:36:14
Nit: One arg per line; ':' goes on next line (befo
Kyle Horimoto
2012/08/03 03:33:29
Done.
|
+ views::TextButton(listener, text), |
+ delegate_(listener) {} |
+ |
+void ZoomBubbleView::ZoomBubbleViewTextButton::OnMouseMoved( |
+ const views::MouseEvent& event) { |
+ views::TextButton::OnMouseMoved(event); |
+ delegate_->StopTimer(); |
+} |
+ |
+void ZoomBubbleView::ZoomBubbleViewTextButton::OnMouseExited( |
+ const views::MouseEvent& event) { |
+ views::TextButton::OnMouseExited(event); |
Peter Kasting
2012/07/26 01:36:14
This doesn't seem right? If we exit from the butt
Kyle Horimoto
2012/08/03 03:33:29
Done.
|
+ delegate_->StartTimerIfNecessary(); |
+} |