1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef BisectSlide_DEFINED 9cb93a386Sopenharmony_ci#define BisectSlide_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 12cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 13cb93a386Sopenharmony_ci#include "tools/viewer/Slide.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#include <stack> 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci/** 18cb93a386Sopenharmony_ci * This is a simple utility designed to extract the paths from an SKP file and then isolate a single 19cb93a386Sopenharmony_ci * one of them via bisect. Use the 'x' and 'X' keys to guide a binary search: 20cb93a386Sopenharmony_ci * 21cb93a386Sopenharmony_ci * 'x': Throw out half the paths. 22cb93a386Sopenharmony_ci * 'X': Toggle which half gets tossed and which half is kept. 23cb93a386Sopenharmony_ci * 'Z': Back up one level. 24cb93a386Sopenharmony_ci * 'D': Dump the path. 25cb93a386Sopenharmony_ci */ 26cb93a386Sopenharmony_ciclass BisectSlide : public Slide { 27cb93a386Sopenharmony_cipublic: 28cb93a386Sopenharmony_ci static sk_sp<BisectSlide> Create(const char filepath[]); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci // Slide overrides. 31cb93a386Sopenharmony_ci SkISize getDimensions() const override { return fDrawBounds.size(); } 32cb93a386Sopenharmony_ci bool onChar(SkUnichar c) override; 33cb93a386Sopenharmony_ci void draw(SkCanvas* canvas) override; 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ciprivate: 36cb93a386Sopenharmony_ci BisectSlide(const char filepath[]); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci struct FoundPath { 39cb93a386Sopenharmony_ci SkPath fPath; 40cb93a386Sopenharmony_ci SkPaint fPaint; 41cb93a386Sopenharmony_ci SkMatrix fViewMatrix; 42cb93a386Sopenharmony_ci }; 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci SkString fFilePath; 45cb93a386Sopenharmony_ci SkIRect fDrawBounds = SkIRect::MakeEmpty(); 46cb93a386Sopenharmony_ci SkTArray<FoundPath> fFoundPaths; 47cb93a386Sopenharmony_ci SkTArray<FoundPath> fTossedPaths; 48cb93a386Sopenharmony_ci SkTArray<char> fTrail; 49cb93a386Sopenharmony_ci std::stack<std::pair<SkTArray<FoundPath>, SkTArray<FoundPath>>> fPathHistory; 50cb93a386Sopenharmony_ci}; 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci#endif 53