summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc2
-rw-r--r--ui/gfx/canvas_skia.cc4
-rw-r--r--ui/gfx/harfbuzz_font_skia.cc4
-rw-r--r--ui/gfx/harfbuzz_font_skia.h2
-rw-r--r--ui/gfx/render_text.cc10
-rw-r--r--ui/gfx/render_text.h17
-rw-r--r--ui/gfx/render_text_harfbuzz.cc4
-rw-r--r--ui/views/controls/textfield/textfield.cc6
8 files changed, 28 insertions, 21 deletions
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
index 92d894a..8d309bd 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
@@ -345,7 +345,7 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, BackgroundIsOpaque) {
OmniboxViewViews* view = BrowserView::GetBrowserViewForBrowser(browser())->
toolbar()->location_bar()->omnibox_view();
ASSERT_TRUE(view);
- EXPECT_FALSE(view->GetRenderText()->background_is_transparent());
+ EXPECT_FALSE(view->GetRenderText()->subpixel_rendering_suppressed());
}
// Tests if executing a command hides touch editing handles.
diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc
index 73f5992..3de9b93 100644
--- a/ui/gfx/canvas_skia.cc
+++ b/ui/gfx/canvas_skia.cc
@@ -142,8 +142,8 @@ void UpdateRenderText(const Rect& rect,
else
render_text->SetHorizontalAlignment(ALIGN_LEFT);
- if (flags & Canvas::NO_SUBPIXEL_RENDERING)
- render_text->set_background_is_transparent(true);
+ render_text->set_subpixel_rendering_suppressed(
+ (flags & Canvas::NO_SUBPIXEL_RENDERING) != 0);
render_text->SetColor(color);
const int font_style = font_list.GetFontStyle();
diff --git a/ui/gfx/harfbuzz_font_skia.cc b/ui/gfx/harfbuzz_font_skia.cc
index 2eaa0b0..d837533 100644
--- a/ui/gfx/harfbuzz_font_skia.cc
+++ b/ui/gfx/harfbuzz_font_skia.cc
@@ -258,7 +258,7 @@ class HarfBuzzFace {
hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
SkScalar text_size,
const FontRenderParams& params,
- bool background_is_transparent) {
+ bool subpixel_rendering_suppressed) {
// TODO(ckocagil): This shouldn't grow indefinitely. Maybe use base::MRUCache?
static std::map<SkFontID, FaceCache> face_caches;
@@ -273,7 +273,7 @@ hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
hb_font_data->paint_.setTypeface(skia_face);
hb_font_data->paint_.setTextSize(text_size);
// TODO(ckocagil): Do we need to update these params later?
- internal::ApplyRenderParams(params, background_is_transparent,
+ internal::ApplyRenderParams(params, subpixel_rendering_suppressed,
&hb_font_data->paint_);
hb_font_set_funcs(harfbuzz_font, g_font_funcs.Get().get(), hb_font_data,
DeleteByType<FontData>);
diff --git a/ui/gfx/harfbuzz_font_skia.h b/ui/gfx/harfbuzz_font_skia.h
index 8e2289c..df8a331 100644
--- a/ui/gfx/harfbuzz_font_skia.h
+++ b/ui/gfx/harfbuzz_font_skia.h
@@ -16,7 +16,7 @@ namespace gfx {
hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
SkScalar text_size,
const FontRenderParams& params,
- bool background_is_transparent);
+ bool subpixel_rendering_suppressed);
} // namespace gfx
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
index 89acc94..41d1cc9 100644
--- a/ui/gfx/render_text.cc
+++ b/ui/gfx/render_text.cc
@@ -205,8 +205,8 @@ void SkiaTextRenderer::SetDrawLooper(SkDrawLooper* draw_looper) {
}
void SkiaTextRenderer::SetFontRenderParams(const FontRenderParams& params,
- bool background_is_transparent) {
- ApplyRenderParams(params, background_is_transparent, &paint_);
+ bool subpixel_rendering_suppressed) {
+ ApplyRenderParams(params, subpixel_rendering_suppressed, &paint_);
}
void SkiaTextRenderer::SetTypeface(SkTypeface* typeface) {
@@ -388,10 +388,10 @@ skia::RefPtr<SkTypeface> CreateSkiaTypeface(const std::string& family,
}
void ApplyRenderParams(const FontRenderParams& params,
- bool background_is_transparent,
+ bool subpixel_rendering_suppressed,
SkPaint* paint) {
paint->setAntiAlias(params.antialiasing);
- paint->setLCDRenderText(!background_is_transparent &&
+ paint->setLCDRenderText(!subpixel_rendering_suppressed &&
params.subpixel_rendering != FontRenderParams::SUBPIXEL_RENDERING_NONE);
paint->setSubpixelText(params.subpixel_positioning);
paint->setAutohinted(params.autohinter);
@@ -920,7 +920,7 @@ RenderText::RenderText()
text_elided_(false),
min_line_height_(0),
multiline_(false),
- background_is_transparent_(false),
+ subpixel_rendering_suppressed_(false),
clip_to_display_rect_(true),
baseline_(kInvalidBaseline),
cached_bounds_and_offset_valid_(false) {
diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h
index 2be04ac..4d629a0 100644
--- a/ui/gfx/render_text.h
+++ b/ui/gfx/render_text.h
@@ -52,7 +52,7 @@ class GFX_EXPORT SkiaTextRenderer {
void SetDrawLooper(SkDrawLooper* draw_looper);
void SetFontRenderParams(const FontRenderParams& params,
- bool background_is_transparent);
+ bool subpixel_rendering_suppressed);
void SetTypeface(SkTypeface* typeface);
void SetTextSize(SkScalar size);
void SetFontFamilyWithStyle(const std::string& family, int font_style);
@@ -181,7 +181,7 @@ skia::RefPtr<SkTypeface> CreateSkiaTypeface(const std::string& family,
// Applies the given FontRenderParams to a Skia |paint|.
void ApplyRenderParams(const FontRenderParams& params,
- bool background_is_transparent,
+ bool subpixel_rendering_suppressed,
SkPaint* paint);
} // namespace internal
@@ -273,9 +273,11 @@ class GFX_EXPORT RenderText {
const Rect& display_rect() const { return display_rect_; }
void SetDisplayRect(const Rect& r);
- bool background_is_transparent() const { return background_is_transparent_; }
- void set_background_is_transparent(bool transparent) {
- background_is_transparent_ = transparent;
+ bool subpixel_rendering_suppressed() const {
+ return subpixel_rendering_suppressed_;
+ }
+ void set_subpixel_rendering_suppressed(bool suppressed) {
+ subpixel_rendering_suppressed_ = suppressed;
}
const SelectionModel& selection_model() const { return selection_model_; }
@@ -732,8 +734,9 @@ class GFX_EXPORT RenderText {
// |display_rect_| as the width cap.
bool multiline_;
- // Is the background transparent (either partially or fully)?
- bool background_is_transparent_;
+ // Set to true to suppress subpixel rendering due to non-font reasons (eg.
+ // if the background is transparent). The default value is false.
+ bool subpixel_rendering_suppressed_;
// The local display area for rendering the text.
Rect display_rect_;
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index 21279df..0580abe 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -1018,7 +1018,7 @@ void RenderTextHarfBuzz::DrawVisualTextInternal(
renderer->SetTypeface(run.skia_face.get());
renderer->SetTextSize(SkIntToScalar(run.font_size));
renderer->SetFontRenderParams(run.render_params,
- background_is_transparent());
+ subpixel_rendering_suppressed());
Range glyphs_range = run.CharRangeToGlyphRange(segment.char_range);
scoped_ptr<SkPoint[]> positions(new SkPoint[glyphs_range.length()]);
SkScalar offset_x = preceding_segment_widths -
@@ -1308,7 +1308,7 @@ bool RenderTextHarfBuzz::ShapeRunWithFont(const base::string16& text,
hb_font_t* harfbuzz_font = CreateHarfBuzzFont(
run->skia_face.get(), SkIntToScalar(run->font_size), run->render_params,
- background_is_transparent());
+ subpixel_rendering_suppressed());
// TODO(vadimt): Remove ScopedTracker below once crbug.com/431326 is fixed.
tracked_objects::ScopedTracker tracking_profile1(
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index 87b053e..3cef41a 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -1648,7 +1648,11 @@ void Textfield::AccessibilitySetValue(const base::string16& new_value) {
void Textfield::UpdateBackgroundColor() {
const SkColor color = GetBackgroundColor();
set_background(Background::CreateSolidBackground(color));
- GetRenderText()->set_background_is_transparent(SkColorGetA(color) != 0xFF);
+ // Disable subpixel rendering when the background color is transparent
+ // because it draws incorrect colors around the glyphs in that case.
+ // See crbug.com/115198
+ GetRenderText()->set_subpixel_rendering_suppressed(
+ SkColorGetA(color) != 0xFF);
SchedulePaint();
}