Home | History | Annotate | Download | only in core
      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