• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SkPaints only have an SkPaintOptionsAndroid if SK_BUILD_FOR_ANDROID is true.
2 #ifdef SK_BUILD_FOR_ANDROID
3 
4 #include "SkReadBuffer.h"
5 #include "SkWriteBuffer.h"
6 #include "SkPaint.h"
7 #include "SkPaintOptionsAndroid.h"
8 #include "Test.h"
9 
Reconstruct(const SkPaint & src,SkPaint * dst)10 static size_t Reconstruct(const SkPaint& src, SkPaint* dst) {
11     SkWriteBuffer writer;
12     src.flatten(writer);
13 
14     const size_t size = writer.bytesWritten();
15     SkAutoMalloc bytes(size);
16     writer.writeToMemory(bytes.get());
17 
18     SkReadBuffer reader(bytes.get(), size);
19     dst->unflatten(reader);
20 
21     return size;
22 }
23 
DEF_TEST(AndroidOptionsSerialization,reporter)24 DEF_TEST(AndroidOptionsSerialization, reporter) {
25     // We want to make sure that Android's paint options survive a flatten/unflatten round trip.
26     // These are all non-default options.
27     SkPaintOptionsAndroid options;
28     options.setLanguage("ja-JP");
29     options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant);
30     options.setUseFontFallbacks(true);
31 
32     SkPaint paint;
33     paint.setPaintOptionsAndroid(options);
34 
35     SkPaint reconstructed;
36     Reconstruct(paint, &reconstructed);
37 
38     REPORTER_ASSERT(reporter, options == reconstructed.getPaintOptionsAndroid());
39 }
40 
DEF_TEST(AndroidOptionsSerializationReverse,reporter)41 DEF_TEST(AndroidOptionsSerializationReverse, reporter) {
42     // Opposite test of above: make sure the serialized default values of a paint overwrite
43     // non-default values on the paint we're unflattening into.
44     const SkPaint defaultOptions;
45 
46     SkPaintOptionsAndroid options;
47     options.setLanguage("ja-JP");
48     options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant);
49     options.setUseFontFallbacks(true);
50     SkPaint nonDefaultOptions;
51     nonDefaultOptions.setPaintOptionsAndroid(options);
52 
53     Reconstruct(defaultOptions, &nonDefaultOptions);
54 
55     REPORTER_ASSERT(reporter,
56             defaultOptions.getPaintOptionsAndroid() ==
57             nonDefaultOptions.getPaintOptionsAndroid());
58 }
59 
DEF_TEST(AndroidOptionsSize,reporter)60 DEF_TEST(AndroidOptionsSize, reporter) {
61     // A paint with default android options should serialize to something smaller than
62     // a paint with non-default android options.
63 
64     SkPaint defaultOptions;
65 
66     SkPaintOptionsAndroid options;
67     options.setUseFontFallbacks(true);
68     SkPaint nonDefaultOptions;
69     nonDefaultOptions.setPaintOptionsAndroid(options);
70 
71     SkPaint dummy;
72 
73     REPORTER_ASSERT(reporter,
74                     Reconstruct(defaultOptions, &dummy) < Reconstruct(nonDefaultOptions, &dummy));
75 }
76 
77 #endif  // SK_BUILD_FOR_ANDROID
78