| 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).
|
|
|