63227ca63b
originally found by fuzzer. Bug: skia: Change-Id: I45007a619f13936153c0db8a60b3631a2c9db20c Reviewed-on: https://skia-review.googlesource.com/101741 Reviewed-by: Cary Clark <caryclark@google.com> Commit-Queue: Mike Reed <reed@google.com>
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
/*
|
|
* Copyright 2018 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef sk_pixel_iter_DEFINED
|
|
#define sk_pixel_iter_DEFINED
|
|
|
|
#include "SkPixmap.h"
|
|
#include "SkSurface.h"
|
|
|
|
namespace sk_tool_utils {
|
|
|
|
class PixelIter {
|
|
public:
|
|
PixelIter();
|
|
PixelIter(SkSurface* surf) {
|
|
SkPixmap pm;
|
|
if (!surf->peekPixels(&pm)) {
|
|
pm.reset();
|
|
}
|
|
this->reset(pm);
|
|
}
|
|
|
|
void reset(const SkPixmap& pm) {
|
|
fPM = pm;
|
|
fLoc = { -1, 0 };
|
|
}
|
|
|
|
void* next(SkIPoint* loc = nullptr) {
|
|
if (!fPM.addr()) {
|
|
return nullptr;
|
|
}
|
|
fLoc.fX += 1;
|
|
if (fLoc.fX >= fPM.width()) {
|
|
fLoc.fX = 0;
|
|
if (++fLoc.fY >= fPM.height()) {
|
|
this->setDone();
|
|
return nullptr;
|
|
}
|
|
}
|
|
if (loc) {
|
|
*loc = fLoc;
|
|
}
|
|
return fPM.writable_addr(fLoc.fX, fLoc.fY);
|
|
}
|
|
|
|
void setDone() {
|
|
fPM.reset();
|
|
}
|
|
|
|
private:
|
|
SkPixmap fPM;
|
|
SkIPoint fLoc;
|
|
};
|
|
|
|
} // namespace sk_tool_utils
|
|
|
|
#endif // sk_tool_utils_DEFINED
|