Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: ui/views/corewm/tooltip_aura.cc

Issue 916423002: Tooltip Cleanup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: win build fix Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/corewm/tooltip_aura.h ('k') | ui/views/corewm/tooltip_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/corewm/tooltip_aura.h" 5 #include "ui/views/corewm/tooltip_aura.h"
6 6
7 #include "base/strings/string_split.h" 7 #include "base/strings/string_split.h"
8 #include "ui/aura/window.h" 8 #include "ui/aura/window.h"
9 #include "ui/aura/window_tree_host.h" 9 #include "ui/aura/window_tree_host.h"
10 #include "ui/gfx/screen.h" 10 #include "ui/gfx/screen.h"
(...skipping 29 matching lines...) Expand all
40 params.accept_events = false; 40 params.accept_events = false;
41 widget->Init(params); 41 widget->Init(params);
42 return widget; 42 return widget;
43 } 43 }
44 44
45 } // namespace 45 } // namespace
46 46
47 namespace views { 47 namespace views {
48 namespace corewm { 48 namespace corewm {
49 49
50 TooltipAura::TooltipAura(gfx::ScreenType screen_type) 50 TooltipAura::TooltipAura()
51 : screen_type_(screen_type), 51 : widget_(NULL),
52 widget_(NULL),
53 tooltip_window_(NULL) { 52 tooltip_window_(NULL) {
54 label_.set_owned_by_client(); 53 label_.set_owned_by_client();
55 label_.SetMultiLine(true); 54 label_.SetMultiLine(true);
56 label_.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); 55 label_.SetHorizontalAlignment(gfx::ALIGN_TO_HEAD);
57 56
58 const int kHorizontalPadding = 3; 57 const int kHorizontalPadding = 3;
59 const int kVerticalPadding = 2; 58 const int kVerticalPadding = 2;
60 label_.SetBorder(Border::CreateEmptyBorder( 59 label_.SetBorder(Border::CreateEmptyBorder(
61 kVerticalPadding, kHorizontalPadding, 60 kVerticalPadding, kHorizontalPadding,
62 kVerticalPadding, kHorizontalPadding)); 61 kVerticalPadding, kHorizontalPadding));
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 result.append(gfx::ElideText(*l, font_list, available_width, 134 result.append(gfx::ElideText(*l, font_list, available_width,
136 gfx::ELIDE_TAIL)); 135 gfx::ELIDE_TAIL));
137 } else { 136 } else {
138 *width = std::max(*width, line_width); 137 *width = std::max(*width, line_width);
139 result.append(*l); 138 result.append(*l);
140 } 139 }
141 } 140 }
142 *text = result; 141 *text = result;
143 } 142 }
144 143
145 int TooltipAura::GetMaxWidth(const gfx::Point& location) const {
146 // TODO(varunjain): implementation duplicated in tooltip_manager_aura. Figure
147 // out a way to merge.
148 gfx::Screen* screen = gfx::Screen::GetScreenByType(screen_type_);
149 gfx::Rect display_bounds(screen->GetDisplayNearestPoint(location).bounds());
150 return (display_bounds.width() + 1) / 2;
151 }
152
153 void TooltipAura::SetTooltipBounds(const gfx::Point& mouse_pos, 144 void TooltipAura::SetTooltipBounds(const gfx::Point& mouse_pos,
154 const gfx::Size& tooltip_size) { 145 const gfx::Size& tooltip_size) {
155 gfx::Rect tooltip_rect(mouse_pos, tooltip_size); 146 gfx::Rect tooltip_rect(mouse_pos, tooltip_size);
156 tooltip_rect.Offset(kCursorOffsetX, kCursorOffsetY); 147 tooltip_rect.Offset(kCursorOffsetX, kCursorOffsetY);
157 gfx::Screen* screen = gfx::Screen::GetScreenByType(screen_type_); 148 gfx::Screen* screen = gfx::Screen::GetScreenFor(tooltip_window_);
158 gfx::Rect display_bounds(screen->GetDisplayNearestPoint(mouse_pos).bounds()); 149 gfx::Rect display_bounds(screen->GetDisplayNearestPoint(mouse_pos).bounds());
159 150
160 // If tooltip is out of bounds on the x axis, we simply shift it 151 // If tooltip is out of bounds on the x axis, we simply shift it
161 // horizontally by the offset. 152 // horizontally by the offset.
162 if (tooltip_rect.right() > display_bounds.right()) { 153 if (tooltip_rect.right() > display_bounds.right()) {
163 int h_offset = tooltip_rect.right() - display_bounds.right(); 154 int h_offset = tooltip_rect.right() - display_bounds.right();
164 tooltip_rect.Offset(-h_offset, 0); 155 tooltip_rect.Offset(-h_offset, 0);
165 } 156 }
166 157
167 // If tooltip is out of bounds on the y axis, we flip it to appear above the 158 // If tooltip is out of bounds on the y axis, we flip it to appear above the
168 // mouse cursor instead of below. 159 // mouse cursor instead of below.
169 if (tooltip_rect.bottom() > display_bounds.bottom()) 160 if (tooltip_rect.bottom() > display_bounds.bottom())
170 tooltip_rect.set_y(mouse_pos.y() - tooltip_size.height()); 161 tooltip_rect.set_y(mouse_pos.y() - tooltip_size.height());
171 162
172 tooltip_rect.AdjustToFit(display_bounds); 163 tooltip_rect.AdjustToFit(display_bounds);
173 widget_->SetBounds(tooltip_rect); 164 widget_->SetBounds(tooltip_rect);
174 } 165 }
175 166
176 void TooltipAura::DestroyWidget() { 167 void TooltipAura::DestroyWidget() {
177 if (widget_) { 168 if (widget_) {
178 widget_->RemoveObserver(this); 169 widget_->RemoveObserver(this);
179 widget_->Close(); 170 widget_->Close();
180 widget_ = NULL; 171 widget_ = NULL;
181 } 172 }
182 } 173 }
183 174
175 int TooltipAura::GetMaxWidth(const gfx::Point& location,
176 aura::Window* context) const {
177 gfx::Screen* screen = gfx::Screen::GetScreenFor(context);
178 gfx::Rect display_bounds(screen->GetDisplayNearestPoint(location).bounds());
179 return std::min(kTooltipMaxWidthPixels, (display_bounds.width() + 1) / 2);
180 }
181
184 void TooltipAura::SetText(aura::Window* window, 182 void TooltipAura::SetText(aura::Window* window,
185 const base::string16& tooltip_text, 183 const base::string16& tooltip_text,
186 const gfx::Point& location) { 184 const gfx::Point& location) {
187 tooltip_window_ = window; 185 tooltip_window_ = window;
188 int max_width = 0; 186 int max_width = 0;
189 int line_count = 0; 187 int line_count = 0;
190 base::string16 trimmed_text(tooltip_text); 188 base::string16 trimmed_text(tooltip_text);
191 TrimTooltipToFit(label_.font_list(), GetMaxWidth(location), &trimmed_text, 189 TrimTooltipToFit(label_.font_list(), GetMaxWidth(location, window),
192 &max_width, &line_count); 190 &trimmed_text, &max_width, &line_count);
193 label_.SetText(trimmed_text); 191 label_.SetText(trimmed_text);
194 192
195 if (!widget_) { 193 if (!widget_) {
196 widget_ = CreateTooltipWidget(tooltip_window_); 194 widget_ = CreateTooltipWidget(tooltip_window_);
197 widget_->SetContentsView(&label_); 195 widget_->SetContentsView(&label_);
198 widget_->AddObserver(this); 196 widget_->AddObserver(this);
199 } 197 }
200 198
201 label_.SizeToFit(max_width + label_.GetInsets().width()); 199 label_.SizeToFit(max_width + label_.GetInsets().width());
202 SetTooltipBounds(location, label_.size()); 200 SetTooltipBounds(location, label_.size());
(...skipping 27 matching lines...) Expand all
230 } 228 }
231 229
232 void TooltipAura::OnWidgetDestroying(views::Widget* widget) { 230 void TooltipAura::OnWidgetDestroying(views::Widget* widget) {
233 DCHECK_EQ(widget_, widget); 231 DCHECK_EQ(widget_, widget);
234 widget_ = NULL; 232 widget_ = NULL;
235 tooltip_window_ = NULL; 233 tooltip_window_ = NULL;
236 } 234 }
237 235
238 } // namespace corewm 236 } // namespace corewm
239 } // namespace views 237 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/corewm/tooltip_aura.h ('k') | ui/views/corewm/tooltip_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698