tdf#88827 - double-thin border: MINGAPWIDTH is a valid width
double-thin borders are available in the UI starting from 0.5pt. The actual minumum (as seen in a round-trip), is 1.10pt. (Each thin line is ~ .50pt, the gap is ~ .05pt, and then some approximations and rounding show it as 1.10 - at least that is how I understood it). 1.15pt is the first point at which the gap is larger than the minimum - and double_thins with a minimum gap were considered invalid, and thus were not imported. With this fix, double-thin borders created with a size less than 1.15pt are valid and visible on import. Change-Id: I6da2a40d13ed83281de403b22b3acbea4288ac60 Reviewed-on: https://gerrit.libreoffice.org/30857 Reviewed-by: Justin Luth <justin_luth@sil.org> Tested-by: Justin Luth <justin_luth@sil.org>
This commit is contained in:
BIN
sc/qa/unit/data/ods/tdf88827_borderDoubleThin.ods
Normal file
BIN
sc/qa/unit/data/ods/tdf88827_borderDoubleThin.ods
Normal file
Binary file not shown.
@@ -1949,8 +1949,8 @@ void ScExportTest::testBordersExchangeXLSX()
|
||||
/* 0,05 */ {{Solid , Solid , 1, 1}, {Dotted , Dotted , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {None , None , 0, 0}},
|
||||
/* 0,25 */ {{Solid , Solid , 1, 1}, {Dotted , Dotted , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {None , None , 0, 0}},
|
||||
/* 0,50 */ {{Solid , Solid , 1, 1}, {Dotted , Dotted , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {None , None , 0, 0}},
|
||||
/* 0,75 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {None , None , 0, 0}},
|
||||
/* 1,00 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {None , None , 0, 0}},
|
||||
/* 0,75 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {DoubThin, DoubThin, 35, 35}},
|
||||
/* 1,00 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {DoubThin, DoubThin, 35, 35}},
|
||||
/* 1,25 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {DoubThin, DoubThin, 35, 35}},
|
||||
/* 1,50 */ {{Solid , Solid , 15, 15}, {Dotted , Dotted , 15, 15}, {FineDash, FineDash, 15, 15}, {FineDash, FineDash, 15, 15}, {DashDot , DashDot , 15, 15}, {DashDoDo, DashDoDo, 15, 15}, {DoubThin, DoubThin, 35, 35}},
|
||||
|
||||
@@ -1982,8 +1982,8 @@ void ScExportTest::testBordersExchangeXLSX()
|
||||
const editeng::SvxBorderLine* pLineTop = nullptr;
|
||||
const editeng::SvxBorderLine* pLineBottom = nullptr;
|
||||
rDoc.GetBorderLines(nCol + 2, (nRow * 2) + 8, 0, nullptr, &pLineTop, nullptr, &pLineBottom);
|
||||
if((nCol < 5) && (nRow == 6))
|
||||
{ // in this range no lines
|
||||
if((nCol < 3) && (nRow == 6))
|
||||
{ // in this range no lines since minimum size to create a double is 0.5
|
||||
CPPUNIT_ASSERT(!pLineTop);
|
||||
CPPUNIT_ASSERT(!pLineBottom);
|
||||
continue;
|
||||
|
@@ -136,6 +136,7 @@ public:
|
||||
// void testFormatsXLSX();
|
||||
void testMatrixODS();
|
||||
void testMatrixXLS();
|
||||
void testDoubleThinBorder();
|
||||
void testBorderODS();
|
||||
void testBordersOoo33();
|
||||
void testBugFixesODS();
|
||||
@@ -262,6 +263,7 @@ public:
|
||||
// CPPUNIT_TEST(testFormatsXLSX); TODO: Fix this
|
||||
CPPUNIT_TEST(testMatrixODS);
|
||||
CPPUNIT_TEST(testMatrixXLS);
|
||||
CPPUNIT_TEST(testDoubleThinBorder);
|
||||
CPPUNIT_TEST(testBorderODS);
|
||||
CPPUNIT_TEST(testBordersOoo33);
|
||||
CPPUNIT_TEST(testBugFixesODS);
|
||||
@@ -915,6 +917,25 @@ void ScFiltersTest::testMatrixXLS()
|
||||
xDocSh->DoClose();
|
||||
}
|
||||
|
||||
void ScFiltersTest::testDoubleThinBorder()
|
||||
{
|
||||
// double-thin borders created with size less than 1.15 where invisible (and subsequently lost) on round-trips.
|
||||
ScDocShellRef xDocSh = loadDoc("tdf88827_borderDoubleThin.", FORMAT_ODS);
|
||||
|
||||
CPPUNIT_ASSERT_MESSAGE("Failed to load tdf88827_borderDoubleThin.*", xDocSh.Is());
|
||||
ScDocument& rDoc = xDocSh->GetDocument();
|
||||
|
||||
const editeng::SvxBorderLine* pLeft = nullptr;
|
||||
const editeng::SvxBorderLine* pTop = nullptr;
|
||||
const editeng::SvxBorderLine* pRight = nullptr;
|
||||
const editeng::SvxBorderLine* pBottom = nullptr;
|
||||
|
||||
rDoc.GetBorderLines( 2, 2, 0, &pLeft, &pTop, &pRight, &pBottom );
|
||||
CPPUNIT_ASSERT(pTop);
|
||||
CPPUNIT_ASSERT(pRight);
|
||||
CPPUNIT_ASSERT_EQUAL( table::BorderLineStyle::DOUBLE_THIN, pRight->GetBorderLineStyle() );
|
||||
}
|
||||
|
||||
void ScFiltersTest::testBorderODS()
|
||||
{
|
||||
ScDocShellRef xDocSh = loadDoc("border.", FORMAT_ODS);
|
||||
|
@@ -170,7 +170,7 @@ long BorderWidthImpl::GuessWidth( long nLine1, long nLine2, long nGap )
|
||||
|
||||
bool bGapChange = bool( m_nFlags & BorderWidthImplFlags::CHANGE_DIST );
|
||||
double nWidthGap = lcl_getGuessedWidth( nGap, m_nRateGap, bGapChange );
|
||||
if ( bGapChange && nGap > MINGAPWIDTH )
|
||||
if ( bGapChange && nGap >= MINGAPWIDTH )
|
||||
aToCompare.push_back( nWidthGap );
|
||||
else if ( !bGapChange && nWidthGap < 0 )
|
||||
bInvalid = true;
|
||||
|
Reference in New Issue
Block a user