diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-19 01:09:39 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-19 01:09:39 +0000 |
commit | 2d6063d5d0e52c425d2bd739106484c9bb16b6f6 (patch) | |
tree | 47eabfa6992a1158abcfadaf00b5520eadad5a16 | |
parent | 5a93fe871daa832a38f42bce23fb4a158023e9b9 (diff) | |
download | chromium_src-2d6063d5d0e52c425d2bd739106484c9bb16b6f6.zip chromium_src-2d6063d5d0e52c425d2bd739106484c9bb16b6f6.tar.gz chromium_src-2d6063d5d0e52c425d2bd739106484c9bb16b6f6.tar.bz2 |
Remove Label::PaintText overrides.
This is simple cleanup in preparation for a Label rewrite.
These overrides were supplying an extra gfx::Canvas flag.
Instead, add an explicit label flag for NO_SUBPIXEL_RENDERING.
Update some callers and the unit test.
TODO(followup): Update more Label::SetBackgroundColor callers.
BUG=240037
TEST=No exit warning or sticky keys label rendering changes.
R=sky@chromium.org
Review URL: https://codereview.chromium.org/341713002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278213 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/accelerators/exit_warning_handler.cc | 24 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_overlay.cc | 20 | ||||
-rw-r--r-- | chrome/browser/ui/views/frame/opaque_browser_frame_view.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc | 2 | ||||
-rw-r--r-- | ui/views/controls/label.cc | 3 | ||||
-rw-r--r-- | ui/views/controls/label.h | 7 | ||||
-rw-r--r-- | ui/views/controls/label_unittest.cc | 17 | ||||
-rw-r--r-- | ui/views/controls/textfield/textfield.cc | 6 |
8 files changed, 27 insertions, 56 deletions
diff --git a/ash/accelerators/exit_warning_handler.cc b/ash/accelerators/exit_warning_handler.cc index d2dc0f5..d01466b 100644 --- a/ash/accelerators/exit_warning_handler.cc +++ b/ash/accelerators/exit_warning_handler.cc @@ -38,27 +38,6 @@ const int kWindowCornerRadius = 2; const int kHorizontalMarginAroundText = 100; const int kVerticalMarginAroundText = 100; -class ExitWarningLabel : public views::Label { - public: - ExitWarningLabel() {} - - virtual ~ExitWarningLabel() {} - - private: - virtual void PaintText(gfx::Canvas* canvas, - const base::string16& text, - const gfx::Rect& text_bounds, - int flags) OVERRIDE { - // Turn off subpixel rendering. - views::Label::PaintText(canvas, - text, - text_bounds, - flags | gfx::Canvas::NO_SUBPIXEL_RENDERING); - } - - DISALLOW_COPY_AND_ASSIGN(ExitWarningLabel); -}; - class ExitWarningWidgetDelegateView : public views::WidgetDelegateView { public: ExitWarningWidgetDelegateView() : text_width_(0), width_(0), height_(0) { @@ -77,13 +56,14 @@ class ExitWarningWidgetDelegateView : public views::WidgetDelegateView { text_width_ = gfx::GetStringWidth(text_, font_list); width_ = text_width_ + kHorizontalMarginAroundText; height_ = font_list.GetHeight() + kVerticalMarginAroundText; - views::Label* label = new ExitWarningLabel; + views::Label* label = new views::Label(); label->SetText(text_); label->SetHorizontalAlignment(gfx::ALIGN_CENTER); label->SetFontList(font_list); label->SetEnabledColor(kTextColor); label->SetDisabledColor(kTextColor); label->SetAutoColorReadabilityEnabled(false); + label->set_subpixel_rendering_enabled(false); AddChildView(label); SetLayoutManager(new views::FillLayout); } diff --git a/ash/sticky_keys/sticky_keys_overlay.cc b/ash/sticky_keys/sticky_keys_overlay.cc index 7720ad6..c68f227 100644 --- a/ash/sticky_keys/sticky_keys_overlay.cc +++ b/ash/sticky_keys/sticky_keys_overlay.cc @@ -54,12 +54,6 @@ class StickyKeyOverlayLabel : public views::Label { void SetKeyState(StickyKeyState state); private: - // views::Label overrides: - virtual void PaintText(gfx::Canvas* canvas, - const base::string16& text, - const gfx::Rect& text_bounds, - int flags) OVERRIDE; - StickyKeyState state_; DISALLOW_COPY_AND_ASSIGN(StickyKeyOverlayLabel); @@ -76,6 +70,7 @@ StickyKeyOverlayLabel::StickyKeyOverlayLabel(const std::string& key_name) SetFocusable(false); SetEnabledColor(SkColorSetARGB(0x80, 0xFF, 0xFF, 0xFF)); SetDisabledColor(SkColorSetARGB(0x80, 0xFF, 0xFF, 0xFF)); + set_subpixel_rendering_enabled(false); } StickyKeyOverlayLabel::~StickyKeyOverlayLabel() { @@ -104,19 +99,8 @@ void StickyKeyOverlayLabel::SetKeyState(StickyKeyState state) { SetFontList(font_list().DeriveWithStyle(style)); } -void StickyKeyOverlayLabel::PaintText(gfx::Canvas* canvas, - const base::string16& text, - const gfx::Rect& text_bounds, - int flags) { - views::Label::PaintText(canvas, - text, - text_bounds, - flags | gfx::Canvas::NO_SUBPIXEL_RENDERING); -} - - /////////////////////////////////////////////////////////////////////////////// -// StickyKeyOverlayLabel +// StickyKeysOverlayView class StickyKeysOverlayView : public views::WidgetDelegateView { public: StickyKeysOverlayView(); diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc index e5ddc9a..28b1dbc 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc @@ -141,9 +141,7 @@ OpaqueBrowserFrameView::OpaqueBrowserFrameView(BrowserFrame* frame, gfx::FontList(BrowserFrame::GetTitleFontList())); window_title_->SetVisible(browser_view->ShouldShowWindowTitle()); window_title_->SetEnabledColor(SK_ColorWHITE); - // TODO(msw): Use a transparent background color as a workaround to use the - // gfx::Canvas::NO_SUBPIXEL_RENDERING flag and avoid some visual artifacts. - window_title_->SetBackgroundColor(0x00000000); + window_title_->set_subpixel_rendering_enabled(false); window_title_->SetHorizontalAlignment(gfx::ALIGN_LEFT); window_title_->set_id(VIEW_ID_WINDOW_TITLE); AddChildView(window_title_); diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc index 48dce3e..9e94e7f 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc @@ -207,7 +207,7 @@ class OpaqueBrowserFrameViewLayoutTest : public views::ViewsTestBase { window_title_ = new views::Label(delegate_->GetWindowTitle()); window_title_->SetVisible(delegate_->ShouldShowWindowTitle()); window_title_->SetEnabledColor(SK_ColorWHITE); - window_title_->SetBackgroundColor(0x00000000); + window_title_->set_subpixel_rendering_enabled(false); window_title_->SetHorizontalAlignment(gfx::ALIGN_LEFT); window_title_->set_id(VIEW_ID_WINDOW_TITLE); root_view_->AddChildView(window_title_); diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc index 6aed59f..00bc751 100644 --- a/ui/views/controls/label.cc +++ b/ui/views/controls/label.cc @@ -383,6 +383,7 @@ void Label::OnNativeThemeChanged(const ui::NativeTheme* theme) { void Label::Init(const base::string16& text, const gfx::FontList& font_list) { font_list_ = font_list; enabled_color_set_ = disabled_color_set_ = background_color_set_ = false; + subpixel_rendering_enabled_ = true; auto_color_readability_ = true; UpdateColorsFromTheme(ui::NativeTheme::instance()); horizontal_alignment_ = gfx::ALIGN_CENTER; @@ -439,7 +440,7 @@ int Label::ComputeDrawStringFlags() const { int flags = 0; // We can't use subpixel rendering if the background is non-opaque. - if (SkColorGetA(background_color_) != 0xFF) + if (SkColorGetA(background_color_) != 0xFF || !subpixel_rendering_enabled_) flags |= gfx::Canvas::NO_SUBPIXEL_RENDERING; if (directionality_mode_ == gfx::DIRECTIONALITY_FORCE_LTR) { diff --git a/ui/views/controls/label.h b/ui/views/controls/label.h index cbb12cb..f41ce85 100644 --- a/ui/views/controls/label.h +++ b/ui/views/controls/label.h @@ -62,6 +62,12 @@ class VIEWS_EXPORT Label : public View { // Set drop shadows underneath the text. void set_shadows(const gfx::ShadowValues& shadows) { shadows_ = shadows; } + // Sets whether subpixel rendering is used; the default is true, but this + // feature also requires an opaque background color. + void set_subpixel_rendering_enabled(bool subpixel_rendering_enabled) { + subpixel_rendering_enabled_ = subpixel_rendering_enabled; + } + // Set the color of a halo on the painted text (use transparent for none). void set_halo_color(SkColor halo_color) { halo_color_ = halo_color; } @@ -218,6 +224,7 @@ class VIEWS_EXPORT Label : public View { bool disabled_color_set_; bool background_color_set_; + bool subpixel_rendering_enabled_; bool auto_color_readability_; mutable gfx::Size text_size_; mutable bool text_size_valid_; diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc index 1ff16b4..8b16d0f 100644 --- a/ui/views/controls/label_unittest.cc +++ b/ui/views/controls/label_unittest.cc @@ -862,18 +862,19 @@ TEST(LabelTest, DrawMultiLineStringInRTL) { base::i18n::SetICUDefaultLocale(locale); } -// Check that we disable subpixel rendering when a transparent background is -// being used. +// Ensure the subpixel rendering flag and background color alpha are respected. TEST(LabelTest, DisableSubpixelRendering) { Label label; label.SetBackgroundColor(SK_ColorWHITE); - EXPECT_EQ( - 0, label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); - + const int flag = gfx::Canvas::NO_SUBPIXEL_RENDERING; + EXPECT_EQ(0, label.ComputeDrawStringFlags() & flag); + label.set_subpixel_rendering_enabled(false); + EXPECT_EQ(flag, label.ComputeDrawStringFlags() & flag); + label.set_subpixel_rendering_enabled(true); + EXPECT_EQ(0, label.ComputeDrawStringFlags() & flag); + // Text cannot be drawn with subpixel rendering on transparent backgrounds. label.SetBackgroundColor(SkColorSetARGB(64, 255, 255, 255)); - EXPECT_EQ( - gfx::Canvas::NO_SUBPIXEL_RENDERING, - label.ComputeDrawStringFlags() & gfx::Canvas::NO_SUBPIXEL_RENDERING); + EXPECT_EQ(flag, label.ComputeDrawStringFlags() & flag); } // Check that labels support GetTooltipHandlerForPoint. diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc index 2dd6fb4..a175990 100644 --- a/ui/views/controls/textfield/textfield.cc +++ b/ui/views/controls/textfield/textfield.cc @@ -992,8 +992,8 @@ void Textfield::WriteDragDataForView(View* sender, const base::string16& selected_text(GetSelectedText()); data->SetString(selected_text); Label label(selected_text, GetFontList()); - const SkColor background = GetBackgroundColor(); - label.SetBackgroundColor(SkColorSetA(background, SK_AlphaTRANSPARENT)); + label.SetBackgroundColor(GetBackgroundColor()); + label.set_subpixel_rendering_enabled(false); gfx::Size size(label.GetPreferredSize()); gfx::NativeView native_view = GetWidget()->GetNativeView(); gfx::Display display = gfx::Screen::GetScreenFor(native_view)-> @@ -1005,7 +1005,7 @@ void Textfield::WriteDragDataForView(View* sender, label.SetEnabledColor(GetTextColor()); #if defined(OS_LINUX) && !defined(OS_CHROMEOS) // Desktop Linux Aura does not yet support transparency in drag images. - canvas->DrawColor(background); + canvas->DrawColor(GetBackgroundColor()); #endif label.Paint(canvas.get(), views::CullSet()); const gfx::Vector2d kOffset(-15, 0); |