Author: mseidel
Date: Thu Oct 11 17:03:07 2018
New Revision: 1843573

URL: http://svn.apache.org/viewvc?rev=1843573&view=rev
Log:
i127875 - Merge r1837212 from trunk

Fix SwCntntFrm::CalcLowers() so that it visits all on-page objects.
 SwCntntFrm::CalcLowers() walks the object tree walk and it assumes
that the objects visited will be at a monotonically increasing
distance from the top of the page, so it terminates the walk once 
it encounters the first object below the bottom of the page.  Even
though the objects are vertically sorted in each branch of the tree,
there is no guarantee that the order of the objects visited in the
depth-first walk will be perfectly sorted vertically, so the walk
may terminate before visiting all of the objects on the page.  Fix
this problem by pruning branches when they cross the lower page
boundary and only terminating the walk once there are no longer any
paths forward.

Submitted by: truckman

Modified:
    openoffice/branches/AOO416/   (props changed)
    openoffice/branches/AOO416/main/   (props changed)
    openoffice/branches/AOO416/main/sw/   (props changed)
    openoffice/branches/AOO416/main/sw/source/core/inc/cntfrm.hxx
    openoffice/branches/AOO416/main/sw/source/core/layout/tabfrm.cxx

Propchange: openoffice/branches/AOO416/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 11 17:03:07 2018
@@ -2,5 +2,5 @@
 /openoffice/branches/ia2:1417739-1541842
 
/openoffice/branches/ooxml-osba:1546391,1546395,1546574,1546934,1547030,1547392,1551920,1551954,1551958,1552283
 
/openoffice/branches/rejuvenate01:1480411,1534063,1534098,1536312,1549902,1560617
-/openoffice/trunk:1571617,1571619,1571677,1572577,1572587,1573547,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585171,1585261,1586242,1586249,1586583,1587468,1589050,1591501,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602791,1602823,1602850,1603416,1603897,1604709,1604786,1605044,1605355,1605689,1606055,1606061,1607111,1607793,1607836,1608348,1608359,1608376,1608730,1608733,1609204,1609208,1609302,1609426,1610347,1610411,1610422,1610671,1611549,1612539,1612801,1621121,1623847,1623849-1623850,1642300-1642302,1647713,1652476,1654282,1668939,1669457,1669459,1669462-1669463,1669465,1689883,1689959,1690740,1690755,1690854,1694131-1694132,1694701,1702894,1702898,1702986,1702988,1705542-1705543,1705551,1706649,1707397,1707659,1723875,1729921,1730154,174
 
8497,1754469,1755873,1756017,1758150,1760461,1761439,1761808,1763017,1763019,1765170,1766467,1766530,1766915,1772139,1780015,1784925,1784961,1785175,1791815,1793216,1797494,1800077,1800568,1802428,1803787,1803939,1804182,1805208,1806314,1811013,1811435,1811737,1813450,1814994,1815700,1825850,1837765,1839130,1839837,1840427
+/openoffice/trunk:1571617,1571619,1571677,1572577,1572587,1573547,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585171,1585261,1586242,1586249,1586583,1587468,1589050,1591501,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602791,1602823,1602850,1603416,1603897,1604709,1604786,1605044,1605355,1605689,1606055,1606061,1607111,1607793,1607836,1608348,1608359,1608376,1608730,1608733,1609204,1609208,1609302,1609426,1610347,1610411,1610422,1610671,1611549,1612539,1612801,1621121,1623847,1623849-1623850,1642300-1642302,1647713,1652476,1654282,1668939,1669457,1669459,1669462-1669463,1669465,1689883,1689959,1690740,1690755,1690854,1694131-1694132,1694701,1702894,1702898,1702986,1702988,1705542-1705543,1705551,1706649,1707397,1707659,1723875,1729921,1730154,174
 
8497,1754469,1755873,1756017,1758150,1760461,1761439,1761808,1763017,1763019,1765170,1766467,1766530,1766915,1772139,1780015,1784925,1784961,1785175,1791815,1793216,1797494,1800077,1800568,1802428,1803787,1803939,1804182,1805208,1806314,1811013,1811435,1811737,1813450,1814994,1815700,1825850,1837212,1837765,1839130,1839837,1840427
 /openoffice/trunk/main:1705369

Propchange: openoffice/branches/AOO416/main/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 11 17:03:07 2018
@@ -2,4 +2,4 @@
 /openoffice/branches/ia2/main:1417739-1541842
 
