aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Stan Iliev <stani@google.com>2017-12-18 14:46:30 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-18 20:10:12 +0000
commit45fd995b9652a8ba2e0b0cad480ca08763bda7e3 (patch)
tree07a1d1aefd6d0ec378f30b765f3d68d26f82ae85 /src
parentff5000830544f23a2af7a861068b1a8deebef7ba (diff)
Apply color transform for Lattice fixed colors
This is fixing an issue with nine patch not drawing correctly if there is a color transformaton. Bug: b/69796044 Test: Ran lattice2 test for gbr-8888 Change-Id: Idadc2938222222750f0f8bfb12650569191b7ad9 Reviewed-on: https://skia-review.googlesource.com/83680 Commit-Queue: Stan Iliev <stani@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkColorSpaceXformCanvas.cpp17
-rw-r--r--src/core/SkColorSpaceXformer.cpp11
-rw-r--r--src/core/SkColorSpaceXformer.h3
3 files changed, 27 insertions, 4 deletions
diff --git a/src/core/SkColorSpaceXformCanvas.cpp b/src/core/SkColorSpaceXformCanvas.cpp
index b6d6c87aa1..db5642df00 100644
--- a/src/core/SkColorSpaceXformCanvas.cpp
+++ b/src/core/SkColorSpaceXformCanvas.cpp
@@ -164,8 +164,13 @@ public:
const Lattice& lattice, const SkRect& dst,
const SkPaint* paint) override {
if (!fTarget->quickReject(dst)) {
- fTarget->drawImageLattice(prepareImage(img).get(), lattice, dst,
- MaybePaint(paint, fXformer.get()));
+ SkSTArray<16, SkColor> colorBuffer;
+ int count = lattice.fRectTypes && lattice.fColors ?
+ (lattice.fXCount + 1) * (lattice.fYCount + 1) : 0;
+ colorBuffer.reset(count);
+ fTarget->drawImageLattice(prepareImage(img).get(),
+ fXformer->apply(lattice, colorBuffer.begin(), count),
+ dst, MaybePaint(paint, fXformer.get()));
}
}
void onDrawAtlas(const SkImage* atlas, const SkRSXform* xforms, const SkRect* tex,
@@ -223,8 +228,12 @@ public:
MaybePaint(paint, fXformer.get()));
}
-
- fTarget->drawImageLattice(fXformer->apply(bitmap).get(), lattice, dst,
+ SkSTArray<16, SkColor> colorBuffer;
+ int count = lattice.fRectTypes && lattice.fColors?
+ (lattice.fXCount + 1) * (lattice.fYCount + 1) : 0;
+ colorBuffer.reset(count);
+ fTarget->drawImageLattice(fXformer->apply(bitmap).get(),
+ fXformer->apply(lattice, colorBuffer.begin(), count), dst,
MaybePaint(paint, fXformer.get()));
}
void onDrawShadowRec(const SkPath& path, const SkDrawShadowRec& rec) override {
diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp
index 58b3f4958a..14be53482f 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -176,3 +176,14 @@ SkPaint SkColorSpaceXformer::apply(const SkPaint& src) {
return dst;
}
+
+SkCanvas::Lattice SkColorSpaceXformer::apply(const SkCanvas::Lattice& lattice,
+ SkColor* colorBuffer, int count) {
+ if (count) {
+ this->apply(colorBuffer, lattice.fColors, count);
+ return {lattice.fXDivs, lattice.fYDivs, lattice.fRectTypes,
+ lattice.fXCount, lattice.fYCount, lattice.fBounds, colorBuffer};
+ }
+
+ return lattice;
+}
diff --git a/src/core/SkColorSpaceXformer.h b/src/core/SkColorSpaceXformer.h
index 5fa4d836b7..0286143f52 100644
--- a/src/core/SkColorSpaceXformer.h
+++ b/src/core/SkColorSpaceXformer.h
@@ -8,6 +8,7 @@
#ifndef SkColorSpaceXformer_DEFINED
#define SkColorSpaceXformer_DEFINED
+#include "SkCanvas.h"
#include "SkColor.h"
#include "SkRefCnt.h"
#include "SkTHash.h"
@@ -38,6 +39,8 @@ public:
sk_sp<SkColorSpace> dst() const { return fDst; }
+ SkCanvas::Lattice apply(const SkCanvas::Lattice&, SkColor*, int);
+
private:
SkColorSpaceXformer(sk_sp<SkColorSpace> dst, std::unique_ptr<SkColorSpaceXform> fromSRGB);