Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(542)

Unified Diff: ui/views/controls/label.cc

Issue 2661313005: Add extra DCHECKing to try to catch subpixel rendering on a non-opaque (Closed)
Patch Set: msw review Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/label.cc
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index 2086222e63f3c879d426a3d4509f7f2ec612a0d8..2d1694204b13989252d5fbc53687aa944ef515f9 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -30,6 +30,7 @@
#include "ui/gfx/text_elider.h"
#include "ui/native_theme/native_theme.h"
#include "ui/strings/grit/ui_strings.h"
+#include "ui/views/background.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/focus/focus_manager.h"
#include "ui/views/native_cursor.h"
@@ -450,8 +451,30 @@ std::unique_ptr<gfx::RenderText> Label::CreateRenderText(
void Label::PaintText(gfx::Canvas* canvas) {
MaybeBuildRenderTextLines();
+
for (size_t i = 0; i < lines_.size(); ++i)
lines_[i]->Draw(canvas);
+
+#if DCHECK_IS_ON()
+ // Attempt to ensure that if we're using subpixel rendering, we're painting
+ // to an opaque background. What we don't want to find is an ancestor in the
+ // hierarchy that paints to a non-opaque layer.
+ if (lines_.empty() || lines_[0]->subpixel_rendering_suppressed())
+ return;
+
+ for (View* view = this; view; view = view->parent()) {
+ if (view->background() &&
+ SkColorGetA(view->background()->get_color()) == SK_AlphaOPAQUE)
+ break;
+
+ if (view->layer()) {
+ DCHECK(view->layer()->fills_bounds_opaquely())
+ << " Ancestor view has a non-opaque layer: " << view->GetClassName()
+ << " with ID " << view->id();
+ break;
+ }
+ }
+#endif
}
void Label::OnBoundsChanged(const gfx::Rect& previous_bounds) {
@@ -964,7 +987,8 @@ void Label::RecalculateColors() {
void Label::ApplyTextColors() const {
SkColor color = enabled() ? actual_enabled_color_ : actual_disabled_color_;
bool subpixel_rendering_suppressed =
- SkColorGetA(background_color_) != 0xFF || !subpixel_rendering_enabled_;
+ SkColorGetA(background_color_) != SK_AlphaOPAQUE ||
+ !subpixel_rendering_enabled_;
for (size_t i = 0; i < lines_.size(); ++i) {
lines_[i]->SetColor(color);
lines_[i]->set_selection_color(actual_selection_text_color_);
« no previous file with comments | « chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698