/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkAnnotation_DEFINED #define SkAnnotation_DEFINED #include "SkRefCnt.h" #include "SkString.h" class SkData; class SkReadBuffer; class SkWriteBuffer; class SkStream; class SkWStream; struct SkPoint; /** * Experimental class for annotating draws. Do not use directly yet. * Use helper functions at the bottom of this file for now. */ class SkAnnotation : public SkRefCnt { public: virtual ~SkAnnotation(); static SkAnnotation* Create(const char key[], SkData* value) { return SkNEW_ARGS(SkAnnotation, (key, value)); } static SkAnnotation* Create(SkReadBuffer& buffer) { return SkNEW_ARGS(SkAnnotation, (buffer)); } /** * Return the data for the specified key, or NULL. */ SkData* find(const char key[]) const; void writeToBuffer(SkWriteBuffer&) const; private: SkAnnotation(const char key[], SkData* value); SkAnnotation(SkReadBuffer&); SkString fKey; SkData* fData; typedef SkRefCnt INHERITED; }; /** * Experimental collection of predefined Keys into the Annotation dictionary */ class SkAnnotationKeys { public: /** * Returns the canonical key whose payload is a URL */ static const char* URL_Key(); /** * Returns the canonical key whose payload is the name of a destination to * be defined. */ static const char* Define_Named_Dest_Key(); /** * Returns the canonical key whose payload is the name of a destination to * be linked to. */ static const char* Link_Named_Dest_Key(); }; /////////////////////////////////////////////////////////////////////////////// // // Experimental helper functions to use Annotations // struct SkRect; class SkCanvas; /** * Experimental! * * Annotate the canvas by associating the specified URL with the * specified rectangle (in local coordinates, just like drawRect). If the * backend of this canvas does not support annotations, this call is * safely ignored. * * The caller is responsible for managing its ownership of the SkData. */ SK_API void SkAnnotateRectWithURL(SkCanvas*, const SkRect&, SkData*); /** * Experimental! * * Annotate the canvas by associating a name with the specified point. * * If the backend of this canvas does not support annotations, this call is * safely ignored. * * The caller is responsible for managing its ownership of the SkData. */ SK_API void SkAnnotateNamedDestination(SkCanvas*, const SkPoint&, SkData*); /** * Experimental! * * Annotate the canvas by making the specified rectangle link to a named * destination. * * If the backend of this canvas does not support annotations, this call is * safely ignored. * * The caller is responsible for managing its ownership of the SkData. */ SK_API void SkAnnotateLinkToDestination(SkCanvas*, const SkRect&, SkData*); #endif