1cb93a386Sopenharmony_ci// Copyright 2021 Google LLC. 2cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3cb93a386Sopenharmony_ci 4cb93a386Sopenharmony_ci#ifndef Cmds_DEFINED 5cb93a386Sopenharmony_ci#define Cmds_DEFINED 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ciclass SkBitmap; 8cb93a386Sopenharmony_ciclass SkCanvas; 9cb93a386Sopenharmony_ciclass FakeCanvas; 10cb93a386Sopenharmony_ciclass FakeMCBlob; 11cb93a386Sopenharmony_ciclass SortKey; 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 14cb93a386Sopenharmony_ci#include "include/core/SkRect.h" 15cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci#include "experimental/sorttoy/Fake.h" 18cb93a386Sopenharmony_ci#include "experimental/sorttoy/sorttypes.h" 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 21cb93a386Sopenharmony_ciclass Cmd : public SkRefCnt { 22cb93a386Sopenharmony_cipublic: 23cb93a386Sopenharmony_ci Cmd() : fID(ID::Invalid()) {} 24cb93a386Sopenharmony_ci Cmd(ID id) : fID(id) {} 25cb93a386Sopenharmony_ci ~Cmd() override {} 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci ID id() const { return fID; } 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci virtual SortKey getKey() = 0; 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci // To generate the actual image 32cb93a386Sopenharmony_ci virtual void execute(FakeCanvas*) const = 0; 33cb93a386Sopenharmony_ci virtual void rasterize(uint32_t zBuffer[256][256], SkBitmap* dstBM) const = 0; 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci // To generate the expected image 36cb93a386Sopenharmony_ci virtual void execute(SkCanvas*) const = 0; 37cb93a386Sopenharmony_ci virtual void dump() const = 0; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ciprotected: 40cb93a386Sopenharmony_ci const ID fID; 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ciprivate: 43cb93a386Sopenharmony_ci}; 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 46cb93a386Sopenharmony_ci// This Cmd only appears in the initial list defining a test case. It never makes it into the 47cb93a386Sopenharmony_ci// sorted Cmds. 48cb93a386Sopenharmony_ciclass SaveCmd : public Cmd { 49cb93a386Sopenharmony_cipublic: 50cb93a386Sopenharmony_ci SaveCmd() : Cmd() {} 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci SortKey getKey() override; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci void execute(FakeCanvas*) const override; 55cb93a386Sopenharmony_ci void execute(SkCanvas*) const override; 56cb93a386Sopenharmony_ci void rasterize(uint32_t zBuffer[256][256], SkBitmap* dstBM) const override { 57cb93a386Sopenharmony_ci SkASSERT(0); 58cb93a386Sopenharmony_ci } 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci void dump() const override { 61cb93a386Sopenharmony_ci SkDebugf("%d: save", fID.toInt()); 62cb93a386Sopenharmony_ci } 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciprotected: 65cb93a386Sopenharmony_ciprivate: 66cb93a386Sopenharmony_ci}; 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 69cb93a386Sopenharmony_ci// This Cmd only appears in the initial list defining a test case. It never makes it into the 70cb93a386Sopenharmony_ci// sorted Cmds. 71cb93a386Sopenharmony_ciclass RestoreCmd : public Cmd { 72cb93a386Sopenharmony_cipublic: 73cb93a386Sopenharmony_ci RestoreCmd() : Cmd() {} 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci SortKey getKey() override; 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_ci void execute(FakeCanvas*) const override; 78cb93a386Sopenharmony_ci void execute(SkCanvas*) const override; 79cb93a386Sopenharmony_ci void rasterize(uint32_t zBuffer[256][256], SkBitmap* dstBM) const override { 80cb93a386Sopenharmony_ci SkASSERT(0); 81cb93a386Sopenharmony_ci } 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ci void dump() const override { 84cb93a386Sopenharmony_ci SkDebugf("%d: restore", fID.toInt()); 85cb93a386Sopenharmony_ci } 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ciprotected: 88cb93a386Sopenharmony_ciprivate: 89cb93a386Sopenharmony_ci}; 90cb93a386Sopenharmony_ci 91cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 92cb93a386Sopenharmony_ciclass DrawCmd : public Cmd { 93cb93a386Sopenharmony_cipublic: 94cb93a386Sopenharmony_ci DrawCmd(ID, Shape, SkIRect, const FakePaint&); // for creating the test cases 95cb93a386Sopenharmony_ci DrawCmd(ID, PaintersOrder, Shape, SkIRect, const FakePaint&, sk_sp<FakeMCBlob> state); 96cb93a386Sopenharmony_ci 97cb93a386Sopenharmony_ci bool contains(int x, int y) const; 98cb93a386Sopenharmony_ci 99cb93a386Sopenharmony_ci uint32_t getSortZ() const; 100cb93a386Sopenharmony_ci uint32_t getDrawZ() const; 101cb93a386Sopenharmony_ci 102cb93a386Sopenharmony_ci SortKey getKey() override; 103cb93a386Sopenharmony_ci const FakeMCBlob* state() const { return fMCState.get(); } 104cb93a386Sopenharmony_ci 105cb93a386Sopenharmony_ci void execute(FakeCanvas*) const override; 106cb93a386Sopenharmony_ci void execute(SkCanvas*) const override; 107cb93a386Sopenharmony_ci void rasterize(uint32_t zBuffer[256][256], SkBitmap* dstBM) const override; 108cb93a386Sopenharmony_ci 109cb93a386Sopenharmony_ci void dump() const override { 110cb93a386Sopenharmony_ci SkDebugf("%d: draw%s %d %d %d %d -- %d", 111cb93a386Sopenharmony_ci fID.toInt(), 112cb93a386Sopenharmony_ci fShape == Shape::kRect ? "Rect" : "Oval", 113cb93a386Sopenharmony_ci fRect.fLeft, fRect.fTop, fRect.fRight, fRect.fBottom, 114cb93a386Sopenharmony_ci fPaintersOrder.toUInt()); 115cb93a386Sopenharmony_ci } 116cb93a386Sopenharmony_ci 117cb93a386Sopenharmony_ciprotected: 118cb93a386Sopenharmony_ci 119cb93a386Sopenharmony_ciprivate: 120cb93a386Sopenharmony_ci PaintersOrder fPaintersOrder; 121cb93a386Sopenharmony_ci Shape fShape; 122cb93a386Sopenharmony_ci SkIRect fRect; 123cb93a386Sopenharmony_ci FakePaint fPaint; 124cb93a386Sopenharmony_ci sk_sp<FakeMCBlob> fMCState; 125cb93a386Sopenharmony_ci}; 126cb93a386Sopenharmony_ci 127cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 128cb93a386Sopenharmony_ciclass ClipCmd : public Cmd { 129cb93a386Sopenharmony_cipublic: 130cb93a386Sopenharmony_ci ClipCmd(ID, Shape, SkIRect); // for creating the test cases 131cb93a386Sopenharmony_ci ClipCmd(ID, PaintersOrder paintersOrderWhenAdded, Shape, SkIRect); 132cb93a386Sopenharmony_ci ~ClipCmd() override; 133cb93a386Sopenharmony_ci 134cb93a386Sopenharmony_ci bool contains(int x, int y) const; 135cb93a386Sopenharmony_ci 136cb93a386Sopenharmony_ci uint32_t getSortZ() const; 137cb93a386Sopenharmony_ci uint32_t getDrawZ() const; 138cb93a386Sopenharmony_ci 139cb93a386Sopenharmony_ci SortKey getKey() override; 140cb93a386Sopenharmony_ci 141cb93a386Sopenharmony_ci void onAboutToBePopped(PaintersOrder paintersOrderWhenPopped); 142cb93a386Sopenharmony_ci 143cb93a386Sopenharmony_ci void execute(FakeCanvas*) const override; 144cb93a386Sopenharmony_ci void execute(SkCanvas*) const override; 145cb93a386Sopenharmony_ci void rasterize(uint32_t zBuffer[256][256], SkBitmap* dstBM) const override; 146cb93a386Sopenharmony_ci 147cb93a386Sopenharmony_ci void dump() const override { 148cb93a386Sopenharmony_ci SkDebugf("%d: clip%s %d %d %d %d", 149cb93a386Sopenharmony_ci fID.toInt(), 150cb93a386Sopenharmony_ci fShape == Shape::kRect ? "Rect" : "Oval", 151cb93a386Sopenharmony_ci fRect.fLeft, fRect.fTop, fRect.fRight, fRect.fBottom); 152cb93a386Sopenharmony_ci } 153cb93a386Sopenharmony_ci 154cb93a386Sopenharmony_ci void mutate(SkIPoint trans) { 155cb93a386Sopenharmony_ci SkASSERT(!fHasBeenMutated); 156cb93a386Sopenharmony_ci 157cb93a386Sopenharmony_ci fRect.offset(trans.fX, trans.fY); 158cb93a386Sopenharmony_ci fHasBeenMutated = true; 159cb93a386Sopenharmony_ci } 160cb93a386Sopenharmony_ci 161cb93a386Sopenharmony_ci bool hasBeenMutated() const { return fHasBeenMutated; } 162cb93a386Sopenharmony_ci SkIRect rect() const { return fRect; } 163cb93a386Sopenharmony_ci 164cb93a386Sopenharmony_ciprotected: 165cb93a386Sopenharmony_ci 166cb93a386Sopenharmony_ciprivate: 167cb93a386Sopenharmony_ci bool fHasBeenMutated = false; 168cb93a386Sopenharmony_ci Shape fShape; 169cb93a386Sopenharmony_ci SkIRect fRect; 170cb93a386Sopenharmony_ci PaintersOrder fPaintersOrderWhenAdded; 171cb93a386Sopenharmony_ci PaintersOrder fPaintersOrderWhenPopped; 172cb93a386Sopenharmony_ci}; 173cb93a386Sopenharmony_ci 174cb93a386Sopenharmony_ci//------------------------------------------------------------------------------------------------ 175cb93a386Sopenharmony_ci 176cb93a386Sopenharmony_ci#endif // Cmds_DEFINED 177