• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 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 SkPicturePriv_DEFINED
9 #define SkPicturePriv_DEFINED
10 
11 #include "include/core/SkPicture.h"
12 
13 class SkReadBuffer;
14 class SkWriteBuffer;
15 
16 class SkPicturePriv {
17 public:
18     /**
19      *  Recreate a picture that was serialized into a buffer. If the creation requires bitmap
20      *  decoding, the decoder must be set on the SkReadBuffer parameter by calling
21      *  SkReadBuffer::setBitmapDecoder() before calling SkPicture::MakeFromBuffer().
22      *  @param buffer Serialized picture data.
23      *  @return A new SkPicture representing the serialized data, or NULL if the buffer is
24      *          invalid.
25      */
26     static sk_sp<SkPicture> MakeFromBuffer(SkReadBuffer& buffer);
27 
28     /**
29      *  Serialize to a buffer.
30      */
31     static void Flatten(const sk_sp<const SkPicture> , SkWriteBuffer& buffer);
32 
33     // Returns NULL if this is not an SkBigPicture.
AsSkBigPicture(const sk_sp<const SkPicture> picture)34     static const SkBigPicture* AsSkBigPicture(const sk_sp<const SkPicture> picture) {
35         return picture->asSkBigPicture();
36     }
37 
38     // V35: Store SkRect (rather then width & height) in header
39     // V36: Remove (obsolete) alphatype from SkColorTable
40     // V37: Added shadow only option to SkDropShadowImageFilter (last version to record CLEAR)
41     // V38: Added PictureResolution option to SkPictureImageFilter
42     // V39: Added FilterLevel option to SkPictureImageFilter
43     // V40: Remove UniqueID serialization from SkImageFilter.
44     // V41: Added serialization of SkBitmapSource's filterQuality parameter
45     // V42: Added a bool to SkPictureShader serialization to indicate did-we-serialize-a-picture?
46     // V43: Added DRAW_IMAGE and DRAW_IMAGE_RECT opt codes to serialized data
47     // V44: Move annotations from paint to drawAnnotation
48     // V45: Add invNormRotation to SkLightingShader.
49     // V46: Add drawTextRSXform
50     // V47: Add occluder rect to SkBlurMaskFilter
51     // V48: Read and write extended SkTextBlobs.
52     // V49: Gradients serialized as SkColor4f + SkColorSpace
53     // V50: SkXfermode -> SkBlendMode
54     // V51: more SkXfermode -> SkBlendMode
55     // V52: Remove SkTextBlob::fRunCount
56     // V53: SaveLayerRec clip mask
57     // V54: ComposeShader can use a Mode or a Lerp
58     // V55: Drop blendmode[] from MergeImageFilter
59     // V56: Add TileMode in SkBlurImageFilter.
60     // V57: Sweep tiling info.
61     // V58: No more 2pt conical flipping.
62     // V59: No more LocalSpace option on PictureImageFilter
63     // V60: Remove flags in picture header
64     // V61: Change SkDrawPictureRec to take two colors rather than two alphas
65     // V62: Don't negate size of custom encoded images (don't write origin x,y either)
66     // V63: Store image bounds (including origin) instead of just width/height to support subsets
67     // V64: Remove occluder feature from blur maskFilter
68     // V65: Float4 paint color
69     // V66: Add saveBehind
70     // V67: Blobs serialize fonts instead of paints
71     // V68: Paint doesn't serialize font-related stuff
72     // V69: Clean up duplicated and redundant SkImageFilter related enums
73     // V70: Image filters definitions hidden, registered names updated to include "Impl"
74     // V71: Unify erode and dilate image filters
75     // V72: SkColorFilter_Matrix domain (rgba vs. hsla)
76 
77     enum Version {
78         kTileModeInBlurImageFilter_Version  = 56,
79         kTileInfoInSweepGradient_Version    = 57,
80         k2PtConicalNoFlip_Version           = 58,
81         kRemovePictureImageFilterLocalSpace = 59,
82         kRemoveHeaderFlags_Version          = 60,
83         kTwoColorDrawShadow_Version         = 61,
84         kDontNegateImageSize_Version        = 62,
85         kStoreImageBounds_Version           = 63,
86         kRemoveOccluderFromBlurMaskFilter   = 64,
87         kFloat4PaintColor_Version           = 65,
88         kSaveBehind_Version                 = 66,
89         kSerializeFonts_Version             = 67,
90         kPaintDoesntSerializeFonts_Version  = 68,
91         kCleanupImageFilterEnums_Version    = 69,
92         kHideImageFilterImpls_Version       = 70,
93         kUnifyErodeDilateImpls_Version      = 71,
94         kMatrixColorFilterDomain_Version    = 72,
95 
96         // Only SKPs within the min/current picture version range (inclusive) can be read.
97         kMin_Version     = kTileModeInBlurImageFilter_Version,
98         kCurrent_Version = kMatrixColorFilterDomain_Version
99     };
100 
101     static_assert(kMin_Version <= 62, "Remove kFontAxes_bad from SkFontDescriptor.cpp");
102 };
103 
104 #endif
105