/*
 * Copyright 2018 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkCoverageModePriv_DEFINED
#define SkCoverageModePriv_DEFINED

#include "SkBlendMode.h"
#include "SkCoverageMode.h"

const SkBlendMode gUncorrelatedCoverageToBlend[] = {
    SkBlendMode::kSrcOver,  // or DstOver
    SkBlendMode::kSrcIn,    // or kDstIn
    SkBlendMode::kSrcOut,
    SkBlendMode::kDstOut,
    SkBlendMode::kXor,
};

#if 0
// Experimental idea to extend to overlap types

Master calculation =   X(S,D) + Y(S,D) + Z(S,D)

enum class SkCoverageOverlap {
                    // X                Y               Z
    kUncorrelated,  // S*D              S*(1-D)         D*(1-S)
    kConjoint,      // min(S,D)         max(S-D,0)      max(D-S,0)
    kDisjoint,      // max(S+D-1,0)     min(S,1-D)      min(D,1-S)

    kLast = kDisjoint
};

// The coverage modes each have a set of coefficients to be applied to the general equation (above)
//
//  e.g.
//     kXor+conjoint = max(S-D,0) + max(D-S,0) ==> abs(D-S)
//
kUnion,             // 1,1,1
kIntersect,         // 1,0,0
kDifference,        // 0,1,0
kReverseDifference, // 0,0,1
kXor,               // 0,1,1

#endif

#endif
