1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFont.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPathBuilder.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPoint.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fonts/FontToolUtils.h" 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker // This GM shows off a flaw in delta-based rasterizers (DAA, CCPR, etc.). 19*c8dee2aaSAndroid Build Coastguard Worker // See also the bottom of dashing4 and skia:6886. 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker static const int K = 49; 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(daa, canvas, K+350, 5*K) { 24*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 25*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(true); 26*c8dee2aaSAndroid Build Coastguard Worker SkFont font = ToolUtils::DefaultPortableFont(); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker { 29*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 30*c8dee2aaSAndroid Build Coastguard Worker canvas->drawString("Should be a green square with no red showing through.", 31*c8dee2aaSAndroid Build Coastguard Worker K*1.5f, K*0.5f, font, paint); 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 34*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect({0,0,K,K}, paint); 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker SkPoint tri1[] = {{0,0},{K,K},{0,K},{0,0}}; 37*c8dee2aaSAndroid Build Coastguard Worker SkPoint tri2[] = {{0,0},{K,K},{K,0},{0,0}}; 38*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPathBuilder().addPolygon(tri1, std::size(tri1), false) 39*c8dee2aaSAndroid Build Coastguard Worker .addPolygon(tri2, std::size(tri2), false) 40*c8dee2aaSAndroid Build Coastguard Worker .detach(); 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorGREEN); 43*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0,K); 47*c8dee2aaSAndroid Build Coastguard Worker { 48*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 49*c8dee2aaSAndroid Build Coastguard Worker canvas->drawString("Adjacent rects, two draws. Blue then green, no red?", 50*c8dee2aaSAndroid Build Coastguard Worker K*1.5f, K*0.5f, font, paint); 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 53*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect({0,0,K,K}, paint); 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker { 56*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPath::Polygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false); 57*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLUE); 58*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 59*c8dee2aaSAndroid Build Coastguard Worker } 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker { 62*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPath::Polygon({{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}, false); 63*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorGREEN); 64*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 65*c8dee2aaSAndroid Build Coastguard Worker } 66*c8dee2aaSAndroid Build Coastguard Worker } 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0,K); 69*c8dee2aaSAndroid Build Coastguard Worker { 70*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 71*c8dee2aaSAndroid Build Coastguard Worker canvas->drawString("Adjacent rects, wound together. All green?", 72*c8dee2aaSAndroid Build Coastguard Worker K*1.5f, K*0.5f, font, paint); 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 75*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect({0,0,K,K}, paint); 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker { 78*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPathBuilder().addPolygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false) 79*c8dee2aaSAndroid Build Coastguard Worker .addPolygon({{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}, false) 80*c8dee2aaSAndroid Build Coastguard Worker .detach(); 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorGREEN); 83*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 84*c8dee2aaSAndroid Build Coastguard Worker } 85*c8dee2aaSAndroid Build Coastguard Worker } 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0,K); 88*c8dee2aaSAndroid Build Coastguard Worker { 89*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 90*c8dee2aaSAndroid Build Coastguard Worker canvas->drawString("Adjacent rects, wound opposite. All green?", 91*c8dee2aaSAndroid Build Coastguard Worker K*1.5f, K*0.5f, font, paint); 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 94*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect({0,0,K,K}, paint); 95*c8dee2aaSAndroid Build Coastguard Worker 96*c8dee2aaSAndroid Build Coastguard Worker { 97*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPathBuilder().addPolygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false) 98*c8dee2aaSAndroid Build Coastguard Worker .addPolygon({{K*0.5f,0},{K,0},{K,K},{K*0.5f,K}}, false) 99*c8dee2aaSAndroid Build Coastguard Worker .detach(); 100*c8dee2aaSAndroid Build Coastguard Worker 101*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorGREEN); 102*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 103*c8dee2aaSAndroid Build Coastguard Worker } 104*c8dee2aaSAndroid Build Coastguard Worker } 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0,K); 107*c8dee2aaSAndroid Build Coastguard Worker { 108*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorBLACK); 109*c8dee2aaSAndroid Build Coastguard Worker canvas->drawString("One poly, wound opposite. All green?", 110*c8dee2aaSAndroid Build Coastguard Worker K*1.5f, K*0.5f, font, paint); 111*c8dee2aaSAndroid Build Coastguard Worker 112*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorRED); 113*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect({0,0,K,K}, paint); 114*c8dee2aaSAndroid Build Coastguard Worker 115*c8dee2aaSAndroid Build Coastguard Worker SkPath path = SkPath::Polygon({{K*0.5f,0},{0,0},{0,K},{K*0.5f,K}, 116*c8dee2aaSAndroid Build Coastguard Worker {K*0.5f,0},{K,0},{K,K},{K*0.5f,K}}, 117*c8dee2aaSAndroid Build Coastguard Worker false); 118*c8dee2aaSAndroid Build Coastguard Worker 119*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(SK_ColorGREEN); 120*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 121*c8dee2aaSAndroid Build Coastguard Worker } 122*c8dee2aaSAndroid Build Coastguard Worker } 123