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

Side by Side Diff: Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp

Issue 14550002: Making GraphicsContext the owner of PlatformContext. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixing tests and addressing comments. Created 7 years, 7 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 } 65 }
66 66
67 TEST(PlatformContextSkiaTest, trackOpaqueTest) 67 TEST(PlatformContextSkiaTest, trackOpaqueTest)
68 { 68 {
69 SkBitmap bitmap; 69 SkBitmap bitmap;
70 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 70 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
71 bitmap.allocPixels(); 71 bitmap.allocPixels();
72 bitmap.eraseColor(0); 72 bitmap.eraseColor(0);
73 SkCanvas canvas(bitmap); 73 SkCanvas canvas(bitmap);
74 74
75 PlatformContextSkia platformContext(&canvas); 75 GraphicsContext context(&canvas);
76 platformContext.setTrackOpaqueRegion(true); 76 PlatformContextSkia* platformContext = context.platformContext();
77 GraphicsContext context(&platformContext); 77 platformContext->setTrackOpaqueRegion(true);
78 78
79 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 79 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
80 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 80 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
81 81
82 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 82 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
83 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 83 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
84 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 84 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
85 85
86 context.fillRect(FloatRect(10, 10, 90, 90), alpha, ColorSpaceDeviceRGB, Comp ositeSourceOver); 86 context.fillRect(FloatRect(10, 10, 90, 90), alpha, ColorSpaceDeviceRGB, Comp ositeSourceOver);
87 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 87 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
88 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 88 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
89 89
90 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com positePlusLighter); 90 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com positePlusLighter);
91 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 91 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
92 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 92 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
93 93
94 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceIn); 94 context.fillRect(FloatRect(99, 13, 10, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceIn);
95 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 95 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
96 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 96 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
97 97
98 context.fillRect(FloatRect(99, 13, 10, 90), alpha, ColorSpaceDeviceRGB, Comp ositeSourceIn); 98 context.fillRect(FloatRect(99, 13, 10, 90), alpha, ColorSpaceDeviceRGB, Comp ositeSourceIn);
99 EXPECT_EQ_RECT(IntRect(10, 10, 89, 90), platformContext.opaqueRegion().asRec t()); 99 EXPECT_EQ_RECT(IntRect(10, 10, 89, 90), platformContext->opaqueRegion().asRe ct());
100 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 100 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
101 101
102 context.fillRect(FloatRect(8, 8, 3, 90), opaque, ColorSpaceDeviceRGB, Compos iteSourceOut); 102 context.fillRect(FloatRect(8, 8, 3, 90), opaque, ColorSpaceDeviceRGB, Compos iteSourceOut);
103 EXPECT_EQ_RECT(IntRect(11, 10, 88, 90), platformContext.opaqueRegion().asRec t()); 103 EXPECT_EQ_RECT(IntRect(11, 10, 88, 90), platformContext->opaqueRegion().asRe ct());
104 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 104 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
105 105
106 context.fillRect(FloatRect(30, 30, 290, 290), opaque, ColorSpaceDeviceRGB, C ompositeSourceOver); 106 context.fillRect(FloatRect(30, 30, 290, 290), opaque, ColorSpaceDeviceRGB, C ompositeSourceOver);
107 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR ect()); 107 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext->opaqueRegion().as Rect());
108 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 108 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
109 109
110 context.fillRect(FloatRect(40, 20, 290, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceOver); 110 context.fillRect(FloatRect(40, 20, 290, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceOver);
111 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR ect()); 111 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext->opaqueRegion().as Rect());
112 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 112 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
113 113
114 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceIn); 114 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceIn);
115 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR ect()); 115 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext->opaqueRegion().as Rect());
116 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 116 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
117 117
118 context.fillRect(FloatRect(10, 10, 390, 50), alpha, ColorSpaceDeviceRGB); 118 context.fillRect(FloatRect(10, 10, 390, 50), alpha, ColorSpaceDeviceRGB);
119 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext.opaqueRegion().asR ect()); 119 EXPECT_EQ_RECT(IntRect(30, 30, 290, 290), platformContext->opaqueRegion().as Rect());
120 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 120 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
121 121
122 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceOver); 122 context.fillRect(FloatRect(10, 10, 390, 50), opaque, ColorSpaceDeviceRGB, Co mpositeSourceOver);
123 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), platformContext.opaqueRegion().asR ect()); 123 EXPECT_EQ_RECT(IntRect(30, 10, 290, 310), platformContext->opaqueRegion().as Rect());
124 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 124 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
125 } 125 }
126 126
127 TEST(PlatformContextSkiaTest, trackOpaqueClipTest) 127 TEST(PlatformContextSkiaTest, trackOpaqueClipTest)
128 { 128 {
129 SkBitmap bitmap; 129 SkBitmap bitmap;
130 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 130 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
131 bitmap.allocPixels(); 131 bitmap.allocPixels();
132 SkCanvas canvas(bitmap); 132 SkCanvas canvas(bitmap);
133 133
134 PlatformContextSkia platformContext(&canvas); 134 GraphicsContext context(&canvas);
135 platformContext.setTrackOpaqueRegion(true); 135 PlatformContextSkia* platformContext = context.platformContext();
136 GraphicsContext context(&platformContext); 136 platformContext->setTrackOpaqueRegion(true);
137 137
138 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 138 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
139 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 139 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
140 140
141 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 141 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
142 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 142 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
143 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 143 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
144 144
145 context.clearRect(FloatRect(10, 10, 90, 90)); 145 context.clearRect(FloatRect(10, 10, 90, 90));
146 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 146 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
147 147
148 context.save(); 148 context.save();
149 context.clip(FloatRect(0, 0, 10, 10)); 149 context.clip(FloatRect(0, 0, 10, 10));
150 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 150 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
151 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 151 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
152 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 152 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
153 context.restore(); 153 context.restore();
154 154
155 context.clearRect(FloatRect(10, 10, 90, 90)); 155 context.clearRect(FloatRect(10, 10, 90, 90));
156 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 156 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
157 157
158 context.save(); 158 context.save();
159 context.clip(FloatRect(20, 20, 10, 10)); 159 context.clip(FloatRect(20, 20, 10, 10));
160 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 160 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
161 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec t()); 161 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext->opaqueRegion().asRe ct());
162 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 162 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
163 163
164 context.clearRect(FloatRect(10, 10, 90, 90)); 164 context.clearRect(FloatRect(10, 10, 90, 90));
165 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 165 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
166 166
167 // The intersection of the two clips becomes empty. 167 // The intersection of the two clips becomes empty.
168 context.clip(FloatRect(30, 20, 10, 10)); 168 context.clip(FloatRect(30, 20, 10, 10));
169 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 169 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
170 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 170 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
171 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 171 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
172 context.restore(); 172 context.restore();
173 173
174 context.clearRect(FloatRect(10, 10, 90, 90)); 174 context.clearRect(FloatRect(10, 10, 90, 90));
175 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 175 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
176 176
177 // The transform and the clip need to interact correctly (transform first) 177 // The transform and the clip need to interact correctly (transform first)
178 context.save(); 178 context.save();
179 context.translate(10, 10); 179 context.translate(10, 10);
180 context.clip(FloatRect(20, 20, 10, 10)); 180 context.clip(FloatRect(20, 20, 10, 10));
181 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 181 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
182 EXPECT_EQ_RECT(IntRect(30, 30, 10, 10), platformContext.opaqueRegion().asRec t()); 182 EXPECT_EQ_RECT(IntRect(30, 30, 10, 10), platformContext->opaqueRegion().asRe ct());
183 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 183 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
184 context.restore(); 184 context.restore();
185 185
186 context.clearRect(FloatRect(10, 10, 90, 90)); 186 context.clearRect(FloatRect(10, 10, 90, 90));
187 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 187 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
188 188
189 // The transform and the clip need to interact correctly (clip first) 189 // The transform and the clip need to interact correctly (clip first)
190 context.save(); 190 context.save();
191 context.clip(FloatRect(20, 20, 10, 10)); 191 context.clip(FloatRect(20, 20, 10, 10));
192 context.translate(10, 10); 192 context.translate(10, 10);
193 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 193 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
194 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec t()); 194 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext->opaqueRegion().asRe ct());
195 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 195 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
196 context.restore(); 196 context.restore();
197 197
198 context.clearRect(FloatRect(10, 10, 90, 90)); 198 context.clearRect(FloatRect(10, 10, 90, 90));
199 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 199 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
200 200
201 Path path; 201 Path path;
202 path.moveTo(FloatPoint(0, 0)); 202 path.moveTo(FloatPoint(0, 0));
203 path.addLineTo(FloatPoint(100, 0)); 203 path.addLineTo(FloatPoint(100, 0));
204 204
205 // Non-rectangular clips just cause the paint to be considered non-opaque. 205 // Non-rectangular clips just cause the paint to be considered non-opaque.
206 context.save(); 206 context.save();
207 context.clipPath(path, RULE_EVENODD); 207 context.clipPath(path, RULE_EVENODD);
208 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 208 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
209 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 209 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
210 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 210 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
211 context.restore(); 211 context.restore();
212 212
213 // Another non-rectangular clip. 213 // Another non-rectangular clip.
214 context.save(); 214 context.save();
215 context.clip(IntRect(30, 30, 20, 20)); 215 context.clip(IntRect(30, 30, 20, 20));
216 context.clipOut(IntRect(30, 30, 10, 10)); 216 context.clipOut(IntRect(30, 30, 10, 10));
217 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 217 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
218 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 218 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
219 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 219 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
220 context.restore(); 220 context.restore();
221 221
222 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); 222 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100));
223 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB); 223 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB);
224 224
225 // Clipping with a non-opaque Image (there is no way to mark an ImageBuffer as opaque today). 225 // Clipping with a non-opaque Image (there is no way to mark an ImageBuffer as opaque today).
226 context.save(); 226 context.save();
227 context.clipToImageBuffer(alphaImage.get(), FloatRect(30, 30, 10, 10)); 227 context.clipToImageBuffer(alphaImage.get(), FloatRect(30, 30, 10, 10));
228 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 228 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
229 context.restore(); 229 context.restore();
230 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 230 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
231 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 231 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
232 } 232 }
233 233
234 TEST(PlatformContextSkiaTest, trackImageMask) 234 TEST(PlatformContextSkiaTest, trackImageMask)
235 { 235 {
236 SkBitmap bitmap; 236 SkBitmap bitmap;
237 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 237 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
238 bitmap.allocPixels(); 238 bitmap.allocPixels();
239 bitmap.eraseColor(0); 239 bitmap.eraseColor(0);
240 SkCanvas canvas(bitmap); 240 SkCanvas canvas(bitmap);
241 241
242 PlatformContextSkia platformContext(&canvas); 242 GraphicsContext context(&canvas);
243 platformContext.setTrackOpaqueRegion(true); 243 PlatformContextSkia* platformContext = context.platformContext();
244 GraphicsContext context(&platformContext); 244 platformContext->setTrackOpaqueRegion(true);
245 245
246 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 246 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
247 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 247 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
248 248
249 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask 249 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask
250 // out a transparency layer below that is filled with the mask color. In the end this should 250 // out a transparency layer below that is filled with the mask color. In the end this should
251 // not be marked opaque. 251 // not be marked opaque.
252 252
253 context.setCompositeOperation(CompositeSourceOver); 253 context.setCompositeOperation(CompositeSourceOver);
254 context.beginTransparencyLayer(1); 254 context.beginTransparencyLayer(1);
255 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 255 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
256 256
257 context.setCompositeOperation(CompositeDestinationIn); 257 context.setCompositeOperation(CompositeDestinationIn);
258 context.beginTransparencyLayer(1); 258 context.beginTransparencyLayer(1);
259 259
260 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); 260 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100));
261 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB); 261 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB);
262 262
263 context.setCompositeOperation(CompositeSourceOver); 263 context.setCompositeOperation(CompositeSourceOver);
264 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10, 10, 10, 10)); 264 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10, 10, 10, 10));
265 265
266 context.endTransparencyLayer(); 266 context.endTransparencyLayer();
267 context.endTransparencyLayer(); 267 context.endTransparencyLayer();
268 268
269 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 269 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
270 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 270 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
271 } 271 }
272 272
273 TEST(PlatformContextSkiaTest, trackImageMaskWithOpaqueRect) 273 TEST(PlatformContextSkiaTest, trackImageMaskWithOpaqueRect)
274 { 274 {
275 SkBitmap bitmap; 275 SkBitmap bitmap;
276 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 276 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
277 bitmap.allocPixels(); 277 bitmap.allocPixels();
278 bitmap.eraseColor(0); 278 bitmap.eraseColor(0);
279 SkCanvas canvas(bitmap); 279 SkCanvas canvas(bitmap);
280 280
281 PlatformContextSkia platformContext(&canvas); 281 GraphicsContext context(&canvas);
282 platformContext.setTrackOpaqueRegion(true); 282 PlatformContextSkia* platformContext = context.platformContext();
283 GraphicsContext context(&platformContext); 283 platformContext->setTrackOpaqueRegion(true);
284 284
285 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 285 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
286 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 286 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
287 287
288 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask 288 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask
289 // out a transparency layer below that is filled with the mask color. In the end this should 289 // out a transparency layer below that is filled with the mask color. In the end this should
290 // not be marked opaque. 290 // not be marked opaque.
291 291
292 context.setCompositeOperation(CompositeSourceOver); 292 context.setCompositeOperation(CompositeSourceOver);
293 context.beginTransparencyLayer(1); 293 context.beginTransparencyLayer(1);
294 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 294 context.fillRect(FloatRect(10, 10, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
295 295
296 context.setCompositeOperation(CompositeDestinationIn); 296 context.setCompositeOperation(CompositeDestinationIn);
297 context.beginTransparencyLayer(1); 297 context.beginTransparencyLayer(1);
298 298
299 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); 299 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100));
300 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB); 300 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha, ColorSpaceDe viceRGB);
301 301
302 context.setCompositeOperation(CompositeSourceOver); 302 context.setCompositeOperation(CompositeSourceOver);
303 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10, 10, 10, 10)); 303 context.drawImageBuffer(alphaImage.get(), ColorSpaceDeviceRGB, FloatRect(10, 10, 10, 10));
304 304
305 // We can't have an opaque mask actually, but we can pretend here like it wo uld look if we did. 305 // We can't have an opaque mask actually, but we can pretend here like it wo uld look if we did.
306 context.fillRect(FloatRect(12, 12, 3, 3), opaque, ColorSpaceDeviceRGB, Compo siteSourceOver); 306 context.fillRect(FloatRect(12, 12, 3, 3), opaque, ColorSpaceDeviceRGB, Compo siteSourceOver);
307 307
308 context.endTransparencyLayer(); 308 context.endTransparencyLayer();
309 context.endTransparencyLayer(); 309 context.endTransparencyLayer();
310 310
311 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), platformContext.opaqueRegion().asRect( )); 311 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), platformContext->opaqueRegion().asRect ());
312 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 312 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
313 } 313 }
314 314
315 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest) 315 TEST(PlatformContextSkiaTest, trackOpaqueJoinTest)
316 { 316 {
317 SkBitmap bitmap; 317 SkBitmap bitmap;
318 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 318 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
319 bitmap.allocPixels(); 319 bitmap.allocPixels();
320 SkCanvas canvas(bitmap); 320 SkCanvas canvas(bitmap);
321 321
322 PlatformContextSkia platformContext(&canvas); 322 GraphicsContext context(&canvas);
323 platformContext.setTrackOpaqueRegion(true); 323 PlatformContextSkia* platformContext = context.platformContext();
324 GraphicsContext context(&platformContext); 324 platformContext->setTrackOpaqueRegion(true);
325 325
326 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 326 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
327 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 327 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
328 328
329 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 329 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
330 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec t()); 330 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext->opaqueRegion().asRe ct());
331 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 331 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
332 332
333 // Doesn't join 333 // Doesn't join
334 context.fillRect(FloatRect(31, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 334 context.fillRect(FloatRect(31, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
335 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec t()); 335 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext->opaqueRegion().asRe ct());
336 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 336 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
337 337
338 // Does join 338 // Does join
339 context.fillRect(FloatRect(30, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 339 context.fillRect(FloatRect(30, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
340 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), platformContext.opaqueRegion().asRec t()); 340 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), platformContext->opaqueRegion().asRe ct());
341 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 341 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
342 342
343 // Doesn't join 343 // Doesn't join
344 context.fillRect(FloatRect(20, 31, 20, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 344 context.fillRect(FloatRect(20, 31, 20, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
345 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), platformContext.opaqueRegion().asRec t()); 345 EXPECT_EQ_RECT(IntRect(20, 20, 20, 10), platformContext->opaqueRegion().asRe ct());
346 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 346 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
347 347
348 // Does join 348 // Does join
349 context.fillRect(FloatRect(20, 30, 20, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 349 context.fillRect(FloatRect(20, 30, 20, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
350 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), platformContext.opaqueRegion().asRec t()); 350 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), platformContext->opaqueRegion().asRe ct());
351 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 351 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
352 352
353 // Doesn't join 353 // Doesn't join
354 context.fillRect(FloatRect(9, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Comp ositeSourceOver); 354 context.fillRect(FloatRect(9, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Comp ositeSourceOver);
355 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), platformContext.opaqueRegion().asRec t()); 355 EXPECT_EQ_RECT(IntRect(20, 20, 20, 20), platformContext->opaqueRegion().asRe ct());
356 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 356 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
357 357
358 // Does join 358 // Does join
359 context.fillRect(FloatRect(10, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 359 context.fillRect(FloatRect(10, 20, 10, 20), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
360 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), platformContext.opaqueRegion().asRec t()); 360 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), platformContext->opaqueRegion().asRe ct());
361 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 361 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
362 362
363 // Doesn't join 363 // Doesn't join
364 context.fillRect(FloatRect(10, 9, 30, 10), opaque, ColorSpaceDeviceRGB, Comp ositeSourceOver); 364 context.fillRect(FloatRect(10, 9, 30, 10), opaque, ColorSpaceDeviceRGB, Comp ositeSourceOver);
365 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), platformContext.opaqueRegion().asRec t()); 365 EXPECT_EQ_RECT(IntRect(10, 20, 30, 20), platformContext->opaqueRegion().asRe ct());
366 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 366 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
367 367
368 // Does join 368 // Does join
369 context.fillRect(FloatRect(10, 10, 30, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 369 context.fillRect(FloatRect(10, 10, 30, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
370 EXPECT_EQ_RECT(IntRect(10, 10, 30, 30), platformContext.opaqueRegion().asRec t()); 370 EXPECT_EQ_RECT(IntRect(10, 10, 30, 30), platformContext->opaqueRegion().asRe ct());
371 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 371 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
372 } 372 }
373 373
374 TEST(PlatformContextSkiaTest, trackOpaqueLineTest) 374 TEST(PlatformContextSkiaTest, trackOpaqueLineTest)
375 { 375 {
376 SkBitmap bitmap; 376 SkBitmap bitmap;
377 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 377 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
378 bitmap.allocPixels(); 378 bitmap.allocPixels();
379 bitmap.eraseColor(0); 379 bitmap.eraseColor(0);
380 SkCanvas canvas(bitmap); 380 SkCanvas canvas(bitmap);
381 381
382 PlatformContextSkia platformContext(&canvas); 382 GraphicsContext context(&canvas);
383 platformContext.setTrackOpaqueRegion(true); 383 PlatformContextSkia* platformContext = context.platformContext();
384 GraphicsContext context(&platformContext); 384 platformContext->setTrackOpaqueRegion(true);
385 385
386 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 386 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
387 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 387 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
388 388
389 context.setShouldAntialias(false); 389 context.setShouldAntialias(false);
390 context.setMiterLimit(0); 390 context.setMiterLimit(0);
391 context.setStrokeThickness(4); 391 context.setStrokeThickness(4);
392 context.setLineCap(SquareCap); 392 context.setLineCap(SquareCap);
393 context.setStrokeStyle(SolidStroke); 393 context.setStrokeStyle(SolidStroke);
394 context.setCompositeOperation(CompositeSourceOver); 394 context.setCompositeOperation(CompositeSourceOver);
395 395
396 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 396 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
397 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 397 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
398 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 398 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
399 399
400 context.setCompositeOperation(CompositeSourceIn); 400 context.setCompositeOperation(CompositeSourceIn);
401 401
402 context.save(); 402 context.save();
403 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); 403 context.setStrokeColor(alpha, ColorSpaceDeviceRGB);
404 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); 404 context.drawLine(IntPoint(0, 0), IntPoint(100, 0));
405 context.restore(); 405 context.restore();
406 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 406 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
407 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 407 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
408 408
409 context.save(); 409 context.save();
410 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); 410 context.setStrokeColor(opaque, ColorSpaceDeviceRGB);
411 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); 411 context.drawLine(IntPoint(0, 10), IntPoint(100, 10));
412 context.restore(); 412 context.restore();
413 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 413 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
414 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 414 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
415 415
416 context.save(); 416 context.save();
417 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); 417 context.setStrokeColor(alpha, ColorSpaceDeviceRGB);
418 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); 418 context.drawLine(IntPoint(0, 10), IntPoint(100, 10));
419 context.restore(); 419 context.restore();
420 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext.opaqueRegion().asRec t()); 420 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext->opaqueRegion().asRe ct());
421 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 421 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
422 422
423 context.save(); 423 context.save();
424 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); 424 context.setStrokeColor(alpha, ColorSpaceDeviceRGB);
425 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); 425 context.drawLine(IntPoint(0, 11), IntPoint(100, 11));
426 context.restore(); 426 context.restore();
427 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext.opaqueRegion().asRec t()); 427 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext->opaqueRegion().asRe ct());
428 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 428 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
429 429
430 context.setShouldAntialias(true); 430 context.setShouldAntialias(true);
431 context.setCompositeOperation(CompositeSourceOver); 431 context.setCompositeOperation(CompositeSourceOver);
432 432
433 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 433 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
434 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 434 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
435 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 435 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
436 436
437 context.setCompositeOperation(CompositeSourceIn); 437 context.setCompositeOperation(CompositeSourceIn);
438 438
439 context.save(); 439 context.save();
440 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); 440 context.setStrokeColor(alpha, ColorSpaceDeviceRGB);
441 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); 441 context.drawLine(IntPoint(0, 0), IntPoint(100, 0));
442 context.restore(); 442 context.restore();
443 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 443 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
444 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 444 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
445 445
446 context.setShouldAntialias(false); 446 context.setShouldAntialias(false);
447 context.save(); 447 context.save();
448 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); 448 context.setStrokeColor(opaque, ColorSpaceDeviceRGB);
449 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); 449 context.drawLine(IntPoint(0, 10), IntPoint(100, 10));
450 context.restore(); 450 context.restore();
451 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 451 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
452 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 452 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
453 453
454 context.setShouldAntialias(true); 454 context.setShouldAntialias(true);
455 context.save(); 455 context.save();
456 context.setStrokeColor(opaque, ColorSpaceDeviceRGB); 456 context.setStrokeColor(opaque, ColorSpaceDeviceRGB);
457 context.drawLine(IntPoint(0, 10), IntPoint(100, 10)); 457 context.drawLine(IntPoint(0, 10), IntPoint(100, 10));
458 context.restore(); 458 context.restore();
459 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext.opaqueRegion().asRec t()); 459 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext->opaqueRegion().asRe ct());
460 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 460 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
461 461
462 context.save(); 462 context.save();
463 context.setStrokeColor(alpha, ColorSpaceDeviceRGB); 463 context.setStrokeColor(alpha, ColorSpaceDeviceRGB);
464 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); 464 context.drawLine(IntPoint(0, 11), IntPoint(100, 11));
465 context.restore(); 465 context.restore();
466 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext.opaqueRegion().asRec t()); 466 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext->opaqueRegion().asRe ct());
467 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 467 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
468 } 468 }
469 469
470 TEST(PlatformContextSkiaTest, trackOpaquePathTest) 470 TEST(PlatformContextSkiaTest, trackOpaquePathTest)
471 { 471 {
472 SkBitmap bitmap; 472 SkBitmap bitmap;
473 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 473 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
474 bitmap.allocPixels(); 474 bitmap.allocPixels();
475 SkCanvas canvas(bitmap); 475 SkCanvas canvas(bitmap);
476 476
477 PlatformContextSkia platformContext(&canvas); 477 GraphicsContext context(&canvas);
478 platformContext.setTrackOpaqueRegion(true); 478 PlatformContextSkia* platformContext = context.platformContext();
479 GraphicsContext context(&platformContext); 479 platformContext->setTrackOpaqueRegion(true);
480 480
481 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 481 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
482 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 482 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
483 483
484 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 484 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
485 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 485 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
486 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 486 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
487 487
488 context.setShouldAntialias(false); 488 context.setShouldAntialias(false);
489 context.setMiterLimit(1); 489 context.setMiterLimit(1);
490 context.setStrokeThickness(5); 490 context.setStrokeThickness(5);
491 context.setLineCap(SquareCap); 491 context.setLineCap(SquareCap);
492 context.setStrokeStyle(SolidStroke); 492 context.setStrokeStyle(SolidStroke);
493 context.setCompositeOperation(CompositeSourceIn); 493 context.setCompositeOperation(CompositeSourceIn);
494 494
495 Path path; 495 Path path;
496 496
497 context.setFillColor(alpha, ColorSpaceDeviceRGB); 497 context.setFillColor(alpha, ColorSpaceDeviceRGB);
498 path.moveTo(FloatPoint(0, 0)); 498 path.moveTo(FloatPoint(0, 0));
499 path.addLineTo(FloatPoint(100, 0)); 499 path.addLineTo(FloatPoint(100, 0));
500 context.fillPath(path); 500 context.fillPath(path);
501 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 501 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
502 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 502 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
503 path.clear(); 503 path.clear();
504 504
505 context.setFillColor(opaque, ColorSpaceDeviceRGB); 505 context.setFillColor(opaque, ColorSpaceDeviceRGB);
506 path.moveTo(FloatPoint(0, 10)); 506 path.moveTo(FloatPoint(0, 10));
507 path.addLineTo(FloatPoint(100, 13)); 507 path.addLineTo(FloatPoint(100, 13));
508 context.fillPath(path); 508 context.fillPath(path);
509 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 509 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
510 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 510 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
511 path.clear(); 511 path.clear();
512 512
513 context.setFillColor(alpha, ColorSpaceDeviceRGB); 513 context.setFillColor(alpha, ColorSpaceDeviceRGB);
514 path.moveTo(FloatPoint(0, 10)); 514 path.moveTo(FloatPoint(0, 10));
515 path.addLineTo(FloatPoint(100, 13)); 515 path.addLineTo(FloatPoint(100, 13));
516 context.fillPath(path); 516 context.fillPath(path);
517 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext.opaqueRegion().asRec t()); 517 EXPECT_EQ_RECT(IntRect(10, 13, 90, 87), platformContext->opaqueRegion().asRe ct());
518 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 518 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
519 path.clear(); 519 path.clear();
520 520
521 context.setFillColor(alpha, ColorSpaceDeviceRGB); 521 context.setFillColor(alpha, ColorSpaceDeviceRGB);
522 path.moveTo(FloatPoint(0, 14)); 522 path.moveTo(FloatPoint(0, 14));
523 path.addLineTo(FloatPoint(100, 10)); 523 path.addLineTo(FloatPoint(100, 10));
524 context.fillPath(path); 524 context.fillPath(path);
525 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext.opaqueRegion().asRec t()); 525 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), platformContext->opaqueRegion().asRe ct());
526 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 526 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
527 path.clear(); 527 path.clear();
528 } 528 }
529 529
530 TEST(PlatformContextSkiaTest, trackOpaqueImageTest) 530 TEST(PlatformContextSkiaTest, trackOpaqueImageTest)
531 { 531 {
532 SkBitmap bitmap; 532 SkBitmap bitmap;
533 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 533 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
534 bitmap.allocPixels(); 534 bitmap.allocPixels();
535 SkCanvas canvas(bitmap); 535 SkCanvas canvas(bitmap);
536 536
537 PlatformContextSkia platformContext(&canvas); 537 GraphicsContext context(&canvas);
538 platformContext.setTrackOpaqueRegion(true); 538 PlatformContextSkia* platformContext = context.platformContext();
539 GraphicsContext context(&platformContext); 539 platformContext->setTrackOpaqueRegion(true);
540 540
541 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 541 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
542 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 542 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
543 543
544 SkBitmap opaqueBitmap; 544 SkBitmap opaqueBitmap;
545 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 545 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
546 opaqueBitmap.allocPixels(); 546 opaqueBitmap.allocPixels();
547 547
548 opaqueBitmap.setIsOpaque(true); 548 opaqueBitmap.setIsOpaque(true);
549 for (int y = 0; y < opaqueBitmap.height(); ++y) 549 for (int y = 0; y < opaqueBitmap.height(); ++y)
550 for (int x = 0; x < opaqueBitmap.width(); ++x) 550 for (int x = 0; x < opaqueBitmap.width(); ++x)
551 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; 551 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF;
552 RefPtr<BitmapImage> opaqueImage = BitmapImage::create(NativeImageSkia::creat e(opaqueBitmap)); 552 RefPtr<BitmapImage> opaqueImage = BitmapImage::create(NativeImageSkia::creat e(opaqueBitmap));
553 EXPECT_TRUE(opaqueImage->currentFrameKnownToBeOpaque()); 553 EXPECT_TRUE(opaqueImage->currentFrameKnownToBeOpaque());
554 554
555 SkBitmap alphaBitmap; 555 SkBitmap alphaBitmap;
556 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 556 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
557 alphaBitmap.allocPixels(); 557 alphaBitmap.allocPixels();
558 558
559 alphaBitmap.setIsOpaque(false); 559 alphaBitmap.setIsOpaque(false);
560 for (int y = 0; y < alphaBitmap.height(); ++y) 560 for (int y = 0; y < alphaBitmap.height(); ++y)
561 for (int x = 0; x < alphaBitmap.width(); ++x) 561 for (int x = 0; x < alphaBitmap.width(); ++x)
562 *alphaBitmap.getAddr32(x, y) = 0x00000000; 562 *alphaBitmap.getAddr32(x, y) = 0x00000000;
563 RefPtr<BitmapImage> alphaImage = BitmapImage::create(NativeImageSkia::create (alphaBitmap)); 563 RefPtr<BitmapImage> alphaImage = BitmapImage::create(NativeImageSkia::create (alphaBitmap));
564 EXPECT_FALSE(alphaImage->currentFrameKnownToBeOpaque()); 564 EXPECT_FALSE(alphaImage->currentFrameKnownToBeOpaque());
565 565
566 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 566 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
567 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 567 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
568 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 568 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
569 569
570 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0)); 570 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0));
571 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 571 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
572 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 572 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
573 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0)); 573 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(0, 0));
574 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 574 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
575 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 575 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
576 576
577 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5)); 577 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5));
578 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 578 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
579 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 579 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
580 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5)); 580 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(5, 5));
581 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 581 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
582 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 582 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
583 583
584 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10)); 584 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10));
585 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 585 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
586 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 586 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
587 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10)); 587 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 10));
588 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 588 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
589 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 589 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
590 590
591 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(20, 10), C ompositeSourceIn); 591 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(20, 10), C ompositeSourceIn);
592 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), platformContext.opaqueRegion().asRec t()); 592 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), platformContext->opaqueRegion().asRe ct());
593 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 593 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
594 594
595 context.save(); 595 context.save();
596 context.setAlpha(0.5); 596 context.setAlpha(0.5);
597 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(25, 15), CompositeSourceIn); 597 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(25, 15), CompositeSourceIn);
598 context.restore(); 598 context.restore();
599 EXPECT_EQ_RECT(IntRect(10, 25, 90, 75), platformContext.opaqueRegion().asRec t()); 599 EXPECT_EQ_RECT(IntRect(10, 25, 90, 75), platformContext->opaqueRegion().asRe ct());
600 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 600 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
601 601
602 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 602 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
603 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 603 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
604 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 604 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
605 605
606 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 20), C ompositeSourceIn); 606 context.drawImage(alphaImage.get(), ColorSpaceDeviceRGB, IntPoint(10, 20), C ompositeSourceIn);
607 EXPECT_EQ_RECT(IntRect(20, 10, 80, 90), platformContext.opaqueRegion().asRec t()); 607 EXPECT_EQ_RECT(IntRect(20, 10, 80, 90), platformContext->opaqueRegion().asRe ct());
608 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 608 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
609 609
610 context.save(); 610 context.save();
611 context.setAlpha(0.5); 611 context.setAlpha(0.5);
612 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(15, 25), CompositeSourceIn); 612 context.drawImage(opaqueImage.get(), ColorSpaceDeviceRGB, IntPoint(15, 25), CompositeSourceIn);
613 context.restore(); 613 context.restore();
614 EXPECT_EQ_RECT(IntRect(25, 10, 75, 90), platformContext.opaqueRegion().asRec t()); 614 EXPECT_EQ_RECT(IntRect(25, 10, 75, 90), platformContext->opaqueRegion().asRe ct());
615 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 615 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
616 } 616 }
617 617
618 TEST(PlatformContextSkiaTest, trackOpaqueOvalTest) 618 TEST(PlatformContextSkiaTest, trackOpaqueOvalTest)
619 { 619 {
620 SkBitmap bitmap; 620 SkBitmap bitmap;
621 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 621 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
622 bitmap.allocPixels(); 622 bitmap.allocPixels();
623 bitmap.eraseColor(0); 623 bitmap.eraseColor(0);
624 SkCanvas canvas(bitmap); 624 SkCanvas canvas(bitmap);
625 625
626 PlatformContextSkia platformContext(&canvas); 626 GraphicsContext context(&canvas);
627 platformContext.setTrackOpaqueRegion(true); 627 PlatformContextSkia* platformContext = context.platformContext();
628 GraphicsContext context(&platformContext); 628 platformContext->setTrackOpaqueRegion(true);
629 629
630 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 630 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
631 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 631 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
632 632
633 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 633 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
634 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 634 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
635 635
636 context.drawEllipse(IntRect(10, 10, 90, 90)); 636 context.drawEllipse(IntRect(10, 10, 90, 90));
637 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 637 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
638 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 638 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
639 639
640 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 640 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
641 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 641 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
642 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 642 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
643 643
644 context.setCompositeOperation(CompositeSourceIn); 644 context.setCompositeOperation(CompositeSourceIn);
645 645
646 context.setShouldAntialias(false); 646 context.setShouldAntialias(false);
647 647
648 context.setFillColor(opaque, ColorSpaceDeviceRGB); 648 context.setFillColor(opaque, ColorSpaceDeviceRGB);
649 context.drawEllipse(IntRect(10, 10, 50, 30)); 649 context.drawEllipse(IntRect(10, 10, 50, 30));
650 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 650 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
651 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 651 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
652 652
653 context.setFillColor(alpha, ColorSpaceDeviceRGB); 653 context.setFillColor(alpha, ColorSpaceDeviceRGB);
654 context.drawEllipse(IntRect(10, 10, 30, 50)); 654 context.drawEllipse(IntRect(10, 10, 30, 50));
655 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), platformContext.opaqueRegion().asRec t()); 655 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), platformContext->opaqueRegion().asRe ct());
656 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 656 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
657 657
658 context.setShouldAntialias(true); 658 context.setShouldAntialias(true);
659 659
660 context.setFillColor(opaque, ColorSpaceDeviceRGB); 660 context.setFillColor(opaque, ColorSpaceDeviceRGB);
661 context.drawEllipse(IntRect(10, 10, 50, 30)); 661 context.drawEllipse(IntRect(10, 10, 50, 30));
662 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), platformContext.opaqueRegion().asRec t()); 662 EXPECT_EQ_RECT(IntRect(40, 41, 60, 59), platformContext->opaqueRegion().asRe ct());
663 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 663 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
664 664
665 context.setFillColor(alpha, ColorSpaceDeviceRGB); 665 context.setFillColor(alpha, ColorSpaceDeviceRGB);
666 context.drawEllipse(IntRect(20, 10, 30, 50)); 666 context.drawEllipse(IntRect(20, 10, 30, 50));
667 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), platformContext.opaqueRegion().asRec t()); 667 EXPECT_EQ_RECT(IntRect(51, 41, 49, 59), platformContext->opaqueRegion().asRe ct());
668 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 668 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
669 } 669 }
670 670
671 TEST(PlatformContextSkiaTest, trackOpaqueRoundedRectTest) 671 TEST(PlatformContextSkiaTest, trackOpaqueRoundedRectTest)
672 { 672 {
673 SkBitmap bitmap; 673 SkBitmap bitmap;
674 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 674 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
675 bitmap.allocPixels(); 675 bitmap.allocPixels();
676 bitmap.eraseColor(0); 676 bitmap.eraseColor(0);
677 SkCanvas canvas(bitmap); 677 SkCanvas canvas(bitmap);
678 678
679 PlatformContextSkia platformContext(&canvas); 679 GraphicsContext context(&canvas);
680 platformContext.setTrackOpaqueRegion(true); 680 PlatformContextSkia* platformContext = context.platformContext();
681 GraphicsContext context(&platformContext); 681 platformContext->setTrackOpaqueRegion(true);
682 682
683 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 683 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
684 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 684 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
685 IntSize radii(10, 10); 685 IntSize radii(10, 10);
686 686
687 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 687 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
688 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 688 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
689 689
690 context.fillRoundedRect(IntRect(10, 10, 90, 90), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB); 690 context.fillRoundedRect(IntRect(10, 10, 90, 90), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB);
691 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 691 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
692 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 692 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
693 693
694 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 694 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
695 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 695 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
696 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 696 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
697 697
698 context.setCompositeOperation(CompositeSourceIn); 698 context.setCompositeOperation(CompositeSourceIn);
699 context.setShouldAntialias(false); 699 context.setShouldAntialias(false);
700 700
701 context.fillRoundedRect(IntRect(10, 10, 50, 30), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB); 701 context.fillRoundedRect(IntRect(10, 10, 50, 30), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB);
702 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 702 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
703 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 703 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
704 704
705 context.fillRoundedRect(IntRect(10, 10, 30, 50), radii, radii, radii, radii, alpha, ColorSpaceDeviceRGB); 705 context.fillRoundedRect(IntRect(10, 10, 30, 50), radii, radii, radii, radii, alpha, ColorSpaceDeviceRGB);
706 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), platformContext.opaqueRegion().asRec t()); 706 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), platformContext->opaqueRegion().asRe ct());
707 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 707 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
708 708
709 context.fillRoundedRect(IntRect(10, 0, 50, 30), radii, radii, radii, radii, alpha, ColorSpaceDeviceRGB); 709 context.fillRoundedRect(IntRect(10, 0, 50, 30), radii, radii, radii, radii, alpha, ColorSpaceDeviceRGB);
710 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), platformContext.opaqueRegion().asRec t()); 710 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), platformContext->opaqueRegion().asRe ct());
711 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 711 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
712 712
713 context.fillRoundedRect(IntRect(30, 0, 70, 50), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB); 713 context.fillRoundedRect(IntRect(30, 0, 70, 50), radii, radii, radii, radii, opaque, ColorSpaceDeviceRGB);
714 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), platformContext.opaqueRegion().asRec t()); 714 EXPECT_EQ_RECT(IntRect(40, 30, 60, 70), platformContext->opaqueRegion().asRe ct());
715 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 715 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
716 } 716 }
717 717
718 TEST(PlatformContextSkiaTest, trackOpaqueIRectTest) 718 TEST(PlatformContextSkiaTest, trackOpaqueIRectTest)
719 { 719 {
720 SkBitmap bitmap; 720 SkBitmap bitmap;
721 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 721 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
722 bitmap.allocPixels(); 722 bitmap.allocPixels();
723 bitmap.eraseColor(0); 723 bitmap.eraseColor(0);
724 SkCanvas canvas(bitmap); 724 SkCanvas canvas(bitmap);
725 725
726 PlatformContextSkia platformContext(&canvas); 726 GraphicsContext context(&canvas);
727 platformContext.setTrackOpaqueRegion(true); 727 PlatformContextSkia* platformContext = context.platformContext();
728 GraphicsContext context(&platformContext); 728 platformContext->setTrackOpaqueRegion(true);
729 729
730 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 730 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
731 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 731 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
732 732
733 SkPaint opaquePaint; 733 SkPaint opaquePaint;
734 opaquePaint.setColor(opaque.rgb()); 734 opaquePaint.setColor(opaque.rgb());
735 opaquePaint.setXfermodeMode(SkXfermode::kSrc_Mode); 735 opaquePaint.setXfermodeMode(SkXfermode::kSrc_Mode);
736 SkPaint alphaPaint; 736 SkPaint alphaPaint;
737 alphaPaint.setColor(alpha.rgb()); 737 alphaPaint.setColor(alpha.rgb());
738 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); 738 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode);
739 739
740 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 740 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
741 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 741 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
742 742
743 platformContext.drawIRect(SkIRect::MakeXYWH(10, 10, 90, 90), opaquePaint); 743 platformContext->drawIRect(SkIRect::MakeXYWH(10, 10, 90, 90), opaquePaint);
744 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 744 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
745 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 745 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
746 746
747 platformContext.drawIRect(SkIRect::MakeXYWH(0, 0, 100, 10), alphaPaint); 747 platformContext->drawIRect(SkIRect::MakeXYWH(0, 0, 100, 10), alphaPaint);
748 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 748 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
749 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 749 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
750 750
751 platformContext.drawIRect(SkIRect::MakeXYWH(0, 0, 100, 20), alphaPaint); 751 platformContext->drawIRect(SkIRect::MakeXYWH(0, 0, 100, 20), alphaPaint);
752 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), platformContext.opaqueRegion().asRec t()); 752 EXPECT_EQ_RECT(IntRect(10, 20, 90, 80), platformContext->opaqueRegion().asRe ct());
753 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 753 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
754 754
755 platformContext.drawIRect(SkIRect::MakeXYWH(50, 0, 50, 100), alphaPaint); 755 platformContext->drawIRect(SkIRect::MakeXYWH(50, 0, 50, 100), alphaPaint);
756 EXPECT_EQ_RECT(IntRect(10, 20, 40, 80), platformContext.opaqueRegion().asRec t()); 756 EXPECT_EQ_RECT(IntRect(10, 20, 40, 80), platformContext->opaqueRegion().asRe ct());
757 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 757 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
758 } 758 }
759 759
760 TEST(PlatformContextSkiaTest, trackOpaqueTextTest) 760 TEST(PlatformContextSkiaTest, trackOpaqueTextTest)
761 { 761 {
762 SkBitmap bitmap; 762 SkBitmap bitmap;
763 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 763 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
764 bitmap.allocPixels(); 764 bitmap.allocPixels();
765 bitmap.eraseColor(0); 765 bitmap.eraseColor(0);
766 SkCanvas canvas(bitmap); 766 SkCanvas canvas(bitmap);
767 767
768 PlatformContextSkia platformContext(&canvas); 768 GraphicsContext context(&canvas);
769 platformContext.setTrackOpaqueRegion(true); 769 PlatformContextSkia* platformContext = context.platformContext();
770 GraphicsContext context(&platformContext); 770 platformContext->setTrackOpaqueRegion(true);
771 771
772 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 772 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
773 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 773 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
774 774
775 SkPaint opaquePaint; 775 SkPaint opaquePaint;
776 opaquePaint.setColor(opaque.rgb()); 776 opaquePaint.setColor(opaque.rgb());
777 opaquePaint.setXfermodeMode(SkXfermode::kSrc_Mode); 777 opaquePaint.setXfermodeMode(SkXfermode::kSrc_Mode);
778 SkPaint alphaPaint; 778 SkPaint alphaPaint;
779 alphaPaint.setColor(alpha.rgb()); 779 alphaPaint.setColor(alpha.rgb());
780 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode); 780 alphaPaint.setXfermodeMode(SkXfermode::kSrc_Mode);
781 781
782 SkPoint point = SkPoint::Make(0, 0); 782 SkPoint point = SkPoint::Make(0, 0);
783 SkScalar pointX = 0; 783 SkScalar pointX = 0;
784 SkPath path; 784 SkPath path;
785 path.moveTo(SkPoint::Make(0, 0)); 785 path.moveTo(SkPoint::Make(0, 0));
786 path.lineTo(SkPoint::Make(100, 0)); 786 path.lineTo(SkPoint::Make(100, 0));
787 787
788 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 788 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
789 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 789 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
790 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 790 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
791 791
792 platformContext.drawPosText("A", 1, &point, opaquePaint); 792 platformContext->drawPosText("A", 1, &point, opaquePaint);
793 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 793 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
794 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 794 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
795 795
796 platformContext.drawPosText("A", 1, &point, alphaPaint); 796 platformContext->drawPosText("A", 1, &point, alphaPaint);
797 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 797 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
798 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 798 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
799 799
800 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 800 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
801 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 801 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
802 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 802 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
803 803
804 platformContext.drawPosTextH("A", 1, &pointX, 0, opaquePaint); 804 platformContext->drawPosTextH("A", 1, &pointX, 0, opaquePaint);
805 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 805 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
806 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 806 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
807 807
808 platformContext.drawPosTextH("A", 1, &pointX, 0, alphaPaint); 808 platformContext->drawPosTextH("A", 1, &pointX, 0, alphaPaint);
809 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 809 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
810 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 810 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
811 811
812 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 812 context.fillRect(FloatRect(50, 50, 50, 50), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
813 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 813 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
814 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 814 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
815 815
816 platformContext.drawTextOnPath("A", 1, path, 0, opaquePaint); 816 platformContext->drawTextOnPath("A", 1, path, 0, opaquePaint);
817 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext.opaqueRegion().asRec t()); 817 EXPECT_EQ_RECT(IntRect(50, 50, 50, 50), platformContext->opaqueRegion().asRe ct());
818 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 818 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
819 819
820 platformContext.drawTextOnPath("A", 1, path, 0, alphaPaint); 820 platformContext->drawTextOnPath("A", 1, path, 0, alphaPaint);
821 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext.opaqueRegion().asRect()) ; 821 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), platformContext->opaqueRegion().asRect() );
822 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 822 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
823 } 823 }
824 824
825 TEST(PlatformContextSkiaTest, trackOpaqueWritePixelsTest) 825 TEST(PlatformContextSkiaTest, trackOpaqueWritePixelsTest)
826 { 826 {
827 SkBitmap bitmap; 827 SkBitmap bitmap;
828 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 828 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
829 bitmap.allocPixels(); 829 bitmap.allocPixels();
830 bitmap.eraseColor(0); 830 bitmap.eraseColor(0);
831 SkCanvas canvas(bitmap); 831 SkCanvas canvas(bitmap);
832 832
833 PlatformContextSkia platformContext(&canvas); 833 GraphicsContext context(&canvas);
834 platformContext.setTrackOpaqueRegion(true); 834 PlatformContextSkia* platformContext = context.platformContext();
835 GraphicsContext context(&platformContext); 835 platformContext->setTrackOpaqueRegion(true);
836 836
837 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 837 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
838 838
839 SkBitmap opaqueBitmap; 839 SkBitmap opaqueBitmap;
840 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 840 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
841 opaqueBitmap.allocPixels(); 841 opaqueBitmap.allocPixels();
842 opaqueBitmap.setIsOpaque(true); 842 opaqueBitmap.setIsOpaque(true);
843 for (int y = 0; y < opaqueBitmap.height(); ++y) 843 for (int y = 0; y < opaqueBitmap.height(); ++y)
844 for (int x = 0; x < opaqueBitmap.width(); ++x) 844 for (int x = 0; x < opaqueBitmap.width(); ++x)
845 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; 845 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF;
846 846
847 SkBitmap alphaBitmap; 847 SkBitmap alphaBitmap;
848 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 848 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
849 alphaBitmap.allocPixels(); 849 alphaBitmap.allocPixels();
850 alphaBitmap.setIsOpaque(false); 850 alphaBitmap.setIsOpaque(false);
851 for (int y = 0; y < alphaBitmap.height(); ++y) 851 for (int y = 0; y < alphaBitmap.height(); ++y)
852 for (int x = 0; x < alphaBitmap.width(); ++x) 852 for (int x = 0; x < alphaBitmap.width(); ++x)
853 *alphaBitmap.getAddr32(x, y) = 0x00000000; 853 *alphaBitmap.getAddr32(x, y) = 0x00000000;
854 854
855 SkPaint paint; 855 SkPaint paint;
856 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 856 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
857 857
858 platformContext.writePixels(opaqueBitmap, 50, 50); 858 platformContext->writePixels(opaqueBitmap, 50, 50);
859 EXPECT_EQ_RECT(IntRect(50, 50, 10, 10), platformContext.opaqueRegion().asRec t()); 859 EXPECT_EQ_RECT(IntRect(50, 50, 10, 10), platformContext->opaqueRegion().asRe ct());
860 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 860 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
861 861
862 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 862 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
863 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 863 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
864 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 864 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
865 865
866 platformContext.writePixels(alphaBitmap, 10, 0); 866 platformContext->writePixels(alphaBitmap, 10, 0);
867 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 867 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
868 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 868 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
869 869
870 platformContext.writePixels(alphaBitmap, 10, 1); 870 platformContext->writePixels(alphaBitmap, 10, 1);
871 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 871 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
872 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 872 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
873 873
874 platformContext.writePixels(alphaBitmap, 0, 10); 874 platformContext->writePixels(alphaBitmap, 0, 10);
875 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 875 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
876 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 876 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
877 877
878 platformContext.writePixels(alphaBitmap, 1, 10); 878 platformContext->writePixels(alphaBitmap, 1, 10);
879 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext.opaqueRegion().asRec t()); 879 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext->opaqueRegion().asRe ct());
880 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 880 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
881 } 881 }
882 882
883 TEST(PlatformContextSkiaTest, trackOpaqueDrawBitmapTest) 883 TEST(PlatformContextSkiaTest, trackOpaqueDrawBitmapTest)
884 { 884 {
885 SkBitmap bitmap; 885 SkBitmap bitmap;
886 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 886 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
887 bitmap.allocPixels(); 887 bitmap.allocPixels();
888 bitmap.eraseColor(0); 888 bitmap.eraseColor(0);
889 SkCanvas canvas(bitmap); 889 SkCanvas canvas(bitmap);
890 890
891 PlatformContextSkia platformContext(&canvas); 891 GraphicsContext context(&canvas);
892 platformContext.setTrackOpaqueRegion(true); 892 PlatformContextSkia* platformContext = context.platformContext();
893 GraphicsContext context(&platformContext); 893 platformContext->setTrackOpaqueRegion(true);
894 894
895 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 895 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
896 896
897 SkBitmap opaqueBitmap; 897 SkBitmap opaqueBitmap;
898 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 898 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
899 opaqueBitmap.allocPixels(); 899 opaqueBitmap.allocPixels();
900 opaqueBitmap.setIsOpaque(true); 900 opaqueBitmap.setIsOpaque(true);
901 for (int y = 0; y < opaqueBitmap.height(); ++y) 901 for (int y = 0; y < opaqueBitmap.height(); ++y)
902 for (int x = 0; x < opaqueBitmap.width(); ++x) 902 for (int x = 0; x < opaqueBitmap.width(); ++x)
903 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; 903 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF;
904 904
905 SkBitmap alphaBitmap; 905 SkBitmap alphaBitmap;
906 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 906 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
907 alphaBitmap.allocPixels(); 907 alphaBitmap.allocPixels();
908 alphaBitmap.setIsOpaque(false); 908 alphaBitmap.setIsOpaque(false);
909 for (int y = 0; y < alphaBitmap.height(); ++y) 909 for (int y = 0; y < alphaBitmap.height(); ++y)
910 for (int x = 0; x < alphaBitmap.width(); ++x) 910 for (int x = 0; x < alphaBitmap.width(); ++x)
911 *alphaBitmap.getAddr32(x, y) = 0x00000000; 911 *alphaBitmap.getAddr32(x, y) = 0x00000000;
912 912
913 SkPaint paint; 913 SkPaint paint;
914 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 914 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
915 915
916 platformContext.drawBitmap(opaqueBitmap, 10, 10, &paint); 916 platformContext->drawBitmap(opaqueBitmap, 10, 10, &paint);
917 EXPECT_EQ_RECT(IntRect(10, 10, 10, 10), platformContext.opaqueRegion().asRec t()); 917 EXPECT_EQ_RECT(IntRect(10, 10, 10, 10), platformContext->opaqueRegion().asRe ct());
918 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 918 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
919 919
920 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 920 context.fillRect(FloatRect(10, 10, 90, 90), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
921 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 921 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
922 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 922 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
923 923
924 platformContext.drawBitmap(alphaBitmap, 10, 0, &paint); 924 platformContext->drawBitmap(alphaBitmap, 10, 0, &paint);
925 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 925 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
926 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 926 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
927 927
928 platformContext.drawBitmap(alphaBitmap, 10, 1, &paint); 928 platformContext->drawBitmap(alphaBitmap, 10, 1, &paint);
929 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 929 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
930 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 930 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
931 931
932 platformContext.drawBitmap(alphaBitmap, 0, 10, &paint); 932 platformContext->drawBitmap(alphaBitmap, 0, 10, &paint);
933 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 933 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
934 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 934 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
935 935
936 platformContext.drawBitmap(alphaBitmap, 1, 10, &paint); 936 platformContext->drawBitmap(alphaBitmap, 1, 10, &paint);
937 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext.opaqueRegion().asRec t()); 937 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext->opaqueRegion().asRe ct());
938 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 938 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
939 } 939 }
940 940
941 TEST(PlatformContextSkiaTest, trackOpaqueDrawBitmapRectTest) 941 TEST(PlatformContextSkiaTest, trackOpaqueDrawBitmapRectTest)
942 { 942 {
943 SkBitmap bitmap; 943 SkBitmap bitmap;
944 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); 944 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
945 bitmap.allocPixels(); 945 bitmap.allocPixels();
946 bitmap.eraseColor(0); 946 bitmap.eraseColor(0);
947 SkCanvas canvas(bitmap); 947 SkCanvas canvas(bitmap);
948 948
949 PlatformContextSkia platformContext(&canvas); 949 GraphicsContext context(&canvas);
950 platformContext.setTrackOpaqueRegion(true); 950 PlatformContextSkia* platformContext = context.platformContext();
951 GraphicsContext context(&platformContext); 951 platformContext->setTrackOpaqueRegion(true);
952 952
953 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 953 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
954 954
955 SkBitmap opaqueBitmap; 955 SkBitmap opaqueBitmap;
956 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 956 opaqueBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
957 opaqueBitmap.allocPixels(); 957 opaqueBitmap.allocPixels();
958 opaqueBitmap.setIsOpaque(true); 958 opaqueBitmap.setIsOpaque(true);
959 for (int y = 0; y < opaqueBitmap.height(); ++y) 959 for (int y = 0; y < opaqueBitmap.height(); ++y)
960 for (int x = 0; x < opaqueBitmap.width(); ++x) 960 for (int x = 0; x < opaqueBitmap.width(); ++x)
961 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF; 961 *opaqueBitmap.getAddr32(x, y) = 0xFFFFFFFF;
962 962
963 SkBitmap alphaBitmap; 963 SkBitmap alphaBitmap;
964 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 964 alphaBitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
965 alphaBitmap.allocPixels(); 965 alphaBitmap.allocPixels();
966 alphaBitmap.setIsOpaque(false); 966 alphaBitmap.setIsOpaque(false);
967 for (int y = 0; y < alphaBitmap.height(); ++y) 967 for (int y = 0; y < alphaBitmap.height(); ++y)
968 for (int x = 0; x < alphaBitmap.width(); ++x) 968 for (int x = 0; x < alphaBitmap.width(); ++x)
969 *alphaBitmap.getAddr32(x, y) = 0x00000000; 969 *alphaBitmap.getAddr32(x, y) = 0x00000000;
970 970
971 SkPaint paint; 971 SkPaint paint;
972 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 972 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
973 973
974 platformContext.drawBitmapRect(opaqueBitmap, 0, SkRect::MakeXYWH(10, 10, 90, 90), &paint); 974 platformContext->drawBitmapRect(opaqueBitmap, 0, SkRect::MakeXYWH(10, 10, 90 , 90), &paint);
975 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 975 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
976 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 976 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
977 977
978 platformContext.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 1 0), &paint); 978 platformContext->drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 10), &paint);
979 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext.opaqueRegion().asRec t()); 979 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), platformContext->opaqueRegion().asRe ct());
980 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 980 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
981 981
982 platformContext.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 1 1), &paint); 982 platformContext->drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(10, 0, 10, 11), &paint);
983 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 983 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
984 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 984 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
985 985
986 platformContext.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 10, 1 0), &paint); 986 platformContext->drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 10, 10), &paint);
987 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext.opaqueRegion().asRec t()); 987 EXPECT_EQ_RECT(IntRect(10, 11, 90, 89), platformContext->opaqueRegion().asRe ct());
988 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 988 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
989 989
990 platformContext.drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 11, 1 0), &paint); 990 platformContext->drawBitmapRect(alphaBitmap, 0, SkRect::MakeXYWH(0, 10, 11, 10), &paint);
991 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext.opaqueRegion().asRec t()); 991 EXPECT_EQ_RECT(IntRect(11, 11, 89, 89), platformContext->opaqueRegion().asRe ct());
992 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 992 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
993 } 993 }
994 994
995 TEST(PlatformContextSkiaTest, contextTransparencyLayerTest) 995 TEST(PlatformContextSkiaTest, contextTransparencyLayerTest)
996 { 996 {
997 SkBitmap bitmap; 997 SkBitmap bitmap;
998 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 998 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
999 bitmap.allocPixels(); 999 bitmap.allocPixels();
1000 bitmap.eraseColor(0); 1000 bitmap.eraseColor(0);
1001 SkCanvas canvas(bitmap); 1001 SkCanvas canvas(bitmap);
1002 1002
1003 PlatformContextSkia platformContext(&canvas); 1003 GraphicsContext context(&canvas);
1004 platformContext.setTrackOpaqueRegion(true); 1004 PlatformContextSkia* platformContext = context.platformContext();
1005 GraphicsContext context(&platformContext); 1005 platformContext->setTrackOpaqueRegion(true);
1006 1006
1007 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 1007 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
1008 1008
1009 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1009 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1010 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext.opaqueRegion().asRec t()); 1010 EXPECT_EQ_RECT(IntRect(20, 20, 10, 10), platformContext->opaqueRegion().asRe ct());
1011 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 1011 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
1012 1012
1013 context.clearRect(FloatRect(20, 20, 10, 10)); 1013 context.clearRect(FloatRect(20, 20, 10, 10));
1014 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1014 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1015 1015
1016 context.beginTransparencyLayer(0.5); 1016 context.beginTransparencyLayer(0.5);
1017 context.save(); 1017 context.save();
1018 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1018 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1019 context.restore(); 1019 context.restore();
1020 context.endTransparencyLayer(); 1020 context.endTransparencyLayer();
1021 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1021 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1022 1022
1023 context.clearRect(FloatRect(20, 20, 10, 10)); 1023 context.clearRect(FloatRect(20, 20, 10, 10));
1024 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1024 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1025 1025
1026 context.beginTransparencyLayer(0.5); 1026 context.beginTransparencyLayer(0.5);
1027 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1027 context.fillRect(FloatRect(20, 20, 10, 10), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1028 context.endTransparencyLayer(); 1028 context.endTransparencyLayer();
1029 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1029 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1030 } 1030 }
1031 1031
1032 TEST(PlatformContextSkiaTest, UnboundedDrawsAreClipped) 1032 TEST(PlatformContextSkiaTest, UnboundedDrawsAreClipped)
1033 { 1033 {
1034 SkBitmap bitmap; 1034 SkBitmap bitmap;
1035 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 1035 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
1036 bitmap.allocPixels(); 1036 bitmap.allocPixels();
1037 bitmap.eraseColor(0); 1037 bitmap.eraseColor(0);
1038 SkCanvas canvas(bitmap); 1038 SkCanvas canvas(bitmap);
1039 1039
1040 PlatformContextSkia platformContext(&canvas); 1040 GraphicsContext context(&canvas);
1041 platformContext.setTrackOpaqueRegion(true); 1041 PlatformContextSkia* platformContext = context.platformContext();
1042 GraphicsContext context(&platformContext); 1042 platformContext->setTrackOpaqueRegion(true);
1043 1043
1044 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 1044 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
1045 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 1045 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
1046 1046
1047 Path path; 1047 Path path;
1048 context.setShouldAntialias(false); 1048 context.setShouldAntialias(false);
1049 context.setMiterLimit(1); 1049 context.setMiterLimit(1);
1050 context.setStrokeThickness(5); 1050 context.setStrokeThickness(5);
1051 context.setLineCap(SquareCap); 1051 context.setLineCap(SquareCap);
1052 context.setStrokeStyle(SolidStroke); 1052 context.setStrokeStyle(SolidStroke);
1053 1053
1054 // Make skia unable to compute fast bounds for our paths. 1054 // Make skia unable to compute fast bounds for our paths.
1055 DashArray dashArray; 1055 DashArray dashArray;
1056 dashArray.append(1); 1056 dashArray.append(1);
1057 dashArray.append(0); 1057 dashArray.append(0);
1058 context.setLineDash(dashArray, 0); 1058 context.setLineDash(dashArray, 0);
1059 1059
1060 // Make the device opaque in 10,10 40x40. 1060 // Make the device opaque in 10,10 40x40.
1061 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1061 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1062 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext.opaqueRegion().asRec t()); 1062 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext->opaqueRegion().asRe ct());
1063 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 1063 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
1064 1064
1065 // Clip to the left edge of the opaque area. 1065 // Clip to the left edge of the opaque area.
1066 context.clip(IntRect(10, 10, 10, 40)); 1066 context.clip(IntRect(10, 10, 10, 40));
1067 1067
1068 // Draw a path that gets clipped. This should destroy the opaque area but on ly inside the clip. 1068 // Draw a path that gets clipped. This should destroy the opaque area but on ly inside the clip.
1069 context.setCompositeOperation(CompositeSourceOut); 1069 context.setCompositeOperation(CompositeSourceOut);
1070 context.setFillColor(alpha, ColorSpaceDeviceRGB); 1070 context.setFillColor(alpha, ColorSpaceDeviceRGB);
1071 path.moveTo(FloatPoint(10, 10)); 1071 path.moveTo(FloatPoint(10, 10));
1072 path.addLineTo(FloatPoint(40, 40)); 1072 path.addLineTo(FloatPoint(40, 40));
1073 context.strokePath(path); 1073 context.strokePath(path);
1074 1074
1075 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), platformContext.opaqueRegion().asRec t()); 1075 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), platformContext->opaqueRegion().asRe ct());
1076 EXPECT_PIXELS_MATCH(bitmap, platformContext.opaqueRegion().asRect()); 1076 EXPECT_PIXELS_MATCH(bitmap, platformContext->opaqueRegion().asRect());
1077 } 1077 }
1078 1078
1079 TEST(PlatformContextSkiaTest, PreserveOpaqueOnlyMattersForFirstLayer) 1079 TEST(PlatformContextSkiaTest, PreserveOpaqueOnlyMattersForFirstLayer)
1080 { 1080 {
1081 SkBitmap bitmap; 1081 SkBitmap bitmap;
1082 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400); 1082 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 400, 400);
1083 bitmap.allocPixels(); 1083 bitmap.allocPixels();
1084 bitmap.eraseColor(0); 1084 bitmap.eraseColor(0);
1085 SkCanvas canvas(bitmap); 1085 SkCanvas canvas(bitmap);
1086 1086
1087 PlatformContextSkia platformContext(&canvas); 1087 GraphicsContext context(&canvas);
1088 platformContext.setTrackOpaqueRegion(true); 1088 PlatformContextSkia* platformContext = context.platformContext();
1089 GraphicsContext context(&platformContext); 1089 platformContext->setTrackOpaqueRegion(true);
1090 1090
1091 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 1091 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
1092 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 1092 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
1093 1093
1094 Path path; 1094 Path path;
1095 context.setShouldAntialias(false); 1095 context.setShouldAntialias(false);
1096 context.setMiterLimit(1); 1096 context.setMiterLimit(1);
1097 context.setStrokeThickness(5); 1097 context.setStrokeThickness(5);
1098 context.setLineCap(SquareCap); 1098 context.setLineCap(SquareCap);
1099 context.setStrokeStyle(SolidStroke); 1099 context.setStrokeStyle(SolidStroke);
1100 1100
1101 // Make skia unable to compute fast bounds for our paths. 1101 // Make skia unable to compute fast bounds for our paths.
1102 DashArray dashArray; 1102 DashArray dashArray;
1103 dashArray.append(1); 1103 dashArray.append(1);
1104 dashArray.append(0); 1104 dashArray.append(0);
1105 context.setLineDash(dashArray, 0); 1105 context.setLineDash(dashArray, 0);
1106 1106
1107 // Make the device opaque in 10,10 40x40. 1107 // Make the device opaque in 10,10 40x40.
1108 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1108 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1109 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext.opaqueRegion().asRec t()); 1109 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext->opaqueRegion().asRe ct());
1110 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 1110 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
1111 1111
1112 // Begin a layer that preserves opaque. 1112 // Begin a layer that preserves opaque.
1113 context.setCompositeOperation(CompositeSourceOver); 1113 context.setCompositeOperation(CompositeSourceOver);
1114 context.beginTransparencyLayer(0.5); 1114 context.beginTransparencyLayer(0.5);
1115 1115
1116 // Begin a layer that does not preserve opaque. 1116 // Begin a layer that does not preserve opaque.
1117 context.setCompositeOperation(CompositeSourceOut); 1117 context.setCompositeOperation(CompositeSourceOut);
1118 context.beginTransparencyLayer(0.5); 1118 context.beginTransparencyLayer(0.5);
1119 1119
1120 // This should not destroy the device opaqueness. 1120 // This should not destroy the device opaqueness.
1121 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1121 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1122 1122
1123 // This should not destroy the device opaqueness either. 1123 // This should not destroy the device opaqueness either.
1124 context.setFillColor(opaque, ColorSpaceDeviceRGB); 1124 context.setFillColor(opaque, ColorSpaceDeviceRGB);
1125 path.moveTo(FloatPoint(10, 10)); 1125 path.moveTo(FloatPoint(10, 10));
1126 path.addLineTo(FloatPoint(40, 40)); 1126 path.addLineTo(FloatPoint(40, 40));
1127 context.strokePath(path); 1127 context.strokePath(path);
1128 1128
1129 context.endTransparencyLayer(); 1129 context.endTransparencyLayer();
1130 context.endTransparencyLayer(); 1130 context.endTransparencyLayer();
1131 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext.opaqueRegion().asRec t()); 1131 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), platformContext->opaqueRegion().asRe ct());
1132 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 1132 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
1133 1133
1134 // Now begin a layer that does not preserve opaque and draw through it to th e device. 1134 // Now begin a layer that does not preserve opaque and draw through it to th e device.
1135 context.setCompositeOperation(CompositeSourceOut); 1135 context.setCompositeOperation(CompositeSourceOut);
1136 context.beginTransparencyLayer(0.5); 1136 context.beginTransparencyLayer(0.5);
1137 1137
1138 // This should destroy the device opaqueness. 1138 // This should destroy the device opaqueness.
1139 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver); 1139 context.fillRect(FloatRect(10, 10, 40, 40), opaque, ColorSpaceDeviceRGB, Com positeSourceOver);
1140 1140
1141 context.endTransparencyLayer(); 1141 context.endTransparencyLayer();
1142 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1142 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1143 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 1143 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
1144 1144
1145 // Now we draw with a path for which it cannot compute fast bounds. This sho uld destroy the entire opaque region. 1145 // Now we draw with a path for which it cannot compute fast bounds. This sho uld destroy the entire opaque region.
1146 1146
1147 context.setCompositeOperation(CompositeSourceOut); 1147 context.setCompositeOperation(CompositeSourceOut);
1148 context.beginTransparencyLayer(0.5); 1148 context.beginTransparencyLayer(0.5);
1149 1149
1150 // This should nuke the device opaqueness. 1150 // This should nuke the device opaqueness.
1151 context.setFillColor(opaque, ColorSpaceDeviceRGB); 1151 context.setFillColor(opaque, ColorSpaceDeviceRGB);
1152 path.moveTo(FloatPoint(10, 10)); 1152 path.moveTo(FloatPoint(10, 10));
1153 path.addLineTo(FloatPoint(40, 40)); 1153 path.addLineTo(FloatPoint(40, 40));
1154 context.strokePath(path); 1154 context.strokePath(path);
1155 1155
1156 context.endTransparencyLayer(); 1156 context.endTransparencyLayer();
1157 EXPECT_EQ_RECT(IntRect(), platformContext.opaqueRegion().asRect()); 1157 EXPECT_EQ_RECT(IntRect(), platformContext->opaqueRegion().asRect());
1158 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext.opaqueRegion().asRect()); 1158 EXPECT_PIXELS_MATCH_EXACT(bitmap, platformContext->opaqueRegion().asRect());
1159 } 1159 }
1160 1160
1161 } // namespace 1161 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698