aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkKeyedImage.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2017-07-12 13:10:23 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-12 20:41:41 +0000
commit7cbf5e3e03754694157891e290ff30109b8e7583 (patch)
tree8ad4ad88c04a5ddbd920f3d8a2ee4478de2a7fcf /src/pdf/SkKeyedImage.cpp
parent5769dd2c9ad9443b8cf2d62748d5747e547c7ad5 (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.cpp45
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;
+}