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

Unified Diff: ui/views/corewm/tooltip_aura.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/corewm/tooltip_aura.h ('k') | ui/views/corewm/tooltip_aura_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/corewm/tooltip_aura.cc
diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc
deleted file mode 100644
index 02117a8593d11df38dc6cf2a98e4d8a0ff0d50e8..0000000000000000000000000000000000000000
--- a/ui/views/corewm/tooltip_aura.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/corewm/tooltip_aura.h"
-
-#include "base/strings/string_split.h"
-#include "ui/aura/window.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/gfx/screen.h"
-#include "ui/gfx/text_elider.h"
-#include "ui/gfx/text_utils.h"
-#include "ui/native_theme/native_theme.h"
-#include "ui/views/background.h"
-#include "ui/views/border.h"
-#include "ui/views/widget/widget.h"
-
-namespace {
-
-// Max visual tooltip width. If a tooltip is greater than this width, it will
-// be wrapped.
-const int kTooltipMaxWidthPixels = 400;
-
-const size_t kMaxLines = 10;
-
-// FIXME: get cursor offset from actual cursor size.
-const int kCursorOffsetX = 10;
-const int kCursorOffsetY = 15;
-
-// Creates a widget of type TYPE_TOOLTIP
-views::Widget* CreateTooltipWidget(aura::Window* tooltip_window) {
- views::Widget* widget = new views::Widget;
- views::Widget::InitParams params;
- // For aura, since we set the type to TYPE_TOOLTIP, the widget will get
- // auto-parented to the right container.
- params.type = views::Widget::InitParams::TYPE_TOOLTIP;
- params.context = tooltip_window;
- DCHECK(params.context);
- params.keep_on_top = true;
- params.accept_events = false;
- widget->Init(params);
- return widget;
-}
-
-} // namespace
-
-namespace views {
-namespace corewm {
-
-TooltipAura::TooltipAura(gfx::ScreenType screen_type)
- : screen_type_(screen_type),
- widget_(NULL),
- tooltip_window_(NULL) {
- label_.set_owned_by_client();
- label_.SetMultiLine(true);
-
- const int kHorizontalPadding = 3;
- const int kVerticalPadding = 2;
- label_.SetBorder(Border::CreateEmptyBorder(
- kVerticalPadding, kHorizontalPadding,
- kVerticalPadding, kHorizontalPadding));
-}
-
-TooltipAura::~TooltipAura() {
- DestroyWidget();
-}
-
-// static
-void TooltipAura::TrimTooltipToFit(const gfx::FontList& font_list,
- int max_width,
- base::string16* text,
- int* width,
- int* line_count) {
- *width = 0;
- *line_count = 0;
-
- // Determine the available width for the tooltip.
- int available_width = std::min(kTooltipMaxWidthPixels, max_width);
-
- std::vector<base::string16> lines;
- base::SplitString(*text, '\n', &lines);
- std::vector<base::string16> result_lines;
-
- // Format each line to fit.
- for (std::vector<base::string16>::iterator l = lines.begin();
- l != lines.end(); ++l) {
- // We break the line at word boundaries, then stuff as many words as we can
- // in the available width to the current line, and move the remaining words
- // to a new line.
- std::vector<base::string16> words;
- base::SplitStringDontTrim(*l, ' ', &words);
- int current_width = 0;
- base::string16 line;
- for (std::vector<base::string16>::iterator w = words.begin();
- w != words.end(); ++w) {
- base::string16 word = *w;
- if (w + 1 != words.end())
- word.push_back(' ');
- int word_width = gfx::GetStringWidth(word, font_list);
- if (current_width + word_width > available_width) {
- // Current width will exceed the available width. Must start a new line.
- if (!line.empty())
- result_lines.push_back(line);
- current_width = 0;
- line.clear();
- }
- current_width += word_width;
- line.append(word);
- }
- result_lines.push_back(line);
- }
-
- // Clamp number of lines to |kMaxLines|.
- if (result_lines.size() > kMaxLines) {
- result_lines.resize(kMaxLines);
- // Add ellipses character to last line.
- result_lines[kMaxLines - 1] = gfx::TruncateString(
- result_lines.back(), result_lines.back().length() - 1, gfx::WORD_BREAK);
- }
- *line_count = result_lines.size();
-
- // Flatten the result.
- base::string16 result;
- for (std::vector<base::string16>::iterator l = result_lines.begin();
- l != result_lines.end(); ++l) {
- if (!result.empty())
- result.push_back('\n');
- int line_width = gfx::GetStringWidth(*l, font_list);
- // Since we only break at word boundaries, it could happen that due to some
- // very long word, line_width is greater than the available_width. In such
- // case, we simply truncate at available_width and add ellipses at the end.
- if (line_width > available_width) {
- *width = available_width;
- result.append(gfx::ElideText(*l, font_list, available_width,
- gfx::ELIDE_TAIL));
- } else {
- *width = std::max(*width, line_width);
- result.append(*l);
- }
- }
- *text = result;
-}
-
-int TooltipAura::GetMaxWidth(const gfx::Point& location) const {
- // TODO(varunjain): implementation duplicated in tooltip_manager_aura. Figure
- // out a way to merge.
- gfx::Screen* screen = gfx::Screen::GetScreenByType(screen_type_);
- gfx::Rect display_bounds(screen->GetDisplayNearestPoint(location).bounds());
- return (display_bounds.width() + 1) / 2;
-}
-
-void TooltipAura::SetTooltipBounds(const gfx::Point& mouse_pos,
- const gfx::Size& tooltip_size) {
- gfx::Rect tooltip_rect(mouse_pos, tooltip_size);
- tooltip_rect.Offset(kCursorOffsetX, kCursorOffsetY);
- gfx::Screen* screen = gfx::Screen::GetScreenByType(screen_type_);
- gfx::Rect display_bounds(screen->GetDisplayNearestPoint(mouse_pos).bounds());
-
- // If tooltip is out of bounds on the x axis, we simply shift it
- // horizontally by the offset.
- if (tooltip_rect.right() > display_bounds.right()) {
- int h_offset = tooltip_rect.right() - display_bounds.right();
- tooltip_rect.Offset(-h_offset, 0);
- }
-
- // If tooltip is out of bounds on the y axis, we flip it to appear above the
- // mouse cursor instead of below.
- if (tooltip_rect.bottom() > display_bounds.bottom())
- tooltip_rect.set_y(mouse_pos.y() - tooltip_size.height());
-
- tooltip_rect.AdjustToFit(display_bounds);
- widget_->SetBounds(tooltip_rect);
-}
-
-void TooltipAura::DestroyWidget() {
- if (widget_) {
- widget_->RemoveObserver(this);
- widget_->Close();
- widget_ = NULL;
- }
-}
-
-void TooltipAura::SetText(aura::Window* window,
- const base::string16& tooltip_text,
- const gfx::Point& location) {
- tooltip_window_ = window;
- int max_width = 0;
- int line_count = 0;
- base::string16 trimmed_text(tooltip_text);
- TrimTooltipToFit(label_.font_list(), GetMaxWidth(location), &trimmed_text,
- &max_width, &line_count);
- label_.SetText(trimmed_text);
-
- if (!widget_) {
- widget_ = CreateTooltipWidget(tooltip_window_);
- widget_->SetContentsView(&label_);
- widget_->AddObserver(this);
- }
-
- label_.SizeToFit(max_width + label_.GetInsets().width());
- SetTooltipBounds(location, label_.size());
-
- ui::NativeTheme* native_theme = widget_->GetNativeTheme();
- label_.set_background(
- views::Background::CreateSolidBackground(
- native_theme->GetSystemColor(
- ui::NativeTheme::kColorId_TooltipBackground)));
-
- label_.SetAutoColorReadabilityEnabled(false);
- label_.SetEnabledColor(native_theme->GetSystemColor(
- ui::NativeTheme::kColorId_TooltipText));
-}
-
-void TooltipAura::Show() {
- if (widget_) {
- widget_->Show();
- widget_->StackAtTop();
- }
-}
-
-void TooltipAura::Hide() {
- tooltip_window_ = NULL;
- if (widget_)
- widget_->Hide();
-}
-
-bool TooltipAura::IsVisible() {
- return widget_ && widget_->IsVisible();
-}
-
-void TooltipAura::OnWidgetDestroying(views::Widget* widget) {
- DCHECK_EQ(widget_, widget);
- widget_ = NULL;
- tooltip_window_ = NULL;
-}
-
-} // namespace corewm
-} // namespace views
« no previous file with comments | « ui/views/corewm/tooltip_aura.h ('k') | ui/views/corewm/tooltip_aura_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698