Index: cc/layers/picture_image_layer.cc |
diff --git a/cc/layers/picture_image_layer.cc b/cc/layers/picture_image_layer.cc |
index b5a55c237d081c1e488464418b2ed1b6eeb41cd3..4121d894bd3d5bb4759ddf4812b4375a95f18b54 100644 |
--- a/cc/layers/picture_image_layer.cc |
+++ b/cc/layers/picture_image_layer.cc |
@@ -10,8 +10,10 @@ |
#include "cc/playback/display_item_list_settings.h" |
#include "cc/playback/drawing_display_item.h" |
#include "third_party/skia/include/core/SkCanvas.h" |
+#include "third_party/skia/include/core/SkColorFilter.h" |
#include "third_party/skia/include/core/SkImage.h" |
#include "third_party/skia/include/core/SkPictureRecorder.h" |
+#include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
#include "ui/gfx/skia_util.h" |
namespace cc { |
@@ -38,7 +40,23 @@ bool PictureImageLayer::HasDrawableContent() const { |
return image_ && PictureLayer::HasDrawableContent(); |
} |
-void PictureImageLayer::SetImage(skia::RefPtr<const SkImage> image) { |
+void PictureImageLayer::SetImage(skia::RefPtr<const SkImage> image, |
+ skia::RefPtr<SkColorFilter> transform) { |
+ // SetImage() may be called when color transforms change: usually |
+ // the image has not changed, but its rendered paint should. |
+ if (transform_.get() != transform.get()) { |
+ transform_ = std::move(transform); |
+ FilterOperations filters; |
+ if (transform_.get()) { |
+ skia::RefPtr<SkImageFilter> color_transform_filter = |
+ skia::AdoptRef(SkColorFilterImageFilter::Create(transform_.get())); |
+ FilterOperation color_transform_operation = |
+ FilterOperation::CreateReferenceFilter(color_transform_filter); |
+ filters.Append(color_transform_operation); |
+ } |
+ this->Layer::SetFilters(filters); |
+ } |
+ |
// SetImage() currently gets called whenever there is any |
// style change that affects the layer even if that change doesn't |
// affect the actual contents of the image (e.g. a CSS animation). |