diff options
author | Mark Hung <marklh9@gmail.com> | 2017-04-16 00:01:15 +0800 |
---|---|---|
committer | Mark Hung <marklh9@gmail.com> | 2017-04-17 11:26:44 +0200 |
commit | bdaf1708abeb1924f0cca21ec305638f4e0beb6c (patch) | |
tree | 998c0864b21e79a40b47cabe63163205dab6d675 | |
parent | b3e3eb55bd7a8bec98d6edf0561170b3fb77d843 (diff) |
tdf#107025 advance only if grid is wider than font.
EvalGridWidthAdd decide distance to advance by
subtracting the grid width and the height of the CJK font
of default style. Text cluttered if the value is negative
on Windows or break into multiple lines if it overflow
on Linux.
Change-Id: I085d420ef168238cde2eac3fb129020d5e5608da
Reviewed-on: https://gerrit.libreoffice.org/36568
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mark Hung <marklh9@gmail.com>
-rwxr-xr-x | sw/qa/extras/uiwriter/data/tdf107025.odt | bin | 0 -> 8337 bytes | |||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 24 | ||||
-rw-r--r-- | sw/source/core/txtnode/fntcache.cxx | 4 |
3 files changed, 27 insertions, 1 deletions
diff --git a/sw/qa/extras/uiwriter/data/tdf107025.odt b/sw/qa/extras/uiwriter/data/tdf107025.odt Binary files differnew file mode 100755 index 000000000000..e5422aed33a5 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/tdf107025.odt diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 802fc179822f..e9513d1bbf06 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -229,6 +229,7 @@ public: void testTdf35021_tabOverMarginDemo(); void testTdf106701_tabOverMarginAutotab(); void testTdf104492(); + void testTdf107025(); void testTdf105417(); void testTdf105625(); void testTdf106736(); @@ -353,6 +354,7 @@ public: CPPUNIT_TEST(testTdf35021_tabOverMarginDemo); CPPUNIT_TEST(testTdf106701_tabOverMarginAutotab); CPPUNIT_TEST(testTdf104492); + CPPUNIT_TEST(testTdf107025); CPPUNIT_TEST(testTdf105417); CPPUNIT_TEST(testTdf105625); CPPUNIT_TEST(testTdf106736); @@ -4434,6 +4436,28 @@ void SwUiWriterTest::testTdf104492() assertXPath(pXmlDoc, "//page", 3); } +void SwUiWriterTest::testTdf107025() +{ + // Tdf107025 - characters advance with wrong distance, so that + // they are cluttered because of negative value or + // break into multiple lines because of overflow. + createDoc("tdf107025.odt"); + xmlDocPtr pXmlDoc = parseLayoutDump(); + // Verify the number of characters in each line. + CPPUNIT_ASSERT_EQUAL( sal_Int32(1), getXPath(pXmlDoc, "(//Text[@nType='POR_TXT'])[1]", "nLength").toInt32()); + CPPUNIT_ASSERT_EQUAL( sal_Int32(9), getXPath(pXmlDoc, "(//Text[@nType='POR_TXT'])[2]", "nLength").toInt32()); + + + CPPUNIT_ASSERT(!parseDump("(//Text[@nType='POR_TXT'])[1]", "nWidth").isEmpty()); + CPPUNIT_ASSERT(!parseDump("(//Text[@nType='POR_TXT'])[2]", "nWidth").isEmpty()); + // Width of the second line is expected to be 9 times of the first. + sal_Int32 nWidth1 = getXPath(pXmlDoc, "(//Text[@nType='POR_TXT'])[1]", "nWidth").toInt32(); + sal_Int32 nWidth2 = getXPath(pXmlDoc, "(//Text[@nType='POR_TXT'])[2]", "nWidth").toInt32(); + + CPPUNIT_ASSERT( nWidth1 != 0 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32(9), nWidth2 / nWidth1 ); +} + void SwUiWriterTest::testTdf105417() { SwDoc* pDoc = createDoc("tdf105417.odt"); diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index f31db54e71b2..db095f14aa49 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -87,7 +87,9 @@ long EvalGridWidthAdd( const SwTextGridItem *const pGrid, const SwDrawTextInfo & const SvxFontHeightItem &aDefaultFontItem = static_cast<const SvxFontHeightItem&>(aTmpSet.Get(RES_CHRATR_CJK_FONTSIZE)); const SwDoc* pDoc = rInf.GetShell()->GetDoc(); - const long nGridWidthAdd = GetGridWidth(*pGrid, *pDoc) - aDefaultFontItem.GetHeight(); + const sal_uInt16 nGridWidth = GetGridWidth(*pGrid, *pDoc); + const sal_uInt32 nFontHeight = aDefaultFontItem.GetHeight(); + const long nGridWidthAdd = nGridWidth > nFontHeight ? nGridWidth - nFontHeight : 0; if( SwFontScript::Latin == rInf.GetFont()->GetActual() ) return nGridWidthAdd / 2; |