blob: b2228fc464db29984f1fa9eceba8ec4a5663c5d4 [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkColorSpaceXform.h"
#include "SkColorSpaceXformPriv.h"
std::unique_ptr<SkColorSpaceXform> SkColorSpaceXform::New(SkColorSpace* src, SkColorSpace* dst) {
return SkMakeColorSpaceXform(src, dst, SkTransferFunctionBehavior::kRespect);
}
std::unique_ptr<SkColorSpaceXform> SkMakeColorSpaceXform(
SkColorSpace* src,
SkColorSpace* dst,
SkTransferFunctionBehavior premulBehavior) {
#if defined(SK_USE_SKCMS)
if (src && dst && dst->toXYZD50()) {
return SkMakeColorSpaceXform_skcms(src, dst, premulBehavior);
}
#endif
return nullptr;
}
bool SkColorSpaceXform::Apply(SkColorSpace* dstCS, ColorFormat dstFormat, void* dst,
SkColorSpace* srcCS, ColorFormat srcFormat, const void* src,
int len, AlphaOp op) {
SkAlphaType at;
switch (op) {
case kPreserve_AlphaOp: at = kUnpremul_SkAlphaType; break;
case kPremul_AlphaOp: at = kPremul_SkAlphaType; break;
case kSrcIsOpaque_AlphaOp: at = kOpaque_SkAlphaType; break;
}
return SkColorSpaceXform::New(srcCS, dstCS)->apply(dstFormat, dst, srcFormat, src, len, at);
}