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 #ifndef BisectSlide_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define BisectSlide_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPath.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 20*c8dee2aaSAndroid Build Coastguard Worker #include "tools/viewer/Slide.h" 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker #include <stack> 23*c8dee2aaSAndroid Build Coastguard Worker #include <utility> 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker /** 28*c8dee2aaSAndroid Build Coastguard Worker * This is a simple utility designed to extract the paths from an SKP file and then isolate a single 29*c8dee2aaSAndroid Build Coastguard Worker * one of them via bisect. Use the 'x' and 'X' keys to guide a binary search: 30*c8dee2aaSAndroid Build Coastguard Worker * 31*c8dee2aaSAndroid Build Coastguard Worker * 'x': Throw out half the paths. 32*c8dee2aaSAndroid Build Coastguard Worker * 'X': Toggle which half gets tossed and which half is kept. 33*c8dee2aaSAndroid Build Coastguard Worker * 'Z': Back up one level. 34*c8dee2aaSAndroid Build Coastguard Worker * 'D': Dump the path. 35*c8dee2aaSAndroid Build Coastguard Worker */ 36*c8dee2aaSAndroid Build Coastguard Worker class BisectSlide : public Slide { 37*c8dee2aaSAndroid Build Coastguard Worker public: 38*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<BisectSlide> Create(const char filepath[]); 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker // Slide overrides. getDimensions()41*c8dee2aaSAndroid Build Coastguard Worker SkISize getDimensions() const override { return fDrawBounds.size(); } 42*c8dee2aaSAndroid Build Coastguard Worker bool onChar(SkUnichar c) override; 43*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas* canvas) override; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker private: 46*c8dee2aaSAndroid Build Coastguard Worker BisectSlide(const char filepath[]); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker struct FoundPath { 49*c8dee2aaSAndroid Build Coastguard Worker SkPath fPath; 50*c8dee2aaSAndroid Build Coastguard Worker SkPaint fPaint; 51*c8dee2aaSAndroid Build Coastguard Worker SkMatrix fViewMatrix; 52*c8dee2aaSAndroid Build Coastguard Worker }; 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker SkString fFilePath; 55*c8dee2aaSAndroid Build Coastguard Worker SkIRect fDrawBounds = SkIRect::MakeEmpty(); 56*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<FoundPath> fFoundPaths; 57*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<FoundPath> fTossedPaths; 58*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<char> fTrail; 59*c8dee2aaSAndroid Build Coastguard Worker std::stack<std::pair<skia_private::TArray<FoundPath>, skia_private::TArray<FoundPath>>> 60*c8dee2aaSAndroid Build Coastguard Worker fPathHistory; 61*c8dee2aaSAndroid Build Coastguard Worker }; 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker #endif 64