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