1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkSVGGradient_DEFINED 9cb93a386Sopenharmony_ci#define SkSVGGradient_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkShader.h" 12cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGHiddenContainer.h" 13cb93a386Sopenharmony_ci#include "modules/svg/include/SkSVGTypes.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass SkMatrix; 16cb93a386Sopenharmony_ciclass SkSVGRenderContext; 17cb93a386Sopenharmony_ciclass SkSVGStop; 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ciclass SkSVGGradient : public SkSVGHiddenContainer { 20cb93a386Sopenharmony_cipublic: 21cb93a386Sopenharmony_ci SVG_ATTR(Href, SkSVGIRI, SkSVGIRI()) 22cb93a386Sopenharmony_ci SVG_ATTR(GradientTransform, SkSVGTransformType, SkSVGTransformType(SkMatrix::I())) 23cb93a386Sopenharmony_ci SVG_ATTR(SpreadMethod, SkSVGSpreadMethod, SkSVGSpreadMethod(SkSVGSpreadMethod::Type::kPad)) 24cb93a386Sopenharmony_ci SVG_ATTR(GradientUnits, 25cb93a386Sopenharmony_ci SkSVGObjectBoundingBoxUnits, 26cb93a386Sopenharmony_ci SkSVGObjectBoundingBoxUnits(SkSVGObjectBoundingBoxUnits::Type::kObjectBoundingBox)) 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ciprotected: 29cb93a386Sopenharmony_ci explicit SkSVGGradient(SkSVGTag t) : INHERITED(t) {} 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci bool parseAndSetAttribute(const char*, const char*) override; 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci bool onAsPaint(const SkSVGRenderContext&, SkPaint*) const final; 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci virtual sk_sp<SkShader> onMakeShader(const SkSVGRenderContext&, 36cb93a386Sopenharmony_ci const SkColor4f*, const SkScalar*, int count, 37cb93a386Sopenharmony_ci SkTileMode, const SkMatrix& localMatrix) const = 0; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ciprivate: 40cb93a386Sopenharmony_ci using StopPositionArray = SkSTArray<2, SkScalar , true>; 41cb93a386Sopenharmony_ci using StopColorArray = SkSTArray<2, SkColor4f, true>; 42cb93a386Sopenharmony_ci void collectColorStops(const SkSVGRenderContext&, StopPositionArray*, StopColorArray*) const; 43cb93a386Sopenharmony_ci SkColor4f resolveStopColor(const SkSVGRenderContext&, const SkSVGStop&) const; 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci using INHERITED = SkSVGHiddenContainer; 46cb93a386Sopenharmony_ci}; 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci#endif // SkSVGGradient_DEFINED 49