summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 01:09:39 +0000
committermsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 01:09:39 +0000
commit2d6063d5d0e52c425d2bd739106484c9bb16b6f6 (patch)
tree47eabfa6992a1158abcfadaf00b5520eadad5a16
parent5a93fe871daa832a38f42bce23fb4a158023e9b9 (diff)
downloadchromium_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.cc24
-rw-r--r--ash/sticky_keys/sticky_keys_overlay.cc20
-rw-r--r--chrome/browser/ui/views/frame/opaque_browser_frame_view.cc4
-rw-r--r--chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc2
-rw-r--r--ui/views/controls/label.cc3
-rw-r--r--ui/views/controls/label.h7
-rw-r--r--ui/views/controls/label_unittest.cc17
-rw-r--r--ui/views/controls/textfield/textfield.cc6
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);