• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "include/effects/SkImageFilters.h"
9 #include "modules/svg/include/SkSVGFeFlood.h"
10 #include "modules/svg/include/SkSVGFilterContext.h"
11 #include "modules/svg/include/SkSVGRenderContext.h"
12 #include "modules/svg/include/SkSVGValue.h"
13 
resolveFloodColor(const SkSVGRenderContext & ctx) const14 SkColor SkSVGFeFlood::resolveFloodColor(const SkSVGRenderContext& ctx) const {
15     const auto floodColor = this->getFloodColor();
16     const auto floodOpacity = this->getFloodOpacity();
17     // Uninherited presentation attributes should have a concrete value by now.
18     if (!floodColor.isValue() || !floodOpacity.isValue()) {
19         SkDebugf("unhandled: flood-color or flood-opacity has no value\n");
20         return SK_ColorBLACK;
21     }
22 
23     const SkColor color = ctx.resolveSvgColor(*floodColor);
24     return SkColorSetA(color, SkScalarRoundToInt(*floodOpacity * 255));
25 }
26 
onMakeImageFilter(const SkSVGRenderContext & ctx,const SkSVGFilterContext & fctx) const27 sk_sp<SkImageFilter> SkSVGFeFlood::onMakeImageFilter(const SkSVGRenderContext& ctx,
28                                                      const SkSVGFilterContext& fctx) const {
29     return SkImageFilters::Shader(SkShaders::Color(resolveFloodColor(ctx)),
30                                   this->resolveFilterSubregion(ctx, fctx));
31 }
32