diff options
-rw-r--r-- | chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc | 2 | ||||
-rw-r--r-- | ui/gfx/canvas_skia.cc | 4 | ||||
-rw-r--r-- | ui/gfx/harfbuzz_font_skia.cc | 4 | ||||
-rw-r--r-- | ui/gfx/harfbuzz_font_skia.h | 2 | ||||
-rw-r--r-- | ui/gfx/render_text.cc | 10 | ||||
-rw-r--r-- | ui/gfx/render_text.h | 17 | ||||
-rw-r--r-- | ui/gfx/render_text_harfbuzz.cc | 4 | ||||
-rw-r--r-- | ui/views/controls/textfield/textfield.cc | 6 |
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(); } |