180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc. 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkAnnotation_DEFINED 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkAnnotation_DEFINED 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkFlattenable.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkData; 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDataSet; 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkStream; 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkWStream; 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Experimental class for annotating draws. Do not use directly yet. 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use helper functions at the bottom of this file for now. 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkAnnotation : public SkFlattenable { 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum Flags { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // If set, the associated drawing primitive should not be drawn 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kNoDraw_Flag = 1 << 0, 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnnotation(SkDataSet*, uint32_t flags); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual ~SkAnnotation(); 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t getFlags() const { return fFlags; } 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDataSet* getDataSet() const { return fDataSet; } 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool isNoDraw() const { return SkToBool(fFlags & kNoDraw_Flag); } 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Helper for search the annotation's dataset. 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkData* find(const char name[]) const; 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkAnnotation) 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnnotation(SkFlattenableReadBuffer&); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDataSet* fDataSet; 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint32_t fFlags; 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void writeToStream(SkWStream*) const; 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void readFromStream(SkStream*); 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef SkFlattenable INHERITED; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Experimental collection of predefined Keys into the Annotation dictionary 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkAnnotationKeys { 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru /** 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Returns the canonical key whose payload is a URL 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const char* URL_Key(); 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/////////////////////////////////////////////////////////////////////////////// 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// Experimental helper functions to use Annotations 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct SkRect; 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkCanvas; 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Experimental! 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Annotate the canvas by associating the specified URL with the 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * specified rectangle (in local coordinates, just like drawRect). If the 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * backend of this canvas does not support annotations, this call is 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * safely ignored. 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * The caller is responsible for managing its ownership of the SkData. 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSK_API void SkAnnotateRectWithURL(SkCanvas*, const SkRect&, SkData*); 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 90