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 MakeSharedID(uint32_t pictureID)38 static uint64_t MakeSharedID(uint32_t pictureID) { 39 uint64_t sharedID = SkSetFourByteTag('p', 'i', 'c', 't'); 40 return (sharedID << 32) | pictureID; 41 } 42 AddedToCache(const SkPicture * pic)43 static void AddedToCache(const SkPicture* pic) { 44 pic->fAddedToCache.store(true); 45 } 46 47 // V35: Store SkRect (rather then width & height) in header 48 // V36: Remove (obsolete) alphatype from SkColorTable 49 // V37: Added shadow only option to SkDropShadowImageFilter (last version to record CLEAR) 50 // V38: Added PictureResolution option to SkPictureImageFilter 51 // V39: Added FilterLevel option to SkPictureImageFilter 52 // V40: Remove UniqueID serialization from SkImageFilter. 53 // V41: Added serialization of SkBitmapSource's filterQuality parameter 54 // V42: Added a bool to SkPictureShader serialization to indicate did-we-serialize-a-picture? 55 // V43: Added DRAW_IMAGE and DRAW_IMAGE_RECT opt codes to serialized data 56 // V44: Move annotations from paint to drawAnnotation 57 // V45: Add invNormRotation to SkLightingShader. 58 // V46: Add drawTextRSXform 59 // V47: Add occluder rect to SkBlurMaskFilter 60 // V48: Read and write extended SkTextBlobs. 61 // V49: Gradients serialized as SkColor4f + SkColorSpace 62 // V50: SkXfermode -> SkBlendMode 63 // V51: more SkXfermode -> SkBlendMode 64 // V52: Remove SkTextBlob::fRunCount 65 // V53: SaveLayerRec clip mask 66 // V54: ComposeShader can use a Mode or a Lerp 67 // V55: Drop blendmode[] from MergeImageFilter 68 // V56: Add TileMode in SkBlurImageFilter. 69 // V57: Sweep tiling info. 70 // V58: No more 2pt conical flipping. 71 // V59: No more LocalSpace option on PictureImageFilter 72 // V60: Remove flags in picture header 73 // V61: Change SkDrawPictureRec to take two colors rather than two alphas 74 // V62: Don't negate size of custom encoded images (don't write origin x,y either) 75 // V63: Store image bounds (including origin) instead of just width/height to support subsets 76 // V64: Remove occluder feature from blur maskFilter 77 // V65: Float4 paint color 78 // V66: Add saveBehind 79 // V67: Blobs serialize fonts instead of paints 80 // V68: Paint doesn't serialize font-related stuff 81 // V69: Clean up duplicated and redundant SkImageFilter related enums 82 // V70: Image filters definitions hidden, registered names updated to include "Impl" 83 // V71: Unify erode and dilate image filters 84 // V72: SkColorFilter_Matrix domain (rgba vs. hsla) 85 // V73: Use SkColor4f in per-edge AA quad API 86 // V74: MorphologyImageFilter internal radius is SkScaler 87 // V75: SkVertices switched from unsafe use of SkReader32 to SkReadBuffer (like everything else) 88 // V76: Add filtering enum to ImageShader 89 // V77: Explicit filtering options on imageshaders 90 // V78: Serialize skmipmap data for images that have it 91 // V79: Cubic Resampler option on imageshader 92 // V80: Smapling options on imageshader 93 // V81: sampling parameters on drawImage/drawImageRect/etc. 94 95 enum Version { 96 kEdgeAAQuadColor4f_Version = 73, 97 kMorphologyTakesScalar_Version = 74, 98 kVerticesUseReadBuffer_Version = 75, 99 kFilterEnumInImageShader_Version = 76, 100 kFilterOptionsInImageShader_Version = 77, 101 kSerializeMipmaps_Version = 78, 102 kCubicResamplerImageShader_Version = 79, 103 kSamplingInImageShader_Version = 80, 104 kSamplingInDrawImage_Version = 81, 105 kPictureShaderFilterParam_Version = 82, 106 kMatrixImageFilterSampling_Version = 83, 107 kImageFilterImageSampling_Version = 84, 108 kNoFilterQualityShaders_Version = 85, 109 kVerticesRemoveCustomData_Version = 86, 110 111 // Only SKPs within the min/current picture version range (inclusive) can be read. 112 kMin_Version = kEdgeAAQuadColor4f_Version, 113 kCurrent_Version = kVerticesRemoveCustomData_Version 114 }; 115 116 static_assert(SkPicturePriv::kMin_Version <= SkPicturePriv::kCubicResamplerImageShader_Version, 117 "Remove SkFontDescriptor::maybeAsSkFontData, SkFontMgr::makeFromFontData, kFontAxes"); 118 }; 119 120 #endif 121