1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2018 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef sk_pixel_iter_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define sk_pixel_iter_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPixmap.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSurface.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace sk_tool_utils { 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot class PixelIter { 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot public: 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot PixelIter(); 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot PixelIter(SkSurface* surf) { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPixmap pm; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!surf->peekPixels(&pm)) { 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pm.reset(); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->reset(pm); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void reset(const SkPixmap& pm) { 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPM = pm; 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fLoc = { -1, 0 }; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void* next(SkIPoint* loc = nullptr) { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!fPM.addr()) { 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fLoc.fX += 1; 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fLoc.fX >= fPM.width()) { 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fLoc.fX = 0; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (++fLoc.fY >= fPM.height()) { 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->setDone(); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (loc) { 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *loc = fLoc; 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fPM.writable_addr(fLoc.fX, fLoc.fY); 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void setDone() { 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPM.reset(); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot private: 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPixmap fPM; 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIPoint fLoc; 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // namespace sk_tool_utils 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // sk_tool_utils_DEFINED 62