/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkCanvasPriv_DEFINED #define SkCanvasPriv_DEFINED #include "include/core/SkCanvas.h" #include "include/private/SkNoncopyable.h" class SkReadBuffer; class SkWriteBuffer; class SkAutoCanvasMatrixPaint : SkNoncopyable { public: SkAutoCanvasMatrixPaint(SkCanvas*, const SkMatrix*, const SkPaint*, const SkRect& bounds); ~SkAutoCanvasMatrixPaint(); private: SkCanvas* fCanvas; int fSaveCount; }; class SkCanvasPriv { public: enum { kDontClipToLayer_SaveLayerFlag = SkCanvas::kDontClipToLayer_PrivateSaveLayerFlag, }; // The lattice has pointers directly into the readbuffer static bool ReadLattice(SkReadBuffer&, SkCanvas::Lattice*); static void WriteLattice(SkWriteBuffer&, const SkCanvas::Lattice&); // return the byte-size of the lattice, even if the buffer is null // storage must be 4-byte aligned static size_t WriteLattice(void* storage, const SkCanvas::Lattice&); static SkCanvas::SaveLayerFlags LegacySaveFlagsToSaveLayerFlags(uint32_t legacySaveFlags); static int SaveBehind(SkCanvas* canvas, const SkRect* subset) { return canvas->only_axis_aligned_saveBehind(subset); } static void DrawBehind(SkCanvas* canvas, const SkPaint& paint) { canvas->drawClippedToSaveBehind(paint); } // The experimental_DrawEdgeAAImageSet API accepts separate dstClips and preViewMatrices arrays, // where entries refer into them, but no explicit size is provided. Given a set of entries, // computes the minimum length for these arrays that would provide index access errors. static void GetDstClipAndMatrixCounts(const SkCanvas::ImageSetEntry set[], int count, int* totalDstClipCount, int* totalMatrixCount); }; #endif