Index: cc/layers/content_layer.cc |
diff --git a/cc/layers/content_layer.cc b/cc/layers/content_layer.cc |
index d720501b56ddbe852f43ad86f4f9ebde149e0409..1a8909f2e03fce40c9b50d008c09c9ac96e413d9 100644 |
--- a/cc/layers/content_layer.cc |
+++ b/cc/layers/content_layer.cc |
@@ -10,37 +10,18 @@ |
#include "cc/layers/content_layer_client.h" |
#include "cc/resources/bitmap_content_layer_updater.h" |
#include "cc/resources/bitmap_skpicture_content_layer_updater.h" |
-#include "cc/resources/layer_painter.h" |
+#include "cc/resources/content_layer_painter.h" |
#include "cc/trees/layer_tree_host.h" |
#include "third_party/skia/include/core/SkPictureRecorder.h" |
namespace cc { |
-ContentLayerPainter::ContentLayerPainter(ContentLayerClient* client) |
- : client_(client) {} |
- |
-scoped_ptr<ContentLayerPainter> ContentLayerPainter::Create( |
- ContentLayerClient* client) { |
- return make_scoped_ptr(new ContentLayerPainter(client)); |
-} |
- |
-void ContentLayerPainter::Paint(SkCanvas* canvas, |
- const gfx::Rect& content_rect, |
- gfx::RectF* opaque) { |
- client_->PaintContents(canvas, |
- content_rect, |
- opaque, |
- ContentLayerClient::GRAPHICS_CONTEXT_ENABLED); |
-} |
- |
scoped_refptr<ContentLayer> ContentLayer::Create(ContentLayerClient* client) { |
return make_scoped_refptr(new ContentLayer(client)); |
} |
ContentLayer::ContentLayer(ContentLayerClient* client) |
- : TiledLayer(), |
- client_(client), |
- can_use_lcd_text_last_frame_(can_use_lcd_text()) { |
+ : client_(client), use_lcd_text_(true) { |
} |
ContentLayer::~ContentLayer() {} |
@@ -78,7 +59,7 @@ bool ContentLayer::Update(ResourceUpdateQueue* queue, |
true); |
CreateUpdaterIfNeeded(); |
- UpdateCanUseLCDText(); |
+ UpdateUseLCDText(); |
} |
bool updated = TiledLayer::Update(queue, occlusion); |
@@ -96,8 +77,8 @@ LayerUpdater* ContentLayer::Updater() const { |
void ContentLayer::CreateUpdaterIfNeeded() { |
if (updater_.get()) |
return; |
- scoped_ptr<LayerPainter> painter = |
- ContentLayerPainter::Create(client_).PassAs<LayerPainter>(); |
+ scoped_ptr<ContentLayerPainter> painter = |
+ ContentLayerPainter::Create(client_); |
if (layer_tree_host()->settings().per_tile_painting_enabled) { |
updater_ = BitmapSkPictureContentLayerUpdater::Create( |
painter.Pass(), |
@@ -112,6 +93,7 @@ void ContentLayer::CreateUpdaterIfNeeded() { |
updater_->SetOpaque(contents_opaque()); |
if (client_) |
updater_->SetFillsBoundsCompletely(client_->FillsBoundsCompletely()); |
+ updater_->set_can_use_lcd_text(use_lcd_text_); |
SetTextureFormat( |
layer_tree_host()->GetRendererCapabilities().best_texture_format); |
@@ -123,13 +105,18 @@ void ContentLayer::SetContentsOpaque(bool opaque) { |
updater_->SetOpaque(opaque); |
} |
-void ContentLayer::UpdateCanUseLCDText() { |
- if (can_use_lcd_text_last_frame_ == can_use_lcd_text()) |
+void ContentLayer::UpdateUseLCDText() { |
+ if (use_lcd_text_ == can_use_lcd_text()) |
return; |
- can_use_lcd_text_last_frame_ = can_use_lcd_text(); |
- if (client_) |
- client_->DidChangeLayerCanUseLCDText(); |
+ // LCD text starts out enabled and can only be disabled. |
+ if (!use_lcd_text_) |
+ return; |
+ |
+ use_lcd_text_ = can_use_lcd_text(); |
+ updater_->set_can_use_lcd_text(use_lcd_text_); |
+ if (client_->PaintsLCDText()) |
+ SetNeedsDisplay(); |
} |
bool ContentLayer::SupportsLCDText() const { |
@@ -148,6 +135,7 @@ skia::RefPtr<SkPicture> ContentLayer::GetPicture() const { |
SkCanvas* canvas = recorder.beginRecording(width, height, NULL, 0); |
client_->PaintContents(canvas, |
gfx::Rect(width, height), |
+ use_lcd_text_, |
&opaque, |
ContentLayerClient::GRAPHICS_CONTEXT_ENABLED); |
skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording()); |