Blob Blame History Raw
From 95c0e2be5e09f8e658295ea12f814706664c431f Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Fri, 2 Oct 2015 10:31:35 +0200
Subject: [PATCH 170/398] vcl tiled rendering: avoid 'Pixel represents color
 values!' warnings

Which happens e.g. during rendering tiles:
OutputDevice::BlendBitmapWithAlpha() produces an RGB alpha
(255,255,255), then tries to set a pixel in the 8bit alpha channel using
it, so when BitmapReadAccess::SetPixelFor_8BIT_PAL() tries to get the
color index, we try to get it from a color that is not indexed.

Let's assume that when the color is not indexed, it's always gray, so it
doesn't matter what color we pick for the alpha mask needs.

Change-Id: I325c1d70514fd176fdc9cc39683b444447adf07f
(cherry picked from commit 4caaa09d4da0f7bd5aa0fae3233d66bd977f185e)
---
 vcl/source/gdi/bmpacc2.cxx | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/vcl/source/gdi/bmpacc2.cxx b/vcl/source/gdi/bmpacc2.cxx
index d664c4b769fd..286ea8fca26a 100644
--- a/vcl/source/gdi/bmpacc2.cxx
+++ b/vcl/source/gdi/bmpacc2.cxx
@@ -79,7 +79,11 @@ BitmapColor BitmapReadAccess::GetPixelFor_8BIT_PAL(ConstScanline pScanline, long
 
 void BitmapReadAccess::SetPixelFor_8BIT_PAL(Scanline pScanline, long nX, const BitmapColor& rBitmapColor, const ColorMask&)
 {
-    pScanline[ nX ] = rBitmapColor.GetIndex();
+    if (rBitmapColor.IsIndex())
+        pScanline[ nX ] = rBitmapColor.GetIndex();
+    else
+        // Let's hope that the RGB color values equal, so it doesn't matter what do we pick
+        pScanline[ nX ] = rBitmapColor.GetBlueOrIndex();
 }
 
 BitmapColor BitmapReadAccess::GetPixelFor_8BIT_TC_MASK(ConstScanline pScanline, long nX, const ColorMask& rMask)
-- 
2.12.0