| Index: src/effects/SkColorFilters.cpp
|
| diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp
|
| deleted file mode 100644
|
| index fe39dd980025c3ed4c7e39a5beb42d52b2e04646..0000000000000000000000000000000000000000
|
| --- a/src/effects/SkColorFilters.cpp
|
| +++ /dev/null
|
| @@ -1,170 +0,0 @@
|
| -/*
|
| - * Copyright 2006 The Android Open Source Project
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "SkBlitRow.h"
|
| -#include "SkColorFilter.h"
|
| -#include "SkColorPriv.h"
|
| -#include "SkModeColorFilter.h"
|
| -#include "SkReadBuffer.h"
|
| -#include "SkWriteBuffer.h"
|
| -#include "SkUtils.h"
|
| -#include "SkString.h"
|
| -#include "SkValidationUtils.h"
|
| -
|
| -bool SkModeColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) const {
|
| - if (color) {
|
| - *color = fColor;
|
| - }
|
| - if (mode) {
|
| - *mode = fMode;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -uint32_t SkModeColorFilter::getFlags() const {
|
| - switch (fMode) {
|
| - case SkXfermode::kDst_Mode: //!< [Da, Dc]
|
| - case SkXfermode::kSrcATop_Mode: //!< [Da, Sc * Da + (1 - Sa) * Dc]
|
| - return kAlphaUnchanged_Flag;
|
| - default:
|
| - break;
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const {
|
| - SkPMColor color = fPMColor;
|
| - SkXfermodeProc proc = fProc;
|
| -
|
| - for (int i = 0; i < count; i++) {
|
| - result[i] = proc(color, shader[i]);
|
| - }
|
| -}
|
| -
|
| -void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const {
|
| - buffer.writeColor(fColor);
|
| - buffer.writeUInt(fMode);
|
| -}
|
| -
|
| -void SkModeColorFilter::updateCache() {
|
| - fPMColor = SkPreMultiplyColor(fColor);
|
| - fProc = SkXfermode::GetProc(fMode);
|
| -}
|
| -
|
| -SkFlattenable* SkModeColorFilter::CreateProc(SkReadBuffer& buffer) {
|
| - SkColor color = buffer.readColor();
|
| - SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt();
|
| - return SkColorFilter::CreateModeFilter(color, mode);
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -#if SK_SUPPORT_GPU
|
| -#include "GrBlend.h"
|
| -#include "GrInvariantOutput.h"
|
| -#include "effects/GrXfermodeFragmentProcessor.h"
|
| -#include "effects/GrConstColorProcessor.h"
|
| -#include "SkGr.h"
|
| -
|
| -const GrFragmentProcessor* SkModeColorFilter::asFragmentProcessor(GrContext*) const {
|
| - if (SkXfermode::kDst_Mode == fMode) {
|
| - return nullptr;
|
| - }
|
| -
|
| - SkAutoTUnref<const GrFragmentProcessor> constFP(
|
| - GrConstColorProcessor::Create(SkColorToPremulGrColor(fColor),
|
| - GrConstColorProcessor::kIgnore_InputMode));
|
| - const GrFragmentProcessor* fp =
|
| - GrXfermodeFragmentProcessor::CreateFromSrcProcessor(constFP, fMode);
|
| - if (!fp) {
|
| - return nullptr;
|
| - }
|
| -#ifdef SK_DEBUG
|
| - // With a solid color input this should always be able to compute the blended color
|
| - // (at least for coeff modes)
|
| - if (fMode <= SkXfermode::kLastCoeffMode) {
|
| - static SkRandom gRand;
|
| - GrInvariantOutput io(GrPremulColor(gRand.nextU()), kRGBA_GrColorComponentFlags,
|
| - false);
|
| - fp->computeInvariantOutput(&io);
|
| - SkASSERT(io.validFlags() == kRGBA_GrColorComponentFlags);
|
| - }
|
| -#endif
|
| - return fp;
|
| -}
|
| -
|
| -#endif
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -class Src_SkModeColorFilter : public SkModeColorFilter {
|
| -public:
|
| - Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mode) {}
|
| -
|
| - void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
|
| - sk_memset32(result, this->getPMColor(), count);
|
| - }
|
| -
|
| -private:
|
| - typedef SkModeColorFilter INHERITED;
|
| -};
|
| -
|
| -class SrcOver_SkModeColorFilter : public SkModeColorFilter {
|
| -public:
|
| - SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrcOver_Mode) { }
|
| -
|
| - void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
|
| - SkBlitRow::Color32(result, shader, count, this->getPMColor());
|
| - }
|
| -
|
| -private:
|
| - typedef SkModeColorFilter INHERITED;
|
| -};
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, SkXfermode::Mode mode) {
|
| - if (!SkIsValidMode(mode)) {
|
| - return nullptr;
|
| - }
|
| -
|
| - unsigned alpha = SkColorGetA(color);
|
| -
|
| - // first collaps some modes if possible
|
| -
|
| - if (SkXfermode::kClear_Mode == mode) {
|
| - color = 0;
|
| - mode = SkXfermode::kSrc_Mode;
|
| - } else if (SkXfermode::kSrcOver_Mode == mode) {
|
| - if (0 == alpha) {
|
| - mode = SkXfermode::kDst_Mode;
|
| - } else if (255 == alpha) {
|
| - mode = SkXfermode::kSrc_Mode;
|
| - }
|
| - // else just stay srcover
|
| - }
|
| -
|
| - // weed out combinations that are noops, and just return null
|
| - if (SkXfermode::kDst_Mode == mode ||
|
| - (0 == alpha && (SkXfermode::kSrcOver_Mode == mode ||
|
| - SkXfermode::kDstOver_Mode == mode ||
|
| - SkXfermode::kDstOut_Mode == mode ||
|
| - SkXfermode::kSrcATop_Mode == mode ||
|
| - SkXfermode::kXor_Mode == mode ||
|
| - SkXfermode::kDarken_Mode == mode)) ||
|
| - (0xFF == alpha && SkXfermode::kDstIn_Mode == mode)) {
|
| - return nullptr;
|
| - }
|
| -
|
| - switch (mode) {
|
| - case SkXfermode::kSrc_Mode:
|
| - return new Src_SkModeColorFilter(color);
|
| - case SkXfermode::kSrcOver_Mode:
|
| - return new SrcOver_SkModeColorFilter(color);
|
| - default:
|
| - return SkModeColorFilter::Create(color, mode);
|
| - }
|
| -}
|
|
|