1/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkCanvasPriv_DEFINED
9#define SkCanvasPriv_DEFINED
10
11#include "include/core/SkCanvas.h"
12#include "include/private/SkNoncopyable.h"
13
14class SkReadBuffer;
15class SkWriteBuffer;
16
17class SkAutoCanvasMatrixPaint : SkNoncopyable {
18public:
19 SkAutoCanvasMatrixPaint(SkCanvas*, const SkMatrix*, const SkPaint*, const SkRect& bounds);
20 ~SkAutoCanvasMatrixPaint();
21
22private:
23 SkCanvas* fCanvas;
24 int fSaveCount;
25};
26
27class SkCanvasPriv {
28public:
29 enum {
30 kDontClipToLayer_SaveLayerFlag = SkCanvas::kDontClipToLayer_PrivateSaveLayerFlag,
31 };
32
33 // The lattice has pointers directly into the readbuffer
34 static bool ReadLattice(SkReadBuffer&, SkCanvas::Lattice*);
35
36 static void WriteLattice(SkWriteBuffer&, const SkCanvas::Lattice&);
37
38 // return the byte-size of the lattice, even if the buffer is null
39 // storage must be 4-byte aligned
40 static size_t WriteLattice(void* storage, const SkCanvas::Lattice&);
41
42 static SkCanvas::SaveLayerFlags LegacySaveFlagsToSaveLayerFlags(uint32_t legacySaveFlags);
43
44 static int SaveBehind(SkCanvas* canvas, const SkRect* subset) {
45 return canvas->only_axis_aligned_saveBehind(subset);
46 }
47 static void DrawBehind(SkCanvas* canvas, const SkPaint& paint) {
48 canvas->drawClippedToSaveBehind(paint);
49 }
50
51 // The experimental_DrawEdgeAAImageSet API accepts separate dstClips and preViewMatrices arrays,
52 // where entries refer into them, but no explicit size is provided. Given a set of entries,
53 // computes the minimum length for these arrays that would provide index access errors.
54 static void GetDstClipAndMatrixCounts(const SkCanvas::ImageSetEntry set[], int count,
55 int* totalDstClipCount, int* totalMatrixCount);
56};
57
58#endif
59