OLD | NEW |
| (Empty) |
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 "SkBitmap.h" | |
9 #include "SkCanvas.h" | |
10 #include "SkColor.h" | |
11 #include "SkColorFilter.h" | |
12 #include "SkGradientShader.h" | |
13 #include "SkPaint.h" | |
14 #include "SkPictureFlat.h" | |
15 #include "SkShader.h" | |
16 #include "SkXfermode.h" | |
17 #include "Test.h" | |
18 | |
19 struct SkFlattenableTraits { | |
20 static void Flatten(SkWriteBuffer& buffer, const SkFlattenable& flattenable)
{ | |
21 buffer.writeFlattenable(&flattenable); | |
22 } | |
23 }; | |
24 | |
25 class Controller : public SkChunkFlatController { | |
26 public: | |
27 Controller() : INHERITED(1024) { | |
28 this->INHERITED::setNamedFactorySet(SkNEW(SkNamedFactorySet))->unref(); | |
29 } | |
30 private: | |
31 typedef SkChunkFlatController INHERITED; | |
32 }; | |
33 | |
34 /** | |
35 * Verify that two SkFlatData objects that created from the same object are | |
36 * identical when using an SkNamedFactorySet. | |
37 * @param reporter Object to report failures. | |
38 * @param obj Flattenable object to be flattened. | |
39 * @param flattenProc Function that flattens objects with the same type as obj. | |
40 */ | |
41 template <typename Traits, typename T> | |
42 static void testCreate(skiatest::Reporter* reporter, const T& obj) { | |
43 Controller controller; | |
44 // No need to delete data because that will be taken care of by the controll
er. | |
45 SkFlatData* data1 = SkFlatData::Create<Traits>(&controller, obj, 0); | |
46 SkFlatData* data2 = SkFlatData::Create<Traits>(&controller, obj, 1); | |
47 REPORTER_ASSERT(reporter, *data1 == *data2); | |
48 } | |
49 | |
50 DEF_TEST(FlatData, reporter) { | |
51 // Test flattening SkShader | |
52 SkPoint points[2]; | |
53 points[0].set(0, 0); | |
54 points[1].set(SkIntToScalar(20), SkIntToScalar(20)); | |
55 SkColor colors[2]; | |
56 colors[0] = SK_ColorRED; | |
57 colors[1] = SK_ColorBLUE; | |
58 | |
59 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points, colors,
NULL, 2, | |
60 SkShader::kRepe
at_TileMode)); | |
61 testCreate<SkFlattenableTraits>(reporter, *shader); | |
62 | |
63 // Test SkColorFilter | |
64 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateLightingFilter(SK_ColorB
LUE, SK_ColorRED)); | |
65 testCreate<SkFlattenableTraits>(reporter, *cf); | |
66 | |
67 // Test SkXfermode | |
68 SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(SkXfermode::kDstOver_Mode))
; | |
69 testCreate<SkFlattenableTraits>(reporter, *xfer); | |
70 } | |
OLD | NEW |