1b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/* 2b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Copyright 2012 Google Inc. 3b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * 4b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Use of this source code is governed by a BSD-style license that can be 5b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * found in the LICENSE file. 6b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 7b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 8b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com#ifndef SkAnnotation_DEFINED 9b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com#define SkAnnotation_DEFINED 10b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 110cd2ac6c721120a2628524dad91798aa3e7ec41dreed@google.com#include "SkRefCnt.h" 124979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com#include "SkString.h" 13b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 14b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comclass SkData; 158b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgclass SkReadBuffer; 168b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgclass SkWriteBuffer; 17c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.comclass SkStream; 18c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.comclass SkWStream; 19b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comstruct SkPoint; 20b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 21b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/** 22b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Experimental class for annotating draws. Do not use directly yet. 23b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Use helper functions at the bottom of this file for now. 24b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 250cd2ac6c721120a2628524dad91798aa3e7ec41dreed@google.comclass SkAnnotation : public SkRefCnt { 26b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.compublic: 27b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com virtual ~SkAnnotation(); 28b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 29d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org static SkAnnotation* Create(const char key[], SkData* value) { 30d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org return SkNEW_ARGS(SkAnnotation, (key, value)); 31d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org } 32d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org 33d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org static SkAnnotation* Create(SkReadBuffer& buffer) { 34d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org return SkNEW_ARGS(SkAnnotation, (buffer)); 35d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org } 36d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org 37b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com /** 384979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com * Return the data for the specified key, or NULL. 39b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 404979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com SkData* find(const char key[]) const; 41b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 428b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org void writeToBuffer(SkWriteBuffer&) const; 43b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 44b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comprivate: 45d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org SkAnnotation(const char key[], SkData* value); 46d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org SkAnnotation(SkReadBuffer&); 47d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org 484979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com SkString fKey; 494979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com SkData* fData; 50fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 510cd2ac6c721120a2628524dad91798aa3e7ec41dreed@google.com typedef SkRefCnt INHERITED; 52b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com}; 53b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 54b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/** 55b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Experimental collection of predefined Keys into the Annotation dictionary 56b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 57b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comclass SkAnnotationKeys { 58b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.compublic: 59b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com /** 60b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Returns the canonical key whose payload is a URL 61b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 62b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com static const char* URL_Key(); 63b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 64b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com /** 65b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Returns the canonical key whose payload is the name of a destination to 66b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * be defined. 67b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com */ 68b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com static const char* Define_Named_Dest_Key(); 69b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 70b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com /** 71b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Returns the canonical key whose payload is the name of a destination to 72b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * be linked to. 73b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com */ 74b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com static const char* Link_Named_Dest_Key(); 75b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com}; 76b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 77b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/////////////////////////////////////////////////////////////////////////////// 78b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com// 79b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com// Experimental helper functions to use Annotations 80b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com// 81b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 82b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comstruct SkRect; 83b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comclass SkCanvas; 84b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 85b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/** 86b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Experimental! 87b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * 88b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * Annotate the canvas by associating the specified URL with the 89b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * specified rectangle (in local coordinates, just like drawRect). If the 90b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * backend of this canvas does not support annotations, this call is 91b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * safely ignored. 92b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * 93b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com * The caller is responsible for managing its ownership of the SkData. 94b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com */ 95b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comSK_API void SkAnnotateRectWithURL(SkCanvas*, const SkRect&, SkData*); 96b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 97b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com/** 98b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Experimental! 99b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 100b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Annotate the canvas by associating a name with the specified point. 101b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 102b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * If the backend of this canvas does not support annotations, this call is 103b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * safely ignored. 104b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 105b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * The caller is responsible for managing its ownership of the SkData. 106b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com */ 107b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comSK_API void SkAnnotateNamedDestination(SkCanvas*, const SkPoint&, SkData*); 108b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 109b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com/** 110b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Experimental! 111b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 112b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * Annotate the canvas by making the specified rectangle link to a named 113b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * destination. 114b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 115b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * If the backend of this canvas does not support annotations, this call is 116b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * safely ignored. 117b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * 118b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com * The caller is responsible for managing its ownership of the SkData. 119b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com */ 120b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comSK_API void SkAnnotateLinkToDestination(SkCanvas*, const SkRect&, SkData*); 121b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 122b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 123b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com#endif 124