/openoffice/branches/ooxml-osba/main:1546391,1546395,1546574,1546934,1547030,1547392,1551920,1551954,1551958,1552283
 
/openoffice/branches/rejuvenate01/main:1480411,1534063,1534098,1536312,1549902,1560617
-/openoffice/trunk/main:1571617,1571677,1572569,1572577,1573547,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585171,1585261,1586242,1586249,1586583,1587468,1589050,1591501,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602791,1602823,1602850,1603416,1603897,1603941,1604028,1604709,1604786,1605044,1605355,1605689,1606055,1606061,1606706,1607111,1607793,1607836,1608348,1608376,1608730,1608733,1609204,1609208,1609302,1609426,1610347,1610411,1610422,1610671,1611470,1611549,1612070-1612071,1612539,1612801,1616457,1616944,1620195,1621121,1623847,1623849-1623850,1630814,1633294,1633297,1635806,1642300-1642302,1643177,1650314,1652476,1654282,1668939,1669457,1669459,1669462-1669463,1669465,1677190,1687177,1689883,1689959,1692551,1694132,1694701,1695962,169780
 
7,1700078,1700126,1700135,1702107,1702894,1702898,1702986,1702988,1705193,1705196,1705199,1705276,1705364,1705368-1705369,1705542,1706649,1707167,1707169-1707170,1707175,1707397,1707408,1707412,1707642,1707645,1707659,1707844,1708477,1708483,1709212,1709377,1709403,1723875,1729921,1730154,1748497,1754469,1755873,1756017,1758150,1760461,1761439,1761808,1763017,1763019,1765170,1766467,1766915,1772139,1780015,1784925,1784961,1785175,1791815,1793216,1797494,1800077,1800568,1802428,1803787,1803939,1804182,1805208,1806314,1811737,1813450,1815700,1825850,1837765,1839130,1839837,1840427
+/openoffice/trunk/main:1571617,1571677,1572569,1572577,1573547,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585171,1585261,1586242,1586249,1586583,1587468,1589050,1591501,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602791,1602823,1602850,1603416,1603897,1603941,1604028,1604709,1604786,1605044,1605355,1605689,1606055,1606061,1606706,1607111,1607793,1607836,1608348,1608376,1608730,1608733,1609204,1609208,1609302,1609426,1610347,1610411,1610422,1610671,1611470,1611549,1612070-1612071,1612539,1612801,1616457,1616944,1620195,1621121,1623847,1623849-1623850,1630814,1633294,1633297,1635806,1642300-1642302,1643177,1650314,1652476,1654282,1668939,1669457,1669459,1669462-1669463,1669465,1677190,1687177,1689883,1689959,1692551,1694132,1694701,1695962,169780
 
7,1700078,1700126,1700135,1702107,1702894,1702898,1702986,1702988,1705193,1705196,1705199,1705276,1705364,1705368-1705369,1705542,1706649,1707167,1707169-1707170,1707175,1707397,1707408,1707412,1707642,1707645,1707659,1707844,1708477,1708483,1709212,1709377,1709403,1723875,1729921,1730154,1748497,1754469,1755873,1756017,1758150,1760461,1761439,1761808,1763017,1763019,1765170,1766467,1766915,1772139,1780015,1784925,1784961,1785175,1791815,1793216,1797494,1800077,1800568,1802428,1803787,1803939,1804182,1805208,1806314,1811737,1813450,1815700,1825850,1837212,1837765,1839130,1839837,1840427

Propchange: openoffice/branches/AOO416/main/sw/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Oct 11 17:03:07 2018
@@ -2,4 +2,4 @@
 /openoffice/branches/ia2/main/sw:1417739-1541842
 
/openoffice/branches/ooxml-osba/main/sw:1546391,1546395,1546574,1546934,1547030,1547392,1551920,1551954,1551958,1552283
 
