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

Side by Side Diff: Source/platform/graphics/GraphicsContextTest.cpp

Issue 840733004: Replace setCompositeOperation(CompositeOperator, WebBlendMode) with setCompositeOperation(SkXfermod… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 GraphicsContext context(&canvas, nullptr); 253 GraphicsContext context(&canvas, nullptr);
254 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque); 254 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque);
255 255
256 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 256 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
257 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 257 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
258 258
259 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask 259 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask
260 // out a transparency layer below that is filled with the mask color. In the end this should 260 // out a transparency layer below that is filled with the mask color. In the end this should
261 // not be marked opaque. 261 // not be marked opaque.
262 262
263 context.setCompositeOperation(CompositeSourceOver); 263 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
264 context.beginTransparencyLayer(1); 264 context.beginTransparencyLayer(1);
265 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); 265 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver);
266 266
267 context.setCompositeOperation(CompositeDestinationIn); 267 context.setCompositeOperation(SkXfermode::kDstIn_Mode);
268 context.beginTransparencyLayer(1); 268 context.beginTransparencyLayer(1);
269 269
270 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); 270 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100));
271 EXPECT_FALSE(!alphaImage); 271 EXPECT_FALSE(!alphaImage);
272 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); 272 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha);
273 273
274 context.setCompositeOperation(CompositeSourceOver); 274 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
275 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); 275 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10));
276 276
277 context.endLayer(); 277 context.endLayer();
278 context.endLayer(); 278 context.endLayer();
279 279
280 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); 280 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect());
281 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 281 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
282 } 282 }
283 283
284 TEST(GraphicsContextTest, trackImageMaskWithOpaqueRect) 284 TEST(GraphicsContextTest, trackImageMaskWithOpaqueRect)
285 { 285 {
286 SkBitmap bitmap; 286 SkBitmap bitmap;
287 bitmap.allocN32Pixels(400, 400); 287 bitmap.allocN32Pixels(400, 400);
288 bitmap.eraseColor(0); 288 bitmap.eraseColor(0);
289 SkCanvas canvas(bitmap); 289 SkCanvas canvas(bitmap);
290 290
291 GraphicsContext context(&canvas, nullptr); 291 GraphicsContext context(&canvas, nullptr);
292 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque); 292 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque);
293 293
294 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 294 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
295 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 295 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
296 296
297 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask 297 // Image masks are done by drawing a bitmap into a transparency layer that u ses DstIn to mask
298 // out a transparency layer below that is filled with the mask color. In the end this should 298 // out a transparency layer below that is filled with the mask color. In the end this should
299 // not be marked opaque. 299 // not be marked opaque.
300 300
301 context.setCompositeOperation(CompositeSourceOver); 301 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
302 context.beginTransparencyLayer(1); 302 context.beginTransparencyLayer(1);
303 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver); 303 context.fillRect(FloatRect(10, 10, 10, 10), opaque, CompositeSourceOver);
304 304
305 context.setCompositeOperation(CompositeDestinationIn); 305 context.setCompositeOperation(SkXfermode::kDstIn_Mode);
306 context.beginTransparencyLayer(1); 306 context.beginTransparencyLayer(1);
307 307
308 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100)); 308 OwnPtr<ImageBuffer> alphaImage = ImageBuffer::create(IntSize(100, 100));
309 EXPECT_FALSE(!alphaImage); 309 EXPECT_FALSE(!alphaImage);
310 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha); 310 alphaImage->context()->fillRect(IntRect(0, 0, 100, 100), alpha);
311 311
312 context.setCompositeOperation(CompositeSourceOver); 312 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
313 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10)); 313 context.drawImageBuffer(alphaImage.get(), FloatRect(10, 10, 10, 10));
314 314
315 // We can't have an opaque mask actually, but we can pretend here like it wo uld look if we did. 315 // We can't have an opaque mask actually, but we can pretend here like it wo uld look if we did.
316 context.fillRect(FloatRect(12, 12, 3, 3), opaque, CompositeSourceOver); 316 context.fillRect(FloatRect(12, 12, 3, 3), opaque, CompositeSourceOver);
317 317
318 context.endLayer(); 318 context.endLayer();
319 context.endLayer(); 319 context.endLayer();
320 320
321 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), context.opaqueRegion().asRect()); 321 EXPECT_EQ_RECT(IntRect(12, 12, 3, 3), context.opaqueRegion().asRect());
322 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 322 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque); 390 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque);
391 391
392 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 392 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
393 Color alpha(0.0f, 0.0f, 0.0f, 0.0f); 393 Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
394 394
395 context.setShouldAntialias(false); 395 context.setShouldAntialias(false);
396 context.setMiterLimit(0); 396 context.setMiterLimit(0);
397 context.setStrokeThickness(4); 397 context.setStrokeThickness(4);
398 context.setLineCap(SquareCap); 398 context.setLineCap(SquareCap);
399 context.setStrokeStyle(SolidStroke); 399 context.setStrokeStyle(SolidStroke);
400 context.setCompositeOperation(CompositeSourceOver); 400 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
401 401
402 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); 402 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver);
403 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 403 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
404 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 404 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
405 405
406 context.setCompositeOperation(CompositeSourceIn); 406 context.setCompositeOperation(SkXfermode::kSrcIn_Mode);
407 407
408 context.save(); 408 context.save();
409 context.setStrokeColor(alpha); 409 context.setStrokeColor(alpha);
410 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); 410 context.drawLine(IntPoint(0, 0), IntPoint(100, 0));
411 context.restore(); 411 context.restore();
412 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 412 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
413 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 413 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
414 414
415 context.save(); 415 context.save();
416 context.setStrokeColor(opaque); 416 context.setStrokeColor(opaque);
(...skipping 10 matching lines...) Expand all
427 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 427 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
428 428
429 context.save(); 429 context.save();
430 context.setStrokeColor(alpha); 430 context.setStrokeColor(alpha);
431 context.drawLine(IntPoint(0, 11), IntPoint(100, 11)); 431 context.drawLine(IntPoint(0, 11), IntPoint(100, 11));
432 context.restore(); 432 context.restore();
433 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect()); 433 EXPECT_EQ_RECT(IntRect(10, 14, 90, 86), context.opaqueRegion().asRect());
434 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 434 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
435 435
436 context.setShouldAntialias(true); 436 context.setShouldAntialias(true);
437 context.setCompositeOperation(CompositeSourceOver); 437 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
438 438
439 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); 439 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver);
440 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 440 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
441 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 441 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
442 442
443 context.setCompositeOperation(CompositeSourceIn); 443 context.setCompositeOperation(SkXfermode::kSrcIn_Mode);
444 444
445 context.save(); 445 context.save();
446 context.setStrokeColor(alpha); 446 context.setStrokeColor(alpha);
447 context.drawLine(IntPoint(0, 0), IntPoint(100, 0)); 447 context.drawLine(IntPoint(0, 0), IntPoint(100, 0));
448 context.restore(); 448 context.restore();
449 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 449 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
450 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 450 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
451 451
452 context.setShouldAntialias(false); 452 context.setShouldAntialias(false);
453 context.save(); 453 context.save();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 487
488 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); 488 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver);
489 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 489 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
490 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 490 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
491 491
492 context.setShouldAntialias(false); 492 context.setShouldAntialias(false);
493 context.setMiterLimit(1); 493 context.setMiterLimit(1);
494 context.setStrokeThickness(5); 494 context.setStrokeThickness(5);
495 context.setLineCap(SquareCap); 495 context.setLineCap(SquareCap);
496 context.setStrokeStyle(SolidStroke); 496 context.setStrokeStyle(SolidStroke);
497 context.setCompositeOperation(CompositeSourceIn); 497 context.setCompositeOperation(SkXfermode::kSrcIn_Mode);
498 498
499 Path path; 499 Path path;
500 500
501 context.setFillColor(alpha); 501 context.setFillColor(alpha);
502 path.moveTo(FloatPoint(0, 0)); 502 path.moveTo(FloatPoint(0, 0));
503 path.addLineTo(FloatPoint(100, 0)); 503 path.addLineTo(FloatPoint(100, 0));
504 context.fillPath(path); 504 context.fillPath(path);
505 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 505 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
506 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 506 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
507 path.clear(); 507 path.clear();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 631
632 context.fillEllipse(FloatRect(10, 10, 90, 90)); 632 context.fillEllipse(FloatRect(10, 10, 90, 90));
633 context.strokeEllipse(FloatRect(10, 10, 90, 90)); 633 context.strokeEllipse(FloatRect(10, 10, 90, 90));
634 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); 634 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect());
635 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 635 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
636 636
637 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); 637 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver);
638 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 638 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
639 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 639 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
640 640
641 context.setCompositeOperation(CompositeSourceIn); 641 context.setCompositeOperation(SkXfermode::kSrcIn_Mode);
642 642
643 context.setShouldAntialias(false); 643 context.setShouldAntialias(false);
644 644
645 context.setFillColor(opaque); 645 context.setFillColor(opaque);
646 context.fillEllipse(FloatRect(10, 10, 50, 30)); 646 context.fillEllipse(FloatRect(10, 10, 50, 30));
647 context.strokeEllipse(FloatRect(10, 10, 50, 30)); 647 context.strokeEllipse(FloatRect(10, 10, 50, 30));
648 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 648 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
649 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 649 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
650 650
651 context.setFillColor(alpha); 651 context.setFillColor(alpha);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 686 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
687 687
688 context.fillRoundedRect(FloatRect(10, 10, 90, 90), radii, radii, radii, radi i, opaque); 688 context.fillRoundedRect(FloatRect(10, 10, 90, 90), radii, radii, radii, radi i, opaque);
689 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()); 689 EXPECT_EQ_RECT(IntRect(0, 0, 0, 0), context.opaqueRegion().asRect());
690 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 690 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
691 691
692 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver); 692 context.fillRect(FloatRect(10, 10, 90, 90), opaque, CompositeSourceOver);
693 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 693 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
694 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 694 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
695 695
696 context.setCompositeOperation(CompositeSourceIn); 696 context.setCompositeOperation(SkXfermode::kSrcIn_Mode);
697 context.setShouldAntialias(false); 697 context.setShouldAntialias(false);
698 698
699 context.fillRoundedRect(FloatRect(10, 10, 50, 30), radii, radii, radii, radi i, opaque); 699 context.fillRoundedRect(FloatRect(10, 10, 50, 30), radii, radii, radii, radi i, opaque);
700 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect()); 700 EXPECT_EQ_RECT(IntRect(10, 10, 90, 90), context.opaqueRegion().asRect());
701 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 701 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
702 702
703 context.fillRoundedRect(FloatRect(10, 10, 30, 50), radii, radii, radii, radi i, alpha); 703 context.fillRoundedRect(FloatRect(10, 10, 30, 50), radii, radii, radii, radi i, alpha);
704 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect()); 704 EXPECT_EQ_RECT(IntRect(40, 10, 60, 90), context.opaqueRegion().asRect());
705 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 705 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
706 706
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 978
979 // Make the device opaque in 10,10 40x40. 979 // Make the device opaque in 10,10 40x40.
980 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); 980 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver);
981 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); 981 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect());
982 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 982 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
983 983
984 // Clip to the left edge of the opaque area. 984 // Clip to the left edge of the opaque area.
985 context.clip(IntRect(10, 10, 10, 40)); 985 context.clip(IntRect(10, 10, 10, 40));
986 986
987 // Draw a path that gets clipped. This should destroy the opaque area but on ly inside the clip. 987 // Draw a path that gets clipped. This should destroy the opaque area but on ly inside the clip.
988 context.setCompositeOperation(CompositeSourceOut); 988 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
989 context.setFillColor(alpha); 989 context.setFillColor(alpha);
990 path.moveTo(FloatPoint(10, 10)); 990 path.moveTo(FloatPoint(10, 10));
991 path.addLineTo(FloatPoint(40, 40)); 991 path.addLineTo(FloatPoint(40, 40));
992 context.strokePath(path); 992 context.strokePath(path);
993 993
994 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), context.opaqueRegion().asRect()); 994 EXPECT_EQ_RECT(IntRect(20, 10, 30, 40), context.opaqueRegion().asRect());
995 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 995 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
996 } 996 }
997 997
998 TEST(GraphicsContextTest, PreserveOpaqueOnlyMattersForFirstLayer) 998 TEST(GraphicsContextTest, PreserveOpaqueOnlyMattersForFirstLayer)
(...skipping 21 matching lines...) Expand all
1020 dashArray.append(1); 1020 dashArray.append(1);
1021 dashArray.append(0); 1021 dashArray.append(0);
1022 context.setLineDash(dashArray, 0); 1022 context.setLineDash(dashArray, 0);
1023 1023
1024 // Make the device opaque in 10,10 40x40. 1024 // Make the device opaque in 10,10 40x40.
1025 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); 1025 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver);
1026 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); 1026 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect());
1027 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 1027 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
1028 1028
1029 // Begin a layer that preserves opaque. 1029 // Begin a layer that preserves opaque.
1030 context.setCompositeOperation(CompositeSourceOver); 1030 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
1031 context.beginTransparencyLayer(0.5); 1031 context.beginTransparencyLayer(0.5);
1032 1032
1033 // Begin a layer that does not preserve opaque. 1033 // Begin a layer that does not preserve opaque.
1034 context.setCompositeOperation(CompositeSourceOut); 1034 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
1035 context.beginTransparencyLayer(0.5); 1035 context.beginTransparencyLayer(0.5);
1036 1036
1037 // This should not destroy the device opaqueness. 1037 // This should not destroy the device opaqueness.
1038 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); 1038 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver);
1039 1039
1040 // This should not destroy the device opaqueness either. 1040 // This should not destroy the device opaqueness either.
1041 context.setFillColor(opaque); 1041 context.setFillColor(opaque);
1042 path.moveTo(FloatPoint(10, 10)); 1042 path.moveTo(FloatPoint(10, 10));
1043 path.addLineTo(FloatPoint(40, 40)); 1043 path.addLineTo(FloatPoint(40, 40));
1044 context.strokePath(path); 1044 context.strokePath(path);
1045 1045
1046 context.endLayer(); 1046 context.endLayer();
1047 context.endLayer(); 1047 context.endLayer();
1048 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect()); 1048 EXPECT_EQ_RECT(IntRect(10, 10, 40, 40), context.opaqueRegion().asRect());
1049 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 1049 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
1050 1050
1051 // Now begin a layer that does not preserve opaque and draw through it to th e device. 1051 // Now begin a layer that does not preserve opaque and draw through it to th e device.
1052 context.setCompositeOperation(CompositeSourceOut); 1052 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
1053 context.beginTransparencyLayer(0.5); 1053 context.beginTransparencyLayer(0.5);
1054 1054
1055 // This should destroy the device opaqueness. 1055 // This should destroy the device opaqueness.
1056 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver); 1056 context.fillRect(FloatRect(10, 10, 40, 40), opaque, CompositeSourceOver);
1057 1057
1058 context.endLayer(); 1058 context.endLayer();
1059 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); 1059 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect());
1060 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 1060 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
1061 1061
1062 // Now we draw with a path for which it cannot compute fast bounds. This sho uld destroy the entire opaque region. 1062 // Now we draw with a path for which it cannot compute fast bounds. This sho uld destroy the entire opaque region.
1063 1063
1064 context.setCompositeOperation(CompositeSourceOut); 1064 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
1065 context.beginTransparencyLayer(0.5); 1065 context.beginTransparencyLayer(0.5);
1066 1066
1067 // This should nuke the device opaqueness. 1067 // This should nuke the device opaqueness.
1068 context.setFillColor(opaque); 1068 context.setFillColor(opaque);
1069 path.moveTo(FloatPoint(10, 10)); 1069 path.moveTo(FloatPoint(10, 10));
1070 path.addLineTo(FloatPoint(40, 40)); 1070 path.addLineTo(FloatPoint(40, 40));
1071 context.strokePath(path); 1071 context.strokePath(path);
1072 1072
1073 context.endLayer(); 1073 context.endLayer();
1074 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); 1074 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect());
1075 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect()); 1075 EXPECT_PIXELS_MATCH_EXACT(bitmap, context.opaqueRegion().asRect());
1076 } 1076 }
1077 1077
1078 TEST(GraphicsContextTest, OpaqueRegionForLayerWithNonRectDeviceClip) 1078 TEST(GraphicsContextTest, OpaqueRegionForLayerWithNonRectDeviceClip)
1079 { 1079 {
1080 SkBitmap bitmap; 1080 SkBitmap bitmap;
1081 bitmap.allocN32Pixels(100, 100); 1081 bitmap.allocN32Pixels(100, 100);
1082 bitmap.eraseColor(0); 1082 bitmap.eraseColor(0);
1083 SkCanvas canvas(bitmap); 1083 SkCanvas canvas(bitmap);
1084 1084
1085 GraphicsContext context(&canvas, nullptr); 1085 GraphicsContext context(&canvas, nullptr);
1086 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque); 1086 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque);
1087 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 1087 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
1088 1088
1089 context.fillRect(FloatRect(30, 30, 90, 90), opaque, CompositeSourceOver); 1089 context.fillRect(FloatRect(30, 30, 90, 90), opaque, CompositeSourceOver);
1090 1090
1091 context.setCompositeOperation(CompositeSourceOver); 1091 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
1092 context.beginTransparencyLayer(0.5); 1092 context.beginTransparencyLayer(0.5);
1093 context.endLayer(); 1093 context.endLayer();
1094 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect()); 1094 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect());
1095 1095
1096 Path path; 1096 Path path;
1097 path.moveTo(FloatPoint(0, 0)); 1097 path.moveTo(FloatPoint(0, 0));
1098 path.addLineTo(FloatPoint(50, 50)); 1098 path.addLineTo(FloatPoint(50, 50));
1099 1099
1100 // For opaque preserving mode and deviceClip is not rect 1100 // For opaque preserving mode and deviceClip is not rect
1101 // we will not alter opaque rect. 1101 // we will not alter opaque rect.
1102 context.clipPath(path, RULE_EVENODD); 1102 context.clipPath(path, RULE_EVENODD);
1103 1103
1104 context.setCompositeOperation(CompositeSourceOver); 1104 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
1105 context.beginTransparencyLayer(0.5); 1105 context.beginTransparencyLayer(0.5);
1106 context.endLayer(); 1106 context.endLayer();
1107 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect()); 1107 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect());
1108 1108
1109 // For non-opaque preserving mode and deviceClip is not rect 1109 // For non-opaque preserving mode and deviceClip is not rect
1110 // we will mark opaque rect as empty. 1110 // we will mark opaque rect as empty.
1111 context.setCompositeOperation(CompositeSourceOut); 1111 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
1112 context.beginTransparencyLayer(0.5); 1112 context.beginTransparencyLayer(0.5);
1113 1113
1114 context.endLayer(); 1114 context.endLayer();
1115 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); 1115 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect());
1116 } 1116 }
1117 1117
1118 TEST(GraphicsContextTest, OpaqueRegionForLayerWithRectDeviceClip) 1118 TEST(GraphicsContextTest, OpaqueRegionForLayerWithRectDeviceClip)
1119 { 1119 {
1120 SkBitmap bitmap; 1120 SkBitmap bitmap;
1121 bitmap.allocN32Pixels(100, 100); 1121 bitmap.allocN32Pixels(100, 100);
1122 bitmap.eraseColor(0); 1122 bitmap.eraseColor(0);
1123 SkCanvas canvas(bitmap); 1123 SkCanvas canvas(bitmap);
1124 1124
1125 Color opaque(1.0f, 0.0f, 0.0f, 1.0f); 1125 Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
1126 1126
1127 GraphicsContext context(&canvas, nullptr); 1127 GraphicsContext context(&canvas, nullptr);
1128 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque); 1128 context.setRegionTrackingMode(GraphicsContext::RegionTrackingOpaque);
1129 1129
1130 context.fillRect(FloatRect(30, 30, 90, 90), opaque, CompositeSourceOver); 1130 context.fillRect(FloatRect(30, 30, 90, 90), opaque, CompositeSourceOver);
1131 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect()); 1131 EXPECT_EQ_RECT(IntRect(30, 30, 70, 70), context.opaqueRegion().asRect());
1132 1132
1133 // For non-opaque preserving mode and deviceClip is rect 1133 // For non-opaque preserving mode and deviceClip is rect
1134 // we will mark device clip rect as non opaque. 1134 // we will mark device clip rect as non opaque.
1135 context.setCompositeOperation(CompositeSourceOut); 1135 context.setCompositeOperation(SkXfermode::kSrcOut_Mode);
1136 context.beginTransparencyLayer(0.5); 1136 context.beginTransparencyLayer(0.5);
1137 context.endLayer(); 1137 context.endLayer();
1138 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect()); 1138 EXPECT_EQ_RECT(IntRect(), context.opaqueRegion().asRect());
1139 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 1139 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
1140 1140
1141 context.clip(FloatRect(0, 0, 50, 50)); 1141 context.clip(FloatRect(0, 0, 50, 50));
1142 context.fillRect(FloatRect(20, 20, 100, 100), opaque, CompositeSourceOver); 1142 context.fillRect(FloatRect(20, 20, 100, 100), opaque, CompositeSourceOver);
1143 1143
1144 // For opaque preserving mode and deviceClip is rect 1144 // For opaque preserving mode and deviceClip is rect
1145 // we will intersect device clip rect with src opaque rect. 1145 // we will intersect device clip rect with src opaque rect.
1146 context.setCompositeOperation(CompositeSourceOver); 1146 context.setCompositeOperation(SkXfermode::kSrcOver_Mode);
1147 context.beginTransparencyLayer(0.5); 1147 context.beginTransparencyLayer(0.5);
1148 context.endLayer(); 1148 context.endLayer();
1149 EXPECT_EQ_RECT(IntRect(20, 20, 30, 30), context.opaqueRegion().asRect()); 1149 EXPECT_EQ_RECT(IntRect(20, 20, 30, 30), context.opaqueRegion().asRect());
1150 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect()); 1150 EXPECT_PIXELS_MATCH(bitmap, context.opaqueRegion().asRect());
1151 } 1151 }
1152 1152
1153 #define DISPATCH1(c1, c2, op, param1) do { c1.op(param1); c2.op(param1); } while (0); 1153 #define DISPATCH1(c1, c2, op, param1) do { c1.op(param1); c2.op(param1); } while (0);
1154 #define DISPATCH2(c1, c2, op, param1, param2) do { c1.op(param1, param2); c2.op( param1, param2); } while (0); 1154 #define DISPATCH2(c1, c2, op, param1, param2) do { c1.op(param1, param2); c2.op( param1, param2); } while (0);
1155 1155
1156 TEST(GraphicsContextTest, RecordingTotalMatrix) 1156 TEST(GraphicsContextTest, RecordingTotalMatrix)
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 1212
1213 // endRecording finally makes the picture accessible 1213 // endRecording finally makes the picture accessible
1214 RefPtr<const SkPicture> picture = context.endRecording(); 1214 RefPtr<const SkPicture> picture = context.endRecording();
1215 EXPECT_TRUE(picture); 1215 EXPECT_TRUE(picture);
1216 EXPECT_TRUE(picture->unique()); 1216 EXPECT_TRUE(picture->unique());
1217 1217
1218 context.endRecording(); 1218 context.endRecording();
1219 } 1219 }
1220 1220
1221 } // namespace 1221 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698