aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkLayerDrawLooper.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-03-30 12:41:48 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-30 18:02:58 +0000
commitcdc651d29d88e87ef84d5a586879db2c16ff4579 (patch)
tree9fcd85326b1a5dbda864da9431a878bb62f65191 /src/effects/SkLayerDrawLooper.cpp
parentb1f76531f673854135b19fa4342c0d085be2bf29 (diff)
Make xformer class for SkCSXCanvas, use for draw loopers
Fixes draw looper gms in gbr-8888 config. Bug: skia: Change-Id: I0a9306cc0523c82f2ad9516752d79c1d86b1e295 Reviewed-on: https://skia-review.googlesource.com/10644 Commit-Queue: Matt Sarett <msarett@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/effects/SkLayerDrawLooper.cpp')
-rw-r--r--src/effects/SkLayerDrawLooper.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/effects/SkLayerDrawLooper.cpp b/src/effects/SkLayerDrawLooper.cpp
index a20638c005..feeea66a35 100644
--- a/src/effects/SkLayerDrawLooper.cpp
+++ b/src/effects/SkLayerDrawLooper.cpp
@@ -8,6 +8,7 @@
#include "SkBlurDrawLooper.h"
#include "SkBlurMaskFilter.h"
#include "SkCanvas.h"
+#include "SkColorSpaceXformer.h"
#include "SkColor.h"
#include "SkReadBuffer.h"
#include "SkWriteBuffer.h"
@@ -206,6 +207,37 @@ bool SkLayerDrawLooper::asABlurShadow(BlurShadowRec* bsRec) const {
return true;
}
+sk_sp<SkDrawLooper> SkLayerDrawLooper::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
+ if (!fCount) {
+ return sk_ref_sp(const_cast<SkLayerDrawLooper*>(this));
+ }
+
+ auto looper = sk_sp<SkLayerDrawLooper>(new SkLayerDrawLooper());
+ looper->fCount = fCount;
+
+ Rec* oldRec = fRecs;
+ Rec* newTopRec = new Rec();
+ newTopRec->fInfo = oldRec->fInfo;
+ newTopRec->fPaint = xformer->apply(oldRec->fPaint);
+ newTopRec->fNext = nullptr;
+
+ Rec* prevNewRec = newTopRec;
+ oldRec = oldRec->fNext;
+ while (oldRec) {
+ Rec* newRec = new Rec();
+ newRec->fInfo = oldRec->fInfo;
+ newRec->fPaint = xformer->apply(oldRec->fPaint);
+ newRec->fNext = nullptr;
+ prevNewRec->fNext = newRec;
+
+ prevNewRec = newRec;
+ oldRec = oldRec->fNext;
+ }
+
+ looper->fRecs = newTopRec;
+ return std::move(looper);
+}
+
///////////////////////////////////////////////////////////////////////////////
void SkLayerDrawLooper::flatten(SkWriteBuffer& buffer) const {