1bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita/* 2bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita * Copyright 2016 Google Inc. 3bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita * 4bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita * Use of this source code is governed by a BSD-style license that can be 5bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita * found in the LICENSE file. 6bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita */ 7bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 8bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#ifndef Sk4fGradientBase_DEFINED 9bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#define Sk4fGradientBase_DEFINED 10bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 11bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkColor.h" 12bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkGradientShaderPriv.h" 13bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkMatrix.h" 14bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkNx.h" 15bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkPM4f.h" 16bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkShader.h" 17bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#include "SkTArray.h" 18bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 19bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalitaclass SkGradientShaderBase:: 20bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalitaGradientShaderBase4fContext : public SkShader::Context { 21bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalitapublic: 22bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita GradientShaderBase4fContext(const SkGradientShaderBase&, 23bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita const ContextRec&); 24bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 25bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita uint32_t getFlags() const override { return fFlags; } 26bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 27bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalitaprotected: 28bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita struct Interval { 29bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita Interval(SkPMColor c0, SkScalar p0, 30bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkPMColor c1, SkScalar p1, 31bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita const Sk4f& componentScale); 32bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita Interval(const Sk4f& c0, const Sk4f& dc, 33bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkScalar p0, SkScalar p1); 34bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 35bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita bool isZeroRamp() const { return fZeroRamp; } 36bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 37bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita // true when fx is in [p0,p1) 38bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita bool contains(SkScalar fx) const; 39bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 40bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkPM4f fC0, fDc; 41bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkScalar fP0, fP1; 42bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita bool fZeroRamp; 43bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita }; 44bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 45bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita const Interval* findInterval(SkScalar fx) const; 46bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 47bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkSTArray<8, Interval, true> fIntervals; 48bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkMatrix fDstToPos; 49bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita SkMatrix::MapXYProc fDstToPosProc; 50bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita uint8_t fDstToPosClass; 51bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita uint8_t fFlags; 52bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita bool fDither; 53bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita bool fColorsArePremul; 54bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 55bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalitaprivate: 56bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita using INHERITED = SkShader::Context; 57bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 58bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita mutable const Interval* fCachedInterval; 59bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita}; 60bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita 61bc590c01b00ef79e1e1f30058e7a70a29419f2a9fmalita#endif // Sk4fGradientBase_DEFINED 62