sw/inc/fmtfsize.hxx | 3 +++ sw/inc/unomid.h | 1 + sw/inc/unoprnms.hxx | 1 + sw/source/core/layout/atrfrm.cxx | 14 +++++++++++++- sw/source/core/layout/fly.cxx | 12 ++++++++++-- sw/source/core/unocore/unomap.cxx | 2 ++ 6 files changed, 30 insertions(+), 3 deletions(-)
New commits: commit f71dc0ec8372208318199ede36bc93de38d6c216 Author: Miklos Vajna <[email protected]> Date: Tue Jan 28 16:36:44 2014 +0100 swpagerelsize: take care of Sz.GetWidthPercentRelation() in SwFlyFrm::CalcRel This allows two type of relative sizes: relative to margin (default, what we had before) and relative to the entire page. Change-Id: I1625f072365e418352f3d507764e03484bb812be diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index bccf60b..26550da 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -2482,14 +2482,22 @@ Size SwFlyFrm::CalcRel( const SwFmtFrmSize &rSz ) const if ( nDiff > 0 ) nRelHeight -= nDiff; } - nRelWidth = std::min( nRelWidth, pRel->Prt().Width() ); + + // At the moment only the "== PAGE_FRAME" and "!= PAGE_FRAME" cases are handled. + // When size is a relative to page size, ignore size of SwBodyFrm. + if (rSz.GetWidthPercentRelation() != text::RelOrientation::PAGE_FRAME) + nRelWidth = std::min( nRelWidth, pRel->Prt().Width() ); nRelHeight = std::min( nRelHeight, pRel->Prt().Height() ); if( !pRel->IsPageFrm() ) { const SwPageFrm* pPage = FindPageFrm(); if( pPage ) { - nRelWidth = std::min( nRelWidth, pPage->Prt().Width() ); + if (rSz.GetWidthPercentRelation() == text::RelOrientation::PAGE_FRAME) + // Ignore margins of pPage. + nRelWidth = std::min( nRelWidth, pPage->Frm().Width() ); + else + nRelWidth = std::min( nRelWidth, pPage->Prt().Width() ); nRelHeight = std::min( nRelHeight, pPage->Prt().Height() ); } } commit b7b57bbce3f3b171f3a85a8d93ab29f0d9a049cf Author: Miklos Vajna <[email protected]> Date: Tue Jan 28 15:26:47 2014 +0100 swpagerelsize: implement RelativeWidthRelation UNO property for SwXFrame Which exposes SwFmtFrmSize::eWidthPercentRelation. Do not document yet, will be done if layout/filters/UI confirms that the data structure is suitable. Change-Id: Ic4eac3356452f4bedf9809ff5678e299b7339053 diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index 0065f12..d0db5b0 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -209,6 +209,7 @@ #define UNO_NAME_PRINT_PAPER_FROM_SETUP "PrintPaperFromSetup" #define UNO_NAME_REGISTER_MODE_ACTIVE "RegisterModeActive" #define UNO_NAME_RELATIVE_WIDTH "RelativeWidth" +#define UNO_NAME_RELATIVE_WIDTH_RELATION "RelativeWidthRelation" #define UNO_NAME_RELATIVE_HEIGHT "RelativeHeight" #define UNO_NAME_REPEAT_HEADLINE "RepeatHeadline" #define UNO_NAME_SEARCH_STYLES "SearchStyles" diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx index 6617e7e..0f69154 100644 --- a/sw/source/core/unocore/unomap.cxx +++ b/sw/source/core/unocore/unomap.cxx @@ -372,6 +372,7 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider() { OUString(UNO_NAME_PRINT), RES_PRINT, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0}, \ { OUString(UNO_NAME_RELATIVE_HEIGHT), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_HEIGHT }, \ { OUString(UNO_NAME_RELATIVE_WIDTH), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH }, \ + { OUString(UNO_NAME_RELATIVE_WIDTH_RELATION), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH_RELATION }, \ { OUString(UNO_NAME_SHADOW_FORMAT), RES_SHADOW, cppu::UnoType<css::table::ShadowFormat>::get(), PROPERTY_NONE, CONVERT_TWIPS}, \ { OUString(UNO_NAME_SHADOW_TRANSPARENCE), RES_SHADOW, cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, MID_SHADOW_TRANSPARENCE}, \ { OUString(UNO_NAME_IMAGE_MAP), RES_URL, cppu::UnoType<css::container::XIndexContainer>::get(), PROPERTY_NONE, MID_URL_CLIENTMAP}, \ @@ -828,6 +829,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s { OUString(UNO_NAME_HEIGHT), RES_FRM_SIZE, cppu::UnoType<sal_Int32>::get() , PROPERTY_NONE, MID_FRMSIZE_HEIGHT|CONVERT_TWIPS }, { OUString(UNO_NAME_RELATIVE_HEIGHT), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_HEIGHT }, { OUString(UNO_NAME_RELATIVE_WIDTH), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH }, + { OUString(UNO_NAME_RELATIVE_WIDTH_RELATION), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH_RELATION }, { OUString(UNO_NAME_SIZE_TYPE), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_SIZE_TYPE }, { OUString(UNO_NAME_WIDTH_TYPE), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_WIDTH_TYPE }, { OUString(UNO_NAME_SIZE), RES_FRM_SIZE, cppu::UnoType<css::awt::Size>::get(), PROPERTY_NONE, MID_FRMSIZE_SIZE|CONVERT_TWIPS}, commit 493bee473ad2ed52f12030d302e2850d35b20093 Author: Miklos Vajna <[email protected]> Date: Tue Jan 28 15:17:35 2014 +0100 swpagerelsize: add an eWidthPercentRelation member to SwFmtFrmSize Relative width so far was always relative to margin. This new member can describe if the relative width should be relative to e.g. page. Change-Id: Idaed3c1ade8cd49021ed3406abd6f79cf8e742be diff --git a/sw/inc/fmtfsize.hxx b/sw/inc/fmtfsize.hxx index 699d3b2..2b1622e 100644 --- a/sw/inc/fmtfsize.hxx +++ b/sw/inc/fmtfsize.hxx @@ -44,6 +44,7 @@ class SW_DLLPUBLIC SwFmtFrmSize: public SfxPoolItem SwFrmSize eFrmHeightType; SwFrmSize eFrmWidthType; sal_uInt8 nWidthPercent; + sal_Int16 eWidthPercentRelation; sal_uInt8 nHeightPercent; // For tables: width can be given in percent. @@ -91,8 +92,10 @@ public: sal_uInt8 GetHeightPercent() const{ return nHeightPercent; } sal_uInt8 GetWidthPercent() const { return nWidthPercent; } + sal_Int16 GetWidthPercentRelation() const { return eWidthPercentRelation; } void SetHeightPercent( sal_uInt8 n ) { nHeightPercent = n; } void SetWidthPercent ( sal_uInt8 n ) { nWidthPercent = n; } + void SetWidthPercentRelation ( sal_Int16 n ) { eWidthPercentRelation = n; } }; inline const SwFmtFrmSize &SwAttrSet::GetFrmSize(sal_Bool bInP) const diff --git a/sw/inc/unomid.h b/sw/inc/unomid.h index 981a309..56956fb 100644 --- a/sw/inc/unomid.h +++ b/sw/inc/unomid.h @@ -84,6 +84,7 @@ #define MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT 12 #define MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH 13 #define MID_FRMSIZE_WIDTH_TYPE 14 +#define MID_FRMSIZE_REL_WIDTH_RELATION 15 #define MID_COLUMNS 0 #define MID_COLUMN_SEPARATOR_LINE 1 diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index b9c00a3..4fd4ce6 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -176,7 +176,7 @@ SwFmtFrmSize::SwFmtFrmSize( SwFrmSize eSize, SwTwips nWidth, SwTwips nHeight ) eFrmHeightType( eSize ), eFrmWidthType( ATT_FIX_SIZE ) { - nWidthPercent = nHeightPercent = 0; + nWidthPercent = eWidthPercentRelation = nHeightPercent = 0; } SwFmtFrmSize& SwFmtFrmSize::operator=( const SwFmtFrmSize& rCpy ) @@ -186,6 +186,7 @@ SwFmtFrmSize& SwFmtFrmSize::operator=( const SwFmtFrmSize& rCpy ) eFrmWidthType = rCpy.GetWidthSizeType(); nHeightPercent = rCpy.GetHeightPercent(); nWidthPercent = rCpy.GetWidthPercent(); + eWidthPercentRelation = rCpy.GetWidthPercentRelation(); return *this; } @@ -196,6 +197,7 @@ bool SwFmtFrmSize::operator==( const SfxPoolItem& rAttr ) const eFrmWidthType == ((SwFmtFrmSize&)rAttr).eFrmWidthType && aSize == ((SwFmtFrmSize&)rAttr).GetSize()&& nWidthPercent == ((SwFmtFrmSize&)rAttr).GetWidthPercent() && + eWidthPercentRelation == ((SwFmtFrmSize&)rAttr).GetWidthPercentRelation() && nHeightPercent == ((SwFmtFrmSize&)rAttr).GetHeightPercent() ); } @@ -224,6 +226,9 @@ bool SwFmtFrmSize::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const case MID_FRMSIZE_REL_WIDTH: rVal <<= (sal_Int16)(GetWidthPercent() != 0xFF ? GetWidthPercent() : 0); break; + case MID_FRMSIZE_REL_WIDTH_RELATION: + rVal <<= GetWidthPercentRelation(); + break; case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH: { sal_Bool bTmp = 0xFF == GetHeightPercent(); @@ -309,6 +314,13 @@ bool SwFmtFrmSize::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) bRet = false; } break; + case MID_FRMSIZE_REL_WIDTH_RELATION: + { + sal_Int16 eSet = 0; + rVal >>= eSet; + SetWidthPercentRelation(eSet); + } + break; case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH: { sal_Bool bSet = *(sal_Bool*)rVal.getValue(); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
