| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2012 Google Inc. | 2  * Copyright 2012 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkAnnotation.h" | 8 #include "SkAnnotation.h" | 
| 9 #include "SkDataSet.h" | 9 #include "SkData.h" | 
| 10 #include "SkFlattenableBuffers.h" | 10 #include "SkFlattenableBuffers.h" | 
| 11 #include "SkPoint.h" | 11 #include "SkPoint.h" | 
| 12 #include "SkStream.h" | 12 #include "SkStream.h" | 
| 13 | 13 | 
| 14 SkAnnotation::SkAnnotation(SkDataSet* data, uint32_t flags) { | 14 SkAnnotation::SkAnnotation(const char key[], SkData* value, uint32_t flags) | 
| 15     if (NULL == data) { | 15         : fKey(key) { | 
| 16         data = SkDataSet::NewEmpty(); | 16     if (NULL == value) { | 
|  | 17         value = SkData::NewEmpty(); | 
| 17     } else { | 18     } else { | 
| 18         data->ref(); | 19         value->ref(); | 
| 19     } | 20     } | 
| 20     fDataSet = data; | 21     fData = value; | 
| 21     fFlags = flags; | 22     fFlags = flags; | 
| 22 } | 23 } | 
| 23 | 24 | 
| 24 SkAnnotation::~SkAnnotation() { | 25 SkAnnotation::~SkAnnotation() { | 
| 25     fDataSet->unref(); | 26     fData->unref(); | 
| 26 } | 27 } | 
| 27 | 28 | 
| 28 SkData* SkAnnotation::find(const char name[]) const { | 29 SkData* SkAnnotation::find(const char key[]) const { | 
| 29     return fDataSet->find(name); | 30     return fKey.equals(key) ? fData : NULL; | 
| 30 } | 31 } | 
| 31 | 32 | 
| 32 SkAnnotation::SkAnnotation(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) 
    { | 33 SkAnnotation::SkAnnotation(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) 
    { | 
| 33     fFlags = buffer.readUInt(); | 34     fFlags = buffer.readUInt(); | 
| 34     fDataSet = buffer.readFlattenableT<SkDataSet>(); | 35     buffer.readString(&fKey); | 
|  | 36     fData = buffer.readByteArrayAsData(); | 
| 35 } | 37 } | 
| 36 | 38 | 
| 37 void SkAnnotation::flatten(SkFlattenableWriteBuffer& buffer) const { | 39 void SkAnnotation::flatten(SkFlattenableWriteBuffer& buffer) const { | 
| 38     buffer.writeUInt(fFlags); | 40     buffer.writeUInt(fFlags); | 
| 39     buffer.writeFlattenable(fDataSet); | 41     buffer.writeString(fKey.c_str()); | 
|  | 42     buffer.writeDataAsByteArray(fData); | 
| 40 } | 43 } | 
| 41 | 44 | 
| 42 const char* SkAnnotationKeys::URL_Key() { | 45 const char* SkAnnotationKeys::URL_Key() { | 
| 43     return "SkAnnotationKey_URL"; | 46     return "SkAnnotationKey_URL"; | 
| 44 }; | 47 }; | 
| 45 | 48 | 
| 46 const char* SkAnnotationKeys::Define_Named_Dest_Key() { | 49 const char* SkAnnotationKeys::Define_Named_Dest_Key() { | 
| 47     return "SkAnnotationKey_Define_Named_Dest"; | 50     return "SkAnnotationKey_Define_Named_Dest"; | 
| 48 }; | 51 }; | 
| 49 | 52 | 
| 50 const char* SkAnnotationKeys::Link_Named_Dest_Key() { | 53 const char* SkAnnotationKeys::Link_Named_Dest_Key() { | 
| 51     return "SkAnnotationKey_Link_Named_Dest"; | 54     return "SkAnnotationKey_Link_Named_Dest"; | 
| 52 }; | 55 }; | 
| 53 | 56 | 
| 54 /////////////////////////////////////////////////////////////////////////////// | 57 /////////////////////////////////////////////////////////////////////////////// | 
| 55 | 58 | 
| 56 #include "SkCanvas.h" | 59 #include "SkCanvas.h" | 
| 57 | 60 | 
| 58 static void annotate_paint(SkPaint& paint, const char* key, SkData* value) { | 61 static void annotate_paint(SkPaint& paint, const char* key, SkData* value) { | 
| 59     SkAutoTUnref<SkDataSet> dataset(SkNEW_ARGS(SkDataSet, (key, value))); | 62     SkAnnotation* ann = SkNEW_ARGS(SkAnnotation, (key, value, | 
| 60     SkAnnotation* ann = SkNEW_ARGS(SkAnnotation, (dataset, |  | 
| 61                                                   SkAnnotation::kNoDraw_Flag)); | 63                                                   SkAnnotation::kNoDraw_Flag)); | 
| 62 | 64 | 
| 63     paint.setAnnotation(ann)->unref(); | 65     paint.setAnnotation(ann)->unref(); | 
| 64     SkASSERT(paint.isNoDrawAnnotation()); | 66     SkASSERT(paint.isNoDrawAnnotation()); | 
| 65 } | 67 } | 
| 66 | 68 | 
| 67 void SkAnnotateRectWithURL(SkCanvas* canvas, const SkRect& rect, SkData* value) 
    { | 69 void SkAnnotateRectWithURL(SkCanvas* canvas, const SkRect& rect, SkData* value) 
    { | 
| 68     if (NULL == value) { | 70     if (NULL == value) { | 
| 69         return; | 71         return; | 
| 70     } | 72     } | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 83 } | 85 } | 
| 84 | 86 | 
| 85 void SkAnnotateLinkToDestination(SkCanvas* canvas, const SkRect& rect, SkData* n
    ame) { | 87 void SkAnnotateLinkToDestination(SkCanvas* canvas, const SkRect& rect, SkData* n
    ame) { | 
| 86     if (NULL == name) { | 88     if (NULL == name) { | 
| 87         return; | 89         return; | 
| 88     } | 90     } | 
| 89     SkPaint paint; | 91     SkPaint paint; | 
| 90     annotate_paint(paint, SkAnnotationKeys::Link_Named_Dest_Key(), name); | 92     annotate_paint(paint, SkAnnotationKeys::Link_Named_Dest_Key(), name); | 
| 91     canvas->drawRect(rect, paint); | 93     canvas->drawRect(rect, paint); | 
| 92 } | 94 } | 
| OLD | NEW | 
|---|