summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-03-09 13:03:29 +0100
committerMiklos Vajna <vmiklos@suse.cz>2012-03-12 18:42:32 +0100
commit11059331718fb8faab483c75633b4e80d8028b7d (patch)
treeff465dd0e40da4d958e58b0390a1fe1ac29199de /sw
parent0662778b0b4b9958ee5e5bd3bac69f9e290f9495 (diff)
SwFlowFrm: implement contextual spacing
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/layout/flowfrm.cxx39
1 files changed, 38 insertions, 1 deletions
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx
index b8e425d8e2bc..fe1ed540fe7b 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -1433,6 +1433,38 @@ const SwFrm* SwFlowFrm::_GetPrevFrmForUpperSpaceCalc( const SwFrm* _pProposedPre
return pPrevFrm;
}
+/// Compare styles attached to these text frames.
+bool lcl_IdenticalStyles(const SwFrm* pPrevFrm, const SwFrm* pFrm)
+{
+ SwTxtFmtColl *pPrevFmtColl = 0;
+ if (pPrevFrm && pPrevFrm->IsTxtFrm())
+ {
+ SwTxtFrm *pTxtFrm = ( SwTxtFrm * ) pPrevFrm;
+ pPrevFmtColl = dynamic_cast<SwTxtFmtColl*>(pTxtFrm->GetTxtNode()->GetFmtColl());
+ }
+
+ bool bIdenticalStyles = false;
+ if (pFrm && pFrm->IsTxtFrm())
+ {
+ SwTxtFrm *pTxtFrm = ( SwTxtFrm * ) pFrm;
+ SwTxtFmtColl *pFmtColl = dynamic_cast<SwTxtFmtColl*>(pTxtFrm->GetTxtNode()->GetFmtColl());
+ bIdenticalStyles = pPrevFmtColl == pFmtColl;
+ }
+ return bIdenticalStyles;
+}
+
+bool lcl_getContextualSpacing(const SwFrm* pPrevFrm)
+{
+ bool bRet;
+ SwBorderAttrAccess *pAccess = new SwBorderAttrAccess( SwFrm::GetCache(), pPrevFrm );
+ const SwBorderAttrs *pAttrs = pAccess->Get();
+
+ bRet = pAttrs->GetULSpace().GetContext();
+
+ delete pAccess;
+ return bRet;
+}
+
// OD 2004-03-12 #i11860# - add 3rd parameter <_bConsiderGrid>
SwTwips SwFlowFrm::CalcUpperSpace( const SwBorderAttrs *pAttrs,
const SwFrm* pPr,
@@ -1591,8 +1623,13 @@ SwTwips SwFlowFrm::CalcUpperSpace( const SwBorderAttrs *pAttrs,
nUpper += _GetUpperSpaceAmountConsideredForPageGrid( nUpper );
}
+ bool bContextualSpacing = pAttrs->GetULSpace().GetContext();
delete pAccess;
- return nUpper;
+
+ if (bContextualSpacing && lcl_getContextualSpacing(pPrevFrm) && lcl_IdenticalStyles(pPrevFrm, &rThis))
+ return 0;
+ else
+ return nUpper;
}
/** method to detemine the upper space amount, which is considered for