summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2020-04-28 16:48:09 +0200
committerLászló Németh <nemeth@numbertext.org>2020-04-30 09:41:45 +0200
commit315d56582f8a56d8f2d3ea6cda63ea4832249608 (patch)
treeddff94de573d62f4ef580fcba0fba5d384818a11
parent5ce5f26159361b2e40d89d82595068067bc8ef7b (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.docxbin0 -> 29049 bytes
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx27
-rw-r--r--sw/source/core/text/txtfld.cxx14
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
new file mode 100644
index 000000000000..730ef91dcef9
--- /dev/null
+++ b/sw/qa/extras/tiledrendering/data/tdf114799.docx
Binary files differ
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);
}
}