Index: ui/views/bubble/tooltip_icon.cc |
diff --git a/chrome/browser/ui/views/autofill/tooltip_icon.cc b/ui/views/bubble/tooltip_icon.cc |
similarity index 52% |
rename from chrome/browser/ui/views/autofill/tooltip_icon.cc |
rename to ui/views/bubble/tooltip_icon.cc |
index b2a2678f3c87c36595729ac2a62d71e66daaddaa..2041ad50c94645354a85bd561a1965021dc17e00 100644 |
--- a/chrome/browser/ui/views/autofill/tooltip_icon.cc |
+++ b/ui/views/bubble/tooltip_icon.cc |
@@ -2,59 +2,23 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/ui/views/autofill/tooltip_icon.h" |
+#include "ui/views/bubble/tooltip_icon.h" |
-#include "base/macros.h" |
#include "base/timer/timer.h" |
-#include "chrome/browser/ui/views/autofill/info_bubble.h" |
#include "ui/accessibility/ax_node_data.h" |
#include "ui/gfx/paint_vector_icon.h" |
#include "ui/gfx/vector_icons_public.h" |
#include "ui/views/bubble/bubble_frame_view.h" |
+#include "ui/views/bubble/info_bubble.h" |
#include "ui/views/mouse_watcher_view_host.h" |
-#include "ui/views/painter.h" |
-namespace autofill { |
- |
-namespace { |
- |
-gfx::Insets GetPreferredInsets(const views::View* view) { |
- gfx::Size pref_size = view->GetPreferredSize(); |
- gfx::Rect local_bounds = view->GetLocalBounds(); |
- gfx::Point origin = local_bounds.CenterPoint(); |
- origin.Offset(-pref_size.width() / 2, -pref_size.height() / 2); |
- return gfx::Insets(origin.y(), |
- origin.x(), |
- local_bounds.bottom() - (origin.y() + pref_size.height()), |
- local_bounds.right() - (origin.x() + pref_size.width())); |
-} |
- |
-// An info bubble with some extra positioning magic for tooltip icons. |
-class TooltipBubble : public InfoBubble { |
- public: |
- TooltipBubble(views::View* anchor, const base::string16& message) |
- : InfoBubble(anchor, message) {} |
- ~TooltipBubble() override {} |
- |
- protected: |
- // InfoBubble: |
- gfx::Rect GetAnchorRect() const override { |
- gfx::Rect bounds = views::BubbleDialogDelegateView::GetAnchorRect(); |
- bounds.Inset(GetPreferredInsets(anchor())); |
- return bounds; |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(TooltipBubble); |
-}; |
- |
-} // namespace |
+namespace views { |
TooltipIcon::TooltipIcon(const base::string16& tooltip) |
: tooltip_(tooltip), |
mouse_inside_(false), |
- bubble_(NULL), |
- bubble_arrow_(views::BubbleBorder::TOP_RIGHT), |
+ bubble_(nullptr), |
+ preferred_width_(0), |
observer_(this) { |
SetDrawAsHovered(false); |
} |
@@ -63,11 +27,8 @@ TooltipIcon::~TooltipIcon() { |
HideBubble(); |
} |
-// static |
-const char TooltipIcon::kViewClassName[] = "autofill/TooltipIcon"; |
- |
const char* TooltipIcon::GetClassName() const { |
- return TooltipIcon::kViewClassName; |
+ return "TooltipIcon"; |
} |
void TooltipIcon::OnMouseEntered(const ui::MouseEvent& event) { |
@@ -80,6 +41,11 @@ void TooltipIcon::OnMouseExited(const ui::MouseEvent& event) { |
show_timer_.Stop(); |
} |
+bool TooltipIcon::OnMousePressed(const ui::MouseEvent& event) { |
+ // Swallow the click so that the parent doesn't process it. |
+ return true; |
+} |
+ |
void TooltipIcon::OnGestureEvent(ui::GestureEvent* event) { |
if (event->type() == ui::ET_GESTURE_TAP) { |
ShowBubble(); |
@@ -102,7 +68,7 @@ void TooltipIcon::MouseMovedOutOfHost() { |
} |
void TooltipIcon::SetDrawAsHovered(bool hovered) { |
- SetImage(gfx::CreateVectorIcon(gfx::VectorIconId::HELP_OUTLINE, 18, |
+ SetImage(gfx::CreateVectorIcon(gfx::VectorIconId::INFO_OUTLINE, 18, |
hovered |
? SkColorSetARGB(0xBD, 0, 0, 0) |
: SkColorSetARGB(0xBD, 0x44, 0x44, 0x44))); |
@@ -114,8 +80,9 @@ void TooltipIcon::ShowBubble() { |
SetDrawAsHovered(true); |
- bubble_ = new TooltipBubble(this, tooltip_); |
- bubble_->set_arrow(bubble_arrow_); |
+ bubble_ = new InfoBubble(this, tooltip_); |
+ bubble_->set_preferred_width(preferred_width_); |
+ bubble_->set_arrow(BubbleBorder::TOP_RIGHT); |
// When shown due to a gesture event, close on deactivate (i.e. don't use |
// "focusless"). |
bubble_->set_can_activate(!mouse_inside_); |
@@ -124,10 +91,10 @@ void TooltipIcon::ShowBubble() { |
observer_.Add(bubble_->GetWidget()); |
if (mouse_inside_) { |
- views::View* frame = bubble_->GetWidget()->non_client_view()->frame_view(); |
- std::unique_ptr<views::MouseWatcherHost> host( |
- new views::MouseWatcherViewHost(frame, gfx::Insets())); |
- mouse_watcher_.reset(new views::MouseWatcher(host.release(), this)); |
+ View* frame = bubble_->GetWidget()->non_client_view()->frame_view(); |
+ std::unique_ptr<MouseWatcherHost> host( |
+ base::MakeUnique<MouseWatcherViewHost>(frame, gfx::Insets())); |
+ mouse_watcher_ = base::MakeUnique<MouseWatcher>(host.release(), this); |
mouse_watcher_->Start(); |
} |
} |
@@ -137,12 +104,12 @@ void TooltipIcon::HideBubble() { |
bubble_->Hide(); |
} |
-void TooltipIcon::OnWidgetDestroyed(views::Widget* widget) { |
+void TooltipIcon::OnWidgetDestroyed(Widget* widget) { |
observer_.Remove(widget); |
SetDrawAsHovered(false); |
mouse_watcher_.reset(); |
- bubble_ = NULL; |
+ bubble_ = nullptr; |
} |
-} // namespace autofill |
+} // namespace views |