Make use of existing DM color space functionality
Every Sink-derived class that implements 'setColorSpace' should also implement 'colorInfo'. This CL just brings the RasterSink into compliance and uses 'colorInfo' more widely.
Change-Id: I864684c3e335583564817532f739b63642d696e4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/638976
Reviewed-by: James Godfrey-Kittle <jamesgk@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 3c46fd9..2a364ba 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -1490,7 +1490,7 @@
sk_sp<SkSurface> GPUSink::createDstSurface(GrDirectContext* context, SkISize size) const {
sk_sp<SkSurface> surface;
- SkImageInfo info = SkImageInfo::Make(size, fColorType, fAlphaType, fColorSpace);
+ SkImageInfo info = SkImageInfo::Make(size, this->colorInfo());
SkSurfaceProps props(fSurfaceFlags, kRGB_H_SkPixelGeometry);
switch (fSurfType) {
@@ -1524,7 +1524,7 @@
SkCanvas* canvas = surface->getCanvas();
SkISize size = surface->imageInfo().dimensions();
- SkImageInfo info = SkImageInfo::Make(size, fColorType, fAlphaType, fColorSpace);
+ SkImageInfo info = SkImageInfo::Make(size, this->colorInfo());
dst->allocPixels(info);
return canvas->readPixels(*dst, 0, 0);
}
@@ -2157,11 +2157,8 @@
Result RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) const {
const SkISize size = src.size();
- // If there's an appropriate alpha type for this color type, use it, otherwise use premul.
- SkAlphaType alphaType = kPremul_SkAlphaType;
- (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType);
- dst->allocPixelsFlags(SkImageInfo::Make(size, fColorType, alphaType, fColorSpace),
+ dst->allocPixelsFlags(SkImageInfo::Make(size, this->colorInfo()),
SkBitmap::kZeroPixels_AllocFlag);
SkCanvas canvas(*dst, SkSurfaceProps(0, kRGB_H_SkPixelGeometry));
@@ -2182,7 +2179,7 @@
SkBitmap* dst,
SkWStream* dstStream,
SkString* log) const {
- SkImageInfo ii = SkImageInfo::Make(src.size(), fColorType, fAlphaType, fColorSpace);
+ SkImageInfo ii = SkImageInfo::Make(src.size(), this->colorInfo());
skiatest::graphite::ContextFactory factory;
auto [_, context] = factory.getContextInfo(fContextType);
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index fdb30a4..564a465 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -540,6 +540,7 @@
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
const char* fileExtension() const override { return "pdf"; }
SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
+
bool fPDFA;
SkScalar fRasterDpi;
};
@@ -562,6 +563,14 @@
SinkFlags flags() const override { return SinkFlags{ SinkFlags::kRaster, SinkFlags::kDirect }; }
void setColorSpace(sk_sp<SkColorSpace> colorSpace) override { fColorSpace = colorSpace; }
+ SkColorInfo colorInfo() const override {
+ // If there's an appropriate alpha type for this color type, use it, otherwise use premul.
+ SkAlphaType alphaType = kPremul_SkAlphaType;
+ (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType);
+
+ return SkColorInfo(fColorType, alphaType, fColorSpace);
+ }
+
private:
SkColorType fColorType;
sk_sp<SkColorSpace> fColorSpace;
@@ -644,6 +653,7 @@
public:
ViaMatrix(SkMatrix, Sink*);
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+
private:
const SkMatrix fMatrix;
};
@@ -652,6 +662,7 @@
public:
ViaUpright(SkMatrix, Sink*);
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+
private:
const SkMatrix fMatrix;
};