Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/widget/tooltip_manager_aura.h" | 5 #include "ui/views/widget/tooltip_manager_aura.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "ui/aura/client/screen_position_client.h" | 8 #include "ui/aura/client/screen_position_client.h" |
| 9 #include "ui/aura/window_event_dispatcher.h" | 9 #include "ui/aura/window_event_dispatcher.h" |
| 10 #include "ui/aura/window_tree_host.h" | 10 #include "ui/aura/window_tree_host.h" |
| 11 #include "ui/base/resource/resource_bundle.h" | 11 #include "ui/base/resource/resource_bundle.h" |
| 12 #include "ui/gfx/rect.h" | 12 #include "ui/gfx/rect.h" |
| 13 #include "ui/gfx/screen.h" | 13 #include "ui/gfx/screen.h" |
| 14 #include "ui/views/view.h" | |
| 14 #include "ui/views/widget/widget.h" | 15 #include "ui/views/widget/widget.h" |
| 15 #include "ui/wm/public/tooltip_client.h" | 16 #include "ui/wm/public/tooltip_client.h" |
| 16 | 17 |
| 17 namespace views { | 18 namespace views { |
| 18 | 19 |
| 19 // static | 20 // static |
| 20 int TooltipManager::GetTooltipHeight() { | 21 int TooltipManager::GetTooltipHeight() { |
| 21 // Not used for linux and chromeos. | 22 // Not used for linux and chromeos. |
| 22 NOTIMPLEMENTED(); | 23 NOTIMPLEMENTED(); |
| 23 return 0; | 24 return 0; |
| 24 } | 25 } |
| 25 | 26 |
| 26 //////////////////////////////////////////////////////////////////////////////// | 27 //////////////////////////////////////////////////////////////////////////////// |
| 27 // TooltipManagerAura public: | 28 // TooltipManagerAura public: |
| 28 | 29 |
| 29 TooltipManagerAura::TooltipManagerAura(Widget* widget) : widget_(widget) { | 30 TooltipManagerAura::TooltipManagerAura(Widget* widget) |
| 31 : widget_(widget) { | |
| 30 aura::client::SetTooltipText(GetWindow(), &tooltip_text_); | 32 aura::client::SetTooltipText(GetWindow(), &tooltip_text_); |
| 31 } | 33 } |
| 32 | 34 |
| 33 TooltipManagerAura::~TooltipManagerAura() { | 35 TooltipManagerAura::~TooltipManagerAura() { |
| 34 aura::client::SetTooltipText(GetWindow(), NULL); | 36 aura::client::SetTooltipText(GetWindow(), NULL); |
| 35 } | 37 } |
| 36 | 38 |
| 37 // static | 39 // static |
| 38 const gfx::FontList& TooltipManagerAura::GetDefaultFontList() { | 40 const gfx::FontList& TooltipManagerAura::GetDefaultFontList() { |
| 39 return ui::ResourceBundle::GetSharedInstance().GetFontList( | 41 return ui::ResourceBundle::GetSharedInstance().GetFontList( |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 View* TooltipManagerAura::GetViewUnderPoint(const gfx::Point& point) { | 117 View* TooltipManagerAura::GetViewUnderPoint(const gfx::Point& point) { |
| 116 View* root_view = widget_->GetRootView(); | 118 View* root_view = widget_->GetRootView(); |
| 117 if (root_view) | 119 if (root_view) |
| 118 return root_view->GetTooltipHandlerForPoint(point); | 120 return root_view->GetTooltipHandlerForPoint(point); |
| 119 return NULL; | 121 return NULL; |
| 120 } | 122 } |
| 121 | 123 |
| 122 void TooltipManagerAura::UpdateTooltipForTarget(View* target, | 124 void TooltipManagerAura::UpdateTooltipForTarget(View* target, |
| 123 const gfx::Point& point, | 125 const gfx::Point& point, |
| 124 aura::Window* root_window) { | 126 aura::Window* root_window) { |
| 127 bool related = false; | |
| 125 if (target) { | 128 if (target) { |
| 126 gfx::Point view_point = point; | 129 gfx::Point view_point = point; |
| 127 View::ConvertPointFromWidget(target, &view_point); | 130 View::ConvertPointFromWidget(target, &view_point); |
| 128 base::string16 new_tooltip_text; | 131 base::string16 new_tooltip_text; |
| 129 if (!target->GetTooltipText(view_point, &new_tooltip_text)) | 132 if (!target->GetTooltipText(view_point, &new_tooltip_text)) |
| 130 tooltip_text_.clear(); | 133 tooltip_text_.clear(); |
| 131 else | 134 else |
| 132 tooltip_text_ = new_tooltip_text; | 135 tooltip_text_ = new_tooltip_text; |
| 136 | |
| 137 gfx::Point target_rect_origin_in_screen; | |
|
sky
2014/04/10 16:12:08
This is a pain for each site to have to deal with.
| |
| 138 views::View::ConvertPointToScreen(target, &target_rect_origin_in_screen); | |
| 139 | |
| 140 gfx::Rect target_rect_in_screen( | |
| 141 target_rect_origin_in_screen, target->bounds().size()); | |
| 142 | |
| 143 const bool bounds_different = | |
| 144 target_rect_in_screen != origin_bounds_; | |
| 145 const bool target_contains_origin = | |
| 146 target_rect_in_screen.Contains(origin_bounds_); | |
| 147 const bool origin_contains_target = | |
| 148 origin_bounds_.Contains(target_rect_in_screen); | |
| 149 | |
| 150 related = | |
| 151 !bounds_different || target_contains_origin || origin_contains_target; | |
| 152 | |
| 153 origin_bounds_ = target_rect_in_screen; | |
| 133 } else { | 154 } else { |
| 134 tooltip_text_.clear(); | 155 tooltip_text_.clear(); |
| 156 origin_bounds_ = gfx::Rect(); | |
| 135 } | 157 } |
| 136 aura::client::GetTooltipClient(root_window)->UpdateTooltip(GetWindow()); | 158 |
| 159 aura::client::GetTooltipClient(root_window) | |
| 160 ->UpdateTooltip(GetWindow(), !related); | |
| 137 } | 161 } |
| 138 | 162 |
| 139 aura::Window* TooltipManagerAura::GetWindow() { | 163 aura::Window* TooltipManagerAura::GetWindow() { |
| 140 return widget_->GetNativeView(); | 164 return widget_->GetNativeView(); |
| 141 } | 165 } |
| 142 | 166 |
| 143 } // namespace views. | 167 } // namespace views. |
| OLD | NEW |