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#include "SkAnnotation.h" 94979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com#include "SkData.h" 102880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkPaint.h" 112880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkPoint.h" 128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h" 138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h" 14b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 15950923b43761c10d9c8ffc1dfc0c878100d1e702commit-bot@chromium.orgSkAnnotation::SkAnnotation(const char key[], SkData* value) : fKey(key) { 162880df2609eba09b555ca37be04b6ad89290c765Tom Hudson if (nullptr == value) { 174979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com value = SkData::NewEmpty(); 18b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com } else { 194979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com value->ref(); 20b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com } 214979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com fData = value; 22b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com} 23b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 24b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comSkAnnotation::~SkAnnotation() { 254979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com fData->unref(); 26b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com} 27b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 284979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.comSkData* SkAnnotation::find(const char key[]) const { 292880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return fKey.equals(key) ? fData : nullptr; 30238be8c7e5de5a83517440a3db7f7965b47fb010vandebo@chromium.org} 31238be8c7e5de5a83517440a3db7f7965b47fb010vandebo@chromium.org 328b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgSkAnnotation::SkAnnotation(SkReadBuffer& buffer) { 334979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com buffer.readString(&fKey); 344979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com fData = buffer.readByteArrayAsData(); 35b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com} 36b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 378b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgvoid SkAnnotation::writeToBuffer(SkWriteBuffer& buffer) const { 384979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com buffer.writeString(fKey.c_str()); 394979f32cd3fd29db5f23712f0aea3cf01a5c695dreed@google.com buffer.writeDataAsByteArray(fData); 40b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com} 41b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 42b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.comconst char* SkAnnotationKeys::URL_Key() { 43b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com return "SkAnnotationKey_URL"; 44b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com}; 45b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 46b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comconst char* SkAnnotationKeys::Define_Named_Dest_Key() { 47b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com return "SkAnnotationKey_Define_Named_Dest"; 48b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com}; 49b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 50b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comconst char* SkAnnotationKeys::Link_Named_Dest_Key() { 51b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com return "SkAnnotationKey_Link_Named_Dest"; 52b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com}; 53b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 54b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com/////////////////////////////////////////////////////////////////////////////// 55b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 56b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com#include "SkCanvas.h" 57b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com 58b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comstatic void annotate_paint(SkPaint& paint, const char* key, SkData* value) { 59d957984c1efbd18f3b2bbeca78d282837c5a2ae1commit-bot@chromium.org paint.setAnnotation(SkAnnotation::Create(key, value))->unref(); 60b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com} 61812b6f59fafc213260a56a4a4264ebf23646f662epoger@google.com 62b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comvoid SkAnnotateRectWithURL(SkCanvas* canvas, const SkRect& rect, SkData* value) { 632880df2609eba09b555ca37be04b6ad89290c765Tom Hudson if (nullptr == value) { 64b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com return; 65b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com } 66b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com SkPaint paint; 67b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com annotate_paint(paint, SkAnnotationKeys::URL_Key(), value); 68b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com canvas->drawRect(rect, paint); 69b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com} 70b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 71b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comvoid SkAnnotateNamedDestination(SkCanvas* canvas, const SkPoint& point, SkData* name) { 722880df2609eba09b555ca37be04b6ad89290c765Tom Hudson if (nullptr == name) { 73b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com return; 74b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com } 75b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com SkPaint paint; 76b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com annotate_paint(paint, SkAnnotationKeys::Define_Named_Dest_Key(), name); 77b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com canvas->drawPoint(point.x(), point.y(), paint); 78b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com} 79b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com 80b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.comvoid SkAnnotateLinkToDestination(SkCanvas* canvas, const SkRect& rect, SkData* name) { 812880df2609eba09b555ca37be04b6ad89290c765Tom Hudson if (nullptr == name) { 82b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com return; 83b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com } 84b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com SkPaint paint; 85b58772f86659cfe0e8d9247fcee878dddd8fdad9epoger@google.com annotate_paint(paint, SkAnnotationKeys::Link_Named_Dest_Key(), name); 86b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com canvas->drawRect(rect, paint); 87b0a34d80c5c7b06db8083a547f8e499781a9c169reed@google.com} 88