Revert "Don't implement CPDF_DIB::GetBuffer()"
This reverts commit f608b5d3a9a941dd102668f1b8156671e1082a20.
Reason for revert: CGdiDeviceDriver::GDI_StretchDIBits() doesn't handle this correctly
Note that CGdiDeviceDriver::GDI_StretchDIBits() still behaves incorrectly, it just won't be as incorrect as often.
Original change's description:
> Don't implement CPDF_DIB::GetBuffer()
>
> Stops returning a non-empty buffer from CPDF_DIB::GetBuffer(), as
> CPDF_DIB currently does not fulfill the contract that GetBuffer() and
> GetScanline() return equivalent data.
>
> Bug: pdfium:2050
> Change-Id: I92fdad47bcce8cd726ec7031de8c51c2a0cee5c7
> Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108850
> Reviewed-by: Lei Zhang <thestig@chromium.org>
> Commit-Queue: K. Moon <kmoon@chromium.org>
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: pdfium:2050
Fixed: 1455782
Change-Id: Iadb6fc0e0b5631ac73e183fd3eae604ed7d6cb79
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108870
Commit-Queue: Nigi <nigi@chromium.org>
Auto-Submit: K. Moon <kmoon@chromium.org>
Reviewed-by: Nigi <nigi@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 7559eeb..f1c2755 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -1133,10 +1133,8 @@
}
pdfium::span<const uint8_t> CPDF_DIB::GetBuffer() const {
- // TODO(crbug.com/pdfium/2050): Reuse buffer from `m_pCachedBitmap`. This
- // doesn't work right now because `LoadJpxBitmap()` doesn't generate a bitmap
- // in the same format as `GetScanline()`.
- return pdfium::span<const uint8_t>();
+ return m_pCachedBitmap ? m_pCachedBitmap->GetBuffer()
+ : pdfium::span<const uint8_t>();
}
pdfium::span<const uint8_t> CPDF_DIB::GetScanline(int line) const {
diff --git a/core/fpdfapi/page/cpdf_pageimagecache.cpp b/core/fpdfapi/page/cpdf_pageimagecache.cpp
index cba999b..e470169 100644
--- a/core/fpdfapi/page/cpdf_pageimagecache.cpp
+++ b/core/fpdfapi/page/cpdf_pageimagecache.cpp
@@ -110,8 +110,11 @@
bool realize_hint) {
#if defined(_SKIA_SUPPORT_)
if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
- // Ignore `realize_hint`, as `RealizeSkImage()` doesn't benefit from it.
- return pdfium::MakeRetain<CachedImage>(std::move(image));
+ // TODO(crbug.com/pdfium/2050): Ignore `realize_hint`, as `RealizeSkImage()`
+ // doesn't benefit from it. The current behavior masks a bug in `CPDF_DIB`
+ // in which `GetBuffer()` and `GetScanline()` don't give the same answer.
+ return pdfium::MakeRetain<CachedImage>(realize_hint ? image->Realize()
+ : std::move(image));
}
#endif // defined(_SKIA_SUPPORT_)
return realize_hint ? image->Realize() : image;