OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "SkAnnotationKeys.h" |
8 #include "Resources.h" | 9 #include "Resources.h" |
9 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
10 #include "SkFixed.h" | 11 #include "SkFixed.h" |
11 #include "SkFontDescriptor.h" | 12 #include "SkFontDescriptor.h" |
12 #include "SkImage.h" | 13 #include "SkImage.h" |
13 #include "SkImageSource.h" | 14 #include "SkImageSource.h" |
14 #include "SkMallocPixelRef.h" | 15 #include "SkMallocPixelRef.h" |
15 #include "SkOSFile.h" | 16 #include "SkOSFile.h" |
16 #include "SkPictureRecorder.h" | 17 #include "SkPictureRecorder.h" |
17 #include "SkTableColorFilter.h" | 18 #include "SkTableColorFilter.h" |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 | 540 |
540 // Deserialize picture | 541 // Deserialize picture |
541 SkValidatingReadBuffer reader(static_cast<void*>(data.get()), size); | 542 SkValidatingReadBuffer reader(static_cast<void*>(data.get()), size); |
542 SkAutoTUnref<SkPicture> readPict( | 543 SkAutoTUnref<SkPicture> readPict( |
543 SkPicture::CreateFromBuffer(reader)); | 544 SkPicture::CreateFromBuffer(reader)); |
544 REPORTER_ASSERT(reporter, readPict.get()); | 545 REPORTER_ASSERT(reporter, readPict.get()); |
545 } | 546 } |
546 | 547 |
547 TestPictureTypefaceSerialization(reporter); | 548 TestPictureTypefaceSerialization(reporter); |
548 } | 549 } |
| 550 |
| 551 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 552 #include "SkAnnotation.h" |
| 553 |
| 554 static SkPicture* copy_picture_via_serialization(SkPicture* src) { |
| 555 SkDynamicMemoryWStream wstream; |
| 556 src->serialize(&wstream); |
| 557 SkAutoTDelete<SkStreamAsset> rstream(wstream.detachAsStream()); |
| 558 return SkPicture::CreateFromStream(rstream); |
| 559 } |
| 560 |
| 561 struct AnnotationRec { |
| 562 const SkRect fRect; |
| 563 const char* fKey; |
| 564 SkData* fValue; |
| 565 }; |
| 566 |
| 567 class TestAnnotationCanvas : public SkCanvas { |
| 568 skiatest::Reporter* fReporter; |
| 569 const AnnotationRec* fRec; |
| 570 int fCount; |
| 571 int fCurrIndex; |
| 572 |
| 573 public: |
| 574 TestAnnotationCanvas(skiatest::Reporter* reporter, const AnnotationRec rec[]
, int count) |
| 575 : SkCanvas(100, 100) |
| 576 , fReporter(reporter) |
| 577 , fRec(rec) |
| 578 , fCount(count) |
| 579 , fCurrIndex(0) |
| 580 {} |
| 581 |
| 582 ~TestAnnotationCanvas() { |
| 583 REPORTER_ASSERT(fReporter, fCount == fCurrIndex); |
| 584 } |
| 585 |
| 586 protected: |
| 587 void onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) { |
| 588 REPORTER_ASSERT(fReporter, fCurrIndex < fCount); |
| 589 REPORTER_ASSERT(fReporter, rect == fRec[fCurrIndex].fRect); |
| 590 REPORTER_ASSERT(fReporter, !strcmp(key, fRec[fCurrIndex].fKey)); |
| 591 REPORTER_ASSERT(fReporter, value->equals(fRec[fCurrIndex].fValue)); |
| 592 fCurrIndex += 1; |
| 593 } |
| 594 }; |
| 595 |
| 596 /* |
| 597 * Test the 3 annotation types by recording them into a picture, serializing, a
nd then playing |
| 598 * them back into another canvas. |
| 599 */ |
| 600 DEF_TEST(Annotations, reporter) { |
| 601 SkPictureRecorder recorder; |
| 602 SkCanvas* recordingCanvas = recorder.beginRecording(SkRect::MakeWH(100, 100)
); |
| 603 |
| 604 const char* str0 = "rect-with-url"; |
| 605 const SkRect r0 = SkRect::MakeWH(10, 10); |
| 606 SkAutoTUnref<SkData> d0(SkData::NewWithCString(str0)); |
| 607 SkAnnotateRectWithURL(recordingCanvas, r0, d0); |
| 608 |
| 609 const char* str1 = "named-destination"; |
| 610 const SkRect r1 = SkRect::MakeXYWH(5, 5, 0, 0); // collapsed to a point |
| 611 SkAutoTUnref<SkData> d1(SkData::NewWithCString(str1)); |
| 612 SkAnnotateNamedDestination(recordingCanvas, {r1.x(), r1.y()}, d1); |
| 613 |
| 614 const char* str2 = "link-to-destination"; |
| 615 const SkRect r2 = SkRect::MakeXYWH(20, 20, 5, 6); |
| 616 SkAutoTUnref<SkData> d2(SkData::NewWithCString(str2)); |
| 617 SkAnnotateLinkToDestination(recordingCanvas, r2, d2); |
| 618 |
| 619 const AnnotationRec recs[] = { |
| 620 { r0, SkAnnotationKeys::URL_Key(), d0 }, |
| 621 { r1, SkAnnotationKeys::Define_Named_Dest_Key(), d1 }, |
| 622 { r2, SkAnnotationKeys::Link_Named_Dest_Key(), d2 }, |
| 623 }; |
| 624 |
| 625 SkAutoTUnref<SkPicture> pict0(recorder.endRecording()); |
| 626 SkAutoTUnref<SkPicture> pict1(copy_picture_via_serialization(pict0)); |
| 627 |
| 628 TestAnnotationCanvas canvas(reporter, recs, SK_ARRAY_COUNT(recs)); |
| 629 canvas.drawPicture(pict1); |
| 630 } |
| 631 |
OLD | NEW |