tweat ExtMargins with same recurse protection as Margins
Change-Id: I24640971ea6ca89878043966293492a991f01008
This commit is contained in:
BIN
lotuswordpro/qa/cppunit/data/fail/recurse-1.lwp
Normal file
BIN
lotuswordpro/qa/cppunit/data/fail/recurse-1.lwp
Normal file
Binary file not shown.
@@ -78,6 +78,7 @@ LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
|
|||||||
, m_bGettingHasProtection(false)
|
, m_bGettingHasProtection(false)
|
||||||
, m_bGettingIsProtected(false)
|
, m_bGettingIsProtected(false)
|
||||||
, m_bGettingMarginsValue(false)
|
, m_bGettingMarginsValue(false)
|
||||||
|
, m_bGettingExtMarginsValue(false)
|
||||||
, m_nAttributes(0)
|
, m_nAttributes(0)
|
||||||
, m_nAttributes2(0)
|
, m_nAttributes2(0)
|
||||||
, m_nAttributes3(0)
|
, m_nAttributes3(0)
|
||||||
@@ -750,7 +751,7 @@ double LwpMiddleLayout::MarginsValue(const sal_uInt8 &nWhichSide)
|
|||||||
* @param:
|
* @param:
|
||||||
* @return:
|
* @return:
|
||||||
*/
|
*/
|
||||||
double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
|
double LwpMiddleLayout::ExtMarginsValue(const sal_uInt8 &nWhichSide)
|
||||||
{
|
{
|
||||||
double fValue = 0;
|
double fValue = 0;
|
||||||
if(m_nOverrideFlag & OVER_MARGINS)
|
if(m_nOverrideFlag & OVER_MARGINS)
|
||||||
@@ -768,7 +769,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
|
|||||||
fValue = pStyle->GetExtMarginsValue(nWhichSide);
|
fValue = pStyle->GetExtMarginsValue(nWhichSide);
|
||||||
return fValue;
|
return fValue;
|
||||||
}
|
}
|
||||||
return LwpVirtualLayout::GetExtMarginsValue(nWhichSide);
|
return LwpVirtualLayout::ExtMarginsValue(nWhichSide);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id.
|
* @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id.
|
||||||
|
@@ -99,7 +99,6 @@ public:
|
|||||||
inline virtual sal_uInt16 GetNumCols(){return 1;}
|
inline virtual sal_uInt16 GetNumCols(){return 1;}
|
||||||
virtual double GetColWidth(sal_uInt16 nIndex);
|
virtual double GetColWidth(sal_uInt16 nIndex);
|
||||||
virtual double GetColGap(sal_uInt16 nIndex);
|
virtual double GetColGap(sal_uInt16 nIndex);
|
||||||
virtual double GetExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
|
|
||||||
virtual bool IsAutoGrow(){ return false;}
|
virtual bool IsAutoGrow(){ return false;}
|
||||||
virtual bool IsAutoGrowUp(){ return false;}
|
virtual bool IsAutoGrowUp(){ return false;}
|
||||||
virtual bool IsAutoGrowDown(){ return false;}
|
virtual bool IsAutoGrowDown(){ return false;}
|
||||||
@@ -154,6 +153,15 @@ public:
|
|||||||
m_bGettingMarginsValue = false;
|
m_bGettingMarginsValue = false;
|
||||||
return fRet;
|
return fRet;
|
||||||
}
|
}
|
||||||
|
double GetExtMarginsValue(const sal_uInt8& nWhichSide)
|
||||||
|
{
|
||||||
|
if (m_bGettingExtMarginsValue)
|
||||||
|
throw std::runtime_error("recursion in layout");
|
||||||
|
m_bGettingExtMarginsValue = true;
|
||||||
|
auto fRet = ExtMarginsValue(nWhichSide);
|
||||||
|
m_bGettingExtMarginsValue = false;
|
||||||
|
return fRet;
|
||||||
|
}
|
||||||
OUString GetStyleName(){ return m_StyleName;}
|
OUString GetStyleName(){ return m_StyleName;}
|
||||||
bool IsComplex();
|
bool IsComplex();
|
||||||
virtual bool IsAnchorPage(){ return false;}
|
virtual bool IsAnchorPage(){ return false;}
|
||||||
@@ -207,6 +215,7 @@ protected:
|
|||||||
virtual bool HonorProtection();
|
virtual bool HonorProtection();
|
||||||
virtual bool IsProtected();
|
virtual bool IsProtected();
|
||||||
virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
|
virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
|
||||||
|
virtual double ExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
|
||||||
virtual bool MarginsSameAsParent();
|
virtual bool MarginsSameAsParent();
|
||||||
protected:
|
protected:
|
||||||
bool m_bGettingHonorProtection;
|
bool m_bGettingHonorProtection;
|
||||||
@@ -214,6 +223,7 @@ protected:
|
|||||||
bool m_bGettingHasProtection;
|
bool m_bGettingHasProtection;
|
||||||
bool m_bGettingIsProtected;
|
bool m_bGettingIsProtected;
|
||||||
bool m_bGettingMarginsValue;
|
bool m_bGettingMarginsValue;
|
||||||
|
bool m_bGettingExtMarginsValue;
|
||||||
sal_uInt32 m_nAttributes;
|
sal_uInt32 m_nAttributes;
|
||||||
sal_uInt32 m_nAttributes2;
|
sal_uInt32 m_nAttributes2;
|
||||||
sal_uInt32 m_nAttributes3;
|
sal_uInt32 m_nAttributes3;
|
||||||
@@ -323,8 +333,6 @@ class LwpMiddleLayout : public LwpVirtualLayout
|
|||||||
public:
|
public:
|
||||||
LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
|
LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
|
||||||
virtual ~LwpMiddleLayout();
|
virtual ~LwpMiddleLayout();
|
||||||
virtual double MarginsValue(const sal_uInt8& nWhichSide) override;
|
|
||||||
virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) override;
|
|
||||||
LwpLayoutGeometry* GetGeometry()
|
LwpLayoutGeometry* GetGeometry()
|
||||||
{
|
{
|
||||||
if (m_bGettingGeometry)
|
if (m_bGettingGeometry)
|
||||||
@@ -379,6 +387,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void Read() override;
|
void Read() override;
|
||||||
virtual bool MarginsSameAsParent() override;
|
virtual bool MarginsSameAsParent() override;
|
||||||
|
virtual double MarginsValue(const sal_uInt8& nWhichSide) override;
|
||||||
|
virtual double ExtMarginsValue(const sal_uInt8& nWhichSide) override;
|
||||||
private:
|
private:
|
||||||
LwpObjectID m_BasedOnStyle;
|
LwpObjectID m_BasedOnStyle;
|
||||||
LwpLayoutGeometry* Geometry();
|
LwpLayoutGeometry* Geometry();
|
||||||
|
Reference in New Issue
Block a user