1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "modules/svg/include/SkSVGFeFlood.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkImageFilters.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "modules/svg/include/SkSVGRenderContext.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class SkImageFilter; 17*c8dee2aaSAndroid Build Coastguard Worker class SkSVGFilterContext; 18*c8dee2aaSAndroid Build Coastguard Worker resolveFloodColor(const SkSVGRenderContext & ctx) const19*c8dee2aaSAndroid Build Coastguard WorkerSkColor SkSVGFeFlood::resolveFloodColor(const SkSVGRenderContext& ctx) const { 20*c8dee2aaSAndroid Build Coastguard Worker const auto floodColor = this->getFloodColor(); 21*c8dee2aaSAndroid Build Coastguard Worker const auto floodOpacity = this->getFloodOpacity(); 22*c8dee2aaSAndroid Build Coastguard Worker // Uninherited presentation attributes should have a concrete value by now. 23*c8dee2aaSAndroid Build Coastguard Worker if (!floodColor.isValue() || !floodOpacity.isValue()) { 24*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGF("unhandled: flood-color or flood-opacity has no value\n"); 25*c8dee2aaSAndroid Build Coastguard Worker return SK_ColorBLACK; 26*c8dee2aaSAndroid Build Coastguard Worker } 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker const SkColor color = ctx.resolveSvgColor(*floodColor); 29*c8dee2aaSAndroid Build Coastguard Worker return SkColorSetA(color, SkScalarRoundToInt(*floodOpacity * 255)); 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker onMakeImageFilter(const SkSVGRenderContext & ctx,const SkSVGFilterContext & fctx) const32*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkImageFilter> SkSVGFeFlood::onMakeImageFilter(const SkSVGRenderContext& ctx, 33*c8dee2aaSAndroid Build Coastguard Worker const SkSVGFilterContext& fctx) const { 34*c8dee2aaSAndroid Build Coastguard Worker return SkImageFilters::Shader(SkShaders::Color(resolveFloodColor(ctx)), 35*c8dee2aaSAndroid Build Coastguard Worker this->resolveFilterSubregion(ctx, fctx)); 36*c8dee2aaSAndroid Build Coastguard Worker } 37