Kaydet (Commit) 4ea03ed4 authored tarafından Miklos Vajna's avatar Miklos Vajna

lok::Document::paintTile: fix non-rectangular tiles wrt. transparency

When copying the alpha channel, the offset was incorrect when canvas
width/height did not equal.

Change-Id: If0ab3ec7a4ad4dd958419b566fd473732965cfda
(cherry picked from commit d30f5bc3)
üst 5f0d16b1
......@@ -61,6 +61,7 @@ public:
void testGetFilterTypes();
void testGetPartPageRectangles();
void testSearchCalc();
void testPaintTile();
CPPUNIT_TEST_SUITE(DesktopLOKTest);
CPPUNIT_TEST(testGetStyles);
......@@ -69,6 +70,7 @@ public:
CPPUNIT_TEST(testGetFilterTypes);
CPPUNIT_TEST(testGetPartPageRectangles);
CPPUNIT_TEST(testSearchCalc);
CPPUNIT_TEST(testPaintTile);
CPPUNIT_TEST_SUITE_END();
uno::Reference<lang::XComponent> mxComponent;
......@@ -280,6 +282,25 @@ void DesktopLOKTest::testSearchCalc()
comphelper::LibreOfficeKit::setActive(false);
}
void DesktopLOKTest::testPaintTile()
{
LibLODocument_Impl* pDocument = loadDoc("blank_text.odt");
int nCanvasWidth = 100;
int nCanvasHeight = 300;
std::vector<unsigned char> aBuffer(nCanvasWidth * nCanvasHeight * 4);
int nTilePosX = 0;
int nTilePosY = 0;
int nTileWidth = 1000;
int nTileHeight = 3000;
// This used to crash: painTile() implementation did not handle
// nCanvasWidth != nCanvasHeight correctly, as usually both are just always
// 256.
pDocument->pClass->paintTile(pDocument, aBuffer.data(), nCanvasWidth, nCanvasHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight);
closeDoc();
}
CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -800,7 +800,7 @@ void doc_paintTile (LibreOfficeKitDocument* pThis,
{
for (int nCol = 0; nCol < nCanvasWidth; ++nCol)
{
const int nOffset = (nCanvasHeight * nRow) + nCol;
const int nOffset = (nCanvasWidth * nRow) + nCol;
// VCL's transparent is 0, RGBA's transparent is 0xff.
pBuffer[nOffset * 4 +3] = 0xff - aAlpha[nOffset];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment