vcl/source/bitmap/BlendFrameCache.cxx | 142 +++++++++++++++++----------------- 1 file changed, 71 insertions(+), 71 deletions(-)
New commits: commit 6e29421b78105e4833f9a315f24fabc62e11408d Author: Christopher Sherlock <chris.sherloc...@gmail.com> AuthorDate: Mon Dec 23 02:48:15 2024 +1100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Jan 9 17:09:05 2025 +0100 vcl: flatten BlendFrameCache.cxx Change-Id: Ibf0ddd053c2e787c113a468ee75b03bb77610626 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179171 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/vcl/source/bitmap/BlendFrameCache.cxx b/vcl/source/bitmap/BlendFrameCache.cxx index 190dbf3d9e44..6a7d308e7666 100644 --- a/vcl/source/bitmap/BlendFrameCache.cxx +++ b/vcl/source/bitmap/BlendFrameCache.cxx @@ -37,99 +37,99 @@ BlendFrameCache::BlendFrameCache(Size const& rSize, sal_uInt8 nAlpha, Color cons const tools::Long nW(rSize.Width()); const tools::Long nH(rSize.Height()); - if (nW > 1 && nH > 1) + if (nW <= 1 || nH <= 1) + return; + + sal_uInt8 aEraseTrans(0xff); + Bitmap aContent(rSize, vcl::PixelFormat::N24_BPP); + AlphaMask aAlpha(rSize, &aEraseTrans); + + aContent.Erase(COL_BLACK); + + BitmapScopedWriteAccess pContent(aContent); + BitmapScopedWriteAccess pAlpha(aAlpha); + + if (pContent && pAlpha) { - sal_uInt8 aEraseTrans(0xff); - Bitmap aContent(rSize, vcl::PixelFormat::N24_BPP); - AlphaMask aAlpha(rSize, &aEraseTrans); + tools::Long x(0); + tools::Long y(0); + Scanline pScanContent = pContent->GetScanline(0); + Scanline pScanAlpha = pContent->GetScanline(0); - aContent.Erase(COL_BLACK); + // x == 0, y == 0, top-left corner + pContent->SetPixelOnData(pScanContent, 0, rColorTopLeft); + pAlpha->SetPixelOnData(pScanAlpha, 0, BitmapColor(nAlpha)); - BitmapScopedWriteAccess pContent(aContent); - BitmapScopedWriteAccess pAlpha(aAlpha); + // y == 0, top line left to right + for (x = 1; x < nW - 1; x++) + { + Color aMix(rColorTopLeft); + + aMix.Merge(rColorTopRight, 255 - sal_uInt8((x * 255) / nW)); + pContent->SetPixelOnData(pScanContent, x, aMix); + pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); + } - if (pContent && pAlpha) + // x == nW - 1, y == 0, top-right corner + // #i123690# Caution! When nW is 1, x == nW is possible (!) + if (x < nW) { - tools::Long x(0); - tools::Long y(0); - Scanline pScanContent = pContent->GetScanline(0); - Scanline pScanAlpha = pContent->GetScanline(0); + pContent->SetPixelOnData(pScanContent, x, rColorTopRight); + pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); + } - // x == 0, y == 0, top-left corner - pContent->SetPixelOnData(pScanContent, 0, rColorTopLeft); + // x == 0 and nW - 1, left and right line top-down + for (y = 1; y < nH - 1; y++) + { + pScanContent = pContent->GetScanline(y); + pScanAlpha = pContent->GetScanline(y); + Color aMixA(rColorTopLeft); + + aMixA.Merge(rColorBottomLeft, 255 - sal_uInt8((y * 255) / nH)); + pContent->SetPixelOnData(pScanContent, 0, aMixA); pAlpha->SetPixelOnData(pScanAlpha, 0, BitmapColor(nAlpha)); - // y == 0, top line left to right + // #i123690# Caution! When nW is 1, x == nW is possible (!) + if (x < nW) + { + Color aMixB(rColorTopRight); + + aMixB.Merge(rColorBottomRight, 255 - sal_uInt8((y * 255) / nH)); + pContent->SetPixelOnData(pScanContent, x, aMixB); + pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); + } + } + + // #i123690# Caution! When nH is 1, y == nH is possible (!) + if (y < nH) + { + // x == 0, y == nH - 1, bottom-left corner + pContent->SetPixelOnData(pScanContent, 0, rColorBottomLeft); + pAlpha->SetPixelOnData(pScanAlpha, 0, BitmapColor(nAlpha)); + + // y == nH - 1, bottom line left to right for (x = 1; x < nW - 1; x++) { - Color aMix(rColorTopLeft); + Color aMix(rColorBottomLeft); - aMix.Merge(rColorTopRight, 255 - sal_uInt8((x * 255) / nW)); + aMix.Merge(rColorBottomRight, 255 - sal_uInt8(((x - 0) * 255) / nW)); pContent->SetPixelOnData(pScanContent, x, aMix); pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); } - // x == nW - 1, y == 0, top-right corner + // x == nW - 1, y == nH - 1, bottom-right corner // #i123690# Caution! When nW is 1, x == nW is possible (!) if (x < nW) { - pContent->SetPixelOnData(pScanContent, x, rColorTopRight); + pContent->SetPixelOnData(pScanContent, x, rColorBottomRight); pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); } + } - // x == 0 and nW - 1, left and right line top-down - for (y = 1; y < nH - 1; y++) - { - pScanContent = pContent->GetScanline(y); - pScanAlpha = pContent->GetScanline(y); - Color aMixA(rColorTopLeft); - - aMixA.Merge(rColorBottomLeft, 255 - sal_uInt8((y * 255) / nH)); - pContent->SetPixelOnData(pScanContent, 0, aMixA); - pAlpha->SetPixelOnData(pScanAlpha, 0, BitmapColor(nAlpha)); - - // #i123690# Caution! When nW is 1, x == nW is possible (!) - if (x < nW) - { - Color aMixB(rColorTopRight); - - aMixB.Merge(rColorBottomRight, 255 - sal_uInt8((y * 255) / nH)); - pContent->SetPixelOnData(pScanContent, x, aMixB); - pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); - } - } - - // #i123690# Caution! When nH is 1, y == nH is possible (!) - if (y < nH) - { - // x == 0, y == nH - 1, bottom-left corner - pContent->SetPixelOnData(pScanContent, 0, rColorBottomLeft); - pAlpha->SetPixelOnData(pScanAlpha, 0, BitmapColor(nAlpha)); - - // y == nH - 1, bottom line left to right - for (x = 1; x < nW - 1; x++) - { - Color aMix(rColorBottomLeft); - - aMix.Merge(rColorBottomRight, 255 - sal_uInt8(((x - 0) * 255) / nW)); - pContent->SetPixelOnData(pScanContent, x, aMix); - pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); - } - - // x == nW - 1, y == nH - 1, bottom-right corner - // #i123690# Caution! When nW is 1, x == nW is possible (!) - if (x < nW) - { - pContent->SetPixelOnData(pScanContent, x, rColorBottomRight); - pAlpha->SetPixelOnData(pScanAlpha, x, BitmapColor(nAlpha)); - } - } - - pContent.reset(); - pAlpha.reset(); + pContent.reset(); + pAlpha.reset(); - m_aLastResult = BitmapEx(aContent, aAlpha); - } + m_aLastResult = BitmapEx(aContent, aAlpha); } }