1 /* 2 * Copyright 2012 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 SkAnnotation_DEFINED 9 #define SkAnnotation_DEFINED 10 11 #include "SkFlattenable.h" 12 13 class SkData; 14 class SkDataSet; 15 class SkStream; 16 class SkWStream; 17 18 /** 19 * Experimental class for annotating draws. Do not use directly yet. 20 * Use helper functions at the bottom of this file for now. 21 */ 22 class SkAnnotation : public SkFlattenable { 23 public: 24 enum Flags { 25 // If set, the associated drawing primitive should not be drawn 26 kNoDraw_Flag = 1 << 0, 27 }; 28 29 SkAnnotation(SkDataSet*, uint32_t flags); 30 virtual ~SkAnnotation(); 31 32 uint32_t getFlags() const { return fFlags; } 33 SkDataSet* getDataSet() const { return fDataSet; } 34 35 bool isNoDraw() const { return SkToBool(fFlags & kNoDraw_Flag); } 36 37 /** 38 * Helper for search the annotation's dataset. 39 */ 40 SkData* find(const char name[]) const; 41 42 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkAnnotation) 43 44 protected: 45 SkAnnotation(SkFlattenableReadBuffer&); 46 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 47 48 private: 49 SkDataSet* fDataSet; 50 uint32_t fFlags; 51 52 void writeToStream(SkWStream*) const; 53 void readFromStream(SkStream*); 54 55 typedef SkFlattenable INHERITED; 56 }; 57 58 /** 59 * Experimental collection of predefined Keys into the Annotation dictionary 60 */ 61 class SkAnnotationKeys { 62 public: 63 /** 64 * Returns the canonical key whose payload is a URL 65 */ 66 static const char* URL_Key(); 67 }; 68 69 /////////////////////////////////////////////////////////////////////////////// 70 // 71 // Experimental helper functions to use Annotations 72 // 73 74 struct SkRect; 75 class SkCanvas; 76 77 /** 78 * Experimental! 79 * 80 * Annotate the canvas by associating the specified URL with the 81 * specified rectangle (in local coordinates, just like drawRect). If the 82 * backend of this canvas does not support annotations, this call is 83 * safely ignored. 84 * 85 * The caller is responsible for managing its ownership of the SkData. 86 */ 87 SK_API void SkAnnotateRectWithURL(SkCanvas*, const SkRect&, SkData*); 88 89 #endif 90