Index: ui/views/corewm/tooltip_aura.cc |
diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc |
index e51a87265a5652fd7e9d62f24181d40264d0e436..f33eaca7d4084325afd9d1a70ebb42f21d475687 100644 |
--- a/ui/views/corewm/tooltip_aura.cc |
+++ b/ui/views/corewm/tooltip_aura.cc |
@@ -9,6 +9,7 @@ |
#include "base/strings/string_util.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_tree_host.h" |
+#include "ui/base/material_design/material_design_controller.h" |
#include "ui/display/display.h" |
#include "ui/display/screen.h" |
#include "ui/gfx/canvas.h" |
@@ -18,6 +19,7 @@ |
#include "ui/native_theme/native_theme.h" |
#include "ui/views/background.h" |
#include "ui/views/border.h" |
+#include "ui/views/painter.h" |
#include "ui/views/view.h" |
#include "ui/views/widget/widget.h" |
@@ -27,6 +29,9 @@ namespace { |
// be wrapped. |
const int kTooltipMaxWidthPixels = 400; |
+// Corner radius of tooltip background used with Material Design. |
+const float kTooltipCornerRadius = 2.f; |
+ |
// FIXME: get cursor offset from actual cursor size. |
const int kCursorOffsetX = 10; |
const int kCursorOffsetY = 15; |
@@ -42,6 +47,10 @@ views::Widget* CreateTooltipWidget(aura::Window* tooltip_window) { |
DCHECK(params.context); |
params.keep_on_top = true; |
params.accept_events = false; |
+ if (ui::MaterialDesignController::IsModeMaterial()) { |
+ params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
+ params.shadow_type = views::Widget::InitParams::SHADOW_TYPE_NONE; |
+ } |
widget->Init(params); |
return widget; |
} |
@@ -57,11 +66,13 @@ class TooltipAura::TooltipView : public views::View { |
TooltipView() |
: render_text_(gfx::RenderText::CreateInstance()), |
max_width_(0) { |
- const int kHorizontalPadding = 3; |
- const int kVerticalPadding = 2; |
- SetBorder(Border::CreateEmptyBorder( |
- kVerticalPadding, kHorizontalPadding, |
- kVerticalPadding, kHorizontalPadding)); |
+ const bool material = ui::MaterialDesignController::IsModeMaterial(); |
+ const int kHorizontalPadding = material ? 8 : 3; |
+ const int kVerticalPaddingTop = material ? 4 : 2; |
+ const int kVerticalPaddingBottom = material ? 5 : kVerticalPaddingTop; |
+ SetBorder(Border::CreateEmptyBorder(kVerticalPaddingTop, kHorizontalPadding, |
+ kVerticalPaddingBottom, |
+ kHorizontalPadding)); |
set_owned_by_client(); |
render_text_->SetWordWrapBehavior(gfx::WRAP_LONG_WORDS); |
@@ -107,6 +118,20 @@ class TooltipAura::TooltipView : public views::View { |
render_text_->SetColor(color); |
} |
+ void SetBackgroundColor(SkColor background_color) { |
+ views::Background* background = |
+ ui::MaterialDesignController::IsModeMaterial() |
+ ? views::Background::CreateBackgroundPainter( |
+ true, views::Painter::CreateSolidRoundRectPainter( |
+ background_color, kTooltipCornerRadius)) |
+ : views::Background::CreateSolidBackground(background_color); |
+ set_background(background); |
+ // Force the text color to be readable when |background_color| is not |
+ // opaque. |
+ render_text_->set_subpixel_rendering_suppressed( |
+ SkColorGetA(background_color) != 0xFF); |
+ } |
+ |
void SetMaxWidth(int width) { |
max_width_ = width; |
ResetDisplayRect(); |
@@ -188,10 +213,8 @@ void TooltipAura::SetText(aura::Window* window, |
SetTooltipBounds(location, tooltip_view_->GetPreferredSize()); |
ui::NativeTheme* native_theme = widget_->GetNativeTheme(); |
- tooltip_view_->set_background( |
- views::Background::CreateSolidBackground( |
- native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_TooltipBackground))); |
+ tooltip_view_->SetBackgroundColor(native_theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_TooltipBackground)); |
tooltip_view_->SetForegroundColor(native_theme->GetSystemColor( |
ui::NativeTheme::kColorId_TooltipText)); |
} |