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