Home | History | Annotate | Download | only in core
      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