34 , fSaveCount(canvas->getSaveCount()) {
38 matrix->mapRect(&newBounds);
61 int flagCount =
buffer.readInt();
75 const size_t size = (1 + lattice.
fXCount + 1 + lattice.
fYCount + 1) *
sizeof(int32_t) +
104 int* totalDstClipCount,
int* totalMatrixCount) {
105 int dstClipCount = 0;
106 int maxMatrixIndex = -1;
107 for (
int i = 0; i <
count; ++i) {
108 dstClipCount += 4 * set[i].fHasClip;
109 if (set[i].fMatrixIndex > maxMatrixIndex) {
110 maxMatrixIndex = set[i].fMatrixIndex;
114 *totalDstClipCount = dstClipCount;
115 *totalMatrixCount = maxMatrixIndex + 1;
140 if (
paint->getMaskFilter()) {
145 if (!
paint->getImageFilter()->asAColorFilter(&imgCFPtr)) {
154 imgCF = imgCF->makeComposed(
sk_ref_sp(paintCF));
157 paint->setColorFilter(std::move(imgCF));
158 paint->setImageFilter(
nullptr);
165 bool skipMaskFilterLayer)
168 , fTempLayersForFilters(0) {
178 this->addImageFilterLayer(rawBounds);
197 for (
int i = 0; i < fTempLayersForFilters; ++i) {
198 fCanvas->fSaveCount -= 1;
199 fCanvas->internalRestore();
202 SkASSERT(fSaveCount < 0 || fCanvas->getSaveCount() == fSaveCount);
206 *
this = std::move(other);
210 fPaint = std::move(other.fPaint);
211 fCanvas = other.fCanvas;
212 fTempLayersForFilters = other.fTempLayersForFilters;
215 other.fTempLayersForFilters = 0;
221void AutoLayerForImageFilter::addImageFilterLayer(
const SkRect* drawBounds) {
238 this->addLayer(restorePaint, drawBounds,
false);
252 if (!maskFilterAsImageFilter) {
280 this->addLayer(restorePaint, drawBounds,
true);
283void AutoLayerForImageFilter::addLayer(
const SkPaint& restorePaint,
287 const SkRect* contentBounds =
nullptr;
294 fCanvas->fSaveCount += 1;
298 fTempLayersForFilters += 1;
static constexpr T SkAlign4(T x)
@ kSrcOver
r = s + (1-sa)*d
SkMaskFilterBase * as_MFB(SkMaskFilter *mf)
sk_sp< T > sk_ref_sp(T *obj)
static constexpr bool SkToBool(const T &x)
void addMaskFilterLayer(const SkRect *drawBounds)
~AutoLayerForImageFilter()
AutoLayerForImageFilter(SkCanvas *canvas, const SkPaint &paint, const SkRect *rawBounds, bool skipMaskFilterLayer)
AutoLayerForImageFilter & operator=(const AutoLayerForImageFilter &)=delete
~SkAutoCanvasMatrixPaint()
SkAutoCanvasMatrixPaint(SkCanvas *, const SkMatrix *, const SkPaint *, const SkRect &bounds)
static void WriteLattice(SkWriteBuffer &, const SkCanvas::Lattice &)
static bool ReadLattice(SkReadBuffer &, SkCanvas::Lattice *)
static bool ImageToColorFilter(SkPaint *)
static void GetDstClipAndMatrixCounts(const SkCanvas::ImageSetEntry set[], int count, int *totalDstClipCount, int *totalMatrixCount)
int saveLayer(const SkRect *bounds, const SkPaint *paint)
@ kFullLayer_SaveLayerStrategy
void restoreToCount(int saveCount)
SkMatrix getTotalMatrix() const
void concat(const SkMatrix &matrix)
virtual sk_sp< SkImageFilter > asImageFilter(const SkMatrix &ctm) const
sk_sp< SkShader > refShader() const
sk_sp< SkImageFilter > refImageFilter() const
void setDither(bool dither)
void setImageFilter(sk_sp< SkImageFilter > imageFilter)
const SkRect & computeFastBounds(const SkRect &orig, SkRect *storage) const
sk_sp< SkColorFilter > refColorFilter() const
void setColor4f(const SkColor4f &color, SkColorSpace *colorSpace=nullptr)
void setMaskFilter(sk_sp< SkMaskFilter > maskFilter)
SkColor4f getColor4f() const
SkMaskFilter * getMaskFilter() const
sk_sp< SkBlender > refBlender() const
void setShader(sk_sp< SkShader > shader)
void setBlendMode(SkBlendMode mode)
SkImageFilter * getImageFilter() const
void setColorFilter(sk_sp< SkColorFilter > colorFilter)
void setBlender(sk_sp< SkBlender > blender)
bool canComputeFastBounds() const
void write32(int32_t value)
void write(const void *values, size_t size)
void writePad(const void *src, size_t size)
size_t bytesWritten() const
static const uint8_t buffer[]
constexpr SkColor4f kWhite
int fYCount
number of y-coordinates
const SkIRect * fBounds
source bounds to draw from
const int * fYDivs
y-axis values dividing bitmap
int fXCount
number of x-coordinates
const RectType * fRectTypes
array of fill types
const SkColor * fColors
array of colors
const int * fXDivs
x-axis values dividing bitmap