| /* |
| * Copyright 2020 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "include/effects/SkImageFilters.h" |
| #include "modules/svg/include/SkSVGFilterContext.h" |
| #include "modules/svg/include/SkSVGNode.h" |
| #include "modules/svg/include/SkSVGRenderContext.h" |
| #include "modules/svg/include/SkSVGTypes.h" |
| |
| sk_sp<SkImageFilter> SkSVGFilterContext::findResultById(const SkSVGStringType& id) const { |
| const sk_sp<SkImageFilter>* res = fResults.find(id); |
| return res ? *res : nullptr; |
| } |
| |
| void SkSVGFilterContext::registerResult(const SkSVGStringType& id, |
| const sk_sp<SkImageFilter>& result) { |
| SkASSERT(!id.isEmpty()); |
| fResults[id] = result; |
| } |
| |
| sk_sp<SkImageFilter> SkSVGFilterContext::resolveInput(const SkSVGRenderContext& ctx, |
| const SkSVGFeInputType& inputType) const { |
| switch (inputType.type()) { |
| case SkSVGFeInputType::Type::kSourceGraphic: |
| return nullptr; |
| case SkSVGFeInputType::Type::kFillPaint: |
| return SkImageFilters::Paint(*ctx.fillPaint()); |
| case SkSVGFeInputType::Type::kStrokePaint: { |
| // The paint filter doesn't handle stroke paints properly, so convert to fill for |
| // simplicity. |
| // TODO: Paint filter is deprecated, but the replacement (SkShaders::*()) |
| // requires some extra work to handle all paint features (gradients, etc). |
| SkPaint p = *ctx.strokePaint(); |
| p.setStyle(SkPaint::kFill_Style); |
| return SkImageFilters::Paint(p); |
| } |
| case SkSVGFeInputType::Type::kFilterPrimitiveReference: |
| return findResultById(inputType.id()); |
| default: |
| SkDebugf("unhandled filter input type %d\n", inputType.type()); |
| return nullptr; |
| } |
| } |