Options
These globals are now defined:
double duration; // The requested duration of the animation. double frame; // A value in [0, 1] of where we are in the animation.
This global is now defined:
GrBackendRenderTarget backEndRenderTarget;
GrBackendTexture backEndTextureRenderTarget;
Optional source image
These globals are now defined:
SkBitmap source; sk_sp<SkImage> image; GrBackendTexture backEndTexture; // GPU Only.
Note:
Adding comments with SK_FOLD_START and SK_FOLD_END creates foldable code
blocks.
These blocks will be folded by default and are useful for highlighting specific lines of code.
You can also use the keyboard shortcuts Ctrl+S and Ctrl+E in the code editor to set them.
These blocks will be folded by default and are useful for highlighting specific lines of code.
You can also use the keyboard shortcuts Ctrl+S and Ctrl+E in the code editor to set them.
xxxxxxxxxx
27
void draw(SkCanvas* canvas) {
sk_sp<SkImageFilter> shadowFilter = SkImageFilters::DropShadow(
-10.0f * frame, 5.0f * frame, 3.0f, 3.0f, SK_ColorBLUE, nullptr);
sk_sp<SkImageFilter> offsetFilter = SkImageFilters::Offset(40, 40, shadowFilter, nullptr);
SkIRect subset = image->bounds();
SkIRect clipBounds = image->bounds();
clipBounds.outset(60, 60);
SkIRect outSubset;
SkIPoint offset;
sk_sp<SkImage> filtered;
if (auto rContext = canvas->recordingContext()) {
filtered = SkImages::MakeWithFilter(rContext, image, offsetFilter.get(),
subset, clipBounds, &outSubset, &offset);
} else {
filtered = SkImages::MakeWithFilter(image, offsetFilter.get(),
subset, clipBounds, &outSubset, &offset);
}
SkPaint paint;
paint.setAntiAlias(true);
paint.setStyle(SkPaint::kStroke_Style);
canvas->drawLine(0, 0, offset.fX, offset.fY, paint);
canvas->translate(offset.fX, offset.fY);
canvas->drawImage(filtered, 0, 0);
canvas->drawRect(SkRect::Make(outSubset), paint);
}