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 "SkData.h"
     10 #include "SkFlattenableBuffers.h"
     11 #include "SkPoint.h"
     12 #include "SkStream.h"
     13 
     14 SkAnnotation::SkAnnotation(const char key[], SkData* value) : fKey(key) {
     15     if (NULL == value) {
     16         value = SkData::NewEmpty();
     17     } else {
     18         value->ref();
     19     }
     20     fData = value;
     21 }
     22 
     23 SkAnnotation::~SkAnnotation() {
     24     fData->unref();
     25 }
     26 
     27 SkData* SkAnnotation::find(const char key[]) const {
     28     return fKey.equals(key) ? fData : NULL;
     29 }
     30 
     31 SkAnnotation::SkAnnotation(SkFlattenableReadBuffer& buffer) {
     32     buffer.readString(&fKey);
     33     fData = buffer.readByteArrayAsData();
     34 }
     35 
     36 void SkAnnotation::writeToBuffer(SkFlattenableWriteBuffer& buffer) const {
     37     buffer.writeString(fKey.c_str());
     38     buffer.writeDataAsByteArray(fData);
     39 }
     40 
     41 const char* SkAnnotationKeys::URL_Key() {
     42     return "SkAnnotationKey_URL";
     43 };
     44 
     45 const char* SkAnnotationKeys::Define_Named_Dest_Key() {
     46     return "SkAnnotationKey_Define_Named_Dest";
     47 };
     48 
     49 const char* SkAnnotationKeys::Link_Named_Dest_Key() {
     50     return "SkAnnotationKey_Link_Named_Dest";
     51 };
     52 
     53 ///////////////////////////////////////////////////////////////////////////////
     54 
     55 #include "SkCanvas.h"
     56 
     57 static void annotate_paint(SkPaint& paint, const char* key, SkData* value) {
     58     paint.setAnnotation(SkNEW_ARGS(SkAnnotation, (key, value)))->unref();
     59 }
     60 
     61 void SkAnnotateRectWithURL(SkCanvas* canvas, const SkRect& rect, SkData* value) {
     62     if (NULL == value) {
     63         return;
     64     }
     65     SkPaint paint;
     66     annotate_paint(paint, SkAnnotationKeys::URL_Key(), value);
     67     canvas->drawRect(rect, paint);
     68 }
     69 
     70 void SkAnnotateNamedDestination(SkCanvas* canvas, const SkPoint& point, SkData* name) {
     71     if (NULL == name) {
     72         return;
     73     }
     74     SkPaint paint;
     75     annotate_paint(paint, SkAnnotationKeys::Define_Named_Dest_Key(), name);
     76     canvas->drawPoint(point.x(), point.y(), paint);
     77 }
     78 
     79 void SkAnnotateLinkToDestination(SkCanvas* canvas, const SkRect& rect, SkData* name) {
     80     if (NULL == name) {
     81         return;
     82     }
     83     SkPaint paint;
     84     annotate_paint(paint, SkAnnotationKeys::Link_Named_Dest_Key(), name);
     85     canvas->drawRect(rect, paint);
     86 }
     87