/openoffice/branches/rejuvenate01/main/sw:1480411,1534063,1534098,1536312,1549902,1560617
-/openoffice/trunk/main/sw:1571617,1571677,1572569,1572577,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585261,1586242,1586249,1586583,1587468,1589050,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602823,1602850,1603416,1603897,1603941,1604028,1604709,1605355,1605689,1606055,1606061,1607111,1607649,1608348,1608733,1610411,1610671,1611549,1612539,1621121,1623847,1623849-1623850,1642300-1642302,1702894,1702898,1702986,1702988,1705364,1705368,1707169
+/openoffice/trunk/main/sw:1571617,1571677,1572569,1572577,1574058,1574101,1575922,1576216,1576748,1578786,1579934,1580657,1580779,1581746,1581840,1582359,1582365,1582709,1583336,1583418,1583589,1583988,1585261,1586242,1586249,1586583,1587468,1589050,1592692,1592716,1594206,1595847,1595851,1595858,1596218,1596491,1596494,1597076,1597102,1597109,1599169,1599173-1599174,1600581,1600587,1600590,1600630,1600861,1600863,1600883,1602434,1602823,1602850,1603416,1603897,1603941,1604028,1604709,1605355,1605689,1606055,1606061,1607111,1607649,1608348,1608733,1610411,1610671,1611549,1612539,1621121,1623847,1623849-1623850,1642300-1642302,1702894,1702898,1702986,1702988,1705364,1705368,1707169,1837212

Modified: openoffice/branches/AOO416/main/sw/source/core/inc/cntfrm.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/AOO416/main/sw/source/core/inc/cntfrm.hxx?rev=1843573&r1=1843572&r2=1843573&view=diff
==============================================================================
--- openoffice/branches/AOO416/main/sw/source/core/inc/cntfrm.hxx (original)
+++ openoffice/branches/AOO416/main/sw/source/core/inc/cntfrm.hxx Thu Oct 11 
17:03:07 2018
@@ -103,6 +103,7 @@ public:
        sal_Bool MoveFtnCntFwd( sal_Bool, SwFtnBossFrm* );//von MoveFwd gerufen 
bei Ftn-Inhalt
 
     inline  SwCntntFrm* GetNextCntntFrm() const;
+    inline  SwCntntFrm* GetNextCntntFrm( bool ) const;
     inline  SwCntntFrm* GetPrevCntntFrm() const;
     static bool CalcLowers( SwLayoutFrm* pLay, const SwLayoutFrm* pDontLeave, 
long nBottom, bool bSkipRowSpanCells );
     void RegisterToNode( SwCntntNode& );
@@ -117,6 +118,16 @@ inline SwCntntFrm* SwCntntFrm::GetNextCn
         return (SwCntntFrm*)ImplGetNextCntntFrm( true );
 }
 
+inline SwCntntFrm* SwCntntFrm::GetNextCntntFrm( bool bPrune ) const
+{
+    if ( bPrune && !GetPrev() )
+        return NULL;
+    else if ( bPrune || !(GetNext() && GetNext()->IsCntntFrm()))
+        return (SwCntntFrm*)ImplGetNextCntntFrm( true );
+    else
+        return (SwCntntFrm*)GetNext();
+}
+
 inline SwCntntFrm* SwCntntFrm::GetPrevCntntFrm() const
 {
     if ( GetPrev() && GetPrev()->IsCntntFrm() )

Modified: openoffice/branches/AOO416/main/sw/source/core/layout/tabfrm.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/AOO416/main/sw/source/core/layout/tabfrm.cxx?rev=1843573&r1=1843572&r2=1843573&view=diff
==============================================================================
--- openoffice/branches/AOO416/main/sw/source/core/layout/tabfrm.cxx (original)
+++ openoffice/branches/AOO416/main/sw/source/core/layout/tabfrm.cxx Thu Oct 11 
17:03:07 2018
@@ -1536,6 +1536,7 @@ bool SwCntntFrm::CalcLowers( SwLayoutFrm
     // LONG_MAX == nBottom means we have to calculate all
     bool bAll = LONG_MAX == nBottom;
     bool bRet = sal_False;
+    bool bPrune;
        SwCntntFrm *pCnt = pLay->ContainsCntnt();
     SWRECTFN( pLay )
 
@@ -1612,9 +1613,8 @@ bool SwCntntFrm::CalcLowers( SwLayoutFrm
             pCnt->GetUpper()->Calc();
         }
         // <--
-        if( ! bAll && (*fnRect->fnYDiff)((pCnt->Frm().*fnRect->fnGetTop)(), 
nBottom) > 0 )
-                       break;
-               pCnt = pCnt->GetNextCntntFrm();
+        bPrune = !bAll && ( 
(*fnRect->fnYDiff)((pCnt->Frm().*fnRect->fnGetTop)(), nBottom) > 0 );
+               pCnt = pCnt->GetNextCntntFrm( bPrune );
        }
        return bRet;
 }


Reply via email to