diff options
author | Hal Canary <halcanary@google.com> | 2017-07-12 13:10:23 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-12 20:41:41 +0000 |
commit | 7cbf5e3e03754694157891e290ff30109b8e7583 (patch) | |
tree | 8ad4ad88c04a5ddbd920f3d8a2ee4478de2a7fcf /src/pdf/SkKeyedImage.cpp | |
parent | 5769dd2c9ad9443b8cf2d62748d5747e547c7ad5 (diff) |
SkPDF: simplify drawImage/Bitmap/Sprite code.
- SkImageSubset becomes SkKeyedImage
- SkPDFCanvas::onDraw{Bitmap, Image} go away
- Remove SkPDFCanvas: base classes now do the right thing.
- SkPDFDevice::draw{Bitmap,Image}{Rect,}() simplified
- 244 fewer SLOC.
All but a few PDFs are identical, those rasterize almost the same.
Change-Id: I3ceb3b8935c689719cedf1ad544b0407b5c1733e
Reviewed-on: https://skia-review.googlesource.com/22218
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src/pdf/SkKeyedImage.cpp')
-rw-r--r-- | src/pdf/SkKeyedImage.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pdf/SkKeyedImage.cpp b/src/pdf/SkKeyedImage.cpp new file mode 100644 index 0000000000..bf196323af --- /dev/null +++ b/src/pdf/SkKeyedImage.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkKeyedImage.h" + +#include "SkImage_Base.h" + +SkKeyedImage::SkKeyedImage(sk_sp<SkImage> i) : fImage(std::move(i)) { + if (fImage) { + if (const SkBitmap* bm = as_IB(fImage.get())->onPeekBitmap()) { + SkIPoint o = bm->pixelRefOrigin(); + fKey = {fImage->bounds().makeOffset(o.fX, o.fY), bm->getGenerationID()}; + } else { + fKey = {fImage->bounds(), fImage->uniqueID()}; + } + } +} + +SkKeyedImage::SkKeyedImage(const SkBitmap& bm) : fImage(SkImage::MakeFromBitmap(bm)) { + if (fImage) { + fKey = {bm.getSubset(), bm.getGenerationID()}; + } +} + +SkKeyedImage SkKeyedImage::subset(SkIRect subset) const { + SkKeyedImage img; + if (fImage && subset.intersect(fImage->bounds())) { + img.fImage = fImage->makeSubset(subset); + if (img.fImage) { + img.fKey = {subset.makeOffset(fKey.fSubset.x(), fKey.fSubset.y()), fKey.fID}; + } + } + return img; +} + +sk_sp<SkImage> SkKeyedImage::release() { + sk_sp<SkImage> image = std::move(fImage); + SkASSERT(nullptr == fImage); + fKey = {{0, 0, 0, 0}, 0}; + return image; +} |