Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: tests/LayerDrawLooperTest.cpp

Issue 155513012: [WIP] Add Context to SkDrawLooper. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Use SkSmallAllocator Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkBitmapDevice.h" 9 #include "SkBitmapDevice.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 // Add the back layer, with some layer info set. 50 // Add the back layer, with some layer info set.
51 layerInfo.fOffset.set(10.0f, 20.0f); 51 layerInfo.fOffset.set(10.0f, 20.0f);
52 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit; 52 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit;
53 SkPaint* layerPaint = looperBuilder.addLayer(layerInfo); 53 SkPaint* layerPaint = looperBuilder.addLayer(layerInfo);
54 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode); 54 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode);
55 55
56 FakeDevice device; 56 FakeDevice device;
57 SkCanvas canvas(&device); 57 SkCanvas canvas(&device);
58 SkPaint paint; 58 SkPaint paint;
59 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper()); 59 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
60 looper->init(&canvas); 60 SkDrawLooper::ContextAllocator allocator;
61 SkDrawLooper::Context* context = looper->init(&canvas, &allocator);
61 62
62 // The back layer should come first. 63 // The back layer should come first.
63 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 64 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
64 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode)); 65 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode));
65 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 66 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
66 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX()); 67 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
67 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY()); 68 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY());
68 paint.reset(); 69 paint.reset();
69 70
70 // Then the front layer. 71 // Then the front layer.
71 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 72 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
72 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode)); 73 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode));
73 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 74 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
74 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX()); 75 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
75 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY()); 76 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY());
76 77
77 // Only two layers were added, so that should be the end. 78 // Only two layers were added, so that should be the end.
78 REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint)); 79 REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
79 } 80 }
80 81
81 static void test_backToFront(skiatest::Reporter* reporter) { 82 static void test_backToFront(skiatest::Reporter* reporter) {
82 SkLayerDrawLooper::Builder looperBuilder; 83 SkLayerDrawLooper::Builder looperBuilder;
83 SkLayerDrawLooper::LayerInfo layerInfo; 84 SkLayerDrawLooper::LayerInfo layerInfo;
84 85
85 // Add the back layer, with the defaults. 86 // Add the back layer, with the defaults.
86 (void)looperBuilder.addLayerOnTop(layerInfo); 87 (void)looperBuilder.addLayerOnTop(layerInfo);
87 88
88 // Add the front layer, with some layer info set. 89 // Add the front layer, with some layer info set.
89 layerInfo.fOffset.set(10.0f, 20.0f); 90 layerInfo.fOffset.set(10.0f, 20.0f);
90 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit; 91 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit;
91 SkPaint* layerPaint = looperBuilder.addLayerOnTop(layerInfo); 92 SkPaint* layerPaint = looperBuilder.addLayerOnTop(layerInfo);
92 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode); 93 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode);
93 94
94 FakeDevice device; 95 FakeDevice device;
95 SkCanvas canvas(&device); 96 SkCanvas canvas(&device);
96 SkPaint paint; 97 SkPaint paint;
97 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper()); 98 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
98 looper->init(&canvas); 99 SkDrawLooper::ContextAllocator allocator;
100 SkDrawLooper::Context* context = looper->init(&canvas, &allocator);
99 101
100 // The back layer should come first. 102 // The back layer should come first.
101 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 103 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
102 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode)); 104 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode));
103 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 105 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
104 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX()); 106 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
105 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY()); 107 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY());
106 paint.reset(); 108 paint.reset();
107 109
108 // Then the front layer. 110 // Then the front layer.
109 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 111 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
110 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode)); 112 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode));
111 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 113 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
112 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX()); 114 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
113 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY()); 115 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY());
114 116
115 // Only two layers were added, so that should be the end. 117 // Only two layers were added, so that should be the end.
116 REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint)); 118 REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
117 } 119 }
118 120
119 static void test_mixed(skiatest::Reporter* reporter) { 121 static void test_mixed(skiatest::Reporter* reporter) {
120 SkLayerDrawLooper::Builder looperBuilder; 122 SkLayerDrawLooper::Builder looperBuilder;
121 SkLayerDrawLooper::LayerInfo layerInfo; 123 SkLayerDrawLooper::LayerInfo layerInfo;
122 124
123 // Add the back layer, with the defaults. 125 // Add the back layer, with the defaults.
124 (void)looperBuilder.addLayer(layerInfo); 126 (void)looperBuilder.addLayer(layerInfo);
125 127
126 // Add the front layer, with some layer info set. 128 // Add the front layer, with some layer info set.
127 layerInfo.fOffset.set(10.0f, 20.0f); 129 layerInfo.fOffset.set(10.0f, 20.0f);
128 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit; 130 layerInfo.fPaintBits |= SkLayerDrawLooper::kXfermode_Bit;
129 SkPaint* layerPaint = looperBuilder.addLayerOnTop(layerInfo); 131 SkPaint* layerPaint = looperBuilder.addLayerOnTop(layerInfo);
130 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode); 132 layerPaint->setXfermodeMode(SkXfermode::kSrc_Mode);
131 133
132 FakeDevice device; 134 FakeDevice device;
133 SkCanvas canvas(&device); 135 SkCanvas canvas(&device);
134 SkPaint paint; 136 SkPaint paint;
135 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper()); 137 SkAutoTUnref<SkLayerDrawLooper> looper(looperBuilder.detachLooper());
136 looper->init(&canvas); 138 SkDrawLooper::ContextAllocator allocator;
139 SkDrawLooper::Context* context = looper->init(&canvas, &allocator);
137 140
138 // The back layer should come first. 141 // The back layer should come first.
139 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 142 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
140 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode)); 143 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrcOver_Mode));
141 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 144 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
142 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX()); 145 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateX());
143 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY()); 146 REPORTER_ASSERT(reporter, 0.0f == device.fLastMatrix.getTranslateY());
144 paint.reset(); 147 paint.reset();
145 148
146 // Then the front layer. 149 // Then the front layer.
147 REPORTER_ASSERT(reporter, looper->next(&canvas, &paint)); 150 REPORTER_ASSERT(reporter, context->next(&canvas, &paint));
148 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode)); 151 REPORTER_ASSERT(reporter, SkXfermode::IsMode(paint.getXfermode(), SkXfermode ::kSrc_Mode));
149 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint); 152 canvas.drawRect(SkRect::MakeWH(50.0f, 50.0f), paint);
150 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX()); 153 REPORTER_ASSERT(reporter, 10.0f == device.fLastMatrix.getTranslateX());
151 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY()); 154 REPORTER_ASSERT(reporter, 20.0f == device.fLastMatrix.getTranslateY());
152 155
153 // Only two layers were added, so that should be the end. 156 // Only two layers were added, so that should be the end.
154 REPORTER_ASSERT(reporter, !looper->next(&canvas, &paint)); 157 REPORTER_ASSERT(reporter, !context->next(&canvas, &paint));
155 } 158 }
156 159
157 DEF_TEST(LayerDrawLooper, reporter) { 160 DEF_TEST(LayerDrawLooper, reporter) {
158 test_frontToBack(reporter); 161 test_frontToBack(reporter);
159 test_backToFront(reporter); 162 test_backToFront(reporter);
160 test_mixed(reporter); 163 test_mixed(reporter);
161 } 164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698