diff options
author | László Németh <nemeth@numbertext.org> | 2020-04-28 16:48:09 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2020-04-30 09:41:45 +0200 |
commit | 315d56582f8a56d8f2d3ea6cda63ea4832249608 (patch) | |
tree | ddff94de573d62f4ef580fcba0fba5d384818a11 | |
parent | 5ce5f26159361b2e40d89d82595068067bc8ef7b (diff) |
tdf#114799 DOCX import: fix missing numbering highlight
opening a DOCX with shadowing (w:shd) instead of highlight
(w:highlight), for example, a DOCX saved in LibreOffice.
This reverts also commit aa02ed306f7c633bbffede16e44e8e736977ace4
(tdf#106991: Highlighting remains after select no fill).
Change-Id: I0935694e3c309b5a450cd424fd398a88d13f8b22
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93082
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
-rw-r--r-- | sw/qa/extras/tiledrendering/data/tdf114799.docx | bin | 0 -> 29049 bytes | |||
-rw-r--r-- | sw/qa/extras/tiledrendering/tiledrendering.cxx | 27 | ||||
-rw-r--r-- | sw/source/core/text/txtfld.cxx | 14 |
3 files changed, 34 insertions, 7 deletions
diff --git a/sw/qa/extras/tiledrendering/data/tdf114799.docx b/sw/qa/extras/tiledrendering/data/tdf114799.docx Binary files differnew file mode 100644 index 000000000000..730ef91dcef9 --- /dev/null +++ b/sw/qa/extras/tiledrendering/data/tdf114799.docx diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index 441c06271d52..355ae56cc29f 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -121,6 +121,7 @@ public: void testVisCursorInvalidation(); void testDeselectCustomShape(); void testSemiTransparent(); + void testHighlightNumbering(); void testClipText(); void testAnchorTypes(); void testLanguageStatus(); @@ -186,6 +187,7 @@ public: CPPUNIT_TEST(testVisCursorInvalidation); CPPUNIT_TEST(testDeselectCustomShape); CPPUNIT_TEST(testSemiTransparent); + CPPUNIT_TEST(testHighlightNumbering); CPPUNIT_TEST(testClipText); CPPUNIT_TEST(testAnchorTypes); CPPUNIT_TEST(testLanguageStatus); @@ -2386,6 +2388,31 @@ void SwTiledRenderingTest::testSemiTransparent() CPPUNIT_ASSERT_GREATEREQUAL(190, static_cast<int>(aColor.B)); } +void SwTiledRenderingTest::testHighlightNumbering() +{ + // Load a document where the top left tile contains a semi-transparent rectangle shape. + SwXTextDocument* pXTextDocument = createDoc("tdf114799.docx"); + + // Render a larger area, and then get the color of the bottom right corner of our tile. + size_t nCanvasWidth = 1024; + size_t nCanvasHeight = 512; + size_t nTileSize = 256; + std::vector<unsigned char> aPixmap(nCanvasWidth * nCanvasHeight * 4, 0); + ScopedVclPtrInstance<VirtualDevice> pDevice(DeviceFormat::DEFAULT); + pDevice->SetBackground(Wallpaper(COL_TRANSPARENT)); + pDevice->SetOutputSizePixelScaleOffsetAndBuffer(Size(nCanvasWidth, nCanvasHeight), + Fraction(1.0), Point(), aPixmap.data()); + pXTextDocument->paintTile(*pDevice, nCanvasWidth, nCanvasHeight, /*nTilePosX=*/0, + /*nTilePosY=*/0, /*nTileWidth=*/15360, /*nTileHeight=*/7680); + pDevice->EnableMapMode(false); + Bitmap aBitmap = pDevice->GetBitmap(Point(0, 0), Size(nTileSize, nTileSize)); + Bitmap::ScopedReadAccess pAccess(aBitmap); + + // Yellow highlighting over numbering + Color aColor(pAccess->GetPixel(103, 148)); + CPPUNIT_ASSERT_EQUAL(COL_YELLOW, aColor); +} + void SwTiledRenderingTest::testClipText() { // Load a document where the top left tile contains table text with diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx index a1c27cbb3597..5442f3f87922 100644 --- a/sw/source/core/text/txtfld.cxx +++ b/sw/source/core/text/txtfld.cxx @@ -466,17 +466,17 @@ static void checkApplyParagraphMarkFormatToNumbering(SwFont* pNumFnt, SwTextForm const SfxPoolItem* pItem = aIter.GetCurItem(); do { - if (SwTextNode::IsIgnoredCharFormatForNumbering(pItem->Which())) - pCleanedSet->ClearItem(pItem->Which()); - else if (pFormat && pFormat->HasItem(pItem->Which())) - pCleanedSet->ClearItem(pItem->Which()); + if (pItem->Which() != RES_CHRATR_BACKGROUND) + { + if (SwTextNode::IsIgnoredCharFormatForNumbering(pItem->Which())) + pCleanedSet->ClearItem(pItem->Which()); + else if (pFormat && pFormat->HasItem(pItem->Which())) + pCleanedSet->ClearItem(pItem->Which()); + } pItem = aIter.NextItem(); } while (pItem); - // Highlightcolor also needed to be untouched, but we can't have that just by clearing the item - Color nSaveHighlight = pNumFnt->GetHighlightColor(); pNumFnt->SetDiffFnt(pCleanedSet.get(), pIDSA); - pNumFnt->SetHighlightColor(nSaveHighlight); } } |