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);