|
16 | 16 | #include "modules/sksg/include/SkSGGroup.h" |
17 | 17 | #include "modules/sksg/include/SkSGPaint.h" |
18 | 18 | #include "modules/sksg/include/SkSGRect.h" |
| 19 | +#include "modules/sksg/include/SkSGRenderEffect.h" |
19 | 20 | #include "modules/sksg/include/SkSGText.h" |
20 | 21 | #include "modules/sksg/include/SkSGTransform.h" |
21 | 22 |
|
@@ -69,6 +70,7 @@ sk_sp<TextAdapter> TextAdapter::Make(const skjson::ObjectValue& jlayer, |
69 | 70 |
|
70 | 71 | for (const skjson::ObjectValue* janimator : *janimators) { |
71 | 72 | if (auto animator = TextAnimator::Make(janimator, abuilder, adapter.get())) { |
| 73 | + adapter->fHasBlur |= animator->hasBlur(); |
72 | 74 | adapter->fAnimators.push_back(std::move(animator)); |
73 | 75 | } |
74 | 76 | } |
@@ -125,6 +127,12 @@ void TextAdapter::addFragment(const Shaper::Fragment& frag) { |
125 | 127 | ? sksg::Group::Make(std::move(draws)) |
126 | 128 | : std::move(draws[0]); |
127 | 129 |
|
| 130 | + if (fHasBlur) { |
| 131 | + // Optional blur effect. |
| 132 | + rec.fBlur = sksg::BlurImageFilter::Make(); |
| 133 | + draws_node = sksg::ImageFilterEffect::Make(std::move(draws_node), rec.fBlur); |
| 134 | + } |
| 135 | + |
128 | 136 | fRoot->addChild(sksg::TransformEffect::Make(std::move(draws_node), rec.fMatrixNode)); |
129 | 137 | fFragments.push_back(std::move(rec)); |
130 | 138 | } |
@@ -307,6 +315,9 @@ void TextAdapter::pushPropsToFragment(const TextAnimator::ResolvedProps& props, |
307 | 315 | if (rec.fStrokeColorNode) { |
308 | 316 | rec.fStrokeColorNode->setColor(scale_alpha(props.stroke_color, props.opacity)); |
309 | 317 | } |
| 318 | + if (rec.fBlur) { |
| 319 | + rec.fBlur->setSigma(props.blur * kBlurSizeToSigma); |
| 320 | + } |
310 | 321 | } |
311 | 322 |
|
312 | 323 | void TextAdapter::adjustLineTracking(const TextAnimator::ModulatorBuffer& buf, |
|
0 commit comments