| /* | |
| * Copyright 2018 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "gm/gm.h" | |
| #include "include/core/SkCanvas.h" | |
| #include "include/core/SkColor.h" | |
| #include "include/core/SkFont.h" | |
| #include "include/core/SkPaint.h" | |
| #include "include/core/SkPathBuilder.h" | |
| #include "include/core/SkPoint.h" | |
| #include "include/core/SkTypes.h" | |
| #include "tools/fonts/FontToolUtils.h" | |
| // This GM shows off a flaw in delta-based rasterizers (DAA, CCPR, etc.). | |
| // See also the bottom of dashing4 and skbug.com/40038110. | |
| static const int K = 49; | |
| DEF_SIMPLE_GM(daa, canvas, K+350, 5*K) { | |
| SkPaint paint; | |
| paint.setAntiAlias(true); | |
| SkFont font = ToolUtils::DefaultPortableFont(); | |
| { | |
| paint.setColor(SK_ColorBLACK); | |
| canvas->drawString("Should be a green square with no red showing through.", | |
| K*1.5f, K*0.5f, font, paint); | |
| paint.setColor(SK_ColorRED); | |
| canvas->drawRect({0,0,K,K}, paint); | |
| SkPoint tri1[] = {{0,0},{K,K},{0,K},{0,0}}; | |
| SkPoint tri2[] = {{0,0},{K,K},{K,0},{0,0}}; | |
| SkPath path = SkPathBuilder().addPolygon(tri1, false) | |
| .addPolygon(tri2, false) | |
| .detach(); | |
| paint.setColor(SK_ColorGREEN); | |
| canvas->drawPath(path, paint); | |
| } | |
| canvas->translate(0,K); | |
| { | |
| paint.setColor(SK_ColorBLACK); | |
| canvas->drawString("Adjacent rects, two draws. Blue then green, no red?", | |
| K*1.5f, K*0.5f, font, paint); | |
| paint.setColor(SK_ColorRED); | |
| canvas->drawRect({0,0,K,K}, paint); | |
| { | |
| SkPath path = SkPath::Polygon({{{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}}, false); | |
| paint.setColor(SK_ColorBLUE); | |
| canvas->drawPath(path, paint); | |
| } | |
| { | |
| SkPath path = SkPath::Polygon({{{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}}, false); | |
| paint.setColor(SK_ColorGREEN); | |
| canvas->drawPath(path, paint); | |
| } | |
| } | |
| canvas->translate(0,K); | |
| { | |
| paint.setColor(SK_ColorBLACK); | |
| canvas->drawString("Adjacent rects, wound together. All green?", | |
| K*1.5f, K*0.5f, font, paint); | |
| paint.setColor(SK_ColorRED); | |
| canvas->drawRect({0,0,K,K}, paint); | |
| { | |
| SkPath path = SkPathBuilder().addPolygon({{{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}}, false) | |
| .addPolygon({{{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}}, false) | |
| .detach(); | |
| paint.setColor(SK_ColorGREEN); | |
| canvas->drawPath(path, paint); | |
| } | |
| } | |
| canvas->translate(0,K); | |
| { | |
| paint.setColor(SK_ColorBLACK); | |
| canvas->drawString("Adjacent rects, wound opposite. All green?", | |
| K*1.5f, K*0.5f, font, paint); | |
| paint.setColor(SK_ColorRED); | |
| canvas->drawRect({0,0,K,K}, paint); | |
| { | |
| SkPath path = SkPathBuilder().addPolygon({{{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}}, false) | |
| .addPolygon({{{K*0.5f,0},{K,0},{K,K},{K*0.5f,K}}}, false) | |
| .detach(); | |
| paint.setColor(SK_ColorGREEN); | |
| canvas->drawPath(path, paint); | |
| } | |
| } | |
| canvas->translate(0,K); | |
| { | |
| paint.setColor(SK_ColorBLACK); | |
| canvas->drawString("One poly, wound opposite. All green?", | |
| K*1.5f, K*0.5f, font, paint); | |
| paint.setColor(SK_ColorRED); | |
| canvas->drawRect({0,0,K,K}, paint); | |
| SkPath path = SkPath::Polygon({{{K*0.5f,0},{0,0},{0,K},{K*0.5f,K}, | |
| {K*0.5f,0},{K,0},{K,K},{K*0.5f,K}}}, | |
| false); | |
| paint.setColor(SK_ColorGREEN); | |
| canvas->drawPath(path, paint); | |
| } | |
| } |