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

Side by Side Diff: tests/CanvasTest.cpp

Issue 1986383002: SkCanvas::adjustToTopLayer() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Mike's comments Created 4 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
« no previous file with comments | « src/core/SkCanvas.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 /* Description: 8 /* Description:
9 * This test defines a series of elementatry test steps that perform 9 * This test defines a series of elementatry test steps that perform
10 * a single or a small group of canvas API calls. Each test step is 10 * a single or a small group of canvas API calls. Each test step is
11 * used in several test cases that verify that different types of SkCanvas 11 * used in several test cases that verify that different types of SkCanvas
12 * flavors and derivatives pass it and yield consistent behavior. The 12 * flavors and derivatives pass it and yield consistent behavior. The
13 * test cases analyse results that are queryable through the API. They do 13 * test cases analyse results that are queryable through the API. They do
14 * not look at rendering results. 14 * not look at rendering results.
15 * 15 *
16 * Adding test stepss: 16 * Adding test stepss:
17 * The general pattern for creating a new test step is to write a test 17 * The general pattern for creating a new test step is to write a test
18 * function of the form: 18 * function of the form:
19 * 19 *
20 * static void MyTestStepFunction(SkCanvas* canvas, 20 * static void MyTestStepFunction(SkCanvas* canvas,
21 * const TestData& d,
21 * skiatest::Reporter* reporter, 22 * skiatest::Reporter* reporter,
22 * CanvasTestStep* testStep) 23 * CanvasTestStep* testStep)
23 * { 24 * {
24 * canvas->someCanvasAPImethod(); 25 * canvas->someCanvasAPImethod();
25 * (...) 26 * (...)
26 * REPORTER_ASSERT_MESSAGE(reporter, (...), \ 27 * REPORTER_ASSERT_MESSAGE(reporter, (...), \
27 * testStep->assertMessage()); 28 * testStep->assertMessage());
28 * } 29 * }
29 * 30 *
30 * The definition of the test step function should be followed by an 31 * The definition of the test step function should be followed by an
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 canvas->translate(SkIntToScalar(2), SkIntToScalar(1)); 492 canvas->translate(SkIntToScalar(2), SkIntToScalar(1));
492 canvas->save(); 493 canvas->save();
493 canvas->scale(SkIntToScalar(3), SkIntToScalar(3)); 494 canvas->scale(SkIntToScalar(3), SkIntToScalar(3));
494 canvas->drawRect(d.fRect,d.fPaint); 495 canvas->drawRect(d.fRect,d.fPaint);
495 canvas->flush(); 496 canvas->flush();
496 canvas->restore(); 497 canvas->restore();
497 canvas->restore(); 498 canvas->restore();
498 } 499 }
499 TEST_STEP(NestedSaveRestoreWithFlush, NestedSaveRestoreWithFlushTestStep); 500 TEST_STEP(NestedSaveRestoreWithFlush, NestedSaveRestoreWithFlushTestStep);
500 501
502 static void DescribeTopLayerTestStep(SkCanvas* canvas,
503 const TestData& d,
504 skiatest::Reporter* reporter,
505 CanvasTestStep* testStep) {
506 SkMatrix m;
507 SkIRect r;
508 // NOTE: adjustToTopLayer() does *not* reduce the clip size, even if the can vas
509 // is smaller than 10x10!
510
511 canvas->temporary_internal_describeTopLayer(&m, &r);
512 REPORTER_ASSERT_MESSAGE(reporter, m.isIdentity(), testStep->assertMessage()) ;
513 REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 2, 2),
514 testStep->assertMessage());
515
516 // Putting a full-canvas layer on it should make no change to the results.
517 SkRect layerBounds = SkRect::MakeXYWH(0.f, 0.f, 10.f, 10.f);
518 canvas->saveLayer(layerBounds, nullptr);
519 canvas->temporary_internal_describeTopLayer(&m, &r);
520 REPORTER_ASSERT_MESSAGE(reporter, m.isIdentity(), testStep->assertMessage()) ;
521 REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 2, 2),
522 testStep->assertMessage());
523 canvas->restore();
524
525 // Adding a translated layer translates the results.
526 // Default canvas is only 2x2, so can't offset our layer by very much at all ;
527 // saveLayer() aborts if the bounds don't intersect.
528 layerBounds = SkRect::MakeXYWH(1.f, 1.f, 6.f, 6.f);
529 canvas->saveLayer(layerBounds, nullptr);
530 canvas->temporary_internal_describeTopLayer(&m, &r);
531 REPORTER_ASSERT_MESSAGE(reporter, m == SkMatrix::MakeTrans(-1.f, -1.f),
532 testStep->assertMessage());
533 REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 1, 1),
534 testStep->assertMessage());
535 canvas->restore();
536
537 }
538 TEST_STEP(DescribeTopLayer, DescribeTopLayerTestStep);
539
540
501 class CanvasTestingAccess { 541 class CanvasTestingAccess {
502 public: 542 public:
503 static bool SameState(const SkCanvas* canvas1, const SkCanvas* canvas2) { 543 static bool SameState(const SkCanvas* canvas1, const SkCanvas* canvas2) {
504 SkCanvas::LayerIter layerIter1(const_cast<SkCanvas*>(canvas1), false); 544 SkCanvas::LayerIter layerIter1(const_cast<SkCanvas*>(canvas1), false);
505 SkCanvas::LayerIter layerIter2(const_cast<SkCanvas*>(canvas2), false); 545 SkCanvas::LayerIter layerIter2(const_cast<SkCanvas*>(canvas2), false);
506 while (!layerIter1.done() && !layerIter2.done()) { 546 while (!layerIter1.done() && !layerIter2.done()) {
507 if (layerIter1.matrix() != layerIter2.matrix()) { 547 if (layerIter1.matrix() != layerIter2.matrix()) {
508 return false; 548 return false;
509 } 549 }
510 if (layerIter1.clip() != layerIter2.clip()) { 550 if (layerIter1.clip() != layerIter2.clip()) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMa trix()); 806 REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMa trix());
767 REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getCl ipBounds(&clip2)); 807 REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getCl ipBounds(&clip2));
768 REPORTER_ASSERT(reporter, clip1 == clip2); 808 REPORTER_ASSERT(reporter, clip1 == clip2);
769 809
770 filterCanvas.clipRect(SkRect::MakeXYWH(30.5f, 30.7f, 100, 100)); 810 filterCanvas.clipRect(SkRect::MakeXYWH(30.5f, 30.7f, 100, 100));
771 filterCanvas.scale(0.75f, 0.5f); 811 filterCanvas.scale(0.75f, 0.5f);
772 REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMa trix()); 812 REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMa trix());
773 REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getCl ipBounds(&clip2)); 813 REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getCl ipBounds(&clip2));
774 REPORTER_ASSERT(reporter, clip1 == clip2); 814 REPORTER_ASSERT(reporter, clip1 == clip2);
775 } 815 }
OLDNEW
« no previous file with comments | « src/core/SkCanvas.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698