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 |