Change CFX_ScanlineCompositor::Init() to take a span.
And InitSourcePalette() as well.
Change-Id: I60b7cab9461d6b4417e95ebcd4a11caf041eb9d1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75236
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/dib/cfx_bitmapcomposer.cpp b/core/fxge/dib/cfx_bitmapcomposer.cpp
index d754fb8..a2556aa 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.cpp
+++ b/core/fxge/dib/cfx_bitmapcomposer.cpp
@@ -46,8 +46,8 @@
FXDIB_Format src_format,
pdfium::span<const uint32_t> src_palette) {
m_SrcFormat = src_format;
- if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width,
- src_palette.data(), m_MaskColor, BlendMode::kNormal,
+ if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, src_palette,
+ m_MaskColor, BlendMode::kNormal,
m_pClipMask != nullptr || (m_BitmapAlpha < 255),
m_bRgbByteOrder)) {
return false;
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index 6569700..f0b497f 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -901,7 +901,7 @@
}
CFX_ScanlineCompositor compositor;
if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width,
- pSrcBitmap->GetPaletteData(), 0, blend_type,
+ pSrcBitmap->GetPaletteSpan(), 0, blend_type,
pClipMask != nullptr, bRgbByteOrder)) {
return false;
}
@@ -978,7 +978,7 @@
int src_bpp = pMask->GetBPP();
int Bpp = GetBPP() / 8;
CFX_ScanlineCompositor compositor;
- if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, nullptr, color,
+ if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, {}, color,
blend_type, pClipMask != nullptr, bRgbByteOrder)) {
return false;
}
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 175ed4b..501e50d 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -2727,7 +2727,7 @@
bool CFX_ScanlineCompositor::Init(FXDIB_Format dest_format,
FXDIB_Format src_format,
int32_t width,
- const uint32_t* pSrcPalette,
+ pdfium::span<const uint32_t> src_palette,
uint32_t mask_color,
BlendMode blend_type,
bool bClip,
@@ -2748,7 +2748,7 @@
if (dest_format == FXDIB_8bppMask)
return true;
- InitSourcePalette(src_format, dest_format, pSrcPalette);
+ InitSourcePalette(src_format, dest_format, src_palette);
m_iTransparency = (dest_format == FXDIB_Argb ? 1 : 0) +
(GetIsAlphaFromFormat(dest_format) ? 2 : 0) +
(GetIsCmykFromFormat(dest_format) ? 4 : 0) +
@@ -2779,9 +2779,10 @@
}
}
-void CFX_ScanlineCompositor::InitSourcePalette(FXDIB_Format src_format,
- FXDIB_Format dest_format,
- const uint32_t* pSrcPalette) {
+void CFX_ScanlineCompositor::InitSourcePalette(
+ FXDIB_Format src_format,
+ FXDIB_Format dest_format,
+ pdfium::span<const uint32_t> src_palette) {
m_SrcPalette.Reset();
const bool bIsSrcCmyk = GetIsCmykFromFormat(src_format);
const bool bIsDstCmyk = GetIsCmykFromFormat(dest_format);
@@ -2789,12 +2790,12 @@
const size_t pal_count = static_cast<size_t>(1)
<< GetBppFromFormat(src_format);
- if (pSrcPalette) {
+ if (!src_palette.empty()) {
if (bIsDestBpp8) {
pdfium::span<uint8_t> gray_pal = m_SrcPalette.Make8BitPalette(pal_count);
if (bIsSrcCmyk) {
for (size_t i = 0; i < pal_count; ++i) {
- FX_CMYK cmyk = pSrcPalette[i];
+ FX_CMYK cmyk = src_palette[i];
uint8_t r;
uint8_t g;
uint8_t b;
@@ -2805,7 +2806,7 @@
}
} else {
for (size_t i = 0; i < pal_count; ++i) {
- FX_ARGB argb = pSrcPalette[i];
+ FX_ARGB argb = src_palette[i];
gray_pal[i] =
FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
}
@@ -2814,10 +2815,11 @@
}
pdfium::span<uint32_t> pPalette = m_SrcPalette.Make32BitPalette(pal_count);
if (bIsDstCmyk == bIsSrcCmyk) {
- memcpy(pPalette.data(), pSrcPalette, pal_count * sizeof(uint32_t));
+ for (size_t i = 0; i < pal_count; ++i)
+ pPalette[i] = src_palette[i];
} else {
for (size_t i = 0; i < pal_count; ++i) {
- FX_CMYK cmyk = pSrcPalette[i];
+ FX_CMYK cmyk = src_palette[i];
uint8_t r;
uint8_t g;
uint8_t b;
diff --git a/core/fxge/dib/cfx_scanlinecompositor.h b/core/fxge/dib/cfx_scanlinecompositor.h
index ec2ee8f..1287e02 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.h
+++ b/core/fxge/dib/cfx_scanlinecompositor.h
@@ -21,7 +21,7 @@
bool Init(FXDIB_Format dest_format,
FXDIB_Format src_format,
int32_t width,
- const uint32_t* pSrcPalette,
+ pdfium::span<const uint32_t> src_palette,
uint32_t mask_color,
BlendMode blend_type,
bool bClip,
@@ -80,7 +80,7 @@
void InitSourcePalette(FXDIB_Format src_format,
FXDIB_Format dest_format,
- const uint32_t* pSrcPalette);
+ pdfium::span<const uint32_t> src_palette);
void InitSourceMask(uint32_t mask_color);