11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifndef SkArithmeticMode_DEFINED
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SkArithmeticMode_DEFINED
101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkXfermode.h"
121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkArithmeticMode : public SkXfermode {
141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  result = clamp[k1 * src * dst + k2 * src + k3 * dst + k4]
171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  src and dst are treated as being [0.0 .. 1.0]. The polynomial is
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  evaluated on their unpremultiplied components.
201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  k1=k2=k3=0, k4=1.0 results in returning opaque white
221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  k1=k3=k4=0, k2=1.0 results in returning the src
231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  k1=k2=k4=0, k3=1.0 results in returning the dst
241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static SkXfermode* Create(SkScalar k1, SkScalar k2,
261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                              SkScalar k3, SkScalar k4);
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
31