1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkAnnotation.h" 9 #include "SkDataSet.h" 10 #include "SkFlattenableBuffers.h" 11 #include "SkStream.h" 12 13 SkAnnotation::SkAnnotation(SkDataSet* data, uint32_t flags) { 14 if (NULL == data) { 15 data = SkDataSet::NewEmpty(); 16 } else { 17 data->ref(); 18 } 19 fDataSet = data; 20 fFlags = flags; 21 } 22 23 SkAnnotation::~SkAnnotation() { 24 fDataSet->unref(); 25 } 26 27 SkData* SkAnnotation::find(const char name[]) const { 28 return fDataSet->find(name); 29 } 30 31 SkAnnotation::SkAnnotation(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 32 fFlags = buffer.readUInt(); 33 fDataSet = buffer.readFlattenableT<SkDataSet>(); 34 } 35 36 void SkAnnotation::flatten(SkFlattenableWriteBuffer& buffer) const { 37 buffer.writeUInt(fFlags); 38 buffer.writeFlattenable(fDataSet); 39 } 40 41 const char* SkAnnotationKeys::URL_Key() { 42 return "SkAnnotationKey_URL"; 43 }; 44 45 /////////////////////////////////////////////////////////////////////////////// 46 47 #include "SkCanvas.h" 48 49 void SkAnnotateRectWithURL(SkCanvas* canvas, const SkRect& rect, SkData* value) { 50 if (NULL == value) { 51 return; 52 } 53 54 const char* key = SkAnnotationKeys::URL_Key(); 55 SkAutoTUnref<SkDataSet> dataset(SkNEW_ARGS(SkDataSet, (key, value))); 56 SkAnnotation* ann = SkNEW_ARGS(SkAnnotation, (dataset, 57 SkAnnotation::kNoDraw_Flag)); 58 59 SkPaint paint; 60 paint.setAnnotation(ann)->unref(); 61 SkASSERT(paint.isNoDrawAnnotation()); 62 63 canvas->drawRect(rect, paint); 64 } 65